From 158f4272a44928cafa9fa62a43ce5ce840e710bc Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 18:43:40 +0800 Subject: [PATCH 01/13] docs: plan SDK v2 modernization --- MODERNIZATION_PLAN.md | 348 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 MODERNIZATION_PLAN.md diff --git a/MODERNIZATION_PLAN.md b/MODERNIZATION_PLAN.md new file mode 100644 index 0000000..e807137 --- /dev/null +++ b/MODERNIZATION_PLAN.md @@ -0,0 +1,348 @@ +# Fleetbase JavaScript SDK modernization and v2 release plan + +Status: proposed for review + +Target branch: `dev-v2.0.0` + +Prepared: 2026-08-31 + +## Executive summary + +The SDK needs a controlled replacement of its internals, packaging, tests, and release process—not an in-place rewrite with unverifiable compatibility claims. The recommended program is a compatibility-first v2 release: freeze and test the v1 public contract, refactor behind that contract, publish prereleases for real consumer testing, and promote only after every release gate passes. + +The v2 designation provides a safe adoption boundary for consumers and room to correct packaging and type-resolution behavior. It is not permission to discard the v1 API. Existing constructors, default and named exports, store/resource methods, adapter extension points, resource names, return shapes, mutation behavior, and error behavior are compatibility requirements unless a change is explicitly documented, deprecated, and approved. + +The work should be delivered as small, independently reviewable pull requests on this release branch. A single “big bang” rewrite would make regression diagnosis and API review unreasonably difficult. + +## Investigation findings + +### Repository and release state + +- npm currently publishes `@fleetbase/sdk@1.2.13`; it was published on 2025-02-03. The current npm package has 112 files and includes source, tests, CI configuration, editor configuration, build configuration, declarations, minified bundles, and source maps rather than a deliberate runtime-only allowlist. +- `master` points to v1.2.13. The open `dev-v1.2.14` pull request (#23) adds service quotes and is not included in `master`. The v2 contract inventory must include that API even if #23 is superseded rather than merged. +- Releases are tag-triggered but not lifecycle-managed. Versioning, changelog generation, GitHub Releases, tags, and package publication are not coordinated by one auditable release flow. +- npm and GitHub Packages are rebuilt and published in separate jobs. There is no guarantee they receive the same bytes. +- npm publication uses a long-lived token written into `~/.npmrc`; the workflow does not use npm trusted publishing (OIDC), release provenance, protected environments, or an immutable build artifact. + +### CI baseline + +- Source lint currently passes, but `pnpm run lint:tests` fails with 42 `no-undef` errors because Mocha globals are not configured. +- The current test run produces 15 passing and 9 failing tests without Fleetbase credentials and a reachable API. All nine failures come from live API CRUD tests. Pull-request correctness therefore depends on secrets, network availability, mutable remote data, and cleanup succeeding. +- No coverage provider, coverage report, or coverage threshold is configured. “100% coverage” is currently neither measured nor enforced. +- The workflow tests only Node 18, which reached end of life in March 2025. As of this plan, Node 22 and 24 are the supported LTS lines; Node 26 is Current. +- pnpm is installed as unpinned `latest`. The cache hashes `package-lock.json` even though the repository uses `pnpm-lock.yaml`, and installs are not explicitly documented as frozen/immutable. +- CI has no concurrency cancellation, minimal permission declarations, dependency review, code scanning, package smoke tests, type tests, bundle-size budget, or cross-platform/consumer matrix. + +### Dependency security baseline + +- A fresh `pnpm audit` on 2026-08-31 reported 1 critical, 39 high, 27 moderate, and 6 low findings in the lockfile. +- The runtime path includes Axios 1.7.9 and a vulnerable `form-data` version. Reported issues include the critical unsafe multipart-boundary advisory plus high-severity server-side request forgery, credential leakage, denial-of-service, redirect/proxy, and prototype-pollution advisories affecting the installed Axios line. +- Open Dependabot PR #31 proposes Axios 1.15.2, but current audit advisories require Axios 1.16.0 or newer for several findings. It must be re-evaluated rather than merged as a presumed complete security fix. +- High-severity build/test findings also affect the installed Rollup, Babel, glob/minimatch, serialization, and YAML-related dependency paths. Runtime and development findings should be triaged separately, but both must be resolved or explicitly risk-accepted before release. + +### Packaging and consumer compatibility + +- `package.json` declares `"type": "module"` but points the `require` export and `main` field to `dist/cjs/fleetbase.js`. A CommonJS build in a module-scoped `.js` file is ambiguous/incorrect packaging. A Node 24 smoke test returned an empty object from `require('@fleetbase/sdk')`, while ESM import exposed the expected named/default API. The CommonJS entry must be emitted as `.cjs` (with matching declarations) and tested from the packed tarball. +- Type declarations are present but `package.json` has no `types` field or `types` export condition and there is no root declaration entry matching the package entry point. Consumers therefore cannot reliably resolve them. +- Several declarations are invalid or stale: unresolved `[type]` and `mixed` placeholders, undeclared Axios types, incorrect return types, missing v1 exports/stores, and imports that do not match the implementation. +- Rollup minifies ESM and CommonJS outputs as well as the browser bundle, bundles Axios into every format, and emits roughly 314 KB per JavaScript entry in the audited local build. The packed v1.2.14 candidate was approximately 788 KB compressed and contained 112 files. +- The package has no `files` allowlist, `sideEffects` declaration, `engines`, `packageManager`, export-map type conditions, explicit browser/node entry strategy, or automated package-lint/type-resolution checks. +- `src/resources/vehicle.js` imports `Point` from the published package name instead of a local source module. That self-import can couple a source build to stale `dist` output, create duplicate identities, and obscure circular dependencies. +- Generated `dist` files are committed and a normal rebuild changes all generated bundles/source maps, creating high-noise diffs and a risk that source, package version, tag, and shipped bytes diverge. + +### Correctness and maintainability risks found during source review + +These are examples that the test program must capture before and during the refactor; they are not an exhaustive defect list. + +- `Resource.empty()` assigns `attribues` instead of `attributes`. +- `Resource.save({ onlyDirty: true })` calls `savedirty()` instead of `saveDirty()`. +- Each `Resource` instance assigns `this.changes = {}` while its prototype also defines `changes()`, shadowing the method. +- Async resource flags are reset only on success, so rejected requests can leave `isLoading`, `isSaving`, `isReloading`, or `isDestroying` stuck. +- `Fleetbase.setAdapter()` changes only the SDK property; stores created in the constructor continue using their previous adapters. +- `Store.destroy()` supplies adapter arguments inconsistently and can drop caller options. +- `isLongitude()` rejects valid longitudes between -90 and 90. +- Collection helpers reference `get` and `compare` without importing or defining them; lint suppression hides the problem. +- The registry starts with a misspelled `storse` key. +- The browser adapter assumes every response body is JSON, collapses structured HTTP errors into generic `Error` objects, uses environment globals directly, and attempts to set a browser `User-Agent` header. +- The environment detector classifies React Native as Node, but the Node adapter depends on Axios/Node-oriented behavior. The empty Ember adapter is exported but never automatically selected. +- The public declaration surface and runtime export surface have already drifted. A declaration-only review cannot prove compatibility. + +## Goals and non-goals + +### Required outcomes + +1. Deterministic, secure CI and automatic releases suitable for a public SDK. +2. Enforced 100% statement, branch, function, and line coverage for the maintained source boundary. +3. A complete internal refactor with an executable compatibility contract for v1 consumers. +4. Verified use across supported JavaScript runtimes, module systems, bundlers, frameworks, TypeScript modes, and common package managers. +5. A smaller, intentional package whose contents, types, exports, provenance, and release notes can be inspected before publication. + +### Non-goals + +- Redesigning the Fleetbase HTTP API. +- Removing v1 runtime APIs merely because they are awkward. +- Treating generated declaration files, coverage exclusions, snapshots, or ignored branches as a substitute for behavioral tests. +- Requiring live production credentials in pull-request CI. +- Publishing automatically from an arbitrary branch, unreviewed commit, or locally generated tag. + +## Compatibility contract + +Before refactoring, generate and commit a machine-readable v1 contract from both `v1.2.13` and the pending v1.2.14 service-quote work. + +The contract must cover: + +- Default export and every named export, including class/function identity and whether each is constructible. +- `Fleetbase` constructor arguments, `newInstance`, options/defaults, public properties, store names, adapter selection, `setAdapter`, and `getAdapter`. +- All adapter constructors and HTTP verb signatures, request URL/header/body behavior, error mapping, and custom-adapter extension behavior. +- Store constructors, actions, CRUD/query signatures, option forwarding, collection serialization, callbacks, and return types. +- Resource constructors, public fields/getters/methods, mutation/dirty tracking, flags, serialization, dates, save/reload/destroy behavior, and subclasses. +- Registry/resolver behavior and extension hooks. +- Utility functions/classes and edge-case behavior, including legacy quirks that consumers may rely on. +- ESM default/named imports, CommonJS `require`, documented deep imports if any exist in published consumers, and browser global behavior. +- TypeScript entry points and representative compile-time contracts. + +Use API snapshots plus black-box contract tests against packed v1 and v2 tarballs. When a current behavior is a confirmed defect, record it in a compatibility decision log with one of four dispositions: preserve, fix compatibly, deprecate then replace, or approve as breaking. No behavior changes should be hidden inside refactor commits. + +## Target architecture + +### Source and types + +- Migrate implementation modules to strict TypeScript incrementally, starting at leaf utilities/adapters and ending with stores/resources/Fleetbase. Do not change public names while moving files. +- Define explicit generic types for resource attributes, API envelopes, pagination/meta, request options, adapters, stores, actions, and errors. Replace `any`, `[type]`, and `mixed` placeholders at public boundaries. +- Generate declarations from the same source used to generate JavaScript. Add API-report review (for example, API Extractor or an equivalent declaration snapshot) so public type changes are visible in pull requests. +- Separate pure domain behavior from environment-specific transport. Keep the adapter interface stable and inject `fetch`/transport dependencies where needed for deterministic tests. +- Remove source-to-package self-imports and hidden global dependencies. Keep the registry only if compatibility tests prove it is needed; otherwise retain it as a thin compatibility facade over explicit factories. +- Introduce a typed `FleetbaseError` hierarchy while preserving legacy `Error` compatibility (`instanceof Error`, message semantics) and exposing status, code, request ID, and safe response data where available. + +### Package outputs + +- Publish one ESM entry (`.js` under `type: module`) and one true CommonJS entry (`.cjs`), with matching ESM/CJS declarations (`.d.ts`/`.d.cts`) and a `types` condition first in each export branch. +- Keep `main` and `module` fallbacks only where they improve compatibility with older tooling; make the `exports` map the source of truth. +- Provide an environment-neutral root and explicit adapter subpaths if needed, such as `@fleetbase/sdk/adapters/browser` and `@fleetbase/sdk/adapters/node`. Unknown runtimes must receive a safe default rather than pretending to be Node. +- Prefer standards-based `fetch` for supported Node and browsers if compatibility testing confirms equivalent behavior. If Axios remains, externalize it from browser-neutral bundles and isolate it to the Node adapter entry. +- Emit an optional minified IIFE/UMD browser artifact separately. Do not minify library ESM/CJS. Preserve source maps. +- Add `files` to publish only runtime outputs, declarations, README, license, and changelog. Exclude tests, source (unless intentionally offered for debugging), CI, editor settings, and build configuration. +- Declare `engines`, a pinned `packageManager`, `sideEffects` truthfully, repository/homepage/bugs metadata, and `publishConfig` for the public npm package. +- Enforce package checks with `pnpm pack`, tarball-content assertions, Publint, `@arethetypeswrong/cli`, ESM/CJS runtime smoke tests, type fixtures, and bundle-size budgets. + +## Testing strategy and 100% coverage + +### Test layers + +1. **Pure unit tests:** utilities, collections, resources, registry/resolver, store actions, state flags, serialization, errors, and every branch/failure path. +2. **Transport contract tests:** browser and Node adapters against mock HTTP servers/interceptors. Verify methods, query encoding, headers, bodies, empty/non-JSON responses, aborts, timeouts, network failures, all supported error envelopes, and option forwarding without external credentials. +3. **SDK contract tests:** constructor/defaults, all stores/resources/actions, custom adapters, adapter replacement, and v1 behavior snapshots. +4. **Package tests:** install only the generated tarball into isolated fixtures; test Node ESM and CommonJS, browser bundlers, TypeScript resolution, default/named/subpath imports, tree shaking, and absence of undeclared files/dependencies. +5. **Framework fixtures:** minimal build-and-run fixtures for Vite vanilla, React, Vue, Svelte, Angular, Next.js (client and server), Nuxt, Ember, and React Native/Expo where support is claimed. Fixtures should import the packed tarball, not workspace source. +6. **Optional integration tests:** scheduled or manually dispatched tests against a disposable Fleetbase environment. They validate real API drift but do not replace deterministic PR tests and do not block unrelated contributions on production availability. + +Use Vitest with V8 coverage (or an equivalently maintained runner/provider) and enforce 100% for lines, statements, functions, and branches in the maintained source. Coverage exclusions require code-owner review and must be limited to generated files, declarations, and demonstrably unreachable platform shims. Mutation testing on core store/resource/adapter behavior should be added as a scheduled quality signal so a numeric 100% cannot be achieved with weak assertions. + +Every regression fix must first add a failing test. The initial coverage PR must include a coverage-gap inventory and may raise thresholds in reviewed increments, but the release branch cannot reach stable v2 until all four metrics are 100% on a clean CI run. + +## Compatibility matrix + +### Required release-blocking matrix + +| Dimension | Required support/gate | +| --- | --- | +| Node | Node 22 and 24 LTS on Linux; smoke tests on macOS and Windows; Node 26 allowed-to-fail until it enters LTS, then promoted | +| Module systems | Native ESM import, dynamic import, and CommonJS require from the packed tarball | +| TypeScript | `node16`, `nodenext`, and `bundler` resolution; strict consumer fixtures; declarations match runtime exports | +| Package managers | npm, pnpm, Yarn Berry, and Bun install/import smoke tests using the same tarball | +| Bundlers | Vite/Rollup, webpack, esbuild, and the bundlers exercised transitively by required framework fixtures | +| Browsers | Current and previous major Chrome, Firefox, Safari, and Edge through browser tests; document the browserslist policy | +| Frameworks | Vite vanilla, React, Vue, Svelte, Angular, Next.js, Nuxt, and Ember minimal production builds | +| Mobile/edge | React Native/Expo and one standards-based edge runtime are release-blocking only after adapter behavior is explicitly supported and documented | + +The matrix must distinguish “supported and blocking” from “best effort/canary.” A badge or README claim is permitted only after the corresponding fixture runs in CI. + +## CI design + +Split workflows by responsibility and use least-privilege permissions, pinned major action versions, dependency caching through `setup-node`, a pinned pnpm version, and frozen lockfile installs. + +### `ci.yml` — every pull request and protected-branch push + +- Concurrency group with cancellation of superseded runs. +- Fast quality job: formatting check, source/test lint, strict typecheck, API report check, dependency-boundary/static checks. +- Unit/contract job on Node 22 and 24; upload coverage once; enforce all four 100% thresholds. +- Cross-platform smoke job for Linux, macOS, and Windows. +- Build once, create the npm tarball once, upload it as an immutable Actions artifact, and run all package/consumer jobs against that exact tarball. +- Package-quality job: content allowlist, Publint, Are The Types Wrong, ESM/CJS/type tests, export parity, source-map check, license/readme check, bundle-size budget. +- Framework/bundler and package-manager fixture jobs, grouped to control runtime while keeping failures attributable. +- Dependency review for pull requests and CodeQL/security scanning on supported triggers. +- Production-dependency audit as a release blocker, plus a separately reviewed full-toolchain audit; temporary exceptions must name the advisory, exposure, owner, expiry, and remediation issue. +- No Fleetbase production secrets in untrusted pull-request jobs. + +### `integration.yml` — scheduled and manual + +- Use an isolated Fleetbase tenant/environment and short-lived credentials. +- Create uniquely named records, track IDs, and clean them in `finally` hooks. +- Separate read-only health/API-contract checks from mutation tests. +- Upload sanitized diagnostics; never log keys or sensitive response bodies. +- Alert on API drift, but define an explicit policy for when a drift failure blocks a release. + +### `release.yml` — reviewed automation + +Use Changesets (or a comparably reviewable release-PR tool) so every user-visible change carries a semver intent and changelog entry. On merges to `master`, automation should maintain a version PR. Merging that reviewed version PR should: + +1. Re-run the complete protected CI suite on the exact commit. +2. Build and pack once. +3. Verify version/tag consistency and package contents. +4. Publish to npm through npm trusted publishing (OIDC) from a protected `npm` environment; no long-lived npm token. +5. Publish provenance automatically, create the signed/annotated git tag and GitHub Release, and attach checksums plus the exact tarball or build metadata. +6. Optionally publish the identical tarball to GitHub Packages in a separate authorized step; never rebuild it. +7. Verify the registry version, provenance, ESM/CJS imports, and a minimal API construction smoke test after publication. + +Configure prerelease channels: `next` for v2 prereleases and `latest` only for the approved stable promotion. Add a manual emergency path with the same protected gates and an auditable rollback/deprecation procedure; do not allow ad hoc local publishing. + +## Delivery phases and acceptance gates + +### Phase 0 — establish the release baseline + +Deliverables: + +- Decide whether to merge PR #23 as v1.2.14 first or supersede it in v2; in either case import its service-quote API into the v1 contract. +- Inventory npm exports, types, bundle contents, README examples, known downstream Fleetbase consumers, and documented deep imports. +- Add architecture decision records for runtime support, transport choice, TypeScript migration, package outputs, release automation, and committed-vs-generated `dist` policy. +- Capture current defects/quirks in a compatibility decision log. + +Gate: reviewers approve the contract and support matrix before refactor work starts. + +### Phase 1 — deterministic test and CI foundation + +Deliverables: + +- Replace live-API pull-request tests with deterministic unit/contract tests. +- Configure test globals correctly, frozen installs, current LTS matrix, caching, concurrency, permissions, and artifact upload. +- Upgrade or replace vulnerable runtime and toolchain dependencies; re-run the lockfile audit and document any time-bounded exceptions. +- Add initial package tarball tests and coverage reporting. +- Keep the live suite only as isolated scheduled/manual integration coverage. + +Gate: all PR checks are deterministic and green from a clean clone with no Fleetbase secrets. + +### Phase 2 — freeze v1 behavior and reach meaningful 100% coverage + +Deliverables: + +- Black-box contract harness that can execute against packed v1 and v2 candidates. +- Tests for every public API and the defect/failure paths listed in this plan. +- Four-axis 100% coverage enforcement and mutation-testing baseline. + +Gate: 100% lines, statements, branches, and functions on maintained source, plus reviewed mutation survivors; no broad ignores. + +### Phase 3 — package and type correctness + +Deliverables: + +- Correct ESM/CJS file extensions, export map, type conditions, generated declarations, package allowlist, metadata, and adapter subpaths. +- Package-lint, type-resolution, tarball, bundle-size, and source-map gates. +- Deprecation-compatible shims for any legacy import form that can be supported safely. + +Gate: every package fixture passes against the tarball; runtime/type export parity is exact; package contents and size meet approved budgets. + +### Phase 4 — internal TypeScript refactor + +Suggested review sequence: + +1. Pure utilities and collections. +2. Errors and shared HTTP contracts. +3. Browser/universal and Node adapters. +4. Registry/resolver and extension hooks. +5. Store and store actions. +6. Resource base class and resource subclasses. +7. `Fleetbase` client construction and adapter/store orchestration. +8. Remove compatibility scaffolding that contract evidence proves unnecessary. + +Gate after each pull request: v1 contract, 100% coverage, API report, tarball tests, and affected compatibility fixtures remain green. Refactor commits must not mix undocumented behavior changes. + +### Phase 5 — framework and package-manager expansion + +Deliverables: + +- CI fixtures for the required matrix. +- Explicit environment detection/adapter selection rules. +- Framework-specific documentation only where configuration is actually required (SSR boundaries, client-only keys, React Native transport, Ember use, edge limitations). +- Tested installation commands for npm, pnpm, Yarn, and Bun. + +Gate: every claimed environment installs and builds from the packed candidate; unsupported environments fail with actionable errors. + +### Phase 6 — prerelease validation + +Deliverables: + +- Publish `2.0.0-alpha`, then `beta`, then release candidates under the `next` dist-tag through the protected release workflow. +- Test at least the known Fleetbase first-party consumers plus representative ESM, CommonJS, TypeScript, browser, SSR, Ember, and mobile consumers. +- Publish migration guidance, compatibility table, deprecations, package-size changes, and rollback instructions. + +Gate: no unreviewed contract deltas; no critical/high defects; consumer sign-off recorded; release candidate passes full CI and post-publish verification. + +### Phase 7 — stable v2 and maintenance + +Deliverables: + +- Promote the approved candidate to `latest` without rebuilding different bytes. +- GitHub Release, changelog, provenance, checksums, migration guide, and support policy. +- Dependabot/Renovate grouping policy, monthly dependency maintenance, scheduled integration/mutation tests, and a defined Node/browser support rollover cadence. + +Gate: npm provenance and post-publish smoke checks succeed; rollback owner and procedure are available during the release window. + +## Pull-request slicing + +Use small PRs into `dev-v2.0.0`, each with a changeset only when it changes a published behavior. Suggested slices: + +1. CI/test runner foundation. +2. v1 API and package contract snapshots. +3. Deterministic adapter test harness and removal of live PR dependencies. +4. Coverage expansion by module group until 100%. +5. Correct package outputs/export map/types and consumer fixtures. +6. Utilities/collection refactor. +7. Adapter/error refactor. +8. Store/resource refactor. +9. Client/registry refactor. +10. Framework/package-manager fixtures and documentation. +11. Release automation with a dry-run/staging proof. +12. v2 prerelease, first-party validation, and stable-promotion PR. + +Every PR description must include: public API effect, compatibility evidence, test/coverage evidence, package artifact diff, risk, and rollback. Generated output must never be accepted without its source change and a reproducibility check. + +## Release approval checklist + +- [ ] v1.2.13 and v1.2.14 candidate contracts are captured and reviewed. +- [ ] All maintained source is at 100% lines/statements/functions/branches. +- [ ] Mutation-testing results for core modules are reviewed. +- [ ] ESM, CommonJS, and TypeScript consumers pass from the packed tarball. +- [ ] Required runtime/framework/bundler/package-manager matrix is green. +- [ ] Publint and Are The Types Wrong report no release-blocking defects. +- [ ] Package content and size budgets pass; no secrets or internal-only files are present. +- [ ] API report contains no unapproved changes. +- [ ] Full CI passes on the release commit with frozen dependencies. +- [ ] Release workflow dry run proves one immutable artifact is used throughout. +- [ ] npm trusted publishing, protected environment, and provenance are configured. +- [ ] Migration guide, changelog, support policy, deprecations, and rollback steps are published. +- [ ] First-party Fleetbase consumers pass against the release candidate. +- [ ] Post-publish verification and provenance checks pass before `latest` promotion. + +## Success measures + +- Pull requests require no Fleetbase credentials and have repeatable results. +- Coverage remains at 100% across all four metrics, with reviewed mutation-test quality. +- Runtime and type exports cannot drift without a visible CI failure. +- The same verified tarball is used for all registries and release evidence. +- `require()` and `import` return compatible documented APIs. +- Package contents are intentionally allowlisted and substantially smaller than the current 112-file/1.72 MB unpacked publication baseline. +- All compatibility claims correspond to a maintained CI fixture. +- A release requires review but no local versioning, tagging, changelog editing, credential file creation, or manual npm publish command. + +## Primary references + +- [Node.js package entry points and conditional exports](https://nodejs.org/api/packages.html) +- [Node.js supported release lines](https://nodejs.org/en/about/previous-releases) +- [TypeScript declaration publishing](https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html) +- [TypeScript package export resolution](https://www.typescriptlang.org/docs/handbook/modules/reference.html#packagejson-exports) +- [npm trusted publishing](https://docs.npmjs.com/trusted-publishers/) +- [npm provenance](https://docs.npmjs.com/generating-provenance-statements/) +- [GitHub Actions package publishing](https://docs.github.com/en/actions/tutorials/publish-packages/publish-nodejs-packages) +- [GitHub `setup-node` package-manager caching](https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-data) +- [Vitest coverage configuration](https://vitest.dev/config/coverage.html) +- [Changesets workflow and commands](https://github.com/changesets/changesets/blob/main/docs/command-line-options.md) From e668aa29d8fc81ca91a593c909bc3014fb783b54 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 18:45:41 +0800 Subject: [PATCH 02/13] docs: record reproduced CI toolchain failure --- MODERNIZATION_PLAN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODERNIZATION_PLAN.md b/MODERNIZATION_PLAN.md index e807137..7c527ab 100644 --- a/MODERNIZATION_PLAN.md +++ b/MODERNIZATION_PLAN.md @@ -30,7 +30,7 @@ The work should be delivered as small, independently reviewable pull requests on - The current test run produces 15 passing and 9 failing tests without Fleetbase credentials and a reachable API. All nine failures come from live API CRUD tests. Pull-request correctness therefore depends on secrets, network availability, mutable remote data, and cleanup succeeding. - No coverage provider, coverage report, or coverage threshold is configured. “100% coverage” is currently neither measured nor enforced. - The workflow tests only Node 18, which reached end of life in March 2025. As of this plan, Node 22 and 24 are the supported LTS lines; Node 26 is Current. -- pnpm is installed as unpinned `latest`. The cache hashes `package-lock.json` even though the repository uses `pnpm-lock.yaml`, and installs are not explicitly documented as frozen/immutable. +- pnpm is installed as unpinned `latest`. This plan PR reproduced the resulting breakage in GitHub Actions on 2026-08-31: the selected pnpm required Node 22.13 or newer while the job ran Node 18.20.8, so dependency installation failed before tests. The cache also hashes `package-lock.json` even though the repository uses `pnpm-lock.yaml`, and installs are not explicitly documented as frozen/immutable. - CI has no concurrency cancellation, minimal permission declarations, dependency review, code scanning, package smoke tests, type tests, bundle-size budget, or cross-platform/consumer matrix. ### Dependency security baseline From f3ebfc30447c9026fd8b0f45b8ee3d82c1788c28 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 20:07:01 +0800 Subject: [PATCH 03/13] feat: modernize SDK architecture and release pipeline --- .changeset/config.json | 15 + .github/dependabot.yml | 27 + .github/workflows/ci.yml | 279 +- .github/workflows/codeql.yml | 28 + .github/workflows/release.yml | 45 + .gitignore | 8 +- CHANGELOG.md | 17 + CONTRIBUTING.md | 26 + MODERNIZATION_PLAN.md | 24 +- README.md | 179 +- babel.config.js | 4 - contracts/v1.2.13.json | 123 + contracts/v1.2.14-candidate.json | 8 + dist/@fleetbase/sdk.min.js | 2 - dist/@fleetbase/sdk.min.js.map | 1 - dist/cjs/fleetbase.js | 2 - dist/cjs/fleetbase.js.map | 1 - dist/esm/fleetbase.js | 2 - dist/esm/fleetbase.js.map | 1 - dist/fleetbase.min.js | 2 - dist/fleetbase.min.js.map | 1 - docs/api-source-baseline.md | 38 + docs/compatibility-decisions.md | 28 + docs/main-branch-migration.md | 25 + eslint.config.js | 35 +- fixtures/types/index.ts | 31 + fixtures/types/package.json | 5 + fixtures/types/tsconfig.base.json | 10 + fixtures/types/tsconfig.bundler.json | 7 + fixtures/types/tsconfig.node16.json | 7 + fixtures/types/tsconfig.nodenext.json | 7 + package.json | 122 +- pnpm-lock.yaml | 6957 ++++++++++--------------- pnpm-workspace.yaml | 7 + rollup.config.js | 93 +- scripts/clean.mjs | 3 + scripts/verify-package.mjs | 65 + src/adapter.js | 17 - src/adapter.ts | 35 + src/adapters.js | 4 - src/adapters/browser.js | 229 - src/adapters/browser.ts | 69 + src/adapters/detect.ts | 10 + src/adapters/ember.js | 6 - src/adapters/ember.ts | 3 + src/adapters/fetch.ts | 124 + src/adapters/node.js | 222 - src/adapters/node.ts | 34 + src/collection.ts | 170 + src/errors.ts | 23 + src/fleetbase.js | 138 - src/fleetbase.ts | 109 + src/index.js | 1 - src/index.ts | 48 + src/registry.js | 40 - src/registry.ts | 39 + src/resolver.js | 29 - src/resolver.ts | 25 + src/resource.js | 519 -- src/resource.ts | 265 + src/resources.js | 16 - src/resources.ts | 416 ++ src/resources/contact.js | 10 - src/resources/driver.js | 124 - src/resources/entity.js | 10 - src/resources/fleet.js | 10 - src/resources/index.js | 15 - src/resources/order.js | 153 - src/resources/organization.js | 17 - src/resources/payload.js | 60 - src/resources/place.js | 80 - src/resources/service-area.js | 10 - src/resources/service-quote.js | 14 - src/resources/service-rate.js | 10 - src/resources/tracking-status.js | 10 - src/resources/vehicle.js | 10 - src/resources/vendor.js | 10 - src/resources/waypoint.js | 10 - src/resources/zone.js | 10 - src/store-actions.ts | 46 + src/store.js | 148 - src/store.ts | 92 + src/string.ts | 206 + src/types.ts | 44 + src/utils.ts | 250 + src/utils/array.js | 3 - src/utils/collection.js | 386 -- src/utils/detect-adapter.js | 12 - src/utils/google-address.js | 107 - src/utils/index.js | 14 - src/utils/is-blank.js | 7 - src/utils/is-email.js | 5 - src/utils/is-empty.js | 34 - src/utils/is-latitude.js | 5 - src/utils/is-longitude.js | 5 - src/utils/is-node-environment.js | 14 - src/utils/is-phone.js | 5 - src/utils/object.js | 134 - src/utils/point.js | 45 - src/utils/store-actions.js | 60 - src/utils/string.js | 538 -- src/utils/uuid.js | 7 - tests/core.test.ts | 640 +++ tests/place.test.js | 112 - tests/sdk.test.js | 80 - tests/string.test.js | 39 - tsconfig.json | 26 +- tsconfig.types.json | 13 + types/adapter.d.ts | 13 - types/adapters.d.ts | 5 - types/adapters/browser.d.ts | 84 - types/adapters/ember.d.ts | 3 - types/adapters/node.d.ts | 74 - types/fleetbase.d.ts | 124 - types/resolver.d.ts | 43 - types/resource.d.ts | 245 - types/resources.d.ts | 16 - types/resources/contact.d.ts | 5 - types/resources/driver.d.ts | 29 - types/resources/entity.d.ts | 5 - types/resources/order.d.ts | 29 - types/resources/organization.d.ts | 6 - types/resources/payload.d.ts | 37 - types/resources/place.d.ts | 31 - types/resources/service-area.d.ts | 5 - types/resources/service-quote.d.ts | 7 - types/resources/service-rate.d.ts | 5 - types/resources/tracking-status.d.ts | 5 - types/resources/vehicle.d.ts | 5 - types/resources/vendor.d.ts | 5 - types/resources/waypoint.d.ts | 3 - types/resources/zone.d.ts | 5 - types/store.d.ts | 23 - types/utils/array.d.ts | 1 - types/utils/collection.d.ts | 52 - types/utils/detect-adapter.d.ts | 2 - types/utils/google-address.d.ts | 54 - types/utils/index.d.ts | 15 - types/utils/is-blank.d.ts | 2 - types/utils/is-email.d.ts | 2 - types/utils/is-empty.d.ts | 2 - types/utils/is-latitude.d.ts | 1 - types/utils/is-longitude.d.ts | 1 - types/utils/is-node-environment.d.ts | 7 - types/utils/is-phone.d.ts | 2 - types/utils/is-resource.d.ts | 1 - types/utils/object.d.ts | 7 - types/utils/point.d.ts | 19 - types/utils/store-actions.d.ts | 6 - types/utils/string.d.ts | 64 - types/utils/uuid.d.ts | 2 - vitest.config.ts | 15 + 152 files changed, 6354 insertions(+), 9179 deletions(-) create mode 100644 .changeset/config.json create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/release.yml create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md delete mode 100644 babel.config.js create mode 100644 contracts/v1.2.13.json create mode 100644 contracts/v1.2.14-candidate.json delete mode 100644 dist/@fleetbase/sdk.min.js delete mode 100644 dist/@fleetbase/sdk.min.js.map delete mode 100644 dist/cjs/fleetbase.js delete mode 100644 dist/cjs/fleetbase.js.map delete mode 100644 dist/esm/fleetbase.js delete mode 100644 dist/esm/fleetbase.js.map delete mode 100644 dist/fleetbase.min.js delete mode 100644 dist/fleetbase.min.js.map create mode 100644 docs/api-source-baseline.md create mode 100644 docs/compatibility-decisions.md create mode 100644 docs/main-branch-migration.md create mode 100644 fixtures/types/index.ts create mode 100644 fixtures/types/package.json create mode 100644 fixtures/types/tsconfig.base.json create mode 100644 fixtures/types/tsconfig.bundler.json create mode 100644 fixtures/types/tsconfig.node16.json create mode 100644 fixtures/types/tsconfig.nodenext.json create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/clean.mjs create mode 100644 scripts/verify-package.mjs delete mode 100644 src/adapter.js create mode 100644 src/adapter.ts delete mode 100644 src/adapters.js delete mode 100644 src/adapters/browser.js create mode 100644 src/adapters/browser.ts create mode 100644 src/adapters/detect.ts delete mode 100644 src/adapters/ember.js create mode 100644 src/adapters/ember.ts create mode 100644 src/adapters/fetch.ts delete mode 100644 src/adapters/node.js create mode 100644 src/adapters/node.ts create mode 100644 src/collection.ts create mode 100644 src/errors.ts delete mode 100644 src/fleetbase.js create mode 100644 src/fleetbase.ts delete mode 100644 src/index.js create mode 100644 src/index.ts delete mode 100644 src/registry.js create mode 100644 src/registry.ts delete mode 100644 src/resolver.js create mode 100644 src/resolver.ts delete mode 100644 src/resource.js create mode 100644 src/resource.ts delete mode 100644 src/resources.js create mode 100644 src/resources.ts delete mode 100644 src/resources/contact.js delete mode 100644 src/resources/driver.js delete mode 100644 src/resources/entity.js delete mode 100644 src/resources/fleet.js delete mode 100644 src/resources/index.js delete mode 100644 src/resources/order.js delete mode 100644 src/resources/organization.js delete mode 100644 src/resources/payload.js delete mode 100644 src/resources/place.js delete mode 100644 src/resources/service-area.js delete mode 100644 src/resources/service-quote.js delete mode 100644 src/resources/service-rate.js delete mode 100644 src/resources/tracking-status.js delete mode 100644 src/resources/vehicle.js delete mode 100644 src/resources/vendor.js delete mode 100644 src/resources/waypoint.js delete mode 100644 src/resources/zone.js create mode 100644 src/store-actions.ts delete mode 100644 src/store.js create mode 100644 src/store.ts create mode 100644 src/string.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts delete mode 100644 src/utils/array.js delete mode 100644 src/utils/collection.js delete mode 100644 src/utils/detect-adapter.js delete mode 100644 src/utils/google-address.js delete mode 100644 src/utils/index.js delete mode 100644 src/utils/is-blank.js delete mode 100644 src/utils/is-email.js delete mode 100644 src/utils/is-empty.js delete mode 100644 src/utils/is-latitude.js delete mode 100644 src/utils/is-longitude.js delete mode 100644 src/utils/is-node-environment.js delete mode 100644 src/utils/is-phone.js delete mode 100644 src/utils/object.js delete mode 100644 src/utils/point.js delete mode 100644 src/utils/store-actions.js delete mode 100644 src/utils/string.js delete mode 100644 src/utils/uuid.js create mode 100644 tests/core.test.ts delete mode 100644 tests/place.test.js delete mode 100644 tests/sdk.test.js delete mode 100644 tests/string.test.js create mode 100644 tsconfig.types.json delete mode 100644 types/adapter.d.ts delete mode 100644 types/adapters.d.ts delete mode 100644 types/adapters/browser.d.ts delete mode 100644 types/adapters/ember.d.ts delete mode 100644 types/adapters/node.d.ts delete mode 100644 types/fleetbase.d.ts delete mode 100644 types/resolver.d.ts delete mode 100644 types/resource.d.ts delete mode 100644 types/resources.d.ts delete mode 100644 types/resources/contact.d.ts delete mode 100644 types/resources/driver.d.ts delete mode 100644 types/resources/entity.d.ts delete mode 100644 types/resources/order.d.ts delete mode 100644 types/resources/organization.d.ts delete mode 100644 types/resources/payload.d.ts delete mode 100644 types/resources/place.d.ts delete mode 100644 types/resources/service-area.d.ts delete mode 100644 types/resources/service-quote.d.ts delete mode 100644 types/resources/service-rate.d.ts delete mode 100644 types/resources/tracking-status.d.ts delete mode 100644 types/resources/vehicle.d.ts delete mode 100644 types/resources/vendor.d.ts delete mode 100644 types/resources/waypoint.d.ts delete mode 100644 types/resources/zone.d.ts delete mode 100644 types/store.d.ts delete mode 100644 types/utils/array.d.ts delete mode 100644 types/utils/collection.d.ts delete mode 100644 types/utils/detect-adapter.d.ts delete mode 100644 types/utils/google-address.d.ts delete mode 100644 types/utils/index.d.ts delete mode 100644 types/utils/is-blank.d.ts delete mode 100644 types/utils/is-email.d.ts delete mode 100644 types/utils/is-empty.d.ts delete mode 100644 types/utils/is-latitude.d.ts delete mode 100644 types/utils/is-longitude.d.ts delete mode 100644 types/utils/is-node-environment.d.ts delete mode 100644 types/utils/is-phone.d.ts delete mode 100644 types/utils/is-resource.d.ts delete mode 100644 types/utils/object.d.ts delete mode 100644 types/utils/point.d.ts delete mode 100644 types/utils/store-actions.d.ts delete mode 100644 types/utils/string.d.ts delete mode 100644 types/utils/uuid.d.ts create mode 100644 vitest.config.ts diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..108e6c4 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "access": "public", + "baseBranch": "main", + "changelog": false, + "commit": false, + "fixed": [], + "ignore": [], + "linked": [], + "privatePackages": { + "tag": false, + "version": true + }, + "updateInternalDependencies": "patch" +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..7785233 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,27 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + day: monday + open-pull-requests-limit: 10 + groups: + development-tooling: + dependency-type: development + update-types: [minor, patch] + commit-message: + prefix: 'chore(deps)' + labels: [dependencies] + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + groups: + actions: + patterns: ['*'] + commit-message: + prefix: 'chore(ci)' + labels: [dependencies] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0997731..3ba8124 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,108 +1,225 @@ -name: fleetbase-js +name: CI on: push: - branches: [master] - tags: - - 'v*' + branches: [main, master, dev-v2.0.0] pull_request: - branches: [master] + branches: [main, master, dev-v2.0.0] + workflow_dispatch: + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + CI: true jobs: - build: + quality: + name: Quality runs-on: ubuntu-latest - + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 22.13.0 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run format:check + - run: pnpm run lint + - run: pnpm run typecheck + + test: + name: Test / Node ${{ matrix.node }} + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write strategy: + fail-fast: false matrix: - node-version: [18.x] # Build on Node.js 16 - + node: [22.13.0, 24.x] steps: - uses: actions/checkout@v4 - - - name: Setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + - uses: pnpm/action-setup@v4 with: - node-version: ${{ matrix.node-version }} - - uses: actions/cache@v3 - id: npm-cache + run_install: false + - uses: actions/setup-node@v4 with: - path: ~/.pnpm-store # Replace this with the path you want to cache - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup pnpm - uses: pnpm/action-setup@v2.0.1 + node-version: ${{ matrix.node }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run test:coverage + - name: Upload coverage + if: matrix.node == '22.13.0' + uses: codecov/codecov-action@v5 with: - version: latest - - - name: Install Dependencies - run: pnpm install - - - name: Test - run: pnpm test - env: - FLEETBASE_KEY: ${{ secrets.FLEETBASE_KEY }} - FLEETBASE_HOST: ${{ secrets.FLEETBASE_HOST }} + files: coverage/lcov.info + fail_ci_if_error: true + use_oidc: true - - name: Build - run: pnpm run bundle - - npm_publish: - needs: build + package: + name: Package artifact runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v4 - - - name: Setup Node.js 18.x - uses: actions/setup-node@v4 + - uses: pnpm/action-setup@v4 with: - node-version: 18.x - - - name: Setup pnpm - uses: pnpm/action-setup@v2.0.1 + run_install: false + - uses: actions/setup-node@v4 with: - version: latest - - - name: Install Dependencies - run: pnpm install - - - name: Build - run: pnpm run bundle - - - name: Set up npm - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_AUTH_TOKEN }}" > ~/.npmrc - - - name: Publish - run: npm publish --access public - - github_publish: - needs: build + node-version: 22.13.0 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run build + - run: pnpm run package:check + - name: Create immutable candidate tarball + run: | + mkdir -p artifacts + pnpm pack --pack-destination artifacts + mv artifacts/*.tgz artifacts/fleetbase-sdk.tgz + - uses: actions/upload-artifact@v4 + with: + name: npm-package + path: artifacts/*.tgz + if-no-files-found: error + retention-days: 14 + + cross-platform: + name: Smoke / ${{ matrix.os }} + needs: package + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + steps: + - uses: actions/download-artifact@v4 + with: + name: npm-package + path: artifacts + - uses: actions/setup-node@v4 + with: + node-version: 22.13.0 + - name: Install exact candidate + run: node -e "const fs=require('fs'); fs.mkdirSync('consumer'); fs.writeFileSync('consumer/package.json', JSON.stringify({name:'sdk-consumer',private:true,type:'module'}))" + - run: npm install ../artifacts/fleetbase-sdk.tgz + working-directory: consumer + - run: node --input-type=module -e "import Fleetbase from '@fleetbase/sdk'; if (typeof Fleetbase !== 'function') process.exit(1)" + working-directory: consumer + - run: node -e "const sdk = require('@fleetbase/sdk'); if (typeof sdk.default !== 'function') process.exit(1)" + working-directory: consumer + + package-manager: + name: Install / ${{ matrix.manager }} + needs: package + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + manager: [npm, pnpm, yarn, bun] + steps: + - uses: actions/download-artifact@v4 + with: + name: npm-package + path: artifacts + - uses: actions/setup-node@v4 + with: + node-version: 22.13.0 + - uses: pnpm/action-setup@v4 + if: matrix.manager == 'pnpm' + with: + version: 11.24.0 + - uses: oven-sh/setup-bun@v2 + if: matrix.manager == 'bun' + with: + bun-version: 1.3.14 + - name: Prepare consumer + run: mkdir -p consumer && echo '{"name":"sdk-consumer","private":true,"type":"module"}' > consumer/package.json + - name: Install with npm + if: matrix.manager == 'npm' + working-directory: consumer + run: npm install ../artifacts/fleetbase-sdk.tgz && node --input-type=module -e "import Fleetbase from '@fleetbase/sdk'; if (typeof Fleetbase !== 'function') process.exit(1)" && node -e "if (typeof require('@fleetbase/sdk').default !== 'function') process.exit(1)" + - name: Install with pnpm + if: matrix.manager == 'pnpm' + working-directory: consumer + run: pnpm add ../artifacts/fleetbase-sdk.tgz && node --input-type=module -e "import Fleetbase from '@fleetbase/sdk'; if (typeof Fleetbase !== 'function') process.exit(1)" && node -e "if (typeof require('@fleetbase/sdk').default !== 'function') process.exit(1)" + - name: Install with Yarn Berry + if: matrix.manager == 'yarn' + working-directory: consumer + run: corepack prepare yarn@4.18.0 --activate && yarn add ../artifacts/fleetbase-sdk.tgz && yarn node --input-type=module -e "import Fleetbase from '@fleetbase/sdk'; if (typeof Fleetbase !== 'function') process.exit(1)" && yarn node -e "if (typeof require('@fleetbase/sdk').default !== 'function') process.exit(1)" + - name: Install with Bun + if: matrix.manager == 'bun' + working-directory: consumer + run: bun add ../artifacts/fleetbase-sdk.tgz && bun --eval "import Fleetbase from '@fleetbase/sdk'; if (typeof Fleetbase !== 'function') process.exit(1)" + + type-consumer: + name: Types / ${{ matrix.resolution }} + needs: package runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/') + strategy: + fail-fast: false + matrix: + resolution: [node16, nodenext, bundler] steps: - uses: actions/checkout@v4 - - - name: Setup Node.js 18.x - uses: actions/setup-node@v4 + - uses: actions/download-artifact@v4 with: - node-version: 18.x - - - name: Setup pnpm - uses: pnpm/action-setup@v2.0.1 + name: npm-package + path: artifacts + - uses: actions/setup-node@v4 with: - version: latest - - - name: Install Dependencies - run: pnpm install - - - name: Build - run: pnpm run bundle + node-version: 22.13.0 + - name: Install exact candidate and TypeScript + working-directory: fixtures/types + run: npm install ../../artifacts/fleetbase-sdk.tgz typescript@6.0.2 + - name: Compile strict consumer + working-directory: fixtures/types + run: npx tsc -p tsconfig.${{ matrix.resolution }}.json + + dependency-review: + name: Dependency review + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/dependency-review-action@v4 + with: + fail-on-severity: high - - name: Configure npm for GitHub registry + security: + name: Dependency audit + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 22.13.0 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm audit --prod --audit-level high + - run: pnpm audit --audit-level high + + ci-success: + name: CI success + if: always() + needs: [quality, test, package, cross-platform, package-manager, type-consumer, dependency-review, security] + runs-on: ubuntu-latest + steps: + - name: Require successful jobs + env: + RESULTS: ${{ join(needs.*.result, ',') }} run: | - echo "@fleetbase:registry=https://npm.pkg.github.com/" >> ~/.npmrc - echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> ~/.npmrc - - - name: Publish to GitHub registry - run: npm publish + case "$RESULTS" in + *failure*|*cancelled*) exit 1 ;; + *) exit 0 ;; + esac diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..622e43c --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,28 @@ +name: CodeQL + +on: + push: + branches: [main, master, dev-v2.0.0] + pull_request: + branches: [main, master, dev-v2.0.0] + schedule: + - cron: '23 3 * * 1' + +concurrency: + group: codeql-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + security-events: write + +jobs: + analyze: + name: Analyze JavaScript and TypeScript + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: github/codeql-action/init@v3 + with: + languages: javascript-typescript + - uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e91d759 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,45 @@ +name: Release + +on: + push: + branches: [main] + workflow_dispatch: + +concurrency: + group: release + cancel-in-progress: false + +permissions: + contents: write + id-token: write + pull-requests: write + +jobs: + release: + name: Version or publish + runs-on: ubuntu-latest + environment: npm + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: pnpm + registry-url: https://registry.npmjs.org + - run: pnpm install --frozen-lockfile + - run: pnpm run verify + - name: Create release PR or publish reviewed version + uses: changesets/action@v1 + with: + publish: pnpm run release + version: pnpm run version-packages + commit: 'chore: release packages' + title: 'chore: release packages' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_CONFIG_PROVENANCE: true diff --git a/.gitignore b/.gitignore index ff69f01..5e7389a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,12 @@ # compiled output -# /dist/ +/dist/ +/.types/ +/.pnpm-store/ /tmp/ # dependencies /bower_components/ -/node_modules/ +node_modules/ # misc /.env* @@ -20,4 +22,4 @@ /yarn.lock /package-lock.json .DS_Store -verdaccio \ No newline at end of file +verdaccio diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3c1b4f4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +All notable changes to the Fleetbase JavaScript SDK are documented here. This project follows semantic versioning. + +## 2.0.0-next.0 + +### Changed + +- Rebuilt the SDK in strict TypeScript while preserving the existing root API. +- Added correct native ESM, CommonJS, declaration, source-map, and browser outputs. +- Replaced live production API tests with deterministic transport and SDK contract tests. +- Added enforced 100% statement, branch, function, and line coverage. +- Standardized browser and Node.js transports on the Fetch API and added structured `FleetbaseError` details. + +### Fixed + +- Corrected CommonJS loading, type resolution, resource flag cleanup, dirty-only saves, resource emptying, collection behavior, longitude validation, adapter propagation, and response parsing. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..b3e2946 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing to Fleetbase SDK + +Thank you for improving the Fleetbase JavaScript SDK. + +## Requirements + +- Node.js 22.13 or newer +- Corepack with the package's pinned pnpm version + +## Development workflow + +1. Create a focused branch from `main`. +2. Install exactly the locked dependencies with `pnpm install --frozen-lockfile`. +3. Add or update behavior-focused tests for every change and failure path. +4. Run `pnpm run verify` before opening a pull request. +5. Add a Changeset for user-visible package changes with `pnpm changeset`. + +Pull-request tests must not depend on production Fleetbase credentials or mutable remote data. Use an injected adapter or Fetch implementation for deterministic tests. + +## Compatibility + +Existing default and named exports, constructors, stores, resources, adapter signatures, and return shapes are compatibility contracts. Call out any proposed public API change in the pull request and include runtime and type-level evidence. + +## Pull requests + +Describe the public API effect, tests and coverage, package artifact effect, risk, and rollback. Keep generated artifacts out of commits; CI builds and verifies the npm tarball from source. diff --git a/MODERNIZATION_PLAN.md b/MODERNIZATION_PLAN.md index 7c527ab..c5d080d 100644 --- a/MODERNIZATION_PLAN.md +++ b/MODERNIZATION_PLAN.md @@ -1,6 +1,6 @@ # Fleetbase JavaScript SDK modernization and v2 release plan -Status: proposed for review +Status: implementation in progress on PR #33 Target branch: `dev-v2.0.0` @@ -144,16 +144,16 @@ Every regression fix must first add a failing test. The initial coverage PR must ### Required release-blocking matrix -| Dimension | Required support/gate | -| --- | --- | -| Node | Node 22 and 24 LTS on Linux; smoke tests on macOS and Windows; Node 26 allowed-to-fail until it enters LTS, then promoted | -| Module systems | Native ESM import, dynamic import, and CommonJS require from the packed tarball | -| TypeScript | `node16`, `nodenext`, and `bundler` resolution; strict consumer fixtures; declarations match runtime exports | -| Package managers | npm, pnpm, Yarn Berry, and Bun install/import smoke tests using the same tarball | -| Bundlers | Vite/Rollup, webpack, esbuild, and the bundlers exercised transitively by required framework fixtures | -| Browsers | Current and previous major Chrome, Firefox, Safari, and Edge through browser tests; document the browserslist policy | -| Frameworks | Vite vanilla, React, Vue, Svelte, Angular, Next.js, Nuxt, and Ember minimal production builds | -| Mobile/edge | React Native/Expo and one standards-based edge runtime are release-blocking only after adapter behavior is explicitly supported and documented | +| Dimension | Required support/gate | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| Node | Node 22 and 24 LTS on Linux; smoke tests on macOS and Windows; Node 26 allowed-to-fail until it enters LTS, then promoted | +| Module systems | Native ESM import, dynamic import, and CommonJS require from the packed tarball | +| TypeScript | `node16`, `nodenext`, and `bundler` resolution; strict consumer fixtures; declarations match runtime exports | +| Package managers | npm, pnpm, Yarn Berry, and Bun install/import smoke tests using the same tarball | +| Bundlers | Vite/Rollup, webpack, esbuild, and the bundlers exercised transitively by required framework fixtures | +| Browsers | Current and previous major Chrome, Firefox, Safari, and Edge through browser tests; document the browserslist policy | +| Frameworks | Vite vanilla, React, Vue, Svelte, Angular, Next.js, Nuxt, and Ember minimal production builds | +| Mobile/edge | React Native/Expo and one standards-based edge runtime are release-blocking only after adapter behavior is explicitly supported and documented | The matrix must distinguish “supported and blocking” from “best effort/canary.” A badge or README claim is permitted only after the corresponding fixture runs in CI. @@ -184,7 +184,7 @@ Split workflows by responsibility and use least-privilege permissions, pinned ma ### `release.yml` — reviewed automation -Use Changesets (or a comparably reviewable release-PR tool) so every user-visible change carries a semver intent and changelog entry. On merges to `master`, automation should maintain a version PR. Merging that reviewed version PR should: +Use Changesets (or a comparably reviewable release-PR tool) so every user-visible change carries a semver intent and changelog entry. After the reviewed default-branch migration, merges to `main` should maintain a version PR. Merging that reviewed version PR should: 1. Re-run the complete protected CI suite on the exact commit. 2. Build and pack once. diff --git a/README.md b/README.md index c19df62..eba4e1e 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,169 @@

- + Fleetbase

+

-Fast, powerful, and easy to use JavaScript SDK for building on-demand and last-mile apps using Fleetbase API. -Build custom real-time on-demand experiences, and easily manage the flow from start to finish. + The official JavaScript and TypeScript SDK for the Fleetbase API.

- - Version - - - Downloads/week - - - Bundle Size - - - License - -
- fleetbase.io | @fleetbase_io | Discord + CI + CodeQL + Coverage + npm version + Weekly downloads + License

-## Installation - -### With NPM +Fleetbase SDK provides typed resources, stores, API actions, browser and Node.js transports, and extension points for custom adapters. Version 2 keeps the established v1 consumer API while providing correct ESM, CommonJS, TypeScript, and browser builds. -`npm install @fleetbase/sdk` +## Installation -### With Yarn +```sh +# npm +npm install @fleetbase/sdk -`yarn add @fleetbase/sdk` +# pnpm +pnpm add @fleetbase/sdk -## Documentation +# Yarn +yarn add @fleetbase/sdk -See the [documentation webpage](https://fleetbase.io/docs). +# Bun +bun add @fleetbase/sdk +``` -If you would like to make contributions to the Fleetbase Javascript SDK documentation source, here is a [guide](https://github.com/fleetbase/fleetbase-js/blob/master/CONTRIBUTING.md) in doing so. +The SDK supports Node.js 22.13 and newer. Its browser transport uses the standard Fetch API, so it works without framework-specific dependencies in modern browser applications and bundlers. -## Quick Start for Browser +## Quick start -```js +```ts import Fleetbase from '@fleetbase/sdk'; -const fleetbase = new Fleetbase('Your Public Key'); +const fleetbase = new Fleetbase('your_public_key'); -// create a place -const speceNeedle = await fleetbase.places.create({ +const place = await fleetbase.places.create({ name: 'Space Needle', street1: '400 Broad Street', city: 'Seattle', state: 'WA', country: 'US', }); + +console.log(place.id); ``` -## Quick Start for Node +The same root API is available to CommonJS consumers: ```js -import Fleetbase from '@fleetbase/sdk'; +const { default: Fleetbase } = require('@fleetbase/sdk'); -const fleetbase = new Fleetbase('Your Secret Key'); +const fleetbase = new Fleetbase('your_server_key'); +``` -// create a place -const speceNeedle = await fleetbase.places.create({ - name: 'Space Needle', - street1: '400 Broad Street', - city: 'Seattle', - state: 'WA', - country: 'US', +Never expose a Fleetbase secret key in browser code. Browser applications must use a public key. Keep server credentials in environment variables or a secret manager. + +## Resources and stores + +The client exposes stores for frequently used API resources: + +```ts +const order = await fleetbase.orders.findRecord('order_123'); +const places = await fleetbase.places.query({ city: 'Seattle' }); +const driver = await fleetbase.drivers.findRecord('driver_123'); +const quotes = await fleetbase.serviceQuotes.fromPreliminary({ + pickup: 'place_pickup', + dropoff: 'place_dropoff', }); ``` -## Create a custom adapter +Resource instances can also be created directly: -You're able to create a custom adapter to handle network request in the Fleetbase SDK. -The Fleetbase SDK ships with two standard adapters. The BrowserAdapter which is based on `fetch()` and -the NodeAdapter based on axios. +```ts +import { Place, Point } from '@fleetbase/sdk'; -```js +const place = new Place({ + name: 'Warehouse', + location: new Point(47.6062, -122.3321), +}); +``` + +The root package exports the existing resource classes, adapters, collection helpers, resolver and registry hooks, string helpers, validation utilities, and TypeScript request/configuration types. + +## Custom adapters + +Implement the stable adapter interface when requests need to use an application-specific transport: + +```ts import { Adapter } from '@fleetbase/sdk'; class CustomAdapter extends Adapter { - constructor(config) { - super(config); + get(path, query, options) { + return customRequest('GET', path, { query, ...options }); + } + + post(path, data, options) { + return customRequest('POST', path, { data, ...options }); } - get() {} - post() {} - put() {} - patch() {} - delete() {} + put(path, data, options) { + return customRequest('PUT', path, { data, ...options }); + } + + patch(path, data, options) { + return customRequest('PATCH', path, { data, ...options }); + } + + delete(path, options) { + return customRequest('DELETE', path, options); + } +} + +const fleetbase = new Fleetbase('your_key', { + adapter: new CustomAdapter(), +}); +``` + +Calling `fleetbase.setAdapter(adapter)` updates the client and all existing stores. + +## Errors + +Transport failures reject with `FleetbaseError`, which remains a normal JavaScript `Error` and adds safe structured details when available: + +```ts +import { FleetbaseError } from '@fleetbase/sdk'; + +try { + await fleetbase.orders.findRecord('missing'); +} catch (error) { + if (error instanceof FleetbaseError) { + console.error(error.status, error.code, error.requestId); + } } ``` + +## Package formats + +The npm package contains: + +- native ESM with declarations and source maps; +- true CommonJS (`.cjs`) with CommonJS declarations; +- a minified browser bundle at `dist/fleetbase.min.js`; +- no runtime dependencies. + +Every release candidate is checked with Publint, Are The Types Wrong, packed-tarball content and size assertions, ESM/CommonJS export parity, strict TypeScript, cross-platform smoke tests, and 100% statement, branch, function, and line coverage. + +## Development + +```sh +pnpm install --frozen-lockfile +pnpm run verify +``` + +Pull-request tests are deterministic and do not need Fleetbase credentials. API behavior is cross-checked against the official [Postman collections](https://github.com/fleetbase/postman), [Core API](https://github.com/fleetbase/core-api), and [Fleet-Ops](https://github.com/fleetbase/fleetops) sources. + +See the [modernization plan](https://github.com/fleetbase/fleetbase-js/blob/main/MODERNIZATION_PLAN.md) for the v2 compatibility and release program and the [contribution guide](https://github.com/fleetbase/fleetbase-js/blob/main/CONTRIBUTING.md) for the development workflow. + +## License + +[AGPL-3.0-or-later](./LICENSE.md) diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 59d59bf..0000000 --- a/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - presets: ['@babel/preset-env'], - plugins: [['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }]], -}; diff --git a/contracts/v1.2.13.json b/contracts/v1.2.13.json new file mode 100644 index 0000000..6b504cc --- /dev/null +++ b/contracts/v1.2.13.json @@ -0,0 +1,123 @@ +{ + "source": "https://registry.npmjs.org/@fleetbase/sdk/-/sdk-1.2.13.tgz", + "exports": [ + "Adapter", + "BrowserAdapter", + "Collection", + "Contact", + "Driver", + "EmberJsAdapter", + "Entity", + "Fleet", + "GoogleAddress", + "NodeAdapter", + "Order", + "Organization", + "Payload", + "Place", + "Point", + "Resolver", + "Resource", + "ServiceArea", + "ServiceQuote", + "ServiceRate", + "Store", + "StoreActions", + "TrackingStatus", + "Vehicle", + "Vendor", + "Waypoint", + "Zone", + "camelize", + "classify", + "createCollection", + "createResource", + "createStore", + "createStoreActions", + "dasherize", + "default", + "detectAdapter", + "extendStoreActions", + "isLatitude", + "isLongitude", + "isNodeEnvironment", + "isResource", + "lookup", + "pluralize", + "register", + "resolve", + "resolveResource", + "singularize" + ], + "stores": ["orders", "entities", "places", "drivers", "vehicles", "vendors", "contacts", "serviceAreas", "zones", "fleets", "organizations"], + "prototypeMethods": { + "Fleetbase": ["getAdapter", "setAdapter"], + "BrowserAdapter": ["delete", "get", "parseJSON", "patch", "post", "put", "request", "setHeaders"], + "NodeAdapter": ["delete", "get", "patch", "post", "put", "request", "setHeaders"], + "Store": ["afterFetch", "create", "deposit", "destroy", "extendActions", "findAll", "findRecord", "query", "queryRecord", "serialize", "update"], + "Resource": [ + "changes", + "create", + "createdAt", + "destroy", + "eachAttribute", + "empty", + "getAttribute", + "getAttributes", + "getDirtyAttributes", + "hasAttribute", + "hasAttributes", + "hasDirtyAttributes", + "id", + "isAttributeFilled", + "isDeleted", + "isDirty", + "isEmpty", + "isLoaded", + "isNew", + "isSaved", + "mergeAttributes", + "meta", + "mutate", + "reload", + "reset", + "save", + "saveDirty", + "serialize", + "setAdapter", + "setAttribute", + "setAttributes", + "setFlags", + "syncAttributes", + "update", + "updatedAt" + ], + "Place": ["coordinates", "latitude", "longitude", "setOwner"], + "Order": [ + "cancel", + "captureQrCode", + "captureSignature", + "complete", + "dispatch", + "dispatchedAt", + "getDistanceAndTime", + "getNextActivity", + "isCanceled", + "isCompleted", + "isDispatched", + "isEnroute", + "isInProgress", + "isNotDispatched", + "isNotStarted", + "isStarted", + "scheduledAt", + "setDestination", + "start", + "startedAt", + "status", + "updateActivity" + ], + "Driver": ["coordinates", "currentOrganization", "isOnline", "latitude", "listOrganizations", "longitude", "switchOrganization", "syncDevice", "token", "track"], + "Payload": ["attach", "dropoff", "entities", "pickup", "waypoints"] + } +} diff --git a/contracts/v1.2.14-candidate.json b/contracts/v1.2.14-candidate.json new file mode 100644 index 0000000..4507062 --- /dev/null +++ b/contracts/v1.2.14-candidate.json @@ -0,0 +1,8 @@ +{ + "sourceCommit": "69ace0808f8738bc4dc8b0930452c0d793217f8b", + "sourceBranch": "dev-v1.2.14", + "additions": { + "stores": ["serviceQuotes"], + "serviceQuoteActions": ["fromPayload", "fromPreliminary"] + } +} diff --git a/dist/@fleetbase/sdk.min.js b/dist/@fleetbase/sdk.min.js deleted file mode 100644 index 798f2e7..0000000 --- a/dist/@fleetbase/sdk.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("axios")):"function"==typeof define&&define.amd?define(["exports","axios"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@fleetbase/sdk"]={},t.axios)}(this,(function(t,e){"use strict";function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function v(t,e,n){return(e=A(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}function d(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&m(t,e)}function g(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(g=function(){return!!t})()}function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function y(t){for(var e=1;e=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;_(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:P(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),p}},e}function m(t,e){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},m(t,e)}function w(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,s=[],u=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e);else for(;!(u=(r=o.call(n)).done)&&(s.push(r.value),s.length!==e);u=!0);}catch(t){c=!0,i=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(t,e)||E(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||E(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}function x(t){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},x(t)}function E(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}function O(t){var e="function"==typeof Map?new Map:void 0;return O=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return u(t,arguments,f(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),m(n,t)},O(t)}var j=Array.isArray,$=void 0===arguments?void 0:arguments,R=6e4,S=function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(j(t))if(r.length<=R)t.splice.apply(t,[e,n].concat(k(r)));else{t.splice(e,n);for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:0,r=t.length,i=n;i2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,i=t.length;return n<0&&(n+=i),F(t,r&&e!=e?function(t){return t!=t}:function(t){return t===e},n)},D=function(t,e,n){return S(t,e,0,[n]),n},C=function(t){function e(){for(var t=arguments.length,n=new Array(t),i=0;i0}},{key:"empty",get:function(){return 0===this.length}},{key:"first",get:function(){return P(this,0)}},{key:"last",get:function(){return P(this,this.length-1)}},{key:"replace",value:function(t,e){return S(this,t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:[]),this}},{key:"objectsAt",value:function(t){var e=this;return t.map((function(t){return P(e,t)}))}},{key:"objectAt",value:function(t){return P(this,t)}},{key:"indexOf",value:function(t,e){return T(this,t,e,!1)}},{key:"lastIndexOf",value:function(t,e){var n=this.length;(void 0===e||e>=n)&&(e=n-1),e<0&&(e+=n);for(var r=e;r>=0;r--)if(P(this,r)===t)return r;return-1}},{key:"includes",value:function(t,e){return-1!==T(this,t,e,!0)}},{key:"findBy",value:function(){return t=this,e=z.apply(void 0,arguments),r=e.bind(n),-1===(i=F(t,r,0))?void 0:P(t,i);var t,e,n,r,i}},{key:"findIndexBy",value:function(){return F(this,z.apply(void 0,arguments))}},{key:"isEvery",value:function(){return t=this,e=z.apply(void 0,arguments),r=e.bind(n),-1===F(t,(function(t,e,n){return!r(t,e,n)}),0);var t,e,n,r}},{key:"isAny",value:function(){return t=this,e=z.apply(void 0,arguments),r=e.bind(n),-1!==F(t,r,0);var t,e,n,r}},{key:"invoke",value:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:_,n=[],r=new Set,i="function"==typeof e?e:function(t){return get(t,e)};return t.forEach((function(t){var e=i(t);r.has(e)||(r.add(e),n.push(t))})),n}(this,t)}},{key:"without",value:function(t){if(!this.includes(t))return this;var e=t==t?function(e){return e!==t}:function(t){return t==t};return this.filter(e)}},{key:"clear",value:function(){var t=this.length;return 0===t||this.replace(0,t,[]),this}},{key:"insertAt",value:function(t,e){return D(this,t,e),this}},{key:"replaceAt",value:function(t,e){return this.replace(t,1,[e])}},{key:"removeAt",value:function(t,e){return function(t,e){return S(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,[]),t}(this,t,e)}},{key:"pushObject",value:function(t){return this.insertAt(this.length,t)}},{key:"pushObjects",value:function(t){return this.replace(this.length,0,t),this}},{key:"popObject",value:function(){var t=this.length;if(0===t)return null;var e=P(this,t-1);return this.removeAt(t-1,1),e}},{key:"shiftObject",value:function(){if(0===this.length)return null;var t=P(this,0);return this.removeAt(0),t}},{key:"unshiftObject",value:function(t){return D(this,0,t)}},{key:"unshiftObjects",value:function(t){return this.replace(0,0,t),this}},{key:"reverseObjects",value:function(){var t=this.length;if(0===t)return this;var e=this.toArray().reverse();return this.replace(0,t,e),this}},{key:"setObjects",value:function(t){if(0===t.length)return this.clear();var e=this.length;return this.replace(0,e,t),this}},{key:"removeObject",value:function(t){for(var e=this.length||0;--e>=0;){P(this,e)===t&&this.removeAt(e)}return this}},{key:"removeObjects",value:function(t){for(var e=t.length-1;e>=0;e--)this.removeObject(t[e]);return this}},{key:"addObject",value:function(t){return this.includes(t)||this.pushObject(t),this}},{key:"addObjects",value:function(t){var e=this;return t.forEach((function(t){return e.addObject(t)})),this}}])}(O(Array)),N=function(t){var e=null==t;if(e)return e;if("number"==typeof t.size)return!t.size;var n=x(t);if("object"===n){var r=t.size;if("number"==typeof r)return!r}if("number"==typeof t.length&&"function"!==n)return!t.length;if("object"===n){var i=t.length;if("number"==typeof i)return!i}return!1};function q(t){return t instanceof Q}var I=function(){var t,e,n;return!("undefined"==typeof process||"object"!==x(null===(t=process)||void 0===t?void 0:t.env)&&-1===(null===(e=process.release)||void 0===e||null===(e=e.name)||void 0===e?void 0:e.search(/node|io.js/))||"undefined"!=typeof window&&"ReactNative"!==(null===(n=window)||void 0===n||null===(n=n.navigator)||void 0===n?void 0:n.product))},G=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return I()?jt("adapter","NodeAdapter",t):jt("adapter","BrowserAdapter",t)},B=Array.isArray,U=function(){return h((function t(e){s(this,t),this.place=e,this.geometry=null==e?void 0:e.geometry,this.components=this.parseComponents(),this.attributes=this.parseProperties()}),[{key:"parse",value:function(){this.parseComponents(),this.parseProperties()}},{key:"parseComponents",value:function(){var t;return((null===(t=this.place)||void 0===t?void 0:t.address_components)||[]).reduce((function(t,e){return e.types.forEach((function(n){t[n]=e})),t}),{})}},{key:"parseProperties",value:function(){var t,e={streetNumber:this.get("street_number"),streetName:this.get("route"),coordinates:null!==(t=this.geometry)&&void 0!==t&&t.location?Object.values(this.geometry.location):[0,0],city:this.or(["locality","sublocality","sublocality_level_1","neighborhood","administrative_area_level_3","administrative_area_level_2"]),county:this.get("administrative_area_level_2"),stateShort:this.get("administrative_area_level_1",!0),stateLong:this.get("administrative_area_level_1"),countryShort:this.get("country",!0),country:this.get("country",!0),countryLong:this.get("country"),postalCode:this.get("postal_code")};return e.address=[e.streetNumber,e.streetName].filter(Boolean).join(" "),e}},{key:"all",value:function(){return this.attributes}},{key:"or",value:function(){var t,e=l(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]);try{for(e.s();!(t=e.n()).done;){var n=t.value;if(B(n)){var r=n[0],i=n[1];if(this.has(r))return this.get(r,i)}else if(this.has(n))return this.get(n)}}catch(t){e.e(t)}finally{e.f()}return null}},{key:"has",value:function(t){return t in this.components}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t in this.components?e?this.components[t].short_name:this.components[t].long_name:null}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.attributes=y(y({},this.attributes),t),this}},{key:"setAttribute",value:function(t,e){return this.attributes[t]=e,this}},{key:"getAttribute",value:function(t){return this.attributes[t]||null}}])}(),J=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;s(this,t),this.type="Point",this.coordinates=[n,e]}return h(t,[{key:"latitude",get:function(){return this.coordinates[1]}},{key:"longitude",get:function(){return this.coordinates[0]}},{key:"lat",value:function(){return this.latitude}},{key:"lng",value:function(){return this.longitude}},{key:"serialize",value:function(){return{type:"Point",coorindates:[this.lat(),this.lng()]}}},{key:"toJson",value:function(){return this.serialize()}},{key:"toString",value:function(){return"(".concat(this.latitude,", ").concat(this.longitude,")")}}],[{key:"fromGeoJson",value:function(e){var n=w(e.coordinates,2),r=n[0];return new t(n[1],r)}}])}(),W=function(t,e){var n=t();return Array.isArray(n)||"object"===x(n)?H(n,e):null},H=function(t,e){var n,r=t,i=x(t),o="object"===i,a="function"===i,s=Array.isArray(t),u="string"===x(e)&&e.includes(".")?e.split("."):[e];if(s||o){for(var c=0;c0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;s(this,t),this.actions=e,this.bind=n}),[{key:"extend",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||this.bind;if(!t)return this;if(null!=this&&this.actions&&"object"===x(this.actions))for(var e in this.actions){var n=this.actions[e];"function"==typeof n?K(t,e,n.bind(t)):K(t,e,n)}return this}}])}(),Q=function(){return h((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};s(this,t),this.attributes=e,this.dirtyAttributes={},this.changes={},this.isLoading=!1,this.isSaving=!1,this.isDestroying=!1,this.isReloading=!1,this.resource=r,this.options=i,this.version=i.version||"v1",this.setAdapter(n)}),[{key:"setAdapter",value:function(t){var e;return this.adapter=t,this.store=new Rt(this.resource,t,{onAfterFetch:this.syncAttributes.bind(this),actions:null===(e=this.options)||void 0===e?void 0:e.actions}),this}},{key:"id",get:function(){return this.getAttribute("id")}},{key:"create",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.mergeAttributes(e);return this.setFlags(["isLoading","isSaving"]),this.store.create(n).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"update",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.setFlags(["isLoading","isSaving"]),this.store.update(this.attributes.id,e).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"destroy",value:function(){var t=this;return this.setFlags(["isLoading","isDestroying"]),this.store.destroy(this.attributes.id).then((function(e){return t.setFlags(["isLoading","isDestroying"],!1),e}))}},{key:"reload",value:function(){var t=this;return this.setFlags(["isLoading","isReloading"]),this.store.findRecord(this.attributes.id).then((function(e){return t.reset(),e}))}},{key:"setFlags",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=["isLoading","isSaving","isReloading","isDestroying"],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=this.getAttributes();return N(this.id)?this.create(e):!0===t.onlyDirty?this.savedirty():this.update(e)}},{key:"saveDirty",value:function(){for(var t=Object.keys(this.dirtyAttributes),e={},n=0;n0}},{key:"mutate",value:function(t,e){this.attributes[t]=e}},{key:"setAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(null===n&&"object"===x(t))return this.setAttributes(t);var r=null!==(e=null==this?void 0:this.attributes[t])&&void 0!==e?e:null;return K(this.attributes,t,n),K(this.dirtyAttributes,t,r),j(null==this?void 0:this.changes[t])||(this.changes[t]=[]),this.changes[t].push({property:t,previousValue:r,value:n,changedAt:new Date}),this}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var e in t)this.setAttribute(e,t[e]);return this}},{key:"getAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=H(null!==(e=null==this?void 0:this.attributes)&&void 0!==e?e:{},t);return void 0===r?n:r}},{key:"hasAttribute",value:function(t){if(j(t)){var e,n=t,r=Object.keys(null!==(e=this.attributes)&&void 0!==e?e:{});return n.every((function(t){return r.includes(t)}))}return!(null==this||!this.attributes)&&t in this.attributes}},{key:"hasAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this.hasAttribute(t)}},{key:"isAttributeFilled",value:function(t){var e=this;return j(t)?this.hasAttribute(t)&&t.every((function(t){return!N(e.getAttribute(t))})):this.hasAttribute(t)&&!N(this.getAttribute(t))}},{key:"getAttributes",value:function(t){var e={};if(null==t)return this.getAttributes(Object.keys(this.attributes));if("string"==typeof t)return this.getAttribute(Array.prototype.slice.call(arguments));if(!j(t))throw new Error("No attribute properties provided!");var n,r=l(t);try{for(r.s();!(n=r.n()).done;){var i,o,a=n.value;if("string"==typeof a){var s=this.getAttribute(a);"object"!==x(null===(i=s)||void 0===i?void 0:i.attributes)||j(null===(o=s)||void 0===o?void 0:o.attributes)||(s=s.attributes),e[a]=s}}}catch(t){r.e(t)}finally{r.f()}return e}},{key:"serialize",value:function(){return this.getAttributes()}},{key:"mergeAttributes",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!==(t=null==this?void 0:this.attributes)&&void 0!==t?t:{};return this.attributes=y(y({},n),e),this.attributes}},{key:"syncAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.attributes=t}}])}(),V=new M({getDistanceAndTime:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/distance-and-time"),e,n)},getNextActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/next-activity"),e,n)},dispatch:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/dispatch"),e,n).then(this.afterFetch.bind(this))},start:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/start"),e,n).then(this.afterFetch.bind(this))},updateActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/update-activity"),e,n).then(this.afterFetch.bind(this))},setDestination:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return q(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/set-destination/").concat(e),n,r).then(this.afterFetch.bind(this))},captureQrCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return q(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-qr").concat(e?"/"+e:""),n,r)},captureSignature:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return q(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-signature").concat(e?"/"+e:""),n,r)},complete:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/complete"),e,n).then(this.afterFetch.bind(this))},cancel:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.delete("".concat(this.namespace,"/").concat(t,"/cancel"),e,n).then(this.afterFetch.bind(this))}}),Y=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"order",y({actions:V},r)])}return d(e,t),h(e,[{key:"getDistanceAndTime",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getDistanceAndTime(this.id,t,e)}},{key:"dispatch",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.dispatch(this.id,t,e)}},{key:"start",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.start(this.id,t,e)}},{key:"setDestination",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.setDestination(this.id,t,e,n)}},{key:"captureQrCode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureQrCode(this.id,t,e,n)}},{key:"captureSignature",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureSignature(this.id,t,e,n)}},{key:"getNextActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getNextActivity(this.id,t,e)}},{key:"updateActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.updateActivity(this.id,t,e)}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.cancel(this.id,t,e)}},{key:"complete",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.complete(this.id,t,e)}},{key:"isDispatched",get:function(){return null!==this.getAttribute("dispatched_at")}},{key:"isNotDispatched",get:function(){return null==this.getAttribute("dispatched_at")}},{key:"isStarted",get:function(){return null!==this.getAttribute("started_at")}},{key:"isNotStarted",get:function(){return null==this.getAttribute("started_at")}},{key:"isCompleted",get:function(){return"completed"==this.getAttribute("status")}},{key:"isCanceled",get:function(){return"canceled"==this.getAttribute("status")}},{key:"isEnroute",get:function(){return"driver_enroute"==this.getAttribute("status")||"enroute"===this.getAttribute("status")}},{key:"isInProgress",get:function(){return this.isStarted&&!this.isCanceled&&!this.isCompleted}},{key:"scheduledAt",get:function(){return this.isAttributeFilled("scheduled_at")?new Date(this.getAttribute("scheduled_at")):null}},{key:"startedAt",get:function(){return this.isAttributeFilled("started_at")?new Date(this.getAttribute("started_at")):null}},{key:"dispatchedAt",get:function(){return this.isAttributeFilled("dispatched_at")?new Date(this.getAttribute("dispatched_at")):null}},{key:"status",get:function(){return this.getAttribute("status")}}])}(Q),Z=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"payload",r])}return d(e,t),h(e,[{key:"attach",value:function(t){}},{key:"entities",get:function(){}},{key:"dropoff",get:function(){}},{key:"pickup",get:function(){}},{key:"waypoints",get:function(){return new C(this.waypoints)}}])}(Q),X=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"entity",r])}return d(e,t),h(e)}(Q),tt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"place",r])}return d(e,t),h(e,[{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new J))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new J))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"setOwner",value:function(t){return q(t)&&this.setAttribute("owner",t.id),"string"==typeof t&&this.setAttribute("owner",t),this}}],[{key:"fromGoogleAddress",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=w(t.getAttribute("coordinates"),2),o=i[0],a=i[1];return new e({name:null,address:t.getAttribute("address"),location:new J(o,a),street1:t.getAttribute("address"),street2:null,city:t.getAttribute("city"),province:t.getAttribute("stateLong"),postal_code:t.getAttribute("postalCode"),neighborhood:t.get("neighborhood"),district:t.getAttribute("county"),building:t.get("building"),country:t.getAttribute("countryShort"),phone:null,security_access_code:null},n,r)}}])}(Q),et=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"waypoint",r])}return d(e,t),h(e)}(tt),nt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"tracking-status",r])}return d(e,t),h(e)}(Q),rt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"vehicle",r])}return d(e,t),h(e)}(Q),it=new M({current:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.adapter.get("".concat(this.namespace,"/current"),t,e)}}),ot=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"organization",y({actions:it},r)])}return d(e,t),h(e)}(Q),at=function(t,e){return j(t)?t.map((function(t){return new ot(t,e)})):new ot(t,e)},st=new M({login:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function(){return/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")}(t))return this.adapter.post("drivers/login-with-sms",{phone:t});if(!e)throw new Error("Login requires password!");return this.adapter.post("drivers/login",y({identity:t,password:e},n)).then(this.afterFetch.bind(this))},verifyCode:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/verify-code",y({identity:t,code:e},n)).then(this.afterFetch.bind(this))},track:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/track"),e,n).then(this.afterFetch.bind(this))},listOrganizations:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/organizations"),n,r).then((function(t){return at(t,e.adapter)}))},switchOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/switch-organization"),n,r).then((function(t){return at(t,e.adapter)}))},currentOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/current-organization"),n,r).then((function(t){return at(t,e.adapter)}))},retrieve:function(t){return this.findRecord(t)},syncDevice:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/register-device"),e,n)}}),ut=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"driver",y({actions:st},r)])}return d(e,t),h(e,[{key:"token",get:function(){return this.getAttribute("token")}},{key:"isOnline",get:function(){return!0===this.getAttribute("online")}},{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new J))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new J))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"track",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.track(this.id,t,e)}},{key:"syncDevice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.syncDevice(this.id,t,e)}},{key:"listOrganizations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.listOrganizations(this.id,t,e)}},{key:"switchOrganization",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.switchOrganization(this.id,{next:t},e)}},{key:"currentOrganization",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.currentOrganization(this.id,t,e)}}])}(Q),ct=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"vendor",r])}return d(e,t),h(e)}(Q),ht=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"contact",r])}return d(e,t),h(e)}(Q),lt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"zone",r])}return d(e,t),h(e)}(Q),vt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"service-area",r])}return d(e,t),h(e)}(Q),ft=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"service-rate",r])}return d(e,t),h(e)}(Q),dt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(this,e),a(this,e,[t,n,"service-quote",r])}return d(e,t),h(e,[{key:"fromPreliminary",value:function(){}},{key:"fromPayload",value:function(){}}])}(Q),gt=h((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.version=e.version||"v1",this.host=e.host||null,this.namespace=e.namespace||null,this.headers=e.headers||{}})),pt=function(t){function e(t){var n;return s(this,e),(n=a(this,e,[t])).setHeaders({Authorization:"Bearer ".concat(t.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;browser"}),n}return d(e,t),h(e,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.headers=y(y({},this.headers),t),this}},{key:"parseJSON",value:function(t){return new Promise((function(e,n){t.json().then((function(n){e({statusText:t.statusText,status:t.status,ok:t.ok,json:n})})).catch((function(){n(new Error("Oops! Something went wrong when handling your request."))}))}))}},{key:"request",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise((function(o,a){fetch(i.url||"".concat(e.host,"/").concat(e.namespace,"/").concat(t),y({method:n,mode:i.mode||"cors",headers:new Headers(y(y({},e.headers||{}),i.headers||{}))},r)).then(e.parseJSON).then((function(t){if(t.ok)return o(t.json);a(new Error(t.json.errors?t.json.errors[0]:t.statusText))})).catch((function(t){a(t)}))}))}},{key:"get",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=N(e=n)||"string"==typeof e&&!1===/\S/.test(e)?"":new URLSearchParams(n).toString();return this.request("".concat(t).concat(i?"?".concat(i):""),"GET",{},r)}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"POST",{body:JSON.stringify(e)},n)}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PUT",{body:JSON.stringify(e)},n)}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request(t,"DELETE",{},e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PATCH",{body:JSON.stringify(e)},n)}}])}(gt),yt=function(t){function n(t){var r;return s(this,n),(r=a(this,n,[t])).axiosInstance=e.create({baseURL:"".concat(r.host,"/").concat(r.namespace),headers:{Authorization:"Bearer ".concat(t.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;node"}}),r.axiosInstance.interceptors.response.use((function(t){return t.data}),(function(t){if(t.response){var e=t.response.data;if(j(e.errors)&&e.errors.length)throw new Error(e.errors[0]);if(e.error)throw new Error(e.error)}throw t})),r}return d(n,t),h(n,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.axiosInstance.defaults.headers.common=y(y({},this.axiosInstance.defaults.headers.common),t),this}},{key:"request",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.axiosInstance.request(y({method:t,url:e},n))}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("GET",t,y({params:e},n))}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("POST",t,y({data:e},n))}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PUT",t,y({data:e},n))}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request("DELETE",t,e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PATCH",t,y({data:e},n))}}])}(gt),bt=function(t){function e(){return s(this,e),a(this,e,arguments)}return d(e,t),h(e)}(gt),mt=function(){function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];s(this,t),v(this,"uncountableWords",["equipment","information","rice","money","species","series","fish","sheep","moose","deer","news"]),v(this,"pluralRules",[[new RegExp("(m)an$","gi"),"$1en"],[new RegExp("(pe)rson$","gi"),"$1ople"],[new RegExp("(child)$","gi"),"$1ren"],[new RegExp("^(ox)$","gi"),"$1en"],[new RegExp("(ax|test)is$","gi"),"$1es"],[new RegExp("(octop|vir)us$","gi"),"$1i"],[new RegExp("(alias|status)$","gi"),"$1es"],[new RegExp("(bu)s$","gi"),"$1ses"],[new RegExp("(buffal|tomat|potat)o$","gi"),"$1oes"],[new RegExp("([ti])um$","gi"),"$1a"],[new RegExp("sis$","gi"),"ses"],[new RegExp("(?:([^f])fe|([lr])f)$","gi"),"$1$2ves"],[new RegExp("(hive)$","gi"),"$1s"],[new RegExp("([^aeiouy]|qu)y$","gi"),"$1ies"],[new RegExp("(x|ch|ss|sh)$","gi"),"$1es"],[new RegExp("(matr|vert|ind)ix|ex$","gi"),"$1ices"],[new RegExp("([m|l])ouse$","gi"),"$1ice"],[new RegExp("(quiz)$","gi"),"$1zes"],[new RegExp("s$","gi"),"s"],[new RegExp("$","gi"),"s"]]),v(this,"singularRules",[[new RegExp("(m)en$","gi"),"$1an"],[new RegExp("(pe)ople$","gi"),"$1rson"],[new RegExp("(child)ren$","gi"),"$1"],[new RegExp("([ti])a$","gi"),"$1um"],[new RegExp("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$","gi"),"$1$2sis"],[new RegExp("(hive)s$","gi"),"$1"],[new RegExp("(tive)s$","gi"),"$1"],[new RegExp("(curve)s$","gi"),"$1"],[new RegExp("([lr])ves$","gi"),"$1f"],[new RegExp("([^fo])ves$","gi"),"$1fe"],[new RegExp("([^aeiouy]|qu)ies$","gi"),"$1y"],[new RegExp("(s)eries$","gi"),"$1eries"],[new RegExp("(m)ovies$","gi"),"$1ovie"],[new RegExp("(x|ch|ss|sh)es$","gi"),"$1"],[new RegExp("([m|l])ice$","gi"),"$1ouse"],[new RegExp("(bus)es$","gi"),"$1"],[new RegExp("(o)es$","gi"),"$1"],[new RegExp("(shoe)s$","gi"),"$1"],[new RegExp("(cris|ax|test)es$","gi"),"$1is"],[new RegExp("(octop|vir)i$","gi"),"$1us"],[new RegExp("(alias|status)es$","gi"),"$1"],[new RegExp("^(ox)en","gi"),"$1"],[new RegExp("(vert|ind)ices$","gi"),"$1ex"],[new RegExp("(matr)ices$","gi"),"$1ix"],[new RegExp("(quiz)zes$","gi"),"$1"],[new RegExp("s$","gi"),""]]),v(this,"nonTitlecasedWords",["and","or","nor","a","an","the","so","but","to","of","at","by","from","into","on","onto","off","out","in","over","with","for"]),v(this,"idSuffix",new RegExp("(_ids|_id)$","g")),v(this,"underbar",new RegExp("_","g")),v(this,"spaceOrUnderbar",new RegExp("[ _]","g")),v(this,"uppercase",new RegExp("([A-Z])","g")),v(this,"underbarPrefix",new RegExp("^_")),this.str=e,this.chain=n}return h(t,[{key:"get",value:function(){return this.str}},{key:"applyRules",value:function(t,e,n,r){if(r)t=r;else if(!(n.indexOf(t.toLowerCase())>-1))for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;return t=t||this.str,this.applyRules(t,this.pluralRules,this.uncountableWords,e)}},{key:"singularize",value:function(t,e){return t=t||this.str,this.applyRules(t,this.singularRules,this.uncountableWords,e)}},{key:"camelize",value:function(t,e){for(var n=(t=t||this.str).split("/"),r=0;r1&&void 0!==arguments[1]&&arguments[1];return t=t||this.str,t=this.underscore(this.demodulize(t))+(e?"":"_")+"id",this.str=t,!0===this.chain?this:t}},{key:"ordinalize",value:function(t){for(var e=(t=t||this.str).split(" "),n=0;n1&&void 0!==arguments[1]?arguments[1]:[];if(t.actions=j(e)?e:[e],!j(e))return e instanceof M&&e.extend(t),t;var n,r=l(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.extendActions(i)}}catch(t){r.e(t)}finally{r.f()}},Rt=function(){return h((function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};s(this,t),this.resource=e,this.adapter=n||G(),this.namespace=wt(e),this.storage=new C,this.options=r,this.extendActions(r.actions)}),[{key:"extendActions",value:function(){return $t(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])}},{key:"deposit",value:function(t){return t}},{key:"serialize",value:function(t){return jt("resource",At(this.resource),t,this.adapter)}},{key:"afterFetch",value:function(t){return function(t,e){if("function"==typeof t.options.onAfterFetch&&t.options.onAfterFetch(e),j(e)){var n,r=[],i=l(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;r.push(t.afterFetch(o))}}catch(t){i.e(t)}finally{i.f()}return u(C,r)}var a=t.serialize(e);return t.deposit(a)}(this,t)}},{key:"create",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(function(){var r=o(b().mark((function r(i,o){var a;return b().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,t.adapter.post("".concat(t.namespace),e,n).then(t.afterFetch.bind(t)).catch(o);case 2:a=r.sent,i(a);case 4:case"end":return r.stop()}}),r)})));return function(t,e){return r.apply(this,arguments)}}())}},{key:"update",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(function(){var i=o(b().mark((function i(o,a){var s;return b().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,e.adapter.put("".concat(e.namespace,"/").concat(t),n,r).then(e.afterFetch.bind(e)).catch(a);case 2:s=i.sent,o(s);case 4:case"end":return i.stop()}}),i)})));return function(t,e){return i.apply(this,arguments)}}())}},{key:"findRecord",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(function(){var r=o(b().mark((function r(i,o){var a;return b().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,e.adapter.get("".concat(e.namespace,"/").concat(t),{},n).then(e.afterFetch.bind(e)).catch(o);case 2:a=r.sent,i(a);case 4:case"end":return r.stop()}}),r)})));return function(t,e){return r.apply(this,arguments)}}())}},{key:"findAll",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise(function(){var n=o(b().mark((function n(r,i){var o;return b().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,t.adapter.get("".concat(t.namespace),{},e).then(t.afterFetch.bind(t)).catch(i);case 2:o=n.sent,r(o);case 4:case"end":return n.stop()}}),n)})));return function(t,e){return n.apply(this,arguments)}}())}},{key:"query",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(function(){var r=o(b().mark((function r(i,o){var a;return b().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,t.adapter.get("".concat(t.namespace),e,n).then(t.afterFetch.bind(t)).catch(o);case 2:a=r.sent,i(a);case 4:case"end":return r.stop()}}),r)})));return function(t,e){return r.apply(this,arguments)}}())}},{key:"queryRecord",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.single=!0,new Promise(function(){var r=o(b().mark((function r(i,o){var a;return b().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,t.adapter.get("".concat(t.namespace),e,n).then(t.afterFetch.bind(t)).catch(o);case 2:a=r.sent,i(a);case 4:case"end":return r.stop()}}),r)})));return function(t,e){return r.apply(this,arguments)}}())}},{key:"destroy",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=q(t)?t.getAttribute("id"):t;return new Promise(function(){var t=o(b().mark((function t(i,o){var a;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.adapter.delete("".concat(e.namespace,"/").concat(r),{},n).then(e.afterFetch.bind(e)).catch(o);case 2:a=t.sent,i(a);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}())}}])}(),St=function(){function t(e){var n,r,i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(s(this,t),this.version=null!==(n=o.version)&&void 0!==n?n:"v1",this.options={version:this.version,host:null!==(r=o.host)&&void 0!==r?r:"https://api.fleetbase.io",namespace:null!==(i=o.namespace)&&void 0!==i?i:this.version,debug:a,publicKey:e},"string"!=typeof e||0===e.length)throw new Error("⚠️ Invalid public key given to Fleetbase SDK");if(!I()&&e.toLowerCase().startsWith("$"))throw new Error("Secret key provided. You must use a public key with Fleetbase Javascript SDK!");this.adapter=o.adapter||G(this.options),this.orders=new Rt("order",this.adapter).extendActions(V),this.entities=new Rt("entity",this.adapter),this.places=new Rt("place",this.adapter),this.drivers=new Rt("driver",this.adapter).extendActions(st),this.vehicles=new Rt("vehicle",this.adapter),this.vendors=new Rt("vendor",this.adapter),this.contacts=new Rt("contact",this.adapter),this.organizations=new Rt("organization",this.adapter).extendActions(it)}return h(t,[{key:"setAdapter",value:function(t){this.adapter=t}},{key:"getAdapter",value:function(){return this.adapter}}],[{key:"newInstance",value:function(){return u(t,Array.prototype.slice.call(arguments))}}])}();t.Adapter=gt,t.BrowserAdapter=pt,t.Collection=C,t.Contact=ht,t.Driver=ut,t.EmberJsAdapter=bt,t.Entity=X,t.GoogleAddress=U,t.NodeAdapter=yt,t.Order=Y,t.Organization=ot,t.Payload=Z,t.Place=tt,t.Point=J,t.Resource=Q,t.ServiceArea=vt,t.ServiceQuote=dt,t.ServiceRate=ft,t.Store=Rt,t.StoreActions=M,t.TrackingStatus=nt,t.Vehicle=rt,t.Vendor=ct,t.Waypoint=et,t.Zone=lt,t.camelize=function(){var t=["camelize"].concat(Array.prototype.slice.call(arguments));return mt.invoke.apply(mt,k(t))},t.classify=At,t.dasherize=function(){var t=["dasherize"].concat(Array.prototype.slice.call(arguments));return mt.invoke.apply(mt,k(t))},t.default=St,t.extendStoreActions=$t,t.isLatitude=function(t){return isFinite(t)&&Math.abs(t)<=90},t.isLongitude=function(t){return isFinite(t)&&Math.abs(t)<=180&&Math.abs(t)>=90},t.isNodeEnvironment=I,t.isResource=q,t.lookup=jt,t.pluralize=wt,t.singularize=kt})); -//# sourceMappingURL=sdk.min.js.map diff --git a/dist/@fleetbase/sdk.min.js.map b/dist/@fleetbase/sdk.min.js.map deleted file mode 100644 index 233a30a..0000000 --- a/dist/@fleetbase/sdk.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sdk.min.js","sources":["../../src/utils/array.js","../../src/utils/collection.js","../../src/utils/is-empty.js","../../src/utils/is-resource.js","../../src/utils/is-phone.js","../../src/utils/is-node-environment.js","../../src/utils/detect-adapter.js","../../src/utils/google-address.js","../../src/utils/point.js","../../src/utils/object.js","../../src/utils/store-actions.js","../../src/resource.js","../../src/resources/order.js","../../src/resources/payload.js","../../src/resources/entity.js","../../src/resources/place.js","../../src/resources/waypoint.js","../../src/resources/tracking-status.js","../../src/resources/vehicle.js","../../src/resources/organization.js","../../src/resources/driver.js","../../src/resources/vendor.js","../../src/resources/contact.js","../../src/resources/zone.js","../../src/resources/service-area.js","../../src/resources/service-rate.js","../../src/resources/service-quote.js","../../src/adapter.js","../../src/adapters/browser.js","../../src/utils/is-blank.js","../../src/adapters/node.js","../../src/adapters/ember.js","../../src/utils/string.js","../../src/resolver.js","../../src/store.js","../../src/fleetbase.js","../../src/utils/is-latitude.js","../../src/utils/is-longitude.js"],"sourcesContent":["const { isArray } = Array;\n\nexport { isArray };\n","import { isArray } from './array';\n\n/**\n * Collection\n * Extended array inspired by Ember's NativeArray\n **/\n\nconst CHUNK_SIZE = 60000;\n\n// To avoid overflowing the stack, we splice up to CHUNK_SIZE items at a time.\n// See https://code.google.com/p/chromium/issues/detail?id=56588 for more details.\nconst replace = (array, start, deleteCount, items = []) => {\n if (isArray(array)) {\n if (items.length <= CHUNK_SIZE) {\n array.splice(start, deleteCount, ...items);\n } else {\n array.splice(start, deleteCount);\n\n for (let i = 0; i < items.length; i += CHUNK_SIZE) {\n let chunk = items.slice(i, i + CHUNK_SIZE);\n array.splice(start + i, 0, ...chunk);\n }\n }\n } else if (isCollection(arr)) {\n array.replace(start, deleteCount, items);\n }\n};\n\nconst identityFunction = (item) => item;\n\nconst uniqBy = (array, key = identityFunction) => {\n let ret = [];\n let seen = new Set();\n let getter = typeof key === 'function' ? key : (item) => get(item, key);\n\n array.forEach((item) => {\n let val = getter(item);\n if (!seen.has(val)) {\n seen.add(val);\n ret.push(item);\n }\n });\n\n return ret;\n};\n\nconst isCollection = (mixed) => mixed instanceof Collection;\n\nconst objectAt = (array, index) => {\n if (isArray(array)) {\n return array[index];\n } else if (isCollection(array)) {\n return array.objectAt(index);\n }\n\n return null;\n};\n\nconst iter = (key, value) => {\n let valueProvided = arguments.length === 2;\n return valueProvided ? (item) => value === item[key] : (item) => Boolean(item[key]);\n};\n\nconst findIndex = (array, predicate, startAt = 0) => {\n let len = array.length;\n for (let index = startAt; index < len; index++) {\n let item = objectAt(array, index);\n if (predicate(item, index, array)) {\n return index;\n }\n }\n return -1;\n};\n\nconst find = (array, callback, target) => {\n let predicate = callback.bind(target);\n let index = findIndex(array, predicate, 0);\n return index === -1 ? undefined : objectAt(array, index);\n};\n\nconst any = (array, callback, target) => {\n let predicate = callback.bind(target);\n return findIndex(array, predicate, 0) !== -1;\n};\n\nconst every = (array, callback, target) => {\n let cb = callback.bind(target);\n let predicate = (item, index, array) => !cb(item, index, array);\n return findIndex(array, predicate, 0) === -1;\n};\n\nconst indexOf = (array, val, startAt = 0, withNaNCheck) => {\n let len = array.length;\n\n if (startAt < 0) {\n startAt += len;\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate = withNaNCheck && val !== val ? (item) => item !== item : (item) => item === val;\n return findIndex(array, predicate, startAt);\n};\n\nconst removeAt = (array, index, len = 1) => {\n replace(array, index, len, []);\n return array;\n};\n\nconst insertAt = (array, index, item) => {\n replace(array, index, 0, [item]);\n return item;\n};\n\nclass Collection extends Array {\n constructor(...items) {\n if (isArray(arguments[0])) {\n super(...arguments[0]);\n } else {\n super(...arguments);\n }\n }\n\n get notEmpty() {\n return this.length > 0;\n }\n\n get empty() {\n return this.length === 0;\n }\n\n get first() {\n return objectAt(this, 0);\n }\n\n get last() {\n return objectAt(this, this.length - 1);\n }\n\n replace(start, deleteCount, items = []) {\n replace(this, start, deleteCount, items);\n\n return this;\n }\n\n objectsAt(indexes) {\n return indexes.map((idx) => objectAt(this, idx));\n }\n\n objectAt(index) {\n return objectAt(this, index);\n }\n\n indexOf(object, startAt) {\n return indexOf(this, object, startAt, false);\n }\n\n lastIndexOf(object, startAt) {\n let len = this.length;\n\n if (startAt === undefined || startAt >= len) {\n startAt = len - 1;\n }\n\n if (startAt < 0) {\n startAt += len;\n }\n\n for (let idx = startAt; idx >= 0; idx--) {\n if (objectAt(this, idx) === object) {\n return idx;\n }\n }\n\n return -1;\n }\n\n includes(object, startAt) {\n return indexOf(this, object, startAt, true) !== -1;\n }\n\n findBy() {\n return find(this, iter(...arguments));\n }\n\n findIndexBy() {\n return findIndex(this, iter(...arguments));\n }\n\n isEvery() {\n return every(this, iter(...arguments));\n }\n\n isAny() {\n return any(this, iter(...arguments));\n }\n\n invoke(methodName, ...args) {\n let ret = [];\n\n this.forEach((item) => ret.push(item[methodName]?.(...args)));\n\n return ret;\n }\n\n toArray() {\n return this.map((item) => item);\n }\n\n compact() {\n return this.filter((value) => value != null);\n }\n\n sortBy() {\n let sortKeys = arguments;\n\n return this.sort((a, b) => {\n for (const element of sortKeys) {\n let key = element;\n let propA = a[key];\n let propB = b[key];\n // return 1 or -1 else continue to the next sortKey\n let compareValue = compare(propA, propB);\n\n if (compareValue) {\n return compareValue;\n }\n }\n return 0;\n });\n }\n\n uniqBy(key) {\n return uniqBy(this, key);\n }\n\n without(value) {\n if (!this.includes(value)) {\n return this; // nothing to do\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate = value === value ? (item) => item !== value : (item) => item === item;\n return this.filter(predicate);\n }\n\n clear() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n this.replace(0, len, []);\n return this;\n }\n\n insertAt(idx, object) {\n insertAt(this, idx, object);\n return this;\n }\n\n replaceAt(idx, object) {\n return this.replace(idx, 1, [object]);\n }\n\n removeAt(start, len) {\n return removeAt(this, start, len);\n }\n\n pushObject(obj) {\n return this.insertAt(this.length, obj);\n }\n\n pushObjects(objects) {\n this.replace(this.length, 0, objects);\n return this;\n }\n\n popObject() {\n let len = this.length;\n if (len === 0) {\n return null;\n }\n\n let ret = objectAt(this, len - 1);\n this.removeAt(len - 1, 1);\n return ret;\n }\n\n shiftObject() {\n if (this.length === 0) {\n return null;\n }\n\n let ret = objectAt(this, 0);\n this.removeAt(0);\n return ret;\n }\n\n unshiftObject(obj) {\n return insertAt(this, 0, obj);\n }\n\n unshiftObjects(objects) {\n this.replace(0, 0, objects);\n return this;\n }\n\n reverseObjects() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n let objects = this.toArray().reverse();\n this.replace(0, len, objects);\n return this;\n }\n\n setObjects(objects) {\n if (objects.length === 0) {\n return this.clear();\n }\n\n let len = this.length;\n this.replace(0, len, objects);\n return this;\n }\n\n removeObject(obj) {\n let loc = this.length || 0;\n while (--loc >= 0) {\n let curObject = objectAt(this, loc);\n\n if (curObject === obj) {\n this.removeAt(loc);\n }\n }\n return this;\n }\n\n removeObjects(objects) {\n for (let i = objects.length - 1; i >= 0; i--) {\n this.removeObject(objects[i]);\n }\n\n return this;\n }\n\n addObject(obj) {\n let included = this.includes(obj);\n\n if (!included) {\n this.pushObject(obj);\n }\n\n return this;\n }\n\n addObjects(objects) {\n objects.forEach((obj) => this.addObject(obj));\n return this;\n }\n}\n\nexport default Collection;\n\nexport { replace, uniqBy, isCollection, objectAt, iter, findIndex, find, any, every, indexOf, removeAt, insertAt };\n","const isEmpty = (obj) => {\n const none = obj === null || obj === undefined;\n if (none) {\n return none;\n }\n\n if (typeof obj.size === 'number') {\n return !obj.size;\n }\n\n const objectType = typeof obj;\n\n if (objectType === 'object') {\n const { size } = obj;\n if (typeof size === 'number') {\n return !size;\n }\n }\n\n if (typeof obj.length === 'number' && objectType !== 'function') {\n return !obj.length;\n }\n\n if (objectType === 'object') {\n const { length } = obj;\n if (typeof length === 'number') {\n return !length;\n }\n }\n\n return false;\n};\n\nexport default isEmpty;\n","import Resource from '../resource';\n\nexport default function isResource(record) {\n return record instanceof Resource;\n}\n","const isPhone = (phone = '') => {\n return /^[+]?[\\s./0-9]*[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/g.test(phone);\n};\n\nexport default isPhone;\n","/**\n * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative.\n *\n * @returns boolean\n */\nconst isNodeEnvironment = () => {\n return (\n typeof process !== 'undefined' &&\n (typeof process?.env === 'object' || process.release?.name?.search(/node|io.js/) !== -1) &&\n (typeof window === 'undefined' || window?.navigator?.product === 'ReactNative')\n );\n};\n\nexport default isNodeEnvironment;\n","import { lookup } from '../resolver';\nimport isNodeEnvironment from './is-node-environment';\n\nconst detectAdapter = (options = {}) => {\n if (isNodeEnvironment()) {\n return lookup('adapter', 'NodeAdapter', options);\n }\n\n return lookup('adapter', 'BrowserAdapter', options);\n};\n\nexport default detectAdapter;\n","const { isArray } = Array;\n\nclass GoogleAddress {\n constructor(place) {\n this.place = place;\n this.geometry = place?.geometry;\n this.components = this.parseComponents();\n this.attributes = this.parseProperties();\n }\n\n parse() {\n this.parseComponents();\n this.parseProperties();\n }\n\n parseComponents() {\n const components = (this.place?.address_components || []).reduce(function (acc, data) {\n data.types.forEach(function (type) {\n acc[type] = data;\n });\n return acc;\n }, {});\n\n return components;\n }\n\n parseProperties() {\n const attributes = {\n streetNumber: this.get('street_number'),\n streetName: this.get('route'),\n coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0],\n city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']),\n county: this.get('administrative_area_level_2'),\n stateShort: this.get('administrative_area_level_1', true),\n stateLong: this.get('administrative_area_level_1'),\n countryShort: this.get('country', true),\n country: this.get('country', true),\n countryLong: this.get('country'),\n postalCode: this.get('postal_code'),\n };\n\n attributes.address = [attributes.streetNumber, attributes.streetName].filter(Boolean).join(' ');\n\n return attributes;\n }\n\n all() {\n return this.attributes;\n }\n\n or(keys = []) {\n for (const element of keys) {\n const key = element;\n\n if (isArray(key)) {\n const pkey = key[0];\n const short = key[1];\n\n if (this.has(pkey)) {\n return this.get(pkey, short);\n }\n\n continue;\n }\n\n if (this.has(key)) {\n return this.get(key);\n }\n }\n\n return null;\n }\n\n has(key) {\n return key in this.components;\n }\n\n get(key, short = false) {\n if (!(key in this.components)) {\n return null;\n }\n\n return short ? this.components[key].short_name : this.components[key].long_name;\n }\n\n setAttributes(attributes = {}) {\n this.attributes = { ...this.attributes, ...attributes };\n\n return this;\n }\n\n setAttribute(key, value) {\n this.attributes[key] = value;\n\n return this;\n }\n\n getAttribute(key) {\n return this.attributes[key] || null;\n }\n}\n\nexport default GoogleAddress;\n","export default class Point {\n constructor(latitude = 0, longitude = 0) {\n this.type = 'Point';\n this.coordinates = [longitude, latitude];\n }\n\n get latitude() {\n return this.coordinates[1];\n }\n\n get longitude() {\n return this.coordinates[0];\n }\n\n lat() {\n return this.latitude;\n }\n\n lng() {\n return this.longitude;\n }\n\n static fromGeoJson(json) {\n const [longitude, latitude] = json.coordinates;\n\n return new Point(latitude, longitude);\n }\n\n serialize() {\n return {\n type: 'Point',\n coorindates: [this.lat(), this.lng()],\n };\n }\n\n toJson() {\n return this.serialize();\n }\n\n toString() {\n return `(${this.latitude}, ${this.longitude})`;\n }\n}\n","import isEmpty from './is-empty';\n\nconst isResource = (mixed) => typeof mixed === 'object' && !isEmpty(mixed?.attributes) && typeof mixed?.attributes === 'object';\n\nconst isCallable = (object, property) => typeof object[property] === 'function';\n\nconst getResolved = (func, path) => {\n const resolved = func();\n return Array.isArray(resolved) || typeof resolved === 'object' ? get(resolved, path) : null;\n};\n\nconst invoke = (object, method) => {\n if (typeof object[method] === 'function') {\n return object[method].bind(object);\n }\n};\n\nconst get = (object, path) => {\n let current = object;\n\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n\n if (isArray || isObject) {\n for (let i = 0; i < pathArray.length; i++) {\n if (current && current[pathArray[i]] === undefined) {\n return null;\n } else if (current) {\n current = current[pathArray[i]];\n\n // if is resource then return get on it's attributes\n if (isResource(current) && pathArray[i + 1] !== undefined) {\n const newPath = pathArray.slice(i + 1).join('.');\n\n return get(current.attributes, newPath);\n }\n\n // resolve functions and continue\n if (typeof current === 'function') {\n const newPath = pathArray.slice(i + 1).join('.');\n return getResolved(current, newPath);\n }\n }\n }\n return current;\n }\n\n if (isFunction) {\n return getResolved(object, path);\n }\n};\n\nconst getProperties = (object, properties = []) => {\n const selected = {};\n let propertyNames = arguments;\n let i = 1;\n\n if (arguments.length === 2 && Array.isArray(properties)) {\n i = 0;\n propertyNames = arguments[1];\n }\n\n for (; i < propertyNames.length; i++) {\n selected[propertyNames[i]] = get(object, propertyNames[i]);\n }\n\n return selected;\n};\n\nconst set = (object, path, value) => {\n let current = object;\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n // if is function\n if (isFunction) {\n // throw error should be object or array or object like\n }\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n const iterations = pathArray.length;\n\n if (isArray || isObject) {\n for (let i = 0; i < iterations - 1; i++) {\n if (!current[pathArray[i]]) {\n current[pathArray[i]] = {};\n }\n current = current[pathArray[i]];\n }\n\n current[pathArray[iterations - 1]] = value;\n }\n\n return value;\n};\n\nconst setProperties = (object, properties = {}) => {\n for (const property in properties) {\n set(object, property, properties[property]);\n }\n\n return object;\n};\n\nconst extend = (target, classes = []) => {\n if (arguments.length > 1) {\n classes = arguments;\n }\n for (const element of classes) {\n for (const property in element) {\n if (Object.prototype.hasOwnProperty.call(element, property)) {\n target[property] = element[property];\n }\n }\n }\n return target;\n};\n\nexport { set, get, getProperties, setProperties, extend, isCallable, invoke };\n","import { set } from './object';\n\nexport default class StoreActions {\n constructor(actions = {}, bind = null) {\n this.actions = actions;\n this.bind = bind;\n }\n\n extend(bindTo = null) {\n const binding = bindTo || this.bind;\n\n if (!binding) {\n return this;\n }\n\n if (this?.actions && typeof this.actions === 'object') {\n for (let action in this.actions) {\n const fn = this.actions[action];\n\n if (typeof fn !== 'function') {\n set(binding, action, fn);\n continue;\n }\n\n set(binding, action, fn.bind(binding));\n }\n }\n\n return this;\n }\n}\n","import Store from './store';\nimport { isEmpty } from './utils';\nimport { isArray } from './utils/array';\nimport { set, get } from './utils/object';\n\nclass Resource {\n /**\n\t * The base resource for all resources\n\n\t * @return {[type]} [description]\n\t */\n constructor(attributes = {}, adapter, resource, options = {}) {\n this.attributes = attributes;\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isDestroying = false;\n this.isReloading = false;\n this.resource = resource;\n this.options = options;\n this.version = options.version || 'v1';\n this.setAdapter(adapter);\n }\n\n /**\n * Set a new adapter to the resource instance, this will update the Store instance\n *\n * @param {Adapter} adapter\n * @return {Resource} this\n */\n setAdapter(adapter) {\n this.adapter = adapter;\n this.store = new Store(this.resource, adapter, {\n onAfterFetch: this.syncAttributes.bind(this),\n actions: this.options?.actions,\n });\n\n return this;\n }\n\n /**\n * Getter for id attribute\n *\n * @var {String}\n */\n get id() {\n return this.getAttribute('id');\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n create(attributes = {}) {\n const data = this.mergeAttributes(attributes);\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.create(data).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n update(attributes = {}) {\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.update(this.attributes.id, attributes).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Deletes the resource instance on the server\n *\n * @return {[type]} [description]\n */\n destroy() {\n this.setFlags(['isLoading', 'isDestroying']);\n\n return this.store.destroy(this.attributes.id).then((response) => {\n this.setFlags(['isLoading', 'isDestroying'], false);\n\n return response;\n });\n }\n\n /**\n * Reloads the resource from the server.\n *\n * @return {[type]} [description]\n */\n reload() {\n this.setFlags(['isLoading', 'isReloading']);\n\n return this.store.findRecord(this.attributes.id).then((response) => {\n this.reset();\n\n return response;\n });\n }\n\n /**\n * Sets flag properties.\n *\n * @return this\n */\n setFlags(flags = [], state = true) {\n const validFlags = ['isLoading', 'isSaving', 'isReloading', 'isDestroying'];\n\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i];\n\n if (typeof flag !== 'string' || !validFlags.includes(flag)) {\n throw new Error(`${flag} is not a valid flag!`);\n }\n\n this[flag] = state;\n }\n\n return this;\n }\n\n /**\n * Resets tracked properties\n *\n * @return this\n */\n reset() {\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isReloading = false;\n\n return this;\n }\n\n /**\n * Emptys resource.\n *\n * @return this\n */\n empty() {\n this.reset();\n this.attribues = {};\n\n return this;\n }\n\n /**\n * Saves the resource instance on the server\n *\n * @return {[type]} [description]\n */\n save(options = {}) {\n const attributes = this.getAttributes();\n\n if (isEmpty(this.id)) {\n return this.create(attributes);\n }\n\n if (options.onlyDirty === true) {\n return this.savedirty();\n }\n\n return this.update(attributes);\n }\n\n /**\n * Saves only dirtied attributes.\n *\n * @return {[type]} [description]\n */\n saveDirty() {\n const dirtyAttributeKeys = Object.keys(this.dirtyAttributes);\n const dirtyAttributes = {};\n\n for (let i = 0; i < dirtyAttributeKeys.length; i++) {\n const key = dirtyAttributeKeys[i];\n dirtyAttributes[key] = this.getAttribute(key);\n }\n\n return this.update(dirtyAttributes);\n }\n\n /**\n * Returns the resource meta if exists.\n *\n * @return {Object}\n */\n get meta() {\n return this.getAttribute('meta', {});\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get createdAt() {\n return this.isAttributeFilled('created_at') ? new Date(this.getAttribute('created_at')) : null;\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get updatedAt() {\n return this.isAttributeFilled('updated_at') ? new Date(this.getAttribute('updated_at')) : null;\n }\n\n /**\n * Checks if resource is loaded from the server.\n *\n * @return {Boolean}\n */\n get isLoaded() {\n return this.hasAttributes(['created_at', 'id']);\n }\n\n /**\n * Checks if resource ihas no attributes\n *\n * @return {Boolean}\n */\n get isEmpty() {\n return Object.values(this?.attributes).length === 0;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isNew() {\n return !this.id;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isSaved() {\n return !this.isNew && this.isLoaded;\n }\n\n /**\n * Checks if resource is deleted on server.\n *\n * @return {Boolean}\n */\n get isDeleted() {\n return this.hasAttributes(['deleted', 'time']);\n }\n\n /**\n * Iterates over each attribute value and property executing a user supplied callback.\n *\n * @return {Object}\n */\n eachAttribute(callback) {\n if (typeof callback !== 'function') {\n return this;\n }\n\n Object.keys(this?.attributes ?? {}).forEach((property) => {\n const value = this.getAttribute(property);\n callback.call(this, value, property);\n });\n\n return this;\n }\n\n /**\n * Gets all changes\n *\n * @return {Object}\n */\n changes() {\n return this.changes;\n }\n\n /**\n * Gets all dirty attributes.\n *\n * @return {Object}\n */\n getDirtyAttributes() {\n return this.dirtyAttributes;\n }\n\n /**\n * Checks if property is dirty.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n isDirty(property) {\n return property in this.dirtyAttributes;\n }\n\n /**\n * Checks if any properties is dirty.\n *\n * @return {Boolean}\n */\n hasDirtyAttributes() {\n return Object.keys(this?.dirtyAttributes ?? {}).length > 0;\n }\n\n /**\n * Updates a instance property without tracking changes or dirtying attribute.\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n mutate(property, value) {\n this.attributes[property] = value;\n }\n\n /**\n * Set an instance property locally\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n setAttribute(property, value = null) {\n if (value === null && typeof property === 'object') {\n return this.setAttributes(property);\n }\n\n const previousValue = this?.attributes[property] ?? null;\n\n // use object setter\n set(this.attributes, property, value);\n set(this.dirtyAttributes, property, previousValue);\n\n // track changes\n if (!isArray(this?.changes[property])) {\n this.changes[property] = [];\n }\n\n this.changes[property].push({\n property,\n previousValue,\n value,\n changedAt: new Date(),\n });\n\n return this;\n }\n\n /**\n * Set multiple instance properties locally\n *\n * @param {Object} properties [description]\n */\n setAttributes(attributes = {}) {\n for (let property in attributes) {\n this.setAttribute(property, attributes[property]);\n }\n\n return this;\n }\n\n /**\n * Get an attribute\n *\n * @param {String} attribute The attribute key to get\n * @param {mixed} defaultValue The default value if no attribute value\n */\n getAttribute(attribute, defaultValue = null) {\n const value = get(this?.attributes ?? {}, attribute);\n\n if (value === undefined) {\n return defaultValue;\n }\n\n return value;\n }\n\n /**\n * Checks if attribute exists.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n hasAttribute(property) {\n if (isArray(property)) {\n const properties = property;\n const attributeKeys = Object.keys(this.attributes ?? {});\n\n return properties.every((prop) => attributeKeys.includes(prop));\n }\n\n if (!this?.attributes) {\n return false;\n }\n\n return property in this.attributes;\n }\n\n /**\n * Alias for checking if has multiple attributes.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n hasAttributes(properties = []) {\n return this.hasAttribute(properties);\n }\n\n /**\n * Returns true if attribute has value.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n isAttributeFilled(property) {\n if (isArray(property)) {\n return this.hasAttribute(property) && property.every((prop) => !isEmpty(this.getAttribute(prop)));\n }\n\n return this.hasAttribute(property) && !isEmpty(this.getAttribute(property));\n }\n\n /**\n * Get multiple attributes.\n *\n * @param {Array} properties [description]\n * @param {[type]} value [description]\n */\n getAttributes(properties) {\n const attributes = {};\n\n if (properties === null || properties === undefined) {\n return this.getAttributes(Object.keys(this.attributes));\n }\n\n if (typeof properties === 'string') {\n return this.getAttribute([...arguments]);\n }\n\n if (!isArray(properties)) {\n throw new Error('No attribute properties provided!');\n }\n\n for (const element of properties) {\n const property = element;\n\n if (typeof property !== 'string') {\n continue;\n }\n\n let value = this.getAttribute(property);\n\n if (typeof value?.attributes === 'object' && !isArray(value?.attributes)) {\n value = value.attributes;\n }\n\n attributes[property] = value;\n }\n\n return attributes;\n }\n\n /**\n * Serialize resource to a POJO\n *\n * @returns {Object}\n */\n serialize() {\n return this.getAttributes();\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n mergeAttributes(attributes = {}) {\n const modelAttributes = this?.attributes ?? {};\n this.attributes = { ...modelAttributes, ...attributes };\n\n return this.attributes;\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n syncAttributes(json = {}) {\n this.attributes = json;\n }\n}\n\nexport default Resource;\n","import Resource from '../resource';\nimport { StoreActions, isResource } from '../utils';\n\nconst orderActions = new StoreActions({\n getDistanceAndTime: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/distance-and-time`, params, options);\n },\n\n getNextActivity: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/next-activity`, params, options);\n },\n\n dispatch: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/dispatch`, params, options).then(this.afterFetch.bind(this));\n },\n\n start: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/start`, params, options).then(this.afterFetch.bind(this));\n },\n\n updateActivity: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/update-activity`, params, options).then(this.afterFetch.bind(this));\n },\n\n setDestination: function (id, destinationId, params = {}, options = {}) {\n if (isResource(destinationId)) {\n destinationId = destinationId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/set-destination/${destinationId}`, params, options).then(this.afterFetch.bind(this));\n },\n\n captureQrCode: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-qr${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n captureSignature: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-signature${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n complete: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/complete`, params, options).then(this.afterFetch.bind(this));\n },\n\n cancel: function (id, params = {}, options = {}) {\n return this.adapter.delete(`${this.namespace}/${id}/cancel`, params, options).then(this.afterFetch.bind(this));\n },\n});\n\nclass Order extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'order', { actions: orderActions, ...options });\n }\n\n getDistanceAndTime(params = {}, options = {}) {\n return this.store.getDistanceAndTime(this.id, params, options);\n }\n\n dispatch(params = {}, options = {}) {\n return this.store.dispatch(this.id, params, options);\n }\n\n start(params = {}, options = {}) {\n return this.store.start(this.id, params, options);\n }\n\n setDestination(destinationId, params = {}, options = {}) {\n return this.store.setDestination(this.id, destinationId, params, options);\n }\n\n captureQrCode(subjectId = null, params = {}, options = {}) {\n return this.store.captureQrCode(this.id, subjectId, params, options);\n }\n\n captureSignature(subjectId = null, params = {}, options = {}) {\n return this.store.captureSignature(this.id, subjectId, params, options);\n }\n\n getNextActivity(params = {}, options = {}) {\n return this.store.getNextActivity(this.id, params, options);\n }\n\n updateActivity(params = {}, options = {}) {\n return this.store.updateActivity(this.id, params, options);\n }\n\n cancel(params = {}, options = {}) {\n return this.store.cancel(this.id, params, options);\n }\n\n complete(params = {}, options = {}) {\n return this.store.complete(this.id, params, options);\n }\n\n get isDispatched() {\n return this.getAttribute('dispatched_at') !== null;\n }\n\n get isNotDispatched() {\n return this.getAttribute('dispatched_at') == null;\n }\n\n get isStarted() {\n return this.getAttribute('started_at') !== null;\n }\n\n get isNotStarted() {\n return this.getAttribute('started_at') == null;\n }\n\n get isCompleted() {\n return this.getAttribute('status') == 'completed';\n }\n\n get isCanceled() {\n return this.getAttribute('status') == 'canceled';\n }\n\n get isEnroute() {\n return this.getAttribute('status') == 'driver_enroute' || this.getAttribute('status') === 'enroute';\n }\n\n get isInProgress() {\n return this.isStarted && !this.isCanceled && !this.isCompleted;\n }\n\n get scheduledAt() {\n return this.isAttributeFilled('scheduled_at') ? new Date(this.getAttribute('scheduled_at')) : null;\n }\n\n get startedAt() {\n return this.isAttributeFilled('started_at') ? new Date(this.getAttribute('started_at')) : null;\n }\n\n get dispatchedAt() {\n return this.isAttributeFilled('dispatched_at') ? new Date(this.getAttribute('dispatched_at')) : null;\n }\n\n get status() {\n return this.getAttribute('status');\n }\n}\n\nexport default Order;\n\nexport { orderActions };\n","import Resource from '../resource';\nimport Collection from '../utils/collection';\n\nclass Payload extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'payload', options);\n }\n\n /**\n * Attaches an entity to an existing payload and returns\n * the payload with the entity attached\n *\n * @param {[type]} Entity entity [description]\n * @return {[type]} [description]\n */\n attach(entity) {\n // perform op return payload\n }\n\n /**\n * Returns all of the entities attached to this payload\n *\n * @return {[type]} [description]\n */\n get entities() {}\n\n /**\n * Returns the dropoff for this payload\n *\n * @return {[type]} [description]\n */\n get dropoff() {}\n\n /**\n * Returns the pickup for this payload\n *\n * @return {[type]} [description]\n */\n get pickup() {}\n\n /**\n * Returns all the waypoints for this payload\n *\n * @return {[type]} [description]\n */\n get waypoints() {\n return new Collection(this.waypoints);\n }\n}\n\nexport default Payload;\n","import Resource from '../resource';\n\nclass Entity extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'entity', options);\n }\n}\n\nexport default Entity;\n","import Resource from '../resource';\nimport { isResource, Point } from '../utils';\n\nclass Place extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'place', options);\n }\n\n static fromGoogleAddress(googleAddress, adapter, options = {}) {\n const [latitude, longitude] = googleAddress.getAttribute('coordinates');\n const attributes = {\n name: null,\n address: googleAddress.getAttribute('address'),\n location: new Point(latitude, longitude),\n street1: googleAddress.getAttribute('address'),\n street2: null,\n city: googleAddress.getAttribute('city'),\n province: googleAddress.getAttribute('stateLong'),\n postal_code: googleAddress.getAttribute('postalCode'),\n neighborhood: googleAddress.get('neighborhood'),\n district: googleAddress.getAttribute('county'),\n building: googleAddress.get('building'),\n country: googleAddress.getAttribute('countryShort'),\n phone: null,\n security_access_code: null,\n };\n\n return new Place(attributes, adapter, options);\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n /**\n * Set the owner of the place.\n *\n * @param {Object|String} owner\n * @return {Place}\n */\n setOwner(owner) {\n if (isResource(owner)) {\n this.setAttribute('owner', owner.id);\n }\n\n if (typeof owner === 'string') {\n this.setAttribute('owner', owner);\n }\n\n return this;\n }\n}\n\nexport default Place;\n","import Place from './place';\n\nclass Waypoint extends Place {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'waypoint', options);\n }\n}\n\nexport default Waypoint;\n","import Resource from '../resource';\n\nclass TrackingStatus extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'tracking-status', options);\n }\n}\n\nexport default TrackingStatus;\n","import Resource from '../resource';\n\nclass Vehicle extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vehicle', options);\n }\n}\n\nexport default Vehicle;\n","import Resource from '../resource';\nimport { StoreActions } from '../utils';\n\nconst organizationActions = new StoreActions({\n current: function (params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/current`, params, options);\n },\n});\n\nclass Organization extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'organization', { actions: organizationActions, ...options });\n }\n}\n\nexport default Organization;\nexport { organizationActions };\n","import Resource from '../resource';\nimport { StoreActions, isPhone, isEmail, Point } from '../utils';\nimport Organization from './organization';\nimport { isArray } from '../utils/array';\n\nconst serializeOrganizations = (response, adapter) => {\n if (isArray(response)) {\n return response.map((organizationJson) => {\n return new Organization(organizationJson, adapter);\n });\n }\n\n return new Organization(response, adapter);\n};\n\nconst driverActions = new StoreActions({\n // const { error } = await fleetbase.drivers.login('+1 111-1111');\n login: function (identity, password = null, attributes = {}) {\n // handle phone number authentication\n if (isPhone(identity)) {\n return this.adapter.post('drivers/login-with-sms', { phone: identity });\n }\n\n if (!password) {\n throw new Error('Login requires password!');\n }\n\n return this.adapter.post('drivers/login', { identity, password, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n verifyCode: function (identity, code, attributes = {}) {\n return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n track: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/track`, params, options).then(this.afterFetch.bind(this));\n },\n\n listOrganizations: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n switchOrganization: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n currentOrganization: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n retrieve: function (id) {\n return this.findRecord(id);\n },\n\n syncDevice(id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/register-device`, params, options);\n },\n});\n\nclass Driver extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'driver', { actions: driverActions, ...options });\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get isOnline() {\n return this.getAttribute('online') === true;\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n track(params = {}, options = {}) {\n return this.store.track(this.id, params, options);\n }\n\n syncDevice(params = {}, options = {}) {\n return this.store.syncDevice(this.id, params, options);\n }\n\n listOrganizations(params = {}, options = {}) {\n return this.store.listOrganizations(this.id, params, options);\n }\n\n switchOrganization(organizationId, options = {}) {\n return this.store.switchOrganization(this.id, { next: organizationId }, options);\n }\n\n currentOrganization(params = {}, options = {}) {\n return this.store.currentOrganization(this.id, params, options);\n }\n}\n\nexport default Driver;\nexport { driverActions };\n","import Resource from '../resource';\n\nclass Vendor extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vendor', options);\n }\n}\n\nexport default Vendor;\n","import Resource from '../resource';\n\nclass Contact extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'contact', options);\n }\n}\n\nexport default Contact;\n","import Resource from '../resource';\n\nclass Zone extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'zone', options);\n }\n}\n\nexport default Zone;\n","import Resource from '../resource';\n\nclass ServiceArea extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-area', options);\n }\n}\n\nexport default ServiceArea;\n","import Resource from '../resource';\n\nclass ServiceRate extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-rate', options);\n }\n}\n\nexport default ServiceRate;\n","import Resource from '../resource';\n\nclass ServiceQuote extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-quote', options);\n }\n\n fromPreliminary() {}\n\n fromPayload() {}\n}\n\nexport default ServiceQuote;\n","class Adapter {\n /**\n * Creates a configured base adapter for Fleetbase.\n *\n * @param {Object} config Configuration options for adapter\n */\n constructor(config = {}) {\n this.version = config.version || 'v1';\n this.host = config.host || null;\n this.namespace = config.namespace || null;\n this.headers = config.headers || {};\n }\n}\n\nexport default Adapter;\n","import Adapter from '../adapter';\nimport { isBlank } from '../utils';\n\n/**\n * @class BrowserAdapter\n * @extends Adapter\n *\n * @classdesc\n * The BrowserAdapter extends the base Adapter for browser-based environments.\n * It leverages the Fetch API to make HTTP requests and handles JSON parsing, headers,\n * and error propagation.\n *\n * @example\n * // Example usage:\n * const adapter = new BrowserAdapter({\n * publicKey: 'MY_PUBLIC_KEY',\n * host: 'https://api.example.com',\n * namespace: 'v1'\n * });\n * \n * adapter.get('users')\n * .then(users => console.log(users))\n * .catch(error => console.error(error));\n */\nclass BrowserAdapter extends Adapter {\n /**\n * Initializes a BrowserAdapter instance by configuring default headers,\n * including Authorization and Content-Type.\n *\n * @param {Object} config - Configuration object for the adapter.\n * @param {string} config.publicKey - A valid public key for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - A namespace or version for the API.\n */\n constructor(config) {\n super(config);\n\n // Set default headers\n this.setHeaders({\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;browser',\n });\n }\n\n /**\n * Updates the adapter’s request headers.\n *\n * @param {Object} [headers={}] - An object of header key-value pairs.\n * @returns {BrowserAdapter} Returns the current adapter instance for method chaining.\n *\n * @example\n * adapter.setHeaders({\n * 'X-Custom-Header': 'SomeValue'\n * }).get('users');\n */\n setHeaders(headers = {}) {\n this.headers = { ...this.headers, ...headers };\n return this;\n }\n\n /**\n * Parses JSON from a fetch Response object.\n *\n * @private\n * @param {Response} response - The Fetch API response object.\n * @returns {Promise<{ statusText: string, status: number, ok: boolean, json: any }>}\n * A promise that resolves with an object containing:\n * - `statusText`: The status text from the response\n * - `status`: The numeric HTTP status\n * - `ok`: A boolean indicating if the request was successful (status in the 200–299 range)\n * - `json`: The parsed JSON from the response body\n *\n * @example\n * fetch('/api')\n * .then(this.parseJSON)\n * .then(({ json }) => console.log(json));\n */\n parseJSON(response) {\n return new Promise((resolve, reject) => {\n response\n .json()\n .then((json) => {\n resolve({\n statusText: response.statusText,\n status: response.status,\n ok: response.ok,\n json,\n });\n })\n .catch(() => {\n reject(new Error('Oops! Something went wrong when handling your request.'));\n });\n });\n }\n\n /**\n * The base method for sending fetch requests. Manages headers, HTTP method,\n * and body serialization where necessary.\n *\n * @private\n * @param {string} path - The endpoint path (relative to `this.host/this.namespace`).\n * @param {string} [method='GET'] - The HTTP method (GET, POST, PUT, DELETE, PATCH).\n * @param {Object} [data={}] - The request payload. Usually includes `body`.\n * @param {Object} [options={}] - Additional fetch options (e.g. `mode`, `headers`, or `url` override).\n * @returns {Promise} A promise resolving to the parsed JSON data or rejecting with an error.\n *\n * @example\n * this.request('users', 'POST', { body: JSON.stringify({ name: 'John' }) })\n * .then(responseData => console.log(responseData));\n */\n request(path, method = 'GET', data = {}, options = {}) {\n return new Promise((resolve, reject) => {\n fetch(\n options.url || `${this.host}/${this.namespace}/${path}`, // Fallback to constructed URL if options.url is not provided\n {\n method,\n mode: options.mode || 'cors',\n headers: new Headers({\n ...(this.headers || {}),\n ...(options.headers || {}),\n }),\n ...data, // Typically { body: JSON.stringify(payload) }\n }\n )\n .then(this.parseJSON)\n .then((response) => {\n if (response.ok) {\n // If the HTTP status code is 2xx, resolve with JSON data\n return resolve(response.json);\n }\n // Otherwise, reject with error message or fallback to status text\n reject(\n new Error(\n response.json.errors \n ? response.json.errors[0] \n : response.statusText\n )\n );\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Issues a GET request to the specified path, optionally with query parameters.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [query={}] - Query parameters to append to the request URL.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the fetched data or rejects with an error.\n *\n * @example\n * // GET /users?limit=10\n * adapter.get('users', { limit: 10 })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n get(path, query = {}, options = {}) {\n const urlParams = !isBlank(query) ? new URLSearchParams(query).toString() : '';\n return this.request(`${path}${urlParams ? `?${urlParams}` : ''}`, 'GET', {}, options);\n }\n\n /**\n * Issues a POST request with a JSON body.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.post('users', { name: 'John Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n post(path, data = {}, options = {}) {\n return this.request(path, 'POST', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a PUT request with a JSON body, commonly used for full updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.put('users/123', { name: 'Jane Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n put(path, data = {}, options = {}) {\n return this.request(path, 'PUT', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a DELETE request. Note that many APIs don't require a body for DELETE.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.delete('users/123')\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n delete(path, options = {}) {\n return this.request(path, 'DELETE', {}, options);\n }\n\n /**\n * Issues a PATCH request with a JSON body, commonly used for partial updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.patch('users/123', { email: 'newemail@example.com' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n patch(path, data = {}, options = {}) {\n return this.request(path, 'PATCH', { body: JSON.stringify(data) }, options);\n }\n}\n\nexport default BrowserAdapter;","import isEmpty from './is-empty';\n\nconst isBlank = (obj) => isEmpty(obj) || (typeof obj === 'string' && /\\S/.test(obj) === false);\n\nexport default isBlank;\n","import Adapter from '../adapter';\nimport { isArray } from '../utils/array';\nimport axios from 'axios';\n\n/**\n * @class NodeAdapter\n * @extends Adapter\n *\n * @classdesc\n * The NodeAdapter extends the base Adapter class to facilitate making HTTP requests using Axios in a Node environment.\n * It provides convenient methods for all standard HTTP verbs (GET, POST, PUT, DELETE, PATCH) and supports:\n *\n * - Automatic JSON serialization and deserialization.\n * - Base URL and common headers.\n * - Interceptors for transforming responses and handling errors.\n * - Customizable headers at runtime via `setHeaders`.\n */\nclass NodeAdapter extends Adapter {\n /**\n * Creates an instance of NodeAdapter.\n *\n * @param {Object} config - Configuration object\n * @param {string} config.publicKey - The public key used for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - The default namespace or version for the API.\n *\n * @example\n * const adapter = new NodeAdapter({\n * publicKey: 'YOUR_PUBLIC_KEY',\n * host: 'https://api.yourapp.com',\n * namespace: 'v1'\n * });\n */\n constructor(config) {\n super(config);\n\n // Create a dedicated Axios instance with base URL and default headers\n this.axiosInstance = axios.create({\n baseURL: `${this.host}/${this.namespace}`,\n headers: {\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;node',\n },\n });\n\n /**\n * Sets up Axios interceptors for response success and error handling.\n * \n * Success:\n * - Returns `response.data` by default.\n * \n * Error:\n * - If the server returned a response, checks for `data.errors` or `data.error` and throws an Error accordingly.\n * - Otherwise, re-throws the original error to preserve stack trace.\n */\n this.axiosInstance.interceptors.response.use(\n /**\n * Transform successful responses by returning only `response.data`.\n *\n * @param {import('axios').AxiosResponse} response - The successful Axios response object\n * @returns {any} - The `data` property of the response, containing the actual payload\n */\n (response) => response.data,\n\n /**\n * Handle error responses, extracting relevant information from the response payload.\n *\n * @param {import('axios').AxiosError} error - The error object thrown by Axios\n * @throws {Error} - An Error instance with a message derived from the server response\n */\n (error) => {\n if (error.response) {\n const { data } = error.response;\n\n if (isArray(data.errors) && data.errors.length) {\n throw new Error(data.errors[0]);\n } else if (data.error) {\n throw new Error(data.error);\n }\n }\n throw error;\n }\n );\n }\n\n /**\n * Merges the provided headers with existing default headers.\n *\n * @param {Object} [headers={}] - Additional headers to add or override.\n * @returns {NodeAdapter} - The current instance of NodeAdapter for method chaining.\n *\n * @example\n * adapter.setHeaders({ 'X-Custom-Header': 'my-value' });\n */\n setHeaders(headers = {}) {\n this.axiosInstance.defaults.headers.common = {\n ...this.axiosInstance.defaults.headers.common,\n ...headers,\n };\n return this;\n }\n\n /**\n * A generic method to make an HTTP request with Axios.\n * This method is utilized internally by specialized request methods such as `get`, `post`, etc.\n *\n * @private\n * @param {string} method - HTTP verb (e.g., GET, POST, PUT, DELETE, PATCH).\n * @param {string} url - The URL path (relative to `baseURL`).\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request configuration.\n * @returns {Promise} - A promise resolving to the response data or rejecting with an Error.\n *\n * @example\n * // Example usage inside another method:\n * this.request('GET', '/users', { params: { limit: 50 } });\n */\n request(method, url, options = {}) {\n return this.axiosInstance.request({\n method,\n url,\n ...options,\n });\n }\n\n /**\n * Makes a GET request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [query={}] - Query parameters to include in the request URL.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.get('/users', { limit: 25 }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n get(path, query = {}, options = {}) {\n return this.request('GET', path, { params: query, ...options });\n }\n\n /**\n * Makes a POST request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The request body payload.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.post('/users', { name: 'John Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n post(path, data = {}, options = {}) {\n return this.request('POST', path, { data, ...options });\n }\n\n /**\n * Makes a PUT request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The updated data to send in the request body.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.put('/users/123', { name: 'Jane Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n put(path, data = {}, options = {}) {\n return this.request('PUT', path, { data, ...options });\n }\n\n /**\n * Makes a DELETE request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.delete('/users/123').then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n delete(path, options = {}) {\n return this.request('DELETE', path, options);\n }\n\n /**\n * Makes a PATCH request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - Partial data to update on the server.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.patch('/users/123', { email: 'new_email@example.com' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n patch(path, data = {}, options = {}) {\n return this.request('PATCH', path, { data, ...options });\n }\n}\n\nexport default NodeAdapter;","import Adapter from '../adapter';\n\nclass EmberJsAdapter extends Adapter {}\n\nexport default EmberJsAdapter;\n","'use strict';\n\n/**\n * Javascript String\n *\n * instance\n * new String('hello_world').humanize().get() => \"Hello world\"\n *\n * instance\n * const string = new String();\n * string.humanize('hello_world').get() => \"Hello world\"\n *\n * no chain\n * new String('hello_world', false).humanize() => \"Hello world\"\n *\n * static\n * String.invoke('humanize', 'hello_world') => \"Hello world\"\n *\n * exports {}\n * humanize('hello_world') => \"Hello world\"\n */\n\nexport default class String {\n constructor(string, chain = true) {\n this.str = string;\n this.chain = chain;\n }\n\n uncountableWords = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news'];\n\n pluralRules = [\n [new RegExp('(m)an$', 'gi'), '$1en'],\n [new RegExp('(pe)rson$', 'gi'), '$1ople'],\n [new RegExp('(child)$', 'gi'), '$1ren'],\n [new RegExp('^(ox)$', 'gi'), '$1en'],\n [new RegExp('(ax|test)is$', 'gi'), '$1es'],\n [new RegExp('(octop|vir)us$', 'gi'), '$1i'],\n [new RegExp('(alias|status)$', 'gi'), '$1es'],\n [new RegExp('(bu)s$', 'gi'), '$1ses'],\n [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],\n [new RegExp('([ti])um$', 'gi'), '$1a'],\n [new RegExp('sis$', 'gi'), 'ses'],\n [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'), '$1$2ves'],\n [new RegExp('(hive)$', 'gi'), '$1s'],\n [new RegExp('([^aeiouy]|qu)y$', 'gi'), '$1ies'],\n [new RegExp('(x|ch|ss|sh)$', 'gi'), '$1es'],\n [new RegExp('(matr|vert|ind)ix|ex$', 'gi'), '$1ices'],\n [new RegExp('([m|l])ouse$', 'gi'), '$1ice'],\n [new RegExp('(quiz)$', 'gi'), '$1zes'],\n [new RegExp('s$', 'gi'), 's'],\n [new RegExp('$', 'gi'), 's'],\n ];\n\n singularRules = [\n [new RegExp('(m)en$', 'gi'), '$1an'],\n [new RegExp('(pe)ople$', 'gi'), '$1rson'],\n [new RegExp('(child)ren$', 'gi'), '$1'],\n [new RegExp('([ti])a$', 'gi'), '$1um'],\n [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'), '$1$2sis'],\n [new RegExp('(hive)s$', 'gi'), '$1'],\n [new RegExp('(tive)s$', 'gi'), '$1'],\n [new RegExp('(curve)s$', 'gi'), '$1'],\n [new RegExp('([lr])ves$', 'gi'), '$1f'],\n [new RegExp('([^fo])ves$', 'gi'), '$1fe'],\n [new RegExp('([^aeiouy]|qu)ies$', 'gi'), '$1y'],\n [new RegExp('(s)eries$', 'gi'), '$1eries'],\n [new RegExp('(m)ovies$', 'gi'), '$1ovie'],\n [new RegExp('(x|ch|ss|sh)es$', 'gi'), '$1'],\n [new RegExp('([m|l])ice$', 'gi'), '$1ouse'],\n [new RegExp('(bus)es$', 'gi'), '$1'],\n [new RegExp('(o)es$', 'gi'), '$1'],\n [new RegExp('(shoe)s$', 'gi'), '$1'],\n [new RegExp('(cris|ax|test)es$', 'gi'), '$1is'],\n [new RegExp('(octop|vir)i$', 'gi'), '$1us'],\n [new RegExp('(alias|status)es$', 'gi'), '$1'],\n [new RegExp('^(ox)en', 'gi'), '$1'],\n [new RegExp('(vert|ind)ices$', 'gi'), '$1ex'],\n [new RegExp('(matr)ices$', 'gi'), '$1ix'],\n [new RegExp('(quiz)zes$', 'gi'), '$1'],\n [new RegExp('s$', 'gi'), ''],\n ];\n\n nonTitlecasedWords = ['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for'];\n\n idSuffix = new RegExp('(_ids|_id)$', 'g');\n underbar = new RegExp('_', 'g');\n spaceOrUnderbar = new RegExp('[ _]', 'g');\n uppercase = new RegExp('([A-Z])', 'g');\n underbarPrefix = new RegExp('^_');\n\n get() {\n return this.str;\n }\n\n applyRules(str, rules, skip, override) {\n if (override) {\n str = override;\n } else {\n var ignore = skip.indexOf(str.toLowerCase()) > -1;\n if (!ignore) {\n for (var x = 0; x < rules.length; x++) {\n if (str.match(rules[x][0])) {\n str = str.replace(rules[x][0], rules[x][1]);\n break;\n }\n }\n }\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.pluralize('person') -> 'people'\n String.pluralize('octopus') -> 'octopi'\n String.pluralize('Hat') -> 'Hats'\n String.pluralize('person', 'guys') -> 'guys' \n */\n pluralize(str, plural = null) {\n str = str || this.str;\n\n return this.applyRules(str, this.pluralRules, this.uncountableWords, plural);\n }\n\n /*\n String.singularize('person') -> 'person'\n String.singularize('octopi') -> 'octopus'\n String.singularize('hats') -> 'hat'\n String.singularize('guys', 'person') -> 'person'\n */\n singularize(str, singular) {\n str = str || this.str;\n\n return this.applyRules(str, this.singularRules, this.uncountableWords, singular);\n }\n\n /*\n String.camelize('message_properties') -> 'MessageProperties'\n String.camelize('message_properties', true) -> 'messageProperties'\n */\n camelize(str, lowFirstLetter) {\n str = str || this.str;\n\n let str_path = str.split('/');\n for (var i = 0; i < str_path.length; i++) {\n let str_arr = str_path[i].split('_');\n let initX = lowFirstLetter && i + 1 === str_path.length ? 1 : 0;\n\n for (let x = initX; x < str_arr.length; x++) {\n str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1);\n }\n str_path[i] = str_arr.join('');\n }\n str = str_path.join('::');\n\n // fix\n if (lowFirstLetter === true) {\n let first = str.charAt(0).toLowerCase();\n let last = str.slice(1);\n str = first + last;\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.underscore('MessageProperties') -> 'message_properties'\n String.underscore('messageProperties') -> 'message_properties'\n */\n underscore(str) {\n str = str || this.str;\n\n var str_path = str.split('::');\n for (var i = 0; i < str_path.length; i++) {\n str_path[i] = str_path[i].replace(this.uppercase, '_$1');\n str_path[i] = str_path[i].replace(this.underbarPrefix, '');\n }\n str = str_path.join('/').toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.humanize('message_properties') -> 'Message properties'\n String.humanize('message_properties') -> 'message properties'\n */\n humanize(str, lowFirstLetter) {\n str = str || this.str;\n\n var str = str.toLowerCase();\n str = str.replace(this.idSuffix, '');\n str = str.replace(this.underbar, ' ');\n if (!lowFirstLetter) {\n str = this.capitalize(str);\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.capitalize('message_properties') -> 'Message_properties'\n String.capitalize('message properties') -> 'Message properties'\n */\n capitalize(str) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.dasherize('message_properties') -> 'message-properties'\n String.dasherize('message properties') -> 'message-properties'\n */\n dasherize(str) {\n str = str || this.str;\n\n str = str.replace(this.spaceOrUnderbar, '-');\n str = str.toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.normify('message_properties') -> 'Message Properties'\n String.normify('message properties') -> 'Message Properties'\n Inflactor.normify('Message_propertyId', true) -> 'Message Properties Id'\n */\n normify(str, allFirstUpper) {\n str = str || this.str;\n\n //var str = str.toLowerCase();\n if (allFirstUpper === true) {\n str = this.camelize(str);\n str = this.underscore(str);\n } else {\n str = str.toLowerCase();\n }\n\n str = str.replace(this.underbar, ' ');\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var d = str_arr[x].split('-');\n for (var i = 0; i < d.length; i++) {\n if (this.nonTitlecasedWords.indexOf(d[i].toLowerCase()) < 0) {\n d[i] = this.capitalize(d[i]);\n }\n }\n str_arr[x] = d.join('-');\n }\n str = str_arr.join(' ');\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.demodulize('Message::Bus::Properties') -> 'Properties'\n */\n demodulize(str) {\n str = str || this.str;\n\n var str_arr = str.split('::');\n str = str_arr[str_arr.length - 1];\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.tableize('MessageBusProperty') -> 'message_bus_properties'\n */\n tableize(str) {\n str = str || this.str;\n\n str = this.pluralize(this.underscore(str));\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.classify('message_bus_properties') -> 'MessageBusProperty'\n */\n classify(str) {\n str = str || this.str;\n\n str = this.singularize(this.camelize(str));\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.foreignKey('MessageBusProperty') -> 'message_bus_property_id'\n String.foreignKey('MessageBusProperty', true) -> 'message_bus_propertyid'\n */\n foreignKey(str, dropIdUbar = false) {\n str = str || this.str;\n\n str = this.underscore(this.demodulize(str)) + (dropIdUbar ? '' : '_') + 'id';\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.ordinalize('the 1 pitch') -> 'the 1st pitch'\n */\n ordinalize(str) {\n str = str || this.str;\n\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var i = parseInt(str_arr[x]);\n if (i === NaN) {\n var ltd = str_arr[x].substring(str_arr[x].length - 2);\n var ld = str_arr[x].substring(str_arr[x].length - 1);\n var suf = 'th';\n if (ltd != '11' && ltd != '12' && ltd != '13') {\n if (ld === '1') {\n suf = 'st';\n } else if (ld === '2') {\n suf = 'nd';\n } else if (ld === '3') {\n suf = 'rd';\n }\n }\n str_arr[x] += suf;\n }\n }\n str = str_arr.join(' ');\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /**\n * @method invoke\n **/\n static invoke() {\n const argz = Object.values(arguments);\n const instance = new String(null, false);\n const method = arguments[0];\n argz.shift();\n\n if (typeof instance[method] === 'function') {\n return instance[method](...argz);\n }\n\n return null;\n }\n}\n\nconst pluralize = function () {\n const argz = ['pluralize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst singularize = function () {\n const argz = ['singularize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst humanize = function () {\n const argz = ['humanize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst underscore = function () {\n const argz = ['underscore', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst camelize = function () {\n const argz = ['camelize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst capitalize = function () {\n const argz = ['capitalize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst dasherize = function () {\n const argz = ['dasherize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst normify = function () {\n const argz = ['normify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst demodulize = function () {\n const argz = ['demodulize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst tableize = function () {\n const argz = ['tableize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst classify = function () {\n const argz = ['classify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nconst foreignKey = function () {\n const argz = ['foreignKey', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport { pluralize, singularize, humanize, underscore, camelize, capitalize, dasherize, normify, demodulize, tableize, classify, foreignKey };\n","import { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization } from './resources';\nimport { BrowserAdapter, NodeAdapter, EmberJsAdapter } from './adapters';\nimport { pluralize, singularize } from './utils/string';\n\nconst resources = {\n Contact,\n Driver,\n Entity,\n Order,\n Payload,\n Place,\n TrackingStatus,\n Vehicle,\n Vendor,\n Waypoint,\n Zone,\n ServiceArea,\n ServiceRate,\n ServiceQuote,\n Organization,\n};\n\nconst adapters = {\n BrowserAdapter,\n NodeAdapter,\n EmberJsAdapter,\n};\n\nclass Resolver {\n constructor() {\n this.resources = resources;\n this.adapters = adapters;\n\n return this.lookup(...arguments);\n }\n\n lookup(type, className) {\n const key = pluralize(type);\n const params = [...arguments].slice(2);\n\n if (!this[key]) {\n throw new Error('Attempted to resolve invalid type');\n }\n\n if (!this[key][className]) {\n throw new Error(`No ${singularize(type)} named ${className} to resolve`);\n }\n\n return new this[key][className](...params);\n }\n}\n\nconst lookup = function () {\n return new Resolver(...arguments);\n};\n\nexport { Resolver, lookup };\nexport default Resolver;\n","import { lookup } from './resolver';\nimport { Collection, StoreActions, detectAdapter, isResource } from './utils';\nimport { isArray } from './utils/array';\nimport { classify, pluralize } from './utils/string';\n\nconst extendStoreActions = (store, actions = []) => {\n store.actions = isArray(actions) ? actions : [actions];\n\n if (isArray(actions)) {\n for (const element of actions) {\n const action = element;\n\n store.extendActions(action);\n }\n return;\n }\n\n if (actions instanceof StoreActions) {\n actions.extend(store);\n }\n\n return store;\n};\n\nconst afterFetch = (store, json) => {\n if (typeof store.options.onAfterFetch === 'function') {\n store.options.onAfterFetch(json);\n }\n\n if (isArray(json)) {\n const serialized = [];\n\n for (const element of json) {\n serialized.push(store.afterFetch(element));\n }\n\n return new Collection(...serialized);\n }\n\n const resourceInstance = store.serialize(json);\n return store.deposit(resourceInstance);\n};\n\nclass Store {\n constructor(resource, adapter, options = {}) {\n this.resource = resource;\n this.adapter = adapter || detectAdapter();\n this.namespace = pluralize(resource);\n this.storage = new Collection();\n this.options = options;\n this.extendActions(options.actions);\n }\n\n extendActions(actions = []) {\n return extendStoreActions(this, actions);\n }\n\n deposit(resourceInstance) {\n // this.storage[this.namespace].pushObject(resourceInstance);\n\n return resourceInstance;\n }\n\n serialize(json) {\n return lookup('resource', classify(this.resource), json, this.adapter);\n }\n\n afterFetch(json) {\n return afterFetch(this, json);\n }\n\n create(attributes = {}, options = {}) {\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.post(`${this.namespace}`, attributes, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n update(id, attributes = {}, options = {}) {\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.put(`${this.namespace}/${id}`, attributes, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n findRecord(id, options = {}) {\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.get(`${this.namespace}/${id}`, {}, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n findAll(options = {}) {\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.get(`${this.namespace}`, {}, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n query(query = {}, options = {}) {\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.get(`${this.namespace}`, query, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n queryRecord(query = {}, options = {}) {\n query.single = true;\n\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.get(`${this.namespace}`, query, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n\n destroy(record, options = {}) {\n const id = isResource(record) ? record.getAttribute('id') : record;\n\n return new Promise(async (resolve, reject) => {\n const response = await this.adapter.delete(`${this.namespace}/${id}`, {}, options).then(this.afterFetch.bind(this)).catch(reject);\n\n resolve(response);\n });\n }\n}\n\nexport default Store;\n\nexport { afterFetch, extendStoreActions };\n","import Store from './store';\nimport Resource from './resource';\nimport { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization } from './resources';\nimport { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter } from './adapters';\nimport { isNodeEnvironment, detectAdapter, isLatitude, isLongitude, Point, isResource, GoogleAddress, Collection, StoreActions } from './utils';\nimport { pluralize, singularize, classify, dasherize, camelize } from './utils/string';\nimport { extendStoreActions } from './store';\nimport { orderActions } from './resources/order';\nimport { driverActions } from './resources/driver';\nimport { organizationActions } from './resources/organization';\nimport { lookup } from './resolver';\n\n/**\n * // instance\n * const fleetbase = new Fleetbase();\n *\n * const contact = fleetbase.contacts.create({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * constact.update({ name: 'Hollywood Ron' });\n *\n * // export\n * import { Contact } from '@fleetbase/sdk';\n *\n * const contact = new Contact({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * contact.save();\n */\n\nexport default class Fleetbase {\n /**\n * Builds an instance of the Fleetbase SDK\n *\n * @param {String} publicKey The public key issued\n * @param {Object} config The version of resource to access\n * @param {Boolean} debug Debug mode for SDK\n * @return {Fleetbase} Instance\n */\n constructor(publicKey, config = {}, debug = false) {\n this.version = config.version ?? 'v1';\n this.options = {\n version: this.version,\n host: config.host ?? 'https://api.fleetbase.io',\n namespace: config.namespace ?? this.version,\n debug,\n publicKey,\n };\n\n if (typeof publicKey !== 'string' || publicKey.length === 0) {\n throw new Error('⚠️ Invalid public key given to Fleetbase SDK');\n }\n\n if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) {\n throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!');\n }\n\n this.adapter = config.adapter || detectAdapter(this.options);\n\n this.orders = new Store('order', this.adapter).extendActions(orderActions);\n this.entities = new Store('entity', this.adapter);\n this.places = new Store('place', this.adapter);\n this.drivers = new Store('driver', this.adapter).extendActions(driverActions);\n this.vehicles = new Store('vehicle', this.adapter);\n this.vendors = new Store('vendor', this.adapter);\n this.contacts = new Store('contact', this.adapter);\n this.organizations = new Store('organization', this.adapter).extendActions(organizationActions);\n }\n\n static newInstance() {\n return new Fleetbase(...arguments);\n }\n\n setAdapter(adapter) {\n this.adapter = adapter;\n }\n\n getAdapter() {\n return this.adapter;\n }\n}\n\nexport {\n Store,\n Resource,\n Contact,\n Driver,\n Entity,\n Order,\n Payload,\n Place,\n TrackingStatus,\n Vehicle,\n Vendor,\n Waypoint,\n Zone,\n ServiceArea,\n ServiceRate,\n ServiceQuote,\n Organization,\n BrowserAdapter,\n NodeAdapter,\n EmberJsAdapter,\n Adapter,\n isNodeEnvironment,\n isLatitude,\n isLongitude,\n Point,\n isResource,\n GoogleAddress,\n Collection,\n StoreActions,\n extendStoreActions,\n pluralize,\n singularize,\n classify,\n dasherize,\n camelize,\n lookup,\n};\n","export default function isLatitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 90;\n}\n","export default function isLongitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 180 && Math.abs(coordinate) >= 90;\n}\n"],"names":["isArray","Array","CHUNK_SIZE","replace","array","start","deleteCount","items","arguments","length","undefined","splice","apply","concat","_toConsumableArray","i","chunk","slice","isCollection","arr","identityFunction","item","mixed","Collection","objectAt","index","iter","key","value","Boolean","findIndex","predicate","startAt","len","indexOf","val","withNaNCheck","insertAt","_Array","_len","_key","_classCallCheck","_assertThisInitialized","_callSuper","this","_inherits","_createClass","get","indexes","_this2","map","idx","object","callback","bind","target","cb","methodName","_len2","args","_key2","ret","forEach","_item$methodName","push","call","filter","sortKeys","sort","a","b","_step","_iterator","_createForOfIteratorHelper","s","n","done","propA","propB","compareValue","compare","err","e","f","seen","Set","getter","has","add","uniqBy","includes","removeAt","obj","objects","toArray","reverse","clear","loc","removeObject","pushObject","_this3","addObject","_wrapNativeSuper","isEmpty","none","size","objectType","_typeof","isResource","record","Resource","isNodeEnvironment","_process","_process$release","_window","process","env","release","name","search","window","navigator","product","detectAdapter","options","lookup","GoogleAddress","place","geometry","components","parseComponents","attributes","parseProperties","_this$place","address_components","reduce","acc","data","types","type","_this$geometry","streetNumber","streetName","coordinates","location","Object","values","city","or","county","stateShort","stateLong","countryShort","country","countryLong","postalCode","address","join","pkey","short","short_name","long_name","_objectSpread","Point","latitude","longitude","coorindates","lat","lng","serialize","json","_json$coordinates","_slicedToArray","getResolved","func","path","resolved","current","isObject","isFunction","pathArray","split","newPath","set","iterations","StoreActions","actions","binding","action","fn","adapter","resource","dirtyAttributes","changes","isLoading","isSaving","isDestroying","isReloading","version","setAdapter","_this$options","store","Store","onAfterFetch","syncAttributes","getAttribute","_this","mergeAttributes","setFlags","create","then","response","update","id","destroy","_this4","findRecord","reset","flags","state","validFlags","flag","Error","attribues","getAttributes","onlyDirty","savedirty","dirtyAttributeKeys","keys","isAttributeFilled","Date","hasAttributes","isNew","isLoaded","_this$attributes","_this5","property","_this$dirtyAttributes","_this$attributes$prop","setAttributes","previousValue","changedAt","setAttribute","attribute","_this$attributes2","defaultValue","_this$attributes3","properties","attributeKeys","every","prop","hasAttribute","_this6","prototype","_value","_value2","_this$attributes4","modelAttributes","orderActions","getDistanceAndTime","params","namespace","getNextActivity","dispatch","post","afterFetch","updateActivity","setDestination","destinationId","captureQrCode","subjectId","captureSignature","complete","cancel","Order","_Resource","isStarted","isCanceled","isCompleted","Payload","entity","waypoints","Entity","Place","_this$getAttribute","_this$getAttribute2","owner","googleAddress","_googleAddress$getAtt2","street1","street2","province","postal_code","neighborhood","district","building","phone","security_access_code","Waypoint","_Place","TrackingStatus","Vehicle","organizationActions","Organization","serializeOrganizations","organizationJson","driverActions","login","identity","password","test","isPhone","verifyCode","code","track","listOrganizations","switchOrganization","currentOrganization","retrieve","syncDevice","Driver","organizationId","next","Vendor","Contact","Zone","ServiceArea","ServiceRate","ServiceQuote","Adapter","config","host","headers","BrowserAdapter","_Adapter","setHeaders","Authorization","publicKey","Promise","resolve","reject","statusText","status","ok","method","fetch","url","mode","Headers","parseJSON","errors","error","query","urlParams","URLSearchParams","toString","request","body","JSON","stringify","NodeAdapter","axiosInstance","axios","baseURL","interceptors","use","defaults","common","EmberJsAdapter","String","string","chain","_defineProperty","RegExp","str","rules","skip","override","toLowerCase","x","match","plural","applyRules","pluralRules","uncountableWords","singular","singularRules","lowFirstLetter","str_path","str_arr","charAt","toUpperCase","substring","first","last","uppercase","underbarPrefix","idSuffix","underbar","capitalize","spaceOrUnderbar","allFirstUpper","camelize","underscore","d","nonTitlecasedWords","pluralize","singularize","dropIdUbar","demodulize","NaN","parseInt","ltd","ld","suf","argz","instance","shift","invoke","classify","resources","adapters","Resolver","className","_construct","extendStoreActions","extend","extendActions","storage","resourceInstance","_step2","serialized","_iterator2","element","deposit","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","sent","stop","_x","_x2","_ref2","_callee2","_context2","put","_x3","_x4","_ref3","_callee3","_context3","_x5","_x6","_ref4","_callee4","_context4","_x7","_x8","_ref5","_callee5","_context5","_x9","_x10","single","_ref6","_callee6","_context6","_x11","_x12","_this7","_ref7","_callee7","_context7","_x13","_x14","Fleetbase","_config$version","_config$host","_config$namespace","debug","startsWith","orders","entities","places","drivers","vehicles","vendors","contacts","organizations","coordinate","isFinite","Math","abs"],"mappings":"6sYAAA,IAAQA,EAAYC,MAAZD,8CCOFE,EAAa,IAIbC,EAAU,SAACC,EAAOC,EAAOC,GAA4B,IAAfC,EAAKC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAChD,GAAIR,EAAQI,GACR,GAAIG,EAAME,QAAUP,EAChBE,EAAMO,OAAMC,MAAZR,EAAaC,CAAAA,EAAOC,GAAWO,OAAAC,EAAKP,SACjC,CACHH,EAAMO,OAAON,EAAOC,GAEpB,IAAK,IAAIS,EAAI,EAAGA,EAAIR,EAAME,OAAQM,GAAKb,EAAY,CAC/C,IAAIc,EAAQT,EAAMU,MAAMF,EAAGA,EAAIb,GAC/BE,EAAMO,OAAMC,MAAZR,GAAaC,EAAQU,EAAG,GAACF,OAAAC,EAAKE,IAClC,CACJ,MACOE,EAAaC,MACpBf,EAAMD,QAAQE,EAAOC,EAAaC,EAE1C,EAEMa,EAAmB,SAACC,GAAI,OAAKA,CAAI,EAkBjCH,EAAe,SAACI,GAAK,OAAKA,aAAiBC,CAAU,EAErDC,EAAW,SAACpB,EAAOqB,GACrB,OAAIzB,EAAQI,GACDA,EAAMqB,GACNP,EAAad,GACbA,EAAMoB,SAASC,GAGnB,IACX,EAEMC,EAAO,SAACC,EAAKC,GAEf,OADyC,IAArBpB,EAAUC,OACP,SAACY,GAAI,OAAKO,IAAUP,EAAKM,EAAI,EAAG,SAACN,GAAI,OAAKQ,QAAQR,EAAKM,GAAK,CACvF,EAEMG,EAAY,SAAC1B,EAAO2B,GAEtB,IAFiD,IAAhBC,EAAOxB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACvCyB,EAAM7B,EAAMK,OACPgB,EAAQO,EAASP,EAAQQ,EAAKR,IAAS,CAE5C,GAAIM,EADOP,EAASpB,EAAOqB,GACPA,EAAOrB,GACvB,OAAOqB,CAEf,CACA,OAAQ,CACZ,EAmBMS,EAAU,SAAC9B,EAAO+B,GAAmC,IAA9BH,EAAOxB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAG4B,EAAY5B,UAAAC,OAAAD,EAAAA,kBAAAE,EAC9CuB,EAAM7B,EAAMK,OAQhB,OANIuB,EAAU,IACVA,GAAWC,GAKRH,EAAU1B,EADDgC,GAAgBD,GAAQA,EAAM,SAACd,GAAI,OAAKA,GAASA,CAAI,EAAG,SAACA,GAAI,OAAKA,IAASc,CAAG,EAC3DH,EACvC,EAOMK,EAAW,SAACjC,EAAOqB,EAAOJ,GAE5B,OADAlB,EAAQC,EAAOqB,EAAO,EAAG,CAACJ,IACnBA,CACX,EAEME,WAAUe,GACZ,SAAAf,IAAsB,IAAA,IAAAgB,EAAA/B,UAAAC,OAAPF,EAAKN,IAAAA,MAAAsC,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAALjC,EAAKiC,GAAAhC,UAAAgC,GAKf,OALeC,OAAAlB,GAKfmB,EAJG1C,EAAQQ,UAAU,IAClBmC,EAAAC,KAAArB,EAAAT,EAASN,UAAU,KAEnBmC,EAAApB,KAAAA,EAASf,WAEjB,CAAC,OAAAqC,EAAAtB,EAAAe,GAAAQ,EAAAvB,EAAA,CAAA,CAAAI,IAAA,WAAAoB,IAED,WACI,OAAOH,KAAKnC,OAAS,CACzB,GAAC,CAAAkB,IAAA,QAAAoB,IAED,WACI,OAAuB,IAAhBH,KAAKnC,MAChB,GAAC,CAAAkB,IAAA,QAAAoB,IAED,WACI,OAAOvB,EAASoB,KAAM,EAC1B,GAAC,CAAAjB,IAAA,OAAAoB,IAED,WACI,OAAOvB,EAASoB,KAAMA,KAAKnC,OAAS,EACxC,GAAC,CAAAkB,IAAA,UAAAC,MAED,SAAQvB,EAAOC,GAGX,OAFAH,EAAQyC,KAAMvC,EAAOC,EADQE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IAGzBoC,IACX,GAAC,CAAAjB,IAAA,YAAAC,MAED,SAAUoB,GAAS,IAAAC,EAAAL,KACf,OAAOI,EAAQE,KAAI,SAACC,GAAG,OAAK3B,EAASyB,EAAME,KAC/C,GAAC,CAAAxB,IAAA,WAAAC,MAED,SAASH,GACL,OAAOD,EAASoB,KAAMnB,EAC1B,GAAC,CAAAE,IAAA,UAAAC,MAED,SAAQwB,EAAQpB,GACZ,OAAOE,EAAQU,KAAMQ,EAAQpB,GAAS,EAC1C,GAAC,CAAAL,IAAA,cAAAC,MAED,SAAYwB,EAAQpB,GAChB,IAAIC,EAAMW,KAAKnC,aAECC,IAAZsB,GAAyBA,GAAWC,KACpCD,EAAUC,EAAM,GAGhBD,EAAU,IACVA,GAAWC,GAGf,IAAK,IAAIkB,EAAMnB,EAASmB,GAAO,EAAGA,IAC9B,GAAI3B,EAASoB,KAAMO,KAASC,EACxB,OAAOD,EAIf,OAAQ,CACZ,GAAC,CAAAxB,IAAA,WAAAC,MAED,SAASwB,EAAQpB,GACb,OAAiD,IAA1CE,EAAQU,KAAMQ,EAAQpB,GAAS,EAC1C,GAAC,CAAAL,IAAA,SAAAC,MAED,WACI,OA3GMxB,EA2GMwC,KA3GCS,EA2GK3B,EAAId,WAAA,EAAIJ,WA1G1BuB,EAAYsB,EAASC,KAAKC,IAEZ,KADd9B,EAAQK,EAAU1B,EAAO2B,EAAW,SAClBrB,EAAYc,EAASpB,EAAOqB,GAHzC,IAACrB,EAAOiD,EAAUE,EACvBxB,EACAN,CA0GJ,GAAC,CAAAE,IAAA,cAAAC,MAED,WACI,OAAOE,EAAUc,KAAMlB,EAAId,WAAA,EAAIJ,WACnC,GAAC,CAAAmB,IAAA,UAAAC,MAED,WACI,OAxGOxB,EAwGMwC,KAxGCS,EAwGK3B,EAAId,WAAA,EAAIJ,WAvG3BgD,EAAKH,EAASC,KAAKC,IAEoB,IAApCzB,EAAU1B,GADD,SAACiB,EAAMI,EAAOrB,GAAK,OAAMoD,EAAGnC,EAAMI,EAAOrB,EAAM,GAC5B,GAHzB,IAACA,EAAOiD,EAAUE,EACxBC,CAwGJ,GAAC,CAAA7B,IAAA,QAAAC,MAED,WACI,OAjHKxB,EAiHMwC,KAjHCS,EAiHK3B,EAAId,WAAA,EAAIJ,WAhHzBuB,EAAYsB,EAASC,KAAKC,IACa,IAApCzB,EAAU1B,EAAO2B,EAAW,GAF3B,IAAC3B,EAAOiD,EAAUE,EACtBxB,CAiHJ,GAAC,CAAAJ,IAAA,SAAAC,MAED,SAAO6B,GAAqB,IAAAC,IAAAA,EAAAlD,UAAAC,OAANkD,MAAI1D,MAAAyD,EAAAA,EAAAA,OAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJD,EAAIC,EAAApD,GAAAA,UAAAoD,GACtB,IAAIC,EAAM,GAIV,OAFAjB,KAAKkB,SAAQ,SAACzC,GAAI,IAAA0C,EAAA,OAAKF,EAAIG,KAAqB,QAAjBD,EAAC1C,EAAKoC,UAAW,IAAAM,OAAA,EAAhBA,EAAAE,KAAArD,MAAAmD,EAAA,CAAA1C,GAAIR,OAAkB8C,QAE/CE,CACX,GAAC,CAAAlC,IAAA,UAAAC,MAED,WACI,OAAOgB,KAAKM,KAAI,SAAC7B,GAAI,OAAKA,IAC9B,GAAC,CAAAM,IAAA,UAAAC,MAED,WACI,OAAOgB,KAAKsB,QAAO,SAACtC,GAAK,OAAc,MAATA,IAClC,GAAC,CAAAD,IAAA,SAAAC,MAED,WACI,IAAIuC,EAAW3D,UAEf,OAAOoC,KAAKwB,MAAK,SAACC,EAAGC,GAAM,IACOC,EADPC,EAAAC,EACDN,GAAQ,IAA9B,IAAAK,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAgC,CAAA,IACxBjD,EADU4C,EAAA3C,MAEViD,EAAQR,EAAE1C,GACVmD,EAAQR,EAAE3C,GAEVoD,EAAeC,QAAQH,EAAOC,GAElC,GAAIC,EACA,OAAOA,CAEf,CAAC,CAAA,MAAAE,GAAAT,EAAAU,EAAAD,EAAA,CAAA,QAAAT,EAAAW,GAAA,CACD,OAAO,CACX,GACJ,GAAC,CAAAxD,IAAA,SAAAC,MAED,SAAOD,GACH,OA1MO,SAACvB,GAAkC,IAA3BuB,EAAGnB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGY,EACrByC,EAAM,GACNuB,EAAO,IAAIC,IACXC,EAAwB,mBAAR3D,EAAqBA,EAAM,SAACN,GAAI,OAAK0B,IAAI1B,EAAMM,EAAI,EAUvE,OARAvB,EAAM0D,SAAQ,SAACzC,GACX,IAAIc,EAAMmD,EAAOjE,GACZ+D,EAAKG,IAAIpD,KACViD,EAAKI,IAAIrD,GACT0B,EAAIG,KAAK3C,GAEjB,IAEOwC,CACX,CA4Le4B,CAAO7C,KAAMjB,EACxB,GAAC,CAAAA,IAAA,UAAAC,MAED,SAAQA,GACJ,IAAKgB,KAAK8C,SAAS9D,GACf,OAAOgB,KAIX,IAAIb,EAAYH,GAAUA,EAAQ,SAACP,GAAI,OAAKA,IAASO,CAAK,EAAG,SAACP,GAAI,OAAKA,GAASA,CAAI,EACpF,OAAOuB,KAAKsB,OAAOnC,EACvB,GAAC,CAAAJ,IAAA,QAAAC,MAED,WACI,IAAIK,EAAMW,KAAKnC,OACf,OAAY,IAARwB,GAIJW,KAAKzC,QAAQ,EAAG8B,EAAK,IAHVW,IAKf,GAAC,CAAAjB,IAAA,WAAAC,MAED,SAASuB,EAAKC,GAEV,OADAf,EAASO,KAAMO,EAAKC,GACbR,IACX,GAAC,CAAAjB,IAAA,YAAAC,MAED,SAAUuB,EAAKC,GACX,OAAOR,KAAKzC,QAAQgD,EAAK,EAAG,CAACC,GACjC,GAAC,CAAAzB,IAAA,WAAAC,MAED,SAASvB,EAAO4B,GACZ,OAlKS,SAAC7B,EAAOqB,GAErB,OADAtB,EAAQC,EAAOqB,EADgBjB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACP,IACpBJ,CACX,CA+JeuF,CAAS/C,KAAMvC,EAAO4B,EACjC,GAAC,CAAAN,IAAA,aAAAC,MAED,SAAWgE,GACP,OAAOhD,KAAKP,SAASO,KAAKnC,OAAQmF,EACtC,GAAC,CAAAjE,IAAA,cAAAC,MAED,SAAYiE,GAER,OADAjD,KAAKzC,QAAQyC,KAAKnC,OAAQ,EAAGoF,GACtBjD,IACX,GAAC,CAAAjB,IAAA,YAAAC,MAED,WACI,IAAIK,EAAMW,KAAKnC,OACf,GAAY,IAARwB,EACA,OAAO,KAGX,IAAI4B,EAAMrC,EAASoB,KAAMX,EAAM,GAE/B,OADAW,KAAK+C,SAAS1D,EAAM,EAAG,GAChB4B,CACX,GAAC,CAAAlC,IAAA,cAAAC,MAED,WACI,GAAoB,IAAhBgB,KAAKnC,OACL,OAAO,KAGX,IAAIoD,EAAMrC,EAASoB,KAAM,GAEzB,OADAA,KAAK+C,SAAS,GACP9B,CACX,GAAC,CAAAlC,IAAA,gBAAAC,MAED,SAAcgE,GACV,OAAOvD,EAASO,KAAM,EAAGgD,EAC7B,GAAC,CAAAjE,IAAA,iBAAAC,MAED,SAAeiE,GAEX,OADAjD,KAAKzC,QAAQ,EAAG,EAAG0F,GACZjD,IACX,GAAC,CAAAjB,IAAA,iBAAAC,MAED,WACI,IAAIK,EAAMW,KAAKnC,OACf,GAAY,IAARwB,EACA,OAAOW,KAGX,IAAIiD,EAAUjD,KAAKkD,UAAUC,UAE7B,OADAnD,KAAKzC,QAAQ,EAAG8B,EAAK4D,GACdjD,IACX,GAAC,CAAAjB,IAAA,aAAAC,MAED,SAAWiE,GACP,GAAuB,IAAnBA,EAAQpF,OACR,OAAOmC,KAAKoD,QAGhB,IAAI/D,EAAMW,KAAKnC,OAEf,OADAmC,KAAKzC,QAAQ,EAAG8B,EAAK4D,GACdjD,IACX,GAAC,CAAAjB,IAAA,eAAAC,MAED,SAAagE,GAET,IADA,IAAIK,EAAMrD,KAAKnC,QAAU,IAChBwF,GAAO,GAAG,CACCzE,EAASoB,KAAMqD,KAEbL,GACdhD,KAAK+C,SAASM,EAEtB,CACA,OAAOrD,IACX,GAAC,CAAAjB,IAAA,gBAAAC,MAED,SAAciE,GACV,IAAK,IAAI9E,EAAI8E,EAAQpF,OAAS,EAAGM,GAAK,EAAGA,IACrC6B,KAAKsD,aAAaL,EAAQ9E,IAG9B,OAAO6B,IACX,GAAC,CAAAjB,IAAA,YAAAC,MAED,SAAUgE,GAON,OANehD,KAAK8C,SAASE,IAGzBhD,KAAKuD,WAAWP,GAGbhD,IACX,GAAC,CAAAjB,IAAA,aAAAC,MAED,SAAWiE,GAAS,IAAAO,EAAAxD,KAEhB,OADAiD,EAAQ/B,SAAQ,SAAC8B,GAAG,OAAKQ,EAAKC,UAAUT,MACjChD,IACX,IAAC,EAAA0D,EAxPoBrG,QCjHnBsG,EAAU,SAACX,GACb,IAAMY,EAAOZ,QACb,GAAIY,EACA,OAAOA,EAGX,GAAwB,iBAAbZ,EAAIa,KACX,OAAQb,EAAIa,KAGhB,IAAMC,EAAUC,EAAUf,GAE1B,GAAmB,WAAfc,EAAyB,CACzB,IAAQD,EAASb,EAATa,KACR,GAAoB,iBAATA,EACP,OAAQA,CAEhB,CAEA,GAA0B,iBAAfb,EAAInF,QAAsC,aAAfiG,EAClC,OAAQd,EAAInF,OAGhB,GAAmB,WAAfiG,EAAyB,CACzB,IAAQjG,EAAWmF,EAAXnF,OACR,GAAsB,iBAAXA,EACP,OAAQA,CAEhB,CAEA,OAAO,CACX,EC7Be,SAASmG,EAAWC,GAC/B,OAAOA,aAAkBC,CAC7B,CCJA,ICKMC,EAAoB,WAAM,IAAAC,EAAAC,EAAAC,EAC5B,QACuB,oBAAZC,SACkB,WAAxBR,EAAcK,QAAdA,EAAOG,eAAAH,IAAOA,OAAPA,EAAAA,EAASI,OAAqE,KAAlC,QAAfH,EAAAE,QAAQE,eAAO,IAAAJ,WAAAA,EAAfA,EAAiBK,YAAI,IAAAL,OAAA,EAArBA,EAAuBM,OAAO,gBAChD,oBAAXC,QAAyD,iBAAzB,QAANN,EAAAM,cAAM,IAAAN,GAAWA,QAAXA,EAANA,EAAQO,qBAASP,SAAjBA,EAAmBQ,SAE7D,ECRMC,EAAgB,WAAkB,IAAjBC,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC/B,OAAIuG,IACOc,GAAO,UAAW,cAAeD,GAGrCC,GAAO,UAAW,iBAAkBD,EAC/C,ECTQ5H,EAAYC,MAAZD,QAEF8H,EAAa,WAMd,OAAAhF,GALD,SAAAgF,EAAYC,GAAOtF,OAAAqF,GACflF,KAAKmF,MAAQA,EACbnF,KAAKoF,SAAWD,aAAK,EAALA,EAAOC,SACvBpF,KAAKqF,WAAarF,KAAKsF,kBACvBtF,KAAKuF,WAAavF,KAAKwF,iBAC3B,GAAC,CAAA,CAAAzG,IAAA,QAAAC,MAED,WACIgB,KAAKsF,kBACLtF,KAAKwF,iBACT,GAAC,CAAAzG,IAAA,kBAAAC,MAED,WAAkB,IAAAyG,EAQd,QAP8B,QAAVA,EAAIzF,KAACmF,aAAK,IAAAM,OAAA,EAAVA,EAAYC,qBAAsB,IAAIC,QAAO,SAAUC,EAAKC,GAI5E,OAHAA,EAAKC,MAAM5E,SAAQ,SAAU6E,GACzBH,EAAIG,GAAQF,CAChB,IACOD,CACV,GAAE,GAGP,GAAC,CAAA7G,IAAA,kBAAAC,MAED,WAAkB,IAAAgH,EACRT,EAAa,CACfU,aAAcjG,KAAKG,IAAI,iBACvB+F,WAAYlG,KAAKG,IAAI,SACrBgG,YAA0BH,QAAbA,EAAAhG,KAAKoF,gBAALY,IAAaA,GAAbA,EAAeI,SAAWC,OAAOC,OAAOtG,KAAKoF,SAASgB,UAAY,CAAC,EAAG,GACnFG,KAAMvG,KAAKwG,GAAG,CAAC,WAAY,cAAe,sBAAuB,eAAgB,8BAA+B,gCAChHC,OAAQzG,KAAKG,IAAI,+BACjBuG,WAAY1G,KAAKG,IAAI,+BAA+B,GACpDwG,UAAW3G,KAAKG,IAAI,+BACpByG,aAAc5G,KAAKG,IAAI,WAAW,GAClC0G,QAAS7G,KAAKG,IAAI,WAAW,GAC7B2G,YAAa9G,KAAKG,IAAI,WACtB4G,WAAY/G,KAAKG,IAAI,gBAKzB,OAFAoF,EAAWyB,QAAU,CAACzB,EAAWU,aAAcV,EAAWW,YAAY5E,OAAOrC,SAASgI,KAAK,KAEpF1B,CACX,GAAC,CAAAxG,IAAA,MAAAC,MAED,WACI,OAAOgB,KAAKuF,UAChB,GAAC,CAAAxG,IAAA,KAAAC,MAED,WAAc,IACgB2C,EADlBC,EAAAC,EAALjE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACoB,IAA1B,IAAAgE,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA4B,CAAA,IAClBjD,EADQ4C,EAAA3C,MAGd,GAAI5B,EAAQ2B,GAAZ,CACI,IAAMmI,EAAOnI,EAAI,GACXoI,EAAQpI,EAAI,GAElB,GAAIiB,KAAK2C,IAAIuE,GACT,OAAOlH,KAAKG,IAAI+G,EAAMC,EAI9B,MAEA,GAAInH,KAAK2C,IAAI5D,GACT,OAAOiB,KAAKG,IAAIpB,EAExB,CAAC,CAAA,MAAAsD,GAAAT,EAAAU,EAAAD,EAAA,CAAA,QAAAT,EAAAW,GAAA,CAED,OAAO,IACX,GAAC,CAAAxD,IAAA,MAAAC,MAED,SAAID,GACA,OAAOA,KAAOiB,KAAKqF,UACvB,GAAC,CAAAtG,IAAA,MAAAC,MAED,SAAID,GAAoB,IAAfoI,EAAKvJ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACV,OAAMmB,KAAOiB,KAAKqF,WAIX8B,EAAQnH,KAAKqF,WAAWtG,GAAKqI,WAAapH,KAAKqF,WAAWtG,GAAKsI,UAH3D,IAIf,GAAC,CAAAtI,IAAA,gBAAAC,MAED,WAA+B,IAAjBuG,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAGzB,OAFAoC,KAAKuF,WAAU+B,EAAAA,EAAQ,CAAA,EAAAtH,KAAKuF,YAAeA,GAEpCvF,IACX,GAAC,CAAAjB,IAAA,eAAAC,MAED,SAAaD,EAAKC,GAGd,OAFAgB,KAAKuF,WAAWxG,GAAOC,EAEhBgB,IACX,GAAC,CAAAjB,IAAA,eAAAC,MAED,SAAaD,GACT,OAAOiB,KAAKuF,WAAWxG,IAAQ,IACnC,IAAC,CAjGc,GCFEwI,EAAK,WACtB,SAAAA,IAAyC,IAA7BC,EAAQ5J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAG6J,EAAS7J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAACiC,OAAA0H,GACnCvH,KAAK+F,KAAO,QACZ/F,KAAKmG,YAAc,CAACsB,EAAWD,EACnC,CAAC,OAAAtH,EAAAqH,EAAA,CAAA,CAAAxI,IAAA,WAAAoB,IAED,WACI,OAAOH,KAAKmG,YAAY,EAC5B,GAAC,CAAApH,IAAA,YAAAoB,IAED,WACI,OAAOH,KAAKmG,YAAY,EAC5B,GAAC,CAAApH,IAAA,MAAAC,MAED,WACI,OAAOgB,KAAKwH,QAChB,GAAC,CAAAzI,IAAA,MAAAC,MAED,WACI,OAAOgB,KAAKyH,SAChB,GAAC,CAAA1I,IAAA,YAAAC,MAQD,WACI,MAAO,CACH+G,KAAM,QACN2B,YAAa,CAAC1H,KAAK2H,MAAO3H,KAAK4H,OAEvC,GAAC,CAAA7I,IAAA,SAAAC,MAED,WACI,OAAOgB,KAAK6H,WAChB,GAAC,CAAA9I,IAAA,WAAAC,MAED,WACI,MAAAf,IAAAA,OAAW+B,KAAKwH,eAAQvJ,OAAK+B,KAAKyH,UAAS,IAC/C,IAAC,CAAA,CAAA1I,IAAA,cAAAC,MAnBD,SAAmB8I,GACf,IAAAC,EAAAC,EAA8BF,EAAK3B,YAAW,GAAvCsB,EAASM,EAAA,GAEhB,OAAO,IAAIR,EAFeQ,EAAA,GAECN,EAC/B,IAAC,CA1BqB,GCMpBQ,EAAc,SAACC,EAAMC,GACvB,IAAMC,EAAWF,IACjB,OAAO7K,MAAMD,QAAQgL,IAAiC,WAApBrE,EAAOqE,GAAwBjI,EAAIiI,EAAUD,GAAQ,IAC3F,EAQMhI,EAAM,SAACK,EAAQ2H,GACjB,IAhBgBzJ,EAgBZ2J,EAAU7H,EAERuF,EAAIhC,EAAUvD,GACd8H,EAAoB,WAATvC,EACXwC,EAAsB,aAATxC,EACb3I,EAAUC,MAAMD,QAAQoD,GAKxBgI,EAF4B,WADpBzE,EAAUoE,IAEaA,EAAKrF,SAAS,KAClBqF,EAAKM,MAAM,KAAO,CAACN,GAEpD,GAAI/K,GAAWkL,EAAU,CACrB,IAAK,IAAInK,EAAI,EAAGA,EAAIqK,EAAU3K,OAAQM,IAAK,CACvC,GAAIkK,QAAqCvK,IAA1BuK,EAAQG,EAAUrK,IAC7B,OAAO,KACJ,GAAIkK,EAAS,CAIhB,GAHAA,EAAUA,EAAQG,EAAUrK,IAjCG,WAAjB4F,EAAVrF,EAoCW2J,KApC6B1E,EAAQjF,aAAAA,EAAAA,EAAO6G,aAA4C,WAA7BxB,EAAOrF,aAAK,EAALA,EAAO6G,kBAoCxCzH,IAArB0K,EAAUrK,EAAI,GAAkB,CACvD,IAAMuK,EAAUF,EAAUnK,MAAMF,EAAI,GAAG8I,KAAK,KAE5C,OAAO9G,EAAIkI,EAAQ9C,WAAYmD,EACnC,CAGA,GAAuB,mBAAZL,EAAwB,CAC/B,IAAMK,EAAUF,EAAUnK,MAAMF,EAAI,GAAG8I,KAAK,KAC5C,OAAOgB,EAAYI,EAASK,EAChC,CACJ,CACJ,CACA,OAAOL,CACX,CAEA,GAAIE,EACA,OAAON,EAAYzH,EAAQ2H,EAEnC,EAmBMQ,EAAM,SAACnI,EAAQ2H,EAAMnJ,GACvB,IAAIqJ,EAAU7H,EAER8H,EAAoB,WADhBvE,EAAUvD,GAGdpD,EAAUC,MAAMD,QAAQoD,GAUxBgI,EAF4B,WADpBzE,EAAUoE,IAEaA,EAAKrF,SAAS,KAClBqF,EAAKM,MAAM,KAAO,CAACN,GAC9CS,EAAaJ,EAAU3K,OAE7B,GAAIT,GAAWkL,EAAU,CACrB,IAAK,IAAInK,EAAI,EAAGA,EAAIyK,EAAa,EAAGzK,IAC3BkK,EAAQG,EAAUrK,MACnBkK,EAAQG,EAAUrK,IAAM,CAAE,GAE9BkK,EAAUA,EAAQG,EAAUrK,IAGhCkK,EAAQG,EAAUI,EAAa,IAAM5J,CACzC,CAEA,OAAOA,CACX,ECxGqB6J,EAAY,WAI5B,OAAA3I,GAHD,SAAA2I,IAAuC,IAA3BC,EAAOlL,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAE8C,EAAI9C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAIiC,OAAAgJ,GACjC7I,KAAK8I,QAAUA,EACf9I,KAAKU,KAAOA,CAChB,GAAC,CAAA,CAAA3B,IAAA,SAAAC,MAED,WAAsB,IACZ+J,GADGnL,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,OACcoC,KAAKU,KAE/B,IAAKqI,EACD,OAAO/I,KAGX,GAAIA,YAAAA,KAAM8I,SAAmC,WAAxB/E,EAAO/D,KAAK8I,SAC7B,IAAK,IAAIE,KAAUhJ,KAAK8I,QAAS,CAC7B,IAAMG,EAAKjJ,KAAK8I,QAAQE,GAEN,mBAAPC,EAKXN,EAAII,EAASC,EAAQC,EAAGvI,KAAKqI,IAJzBJ,EAAII,EAASC,EAAQC,EAK7B,CAGJ,OAAOjJ,IACX,IAAC,CA3B4B,GCG3BkE,EAAQ,WAoBV,OAAAhE,GAdA,SAAAgE,IAA8D,IAAlDqB,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEqL,EAAQvL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAAiC,OAAAqE,GACxDlE,KAAKuF,WAAaA,EAClBvF,KAAKoJ,gBAAkB,CAAE,EACzBpJ,KAAKqJ,QAAU,CAAE,EACjBrJ,KAAKsJ,WAAY,EACjBtJ,KAAKuJ,UAAW,EAChBvJ,KAAKwJ,cAAe,EACpBxJ,KAAKyJ,aAAc,EACnBzJ,KAAKmJ,SAAWA,EAChBnJ,KAAKgF,QAAUA,EACfhF,KAAK0J,QAAU1E,EAAQ0E,SAAW,KAClC1J,KAAK2J,WAAWT,EACpB,GAEA,CAAA,CAAAnK,IAAA,aAAAC,MAMA,SAAWkK,GAAS,IAAAU,EAOhB,OANA5J,KAAKkJ,QAAUA,EACflJ,KAAK6J,MAAQ,IAAIC,GAAM9J,KAAKmJ,SAAUD,EAAS,CAC3Ca,aAAc/J,KAAKgK,eAAetJ,KAAKV,MACvC8I,QAAqBc,QAAdA,EAAE5J,KAAKgF,eAAL4E,IAAYA,OAAZA,EAAAA,EAAcd,UAGpB9I,IACX,GAEA,CAAAjB,IAAA,KAAAoB,IAKA,WACI,OAAOH,KAAKiK,aAAa,KAC7B,GAEA,CAAAlL,IAAA,SAAAC,MAMA,WAAwB,IAAAkL,EAAAlK,KAAjBuF,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACZiI,EAAO7F,KAAKmK,gBAAgB5E,GAGlC,OAFAvF,KAAKoK,SAAS,CAAC,YAAa,aAErBpK,KAAK6J,MAAMQ,OAAOxE,GAAMyE,MAAK,SAACC,GAGjC,OAFAL,EAAKE,SAAS,CAAC,YAAa,aAAa,GAElCG,CACX,GACJ,GAEA,CAAAxL,IAAA,SAAAC,MAMA,WAAwB,IAAAqB,EAAAL,KAAjBuF,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAGlB,OAFAoC,KAAKoK,SAAS,CAAC,YAAa,aAErBpK,KAAK6J,MAAMW,OAAOxK,KAAKuF,WAAWkF,GAAIlF,GAAY+E,MAAK,SAACC,GAG3D,OAFAlK,EAAK+J,SAAS,CAAC,YAAa,aAAa,GAElCG,CACX,GACJ,GAEA,CAAAxL,IAAA,UAAAC,MAKA,WAAU,IAAAwE,EAAAxD,KAGN,OAFAA,KAAKoK,SAAS,CAAC,YAAa,iBAErBpK,KAAK6J,MAAMa,QAAQ1K,KAAKuF,WAAWkF,IAAIH,MAAK,SAACC,GAGhD,OAFA/G,EAAK4G,SAAS,CAAC,YAAa,iBAAiB,GAEtCG,CACX,GACJ,GAEA,CAAAxL,IAAA,SAAAC,MAKA,WAAS,IAAA2L,EAAA3K,KAGL,OAFAA,KAAKoK,SAAS,CAAC,YAAa,gBAErBpK,KAAK6J,MAAMe,WAAW5K,KAAKuF,WAAWkF,IAAIH,MAAK,SAACC,GAGnD,OAFAI,EAAKE,QAEEN,CACX,GACJ,GAEA,CAAAxL,IAAA,WAAAC,MAKA,WAGI,IAH+B,IAA1B8L,EAAKlN,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAImN,IAAKnN,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAChBoN,EAAa,CAAC,YAAa,WAAY,cAAe,gBAEnD7M,EAAI,EAAGA,EAAI2M,EAAMjN,OAAQM,IAAK,CACnC,IAAM8M,EAAOH,EAAM3M,GAEnB,GAAoB,iBAAT8M,IAAsBD,EAAWlI,SAASmI,GACjD,MAAM,IAAIC,MAAK,GAAAjN,OAAIgN,4BAGvBjL,KAAKiL,GAAQF,CACjB,CAEA,OAAO/K,IACX,GAEA,CAAAjB,IAAA,QAAAC,MAKA,WAOI,OANAgB,KAAKoJ,gBAAkB,CAAE,EACzBpJ,KAAKqJ,QAAU,CAAE,EACjBrJ,KAAKsJ,WAAY,EACjBtJ,KAAKuJ,UAAW,EAChBvJ,KAAKyJ,aAAc,EAEZzJ,IACX,GAEA,CAAAjB,IAAA,QAAAC,MAKA,WAII,OAHAgB,KAAK6K,QACL7K,KAAKmL,UAAY,CAAE,EAEZnL,IACX,GAEA,CAAAjB,IAAA,OAAAC,MAKA,WAAmB,IAAdgG,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACP2H,EAAavF,KAAKoL,gBAExB,OAAIzH,EAAQ3D,KAAKyK,IACNzK,KAAKqK,OAAO9E,IAGG,IAAtBP,EAAQqG,UACDrL,KAAKsL,YAGTtL,KAAKwK,OAAOjF,EACvB,GAEA,CAAAxG,IAAA,YAAAC,MAKA,WAII,IAHA,IAAMuM,EAAqBlF,OAAOmF,KAAKxL,KAAKoJ,iBACtCA,EAAkB,CAAE,EAEjBjL,EAAI,EAAGA,EAAIoN,EAAmB1N,OAAQM,IAAK,CAChD,IAAMY,EAAMwM,EAAmBpN,GAC/BiL,EAAgBrK,GAAOiB,KAAKiK,aAAalL,EAC7C,CAEA,OAAOiB,KAAKwK,OAAOpB,EACvB,GAEA,CAAArK,IAAA,OAAAoB,IAKA,WACI,OAAOH,KAAKiK,aAAa,OAAQ,GACrC,GAEA,CAAAlL,IAAA,YAAAoB,IAKA,WACI,OAAOH,KAAKyL,kBAAkB,cAAgB,IAAIC,KAAK1L,KAAKiK,aAAa,eAAiB,IAC9F,GAEA,CAAAlL,IAAA,YAAAoB,IAKA,WACI,OAAOH,KAAKyL,kBAAkB,cAAgB,IAAIC,KAAK1L,KAAKiK,aAAa,eAAiB,IAC9F,GAEA,CAAAlL,IAAA,WAAAoB,IAKA,WACI,OAAOH,KAAK2L,cAAc,CAAC,aAAc,MAC7C,GAEA,CAAA5M,IAAA,UAAAoB,IAKA,WACI,OAAkD,IAA3CkG,OAAOC,OAAOtG,gBAAA,EAAAA,KAAMuF,YAAY1H,MAC3C,GAEA,CAAAkB,IAAA,QAAAoB,IAKA,WACI,OAAQH,KAAKyK,EACjB,GAEA,CAAA1L,IAAA,UAAAoB,IAKA,WACI,OAAQH,KAAK4L,OAAS5L,KAAK6L,QAC/B,GAEA,CAAA9M,IAAA,YAAAoB,IAKA,WACI,OAAOH,KAAK2L,cAAc,CAAC,UAAW,QAC1C,GAEA,CAAA5M,IAAA,gBAAAC,MAKA,SAAcyB,GAAU,IAAAqL,EAAAC,EAAA/L,KACpB,MAAwB,mBAAbS,GAIX4F,OAAOmF,aAAIM,EAAC9L,gBAAA,EAAAA,KAAMuF,kBAAU,IAAAuG,EAAAA,EAAI,IAAI5K,SAAQ,SAAC8K,GACzC,IAAMhN,EAAQ+M,EAAK9B,aAAa+B,GAChCvL,EAASY,KAAK0K,EAAM/M,EAAOgN,EAC/B,IANWhM,IASf,GAEA,CAAAjB,IAAA,UAAAC,MAKA,WACI,OAAOgB,KAAKqJ,OAChB,GAEA,CAAAtK,IAAA,qBAAAC,MAKA,WACI,OAAOgB,KAAKoJ,eAChB,GAEA,CAAArK,IAAA,UAAAC,MAMA,SAAQgN,GACJ,OAAOA,KAAYhM,KAAKoJ,eAC5B,GAEA,CAAArK,IAAA,qBAAAC,MAKA,WAAqB,IAAAiN,EACjB,OAAO5F,OAAOmF,KAA0BS,QAAtBA,EAACjM,gBAAI,EAAJA,KAAMoJ,uBAAe6C,IAAAA,EAAAA,EAAI,CAAA,GAAIpO,OAAS,CAC7D,GAEA,CAAAkB,IAAA,SAAAC,MAMA,SAAOgN,EAAUhN,GACbgB,KAAKuF,WAAWyG,GAAYhN,CAChC,GAEA,CAAAD,IAAA,eAAAC,MAMA,SAAagN,GAAwB,IAAAE,EAAdlN,EAAKpB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAC3B,GAAc,OAAVoB,GAAsC,WAApB+E,EAAOiI,GACzB,OAAOhM,KAAKmM,cAAcH,GAG9B,IAAMI,EAA0C,QAA7BF,EAAGlM,gBAAA,EAAAA,KAAMuF,WAAWyG,UAASE,IAAAA,EAAAA,EAAI,KAkBpD,OAfAvD,EAAI3I,KAAKuF,WAAYyG,EAAUhN,GAC/B2J,EAAI3I,KAAKoJ,gBAAiB4C,EAAUI,GAG/BhP,EAAQ4C,gBAAI,EAAJA,KAAMqJ,QAAQ2C,MACvBhM,KAAKqJ,QAAQ2C,GAAY,IAG7BhM,KAAKqJ,QAAQ2C,GAAU5K,KAAK,CACxB4K,SAAAA,EACAI,cAAAA,EACApN,MAAAA,EACAqN,UAAW,IAAIX,OAGZ1L,IACX,GAEA,CAAAjB,IAAA,gBAAAC,MAKA,WAA+B,IAAjBuG,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACzB,IAAK,IAAIoO,KAAYzG,EACjBvF,KAAKsM,aAAaN,EAAUzG,EAAWyG,IAG3C,OAAOhM,IACX,GAEA,CAAAjB,IAAA,eAAAC,MAMA,SAAauN,GAAgC,IAAAC,EAArBC,EAAY7O,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAC7BoB,EAAQmB,EAAoB,QAAjBqM,EAACxM,gBAAA,EAAAA,KAAMuF,kBAAUiH,IAAAA,EAAAA,EAAI,CAAE,EAAED,GAE1C,YAAczO,IAAVkB,EACOyN,EAGJzN,CACX,GAEA,CAAAD,IAAA,eAAAC,MAMA,SAAagN,GACT,GAAI5O,EAAQ4O,GAAW,CAAA,IAAAU,EACbC,EAAaX,EACbY,EAAgBvG,OAAOmF,aAAIkB,EAAC1M,KAAKuF,kBAAU,IAAAmH,EAAAA,EAAI,CAAA,GAErD,OAAOC,EAAWE,OAAM,SAACC,GAAI,OAAKF,EAAc9J,SAASgK,KAC7D,CAEA,QAAK9M,aAAAA,KAAMuF,aAIJyG,KAAYhM,KAAKuF,UAC5B,GAEA,CAAAxG,IAAA,gBAAAC,MAMA,WAA+B,IAAjB2N,EAAU/O,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACvB,OAAOoC,KAAK+M,aAAaJ,EAC7B,GAEA,CAAA5N,IAAA,oBAAAC,MAMA,SAAkBgN,GAAU,IAAAgB,EAAAhN,KACxB,OAAI5C,EAAQ4O,GACDhM,KAAK+M,aAAaf,IAAaA,EAASa,OAAM,SAACC,GAAI,OAAMnJ,EAAQqJ,EAAK/C,aAAa6C,OAGvF9M,KAAK+M,aAAaf,KAAcrI,EAAQ3D,KAAKiK,aAAa+B,GACrE,GAEA,CAAAjN,IAAA,gBAAAC,MAMA,SAAc2N,GACV,IAAMpH,EAAa,CAAE,EAErB,GAAIoH,QACA,OAAO3M,KAAKoL,cAAc/E,OAAOmF,KAAKxL,KAAKuF,aAG/C,GAA0B,iBAAfoH,EACP,OAAO3M,KAAKiK,aAAY5M,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAGjC,IAAKR,EAAQuP,GACT,MAAM,IAAIzB,MAAM,qCACnB,IAE+BvJ,EAF/BC,EAAAC,EAEqB8K,GAAU,IAAhC,IAAA/K,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAkC,CAAA,IAAAkL,EAAAC,EACxBnB,EADQrK,EAAA3C,MAGd,GAAwB,iBAAbgN,EAAX,CAIA,IAAIhN,EAAQgB,KAAKiK,aAAa+B,GAEG,WAA7BjI,EAAYmJ,QAAZA,EAAOlO,SAAAkO,IAAKA,OAALA,EAAAA,EAAO3H,aAA4BnI,EAAa,QAAN+P,EAACnO,SAAK,IAAAmO,OAAA,EAALA,EAAO5H,cACzDvG,EAAQA,EAAMuG,YAGlBA,EAAWyG,GAAYhN,CARvB,CASJ,CAAC,CAAA,MAAAqD,GAAAT,EAAAU,EAAAD,EAAA,CAAA,QAAAT,EAAAW,GAAA,CAED,OAAOgD,CACX,GAEA,CAAAxG,IAAA,YAAAC,MAKA,WACI,OAAOgB,KAAKoL,eAChB,GAEA,CAAArM,IAAA,kBAAAC,MAMA,WAAiC,IAAAoO,EAAjB7H,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACrByP,EAAkCD,QAAnBA,EAAGpN,gBAAI,EAAJA,KAAMuF,sBAAU6H,EAAAA,EAAI,CAAE,EAG9C,OAFApN,KAAKuF,WAAU+B,EAAAA,EAAQ+F,CAAAA,EAAAA,GAAoB9H,GAEpCvF,KAAKuF,UAChB,GAEA,CAAAxG,IAAA,iBAAAC,MAMA,WAA0B,IAAX8I,EAAIlK,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACpBoC,KAAKuF,WAAauC,CACtB,IAAC,CAzfS,GCFRwF,EAAe,IAAIzE,EAAa,CAClC0E,mBAAoB,SAAU9C,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACvD,OAAOoC,KAAKkJ,QAAQ/I,IAAG,GAAAlC,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,wBAAwB+C,EAAQxI,EAChF,EAED0I,gBAAiB,SAAUjD,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACpD,OAAOoC,KAAKkJ,QAAQ/I,IAAG,GAAAlC,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,oBAAoB+C,EAAQxI,EAC5E,EAED2I,SAAU,SAAUlD,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC7C,OAAOoC,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAe+C,aAAAA,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAC3G,EAEDvC,MAAO,SAAUgN,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC1C,OAAOoC,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAY+C,UAAAA,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MACxG,EAED8N,eAAgB,SAAUrD,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACnD,OAAOoC,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAsB+C,oBAAAA,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAClH,EAED+N,eAAgB,SAAUtD,EAAIuD,GAA0C,IAA3BR,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAKlE,OAJIoG,EAAWgK,KACXA,EAAgBA,EAAcvD,IAG3BzK,KAAKkJ,QAAQ0E,KAAI3P,GAAAA,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAExM,qBAAAA,OAAoB+P,GAAiBR,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MACnI,EAEDiO,cAAe,SAAUxD,GAAiD,IAA7CyD,EAAStQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM4P,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAKpE,OAJIoG,EAAWkK,KACXA,EAAYA,EAAUzD,IAGnBzK,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAExM,eAAAA,OAAeiQ,EAAiB,IAAMA,EAAX,IAAwBV,EAAQxI,EAC9G,EAEDmJ,iBAAkB,SAAU1D,GAAiD,IAA7CyD,EAAStQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM4P,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAKvE,OAJIoG,EAAWkK,KACXA,EAAYA,EAAUzD,IAGnBzK,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAExM,sBAAAA,OAAsBiQ,EAAiB,IAAMA,EAAX,IAAwBV,EAAQxI,EACrH,EAEDoJ,SAAU,SAAU3D,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC7C,OAAOoC,KAAKkJ,QAAQ0E,KAAI,GAAA3P,OAAI+B,KAAKyN,UAAS,KAAAxP,OAAIwM,EAAe+C,aAAAA,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAC3G,EAEDqO,OAAQ,SAAU5D,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC3C,OAAOoC,KAAKkJ,QAAO,OAAOjL,GAAAA,OAAI+B,KAAKyN,UAASxP,KAAAA,OAAIwM,EAAE,WAAW+C,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAC5G,IAGEsO,WAAKC,GACP,SAAAD,IAAoD,IAAxC/I,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAyO,GAAAvO,EAAAuO,KAAAA,EACxC/I,CAAAA,EAAY2D,EAAS,QAAO5B,EAAA,CAAIwB,QAASwE,GAAiBtI,IACpE,CAAC,OAAA/E,EAAAqO,EAAAC,GAAArO,EAAAoO,EAAA,CAAA,CAAAvP,IAAA,qBAAAC,MAED,WAA8C,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACxC,OAAOoC,KAAK6J,MAAM0D,mBAAmBvN,KAAKyK,GAAI+C,EAAQxI,EAC1D,GAAC,CAAAjG,IAAA,WAAAC,MAED,WAAoC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC9B,OAAOoC,KAAK6J,MAAM8D,SAAS3N,KAAKyK,GAAI+C,EAAQxI,EAChD,GAAC,CAAAjG,IAAA,QAAAC,MAED,WAAiC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC3B,OAAOoC,KAAK6J,MAAMpM,MAAMuC,KAAKyK,GAAI+C,EAAQxI,EAC7C,GAAC,CAAAjG,IAAA,iBAAAC,MAED,SAAegP,GAA0C,IAA3BR,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACnD,OAAOoC,KAAK6J,MAAMkE,eAAe/N,KAAKyK,GAAIuD,EAAeR,EAAQxI,EACrE,GAAC,CAAAjG,IAAA,gBAAAC,MAED,WAA2D,IAA7CkP,EAAStQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM4P,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACrD,OAAOoC,KAAK6J,MAAMoE,cAAcjO,KAAKyK,GAAIyD,EAAWV,EAAQxI,EAChE,GAAC,CAAAjG,IAAA,mBAAAC,MAED,WAA8D,IAA7CkP,EAAStQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM4P,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACxD,OAAOoC,KAAK6J,MAAMsE,iBAAiBnO,KAAKyK,GAAIyD,EAAWV,EAAQxI,EACnE,GAAC,CAAAjG,IAAA,kBAAAC,MAED,WAA2C,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACrC,OAAOoC,KAAK6J,MAAM6D,gBAAgB1N,KAAKyK,GAAI+C,EAAQxI,EACvD,GAAC,CAAAjG,IAAA,iBAAAC,MAED,WAA0C,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACpC,OAAOoC,KAAK6J,MAAMiE,eAAe9N,KAAKyK,GAAI+C,EAAQxI,EACtD,GAAC,CAAAjG,IAAA,SAAAC,MAED,WAAkC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC5B,OAAOoC,KAAK6J,MAAMwE,OAAOrO,KAAKyK,GAAI+C,EAAQxI,EAC9C,GAAC,CAAAjG,IAAA,WAAAC,MAED,WAAoC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC9B,OAAOoC,KAAK6J,MAAMuE,SAASpO,KAAKyK,GAAI+C,EAAQxI,EAChD,GAAC,CAAAjG,IAAA,eAAAoB,IAED,WACI,OAA8C,OAAvCH,KAAKiK,aAAa,gBAC7B,GAAC,CAAAlL,IAAA,kBAAAoB,IAED,WACI,OAA6C,MAAtCH,KAAKiK,aAAa,gBAC7B,GAAC,CAAAlL,IAAA,YAAAoB,IAED,WACI,OAA2C,OAApCH,KAAKiK,aAAa,aAC7B,GAAC,CAAAlL,IAAA,eAAAoB,IAED,WACI,OAA0C,MAAnCH,KAAKiK,aAAa,aAC7B,GAAC,CAAAlL,IAAA,cAAAoB,IAED,WACI,MAAsC,aAA/BH,KAAKiK,aAAa,SAC7B,GAAC,CAAAlL,IAAA,aAAAoB,IAED,WACI,MAAsC,YAA/BH,KAAKiK,aAAa,SAC7B,GAAC,CAAAlL,IAAA,YAAAoB,IAED,WACI,MAAsC,kBAA/BH,KAAKiK,aAAa,WAAiE,YAAhCjK,KAAKiK,aAAa,SAChF,GAAC,CAAAlL,IAAA,eAAAoB,IAED,WACI,OAAOH,KAAKwO,YAAcxO,KAAKyO,aAAezO,KAAK0O,WACvD,GAAC,CAAA3P,IAAA,cAAAoB,IAED,WACI,OAAOH,KAAKyL,kBAAkB,gBAAkB,IAAIC,KAAK1L,KAAKiK,aAAa,iBAAmB,IAClG,GAAC,CAAAlL,IAAA,YAAAoB,IAED,WACI,OAAOH,KAAKyL,kBAAkB,cAAgB,IAAIC,KAAK1L,KAAKiK,aAAa,eAAiB,IAC9F,GAAC,CAAAlL,IAAA,eAAAoB,IAED,WACI,OAAOH,KAAKyL,kBAAkB,iBAAmB,IAAIC,KAAK1L,KAAKiK,aAAa,kBAAoB,IACpG,GAAC,CAAAlL,IAAA,SAAAoB,IAED,WACI,OAAOH,KAAKiK,aAAa,SAC7B,IAAC,EA3Fe/F,GCtDdyK,WAAOJ,GACT,SAAAI,IAAoD,IAAxCpJ,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA8O,GAAA5O,EAAA4O,KAAAA,EACxCpJ,CAAAA,EAAY2D,EAAS,UAAWlE,GAC1C,CAEA,OAAA/E,EAAA0O,EAAAJ,GAAArO,EAAAyO,EAAA,CAAA,CAAA5P,IAAA,SAAAC,MAOA,SAAO4P,GACH,GAGJ,CAAA7P,IAAA,WAAAoB,IAKA,WAAe,GAEf,CAAApB,IAAA,UAAAoB,IAKA,WAAc,GAEd,CAAApB,IAAA,SAAAoB,IAKA,WAAa,GAEb,CAAApB,IAAA,YAAAoB,IAKA,WACI,OAAO,IAAIxB,EAAWqB,KAAK6O,UAC/B,IAAC,EA5CiB3K,GCDhB4K,WAAMP,GACR,SAAAO,IAAoD,IAAxCvJ,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAiP,GAAA/O,EAAA+O,KAAAA,EACxCvJ,CAAAA,EAAY2D,EAAS,SAAUlE,GACzC,CAAC,OAAA/E,EAAA6O,EAAAP,GAAArO,EAAA4O,EAAA,EAHgB5K,GCCf6K,YAAKR,GACP,SAAAQ,IAAoD,IAAxCxJ,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAkP,GAAAhP,EAAAgP,KAAAA,EACxCxJ,CAAAA,EAAY2D,EAAS,QAASlE,GACxC,CAAC,OAAA/E,EAAA8O,EAAAR,GAAArO,EAAA6O,EAAA,CAAA,CAAAhQ,IAAA,WAAAoB,IA6BD,WAAe,IAAA6O,EACX,eAAAA,EAAOhP,KAAKiK,aAAa,WAAY,IAAI1C,UAAQ,IAAAyH,OAAA,EAA1CA,EAA4C7I,YAAY,EACnE,GAEA,CAAApH,IAAA,YAAAoB,IAKA,WAAgB,IAAA8O,EACZ,eAAAA,EAAOjP,KAAKiK,aAAa,WAAY,IAAI1C,UAAQ,IAAA0H,OAAA,EAA1CA,EAA4C9I,YAAY,EACnE,GAEA,CAAApH,IAAA,cAAAoB,IAKA,WAGI,MAAO,CAFyBH,KAAxBwH,SAAwBxH,KAAdyH,UAGtB,GAEA,CAAA1I,IAAA,WAAAC,MAMA,SAASkQ,GASL,OARIlL,EAAWkL,IACXlP,KAAKsM,aAAa,QAAS4C,EAAMzE,IAGhB,iBAAVyE,GACPlP,KAAKsM,aAAa,QAAS4C,GAGxBlP,IACX,IAAC,CAAA,CAAAjB,IAAA,oBAAAC,MAnED,SAAyBmQ,EAAejG,GAAuB,IAAdlE,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACcwR,EAAApH,EAAzCmH,EAAclF,aAAa,eAAc,GAAhEzC,EAAQ4H,EAAA,GAAE3H,EAAS2H,EAAA,GAkB1B,OAAO,IAAIL,EAjBQ,CACfrK,KAAM,KACNsC,QAASmI,EAAclF,aAAa,WACpC7D,SAAU,IAAImB,EAAMC,EAAUC,GAC9B4H,QAASF,EAAclF,aAAa,WACpCqF,QAAS,KACT/I,KAAM4I,EAAclF,aAAa,QACjCsF,SAAUJ,EAAclF,aAAa,aACrCuF,YAAaL,EAAclF,aAAa,cACxCwF,aAAcN,EAAchP,IAAI,gBAChCuP,SAAUP,EAAclF,aAAa,UACrC0F,SAAUR,EAAchP,IAAI,YAC5B0G,QAASsI,EAAclF,aAAa,gBACpC2F,MAAO,KACPC,qBAAsB,MAGG3G,EAASlE,EAC1C,IAAC,EAzBed,GCDd4L,YAAQC,GACV,SAAAD,IAAoD,IAAxCvK,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAiQ,GAAA/P,EAAA+P,KAAAA,EACxCvK,CAAAA,EAAY2D,EAAS,WAAYlE,GAC3C,CAAC,OAAA/E,EAAA6P,EAAAC,GAAA7P,EAAA4P,EAAA,EAHkBf,ICAjBiB,YAAczB,GAChB,SAAAyB,IAAoD,IAAxCzK,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAmQ,GAAAjQ,EAAAiQ,KAAAA,EACxCzK,CAAAA,EAAY2D,EAAS,kBAAmBlE,GAClD,CAAC,OAAA/E,EAAA+P,EAAAzB,GAAArO,EAAA8P,EAAA,EAHwB9L,GCAvB+L,YAAO1B,GACT,SAAA0B,IAAoD,IAAxC1K,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAoQ,GAAAlQ,EAAAkQ,KAAAA,EACxC1K,CAAAA,EAAY2D,EAAS,UAAWlE,GAC1C,CAAC,OAAA/E,EAAAgQ,EAAA1B,GAAArO,EAAA+P,EAAA,EAHiB/L,GCChBgM,GAAsB,IAAIrH,EAAa,CACzCR,QAAS,WAAqC,IAA3BmF,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACxC,OAAOoC,KAAKkJ,QAAQ/I,IAAGlC,GAAAA,OAAI+B,KAAKyN,UAAS,YAAYD,EAAQxI,EACjE,IAGEmL,YAAY5B,GACd,SAAA4B,IAAoD,IAAxC5K,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAsQ,GAAApQ,EAAAoQ,KAAAA,EACxC5K,CAAAA,EAAY2D,EAAS,eAAc5B,EAAA,CAAIwB,QAASoH,IAAwBlL,IAClF,CAAC,OAAA/E,EAAAkQ,EAAA5B,GAAArO,EAAAiQ,EAAA,EAHsBjM,GCJrBkM,GAAyB,SAAC7F,EAAUrB,GACtC,OAAI9L,EAAQmN,GACDA,EAASjK,KAAI,SAAC+P,GACjB,OAAO,IAAIF,GAAaE,EAAkBnH,EAC9C,IAGG,IAAIiH,GAAa5F,EAAUrB,EACtC,EAEMoH,GAAgB,IAAIzH,EAAa,CAEnC0H,MAAO,SAAUC,GAA4C,IAAlCC,EAAQ7S,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM2H,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAEvD,GhBnBQ,WACZ,MAAO,iDAAiD8S,KADtC9S,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAEzB,CgBiBY+S,CAAQH,GACR,OAAOxQ,KAAKkJ,QAAQ0E,KAAK,yBAA0B,CAAEgC,MAAOY,IAGhE,IAAKC,EACD,MAAM,IAAIvF,MAAM,4BAGpB,OAAOlL,KAAKkJ,QAAQ0E,KAAK,gBAAetG,EAAA,CAAIkJ,SAAAA,EAAUC,SAAAA,GAAalL,IAAc+E,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAC9G,EAED4Q,WAAY,SAAUJ,EAAUK,GAAuB,IAAjBtL,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACjD,OAAOoC,KAAKkJ,QAAQ0E,KAAK,sBAAqBtG,EAAA,CAAIkJ,SAAAA,EAAUK,KAAAA,GAAStL,IAAc+E,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAChH,EAED8Q,MAAO,SAAUrG,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC1C,OAAOoC,KAAKkJ,QAAQ0E,gBAAI3P,OAAYwM,EAAE,UAAU+C,EAAQxI,GAASsF,KAAKtK,KAAK6N,WAAWnN,KAAKV,MAC9F,EAED+Q,kBAAmB,SAAUtG,GAA+B,IAAAP,EAAAlK,KAA3BwN,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACtD,OAAOoC,KAAKkJ,QAAQ/I,IAAG,WAAAlC,OAAYwM,EAAoB+C,kBAAAA,EAAQxI,GAASsF,MAAK,SAACC,GAAQ,OAAK6F,GAAuB7F,EAAUL,EAAKhB,WACpI,EAED8H,mBAAoB,SAAUvG,GAA+B,IAAApK,EAAAL,KAA3BwN,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACvD,OAAOoC,KAAKkJ,QAAQ0E,KAAI,WAAA3P,OAAYwM,EAA0B+C,wBAAAA,EAAQxI,GAASsF,MAAK,SAACC,GAAQ,OAAK6F,GAAuB7F,EAAUlK,EAAK6I,WAC3I,EAED+H,oBAAqB,SAAUxG,GAA+B,IAAAjH,EAAAxD,KAA3BwN,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACxD,OAAOoC,KAAKkJ,QAAQ/I,IAAG,WAAAlC,OAAYwM,EAA2B+C,yBAAAA,EAAQxI,GAASsF,MAAK,SAACC,GAAQ,OAAK6F,GAAuB7F,EAAU/G,EAAK0F,WAC3I,EAEDgI,SAAU,SAAUzG,GAChB,OAAOzK,KAAK4K,WAAWH,EAC1B,EAED0G,WAAAA,SAAW1G,GAA+B,IAA3B+C,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACpC,OAAOoC,KAAKkJ,QAAQ0E,KAAI,WAAA3P,OAAYwM,EAAE,oBAAoB+C,EAAQxI,EACtE,IAGEoM,YAAM7C,GACR,SAAA6C,IAAoD,IAAxC7L,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAAuR,GAAArR,EAAAqR,KAAAA,EACxC7L,CAAAA,EAAY2D,EAAS,SAAQ5B,EAAA,CAAIwB,QAASwH,IAAkBtL,IACtE,CAAC,OAAA/E,EAAAmR,EAAA7C,GAAArO,EAAAkR,EAAA,CAAA,CAAArS,IAAA,QAAAoB,IAED,WACI,OAAOH,KAAKiK,aAAa,QAC7B,GAAC,CAAAlL,IAAA,WAAAoB,IAED,WACI,OAAuC,IAAhCH,KAAKiK,aAAa,SAC7B,GAEA,CAAAlL,IAAA,WAAAoB,IAKA,WAAe,IAAA6O,EACX,eAAAA,EAAOhP,KAAKiK,aAAa,WAAY,IAAI1C,UAAQ,IAAAyH,OAAA,EAA1CA,EAA4C7I,YAAY,EACnE,GAEA,CAAApH,IAAA,YAAAoB,IAKA,WAAgB,IAAA8O,EACZ,eAAAA,EAAOjP,KAAKiK,aAAa,WAAY,IAAI1C,UAAQ,IAAA0H,OAAA,EAA1CA,EAA4C9I,YAAY,EACnE,GAEA,CAAApH,IAAA,cAAAoB,IAKA,WAGI,MAAO,CAFyBH,KAAxBwH,SAAwBxH,KAAdyH,UAGtB,GAAC,CAAA1I,IAAA,QAAAC,MAED,WAAiC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC3B,OAAOoC,KAAK6J,MAAMiH,MAAM9Q,KAAKyK,GAAI+C,EAAQxI,EAC7C,GAAC,CAAAjG,IAAA,aAAAC,MAED,WAAsC,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAChC,OAAOoC,KAAK6J,MAAMsH,WAAWnR,KAAKyK,GAAI+C,EAAQxI,EAClD,GAAC,CAAAjG,IAAA,oBAAAC,MAED,WAA6C,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACvC,OAAOoC,KAAK6J,MAAMkH,kBAAkB/Q,KAAKyK,GAAI+C,EAAQxI,EACzD,GAAC,CAAAjG,IAAA,qBAAAC,MAED,SAAmBqS,GAA8B,IAAdrM,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC3C,OAAOoC,KAAK6J,MAAMmH,mBAAmBhR,KAAKyK,GAAI,CAAE6G,KAAMD,GAAkBrM,EAC5E,GAAC,CAAAjG,IAAA,sBAAAC,MAED,WAA+C,IAA3BwO,EAAM5P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACzC,OAAOoC,KAAK6J,MAAMoH,oBAAoBjR,KAAKyK,GAAI+C,EAAQxI,EAC3D,IAAC,EA5DgBd,GCzDfqN,YAAMhD,GACR,SAAAgD,IAAoD,IAAxChM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA0R,GAAAxR,EAAAwR,KAAAA,EACxChM,CAAAA,EAAY2D,EAAS,SAAUlE,GACzC,CAAC,OAAA/E,EAAAsR,EAAAhD,GAAArO,EAAAqR,EAAA,EAHgBrN,GCAfsN,YAAOjD,GACT,SAAAiD,IAAoD,IAAxCjM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA2R,GAAAzR,EAAAyR,KAAAA,EACxCjM,CAAAA,EAAY2D,EAAS,UAAWlE,GAC1C,CAAC,OAAA/E,EAAAuR,EAAAjD,GAAArO,EAAAsR,EAAA,EAHiBtN,GCAhBuN,YAAIlD,GACN,SAAAkD,IAAoD,IAAxClM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA4R,GAAA1R,EAAA0R,KAAAA,EACxClM,CAAAA,EAAY2D,EAAS,OAAQlE,GACvC,CAAC,OAAA/E,EAAAwR,EAAAlD,GAAArO,EAAAuR,EAAA,EAHcvN,GCAbwN,YAAWnD,GACb,SAAAmD,IAAoD,IAAxCnM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA6R,GAAA3R,EAAA2R,KAAAA,EACxCnM,CAAAA,EAAY2D,EAAS,eAAgBlE,GAC/C,CAAC,OAAA/E,EAAAyR,EAAAnD,GAAArO,EAAAwR,EAAA,EAHqBxN,GCApByN,YAAWpD,GACb,SAAAoD,IAAoD,IAAxCpM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA8R,GAAA5R,EAAA4R,KAAAA,EACxCpM,CAAAA,EAAY2D,EAAS,eAAgBlE,GAC/C,CAAC,OAAA/E,EAAA0R,EAAApD,GAAArO,EAAAyR,EAAA,EAHqBzN,GCApB0N,YAAYrD,GACd,SAAAqD,IAAoD,IAAxCrM,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEsL,EAAOtL,UAAAC,OAAAD,EAAAA,kBAAAE,EAAEkH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAA,OAAAiC,OAAA+R,GAAA7R,EAAA6R,KAAAA,EACxCrM,CAAAA,EAAY2D,EAAS,gBAAiBlE,GAChD,CAAC,OAAA/E,EAAA2R,EAAArD,GAAArO,EAAA0R,EAAA,CAAA,CAAA7S,IAAA,kBAAAC,MAED,WAAkB,GAAE,CAAAD,IAAA,cAAAC,MAEpB,WAAc,IAAE,EAPOkF,GCFrB2N,GAAO3R,GAMT,SAAA2R,IAAyB,IAAbC,EAAMlU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAAiC,OAAAgS,GACnB7R,KAAK0J,QAAUoI,EAAOpI,SAAW,KACjC1J,KAAK+R,KAAOD,EAAOC,MAAQ,KAC3B/R,KAAKyN,UAAYqE,EAAOrE,WAAa,KACrCzN,KAAKgS,QAAUF,EAAOE,SAAW,CAAE,CACvC,ICaEC,YAAcC,GAUhB,SAAAD,EAAYH,GAAQ,IAAA5H,EAQb,OARarK,OAAAoS,IAChB/H,EAAAnK,EAAAkS,KAAAA,GAAMH,KAGDK,WAAW,CACZC,wBAAanU,OAAY6T,EAAOO,WAChC,eAAgB,mBAChB,aAAc,2BACfnI,CACP,CAEA,OAAAjK,EAAAgS,EAAAC,GAAAhS,EAAA+R,EAAA,CAAA,CAAAlT,IAAA,aAAAC,MAWA,WAAyB,IAAdgT,EAAOpU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAEnB,OADAoC,KAAKgS,QAAO1K,EAAAA,EAAQ,CAAA,EAAAtH,KAAKgS,SAAYA,GAC9BhS,IACX,GAEA,CAAAjB,IAAA,YAAAC,MAiBA,SAAUuL,GACN,OAAO,IAAI+H,SAAQ,SAACC,EAASC,GACzBjI,EACKzC,OACAwC,MAAK,SAACxC,GACHyK,EAAQ,CACJE,WAAYlI,EAASkI,WACrBC,OAAQnI,EAASmI,OACjBC,GAAIpI,EAASoI,GACb7K,KAAAA,OAGF,OAAC,WACH0K,EAAO,IAAItH,MAAM,0DACrB,GACR,GACJ,GAEA,CAAAnM,IAAA,UAAAC,MAeA,SAAQmJ,GAA+C,IAAA9H,EAAAL,KAAzC4S,EAAMhV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,MAAOiI,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACjD,OAAO,IAAI0U,SAAQ,SAACC,EAASC,GACzBK,MACI7N,EAAQ8N,QAAG7U,OAAOoC,EAAK0R,UAAI9T,OAAIoC,EAAKoN,eAASxP,OAAIkK,GAASb,EAAA,CAEtDsL,OAAAA,EACAG,KAAM/N,EAAQ+N,MAAQ,OACtBf,QAAS,IAAIgB,QAAO1L,EAAAA,KACZjH,EAAK2R,SAAW,CAAA,GAChBhN,EAAQgN,SAAW,CAAA,KAExBnM,IAGNyE,KAAKjK,EAAK4S,WACV3I,MAAK,SAACC,GACH,GAAIA,EAASoI,GAET,OAAOJ,EAAQhI,EAASzC,MAG5B0K,EACI,IAAItH,MACAX,EAASzC,KAAKoL,OACR3I,EAASzC,KAAKoL,OAAO,GACrB3I,EAASkI,YAG3B,IAAE,OACK,SAACU,GACJX,EAAOW,EACX,GACR,GACJ,GAEA,CAAApU,IAAA,MAAAC,MAcA,SAAImJ,GAAgC,IC9JvBnF,ED8JHoQ,EAAKxV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACxByV,EC/JW1P,EAARX,ED+JkBoQ,IC/JsB,iBAARpQ,IAAuC,IAAnB,KAAK0N,KAAK1N,GD+JK,GAAxC,IAAIsQ,gBAAgBF,GAAOG,WAC/D,OAAOvT,KAAKwT,QAAOvV,GAAAA,OAAIkK,GAAIlK,OAAGoV,EAAS,IAAApV,OAAOoV,GAAc,IAAM,MAAO,CAAE,EAAErO,EACjF,GAEA,CAAAjG,IAAA,OAAAC,MAaA,SAAKmJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC9B,OAAOoC,KAAKwT,QAAQrL,EAAM,OAAQ,CAAEsL,KAAMC,KAAKC,UAAU9N,IAASb,EACtE,GAEA,CAAAjG,IAAA,MAAAC,MAaA,SAAImJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC7B,OAAOoC,KAAKwT,QAAQrL,EAAM,MAAO,CAAEsL,KAAMC,KAAKC,UAAU9N,IAASb,EACrE,GAEA,CAAAjG,IAAA,SAAAC,MAYA,SAAOmJ,GAAoB,IAAdnD,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACrB,OAAOoC,KAAKwT,QAAQrL,EAAM,SAAU,CAAA,EAAInD,EAC5C,GAEA,CAAAjG,IAAA,QAAAC,MAaA,SAAMmJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC/B,OAAOoC,KAAKwT,QAAQrL,EAAM,QAAS,CAAEsL,KAAMC,KAAKC,UAAU9N,IAASb,EACvE,IAAC,EA9MwB6M,IEPvB+B,YAAW1B,GAgBb,SAAA0B,EAAY9B,GAAQ,IAAA5H,EAkDd,OAlDcrK,OAAA+T,IAChB1J,EAAAnK,EAAA6T,KAAAA,GAAM9B,KAGD+B,cAAgBC,EAAMzJ,OAAO,CAC9B0J,QAAO9V,GAAAA,OAAKiM,EAAK6H,KAAI9T,KAAAA,OAAIiM,EAAKuD,WAC9BuE,QAAS,CACLI,wBAAanU,OAAY6T,EAAOO,WAChC,eAAgB,mBAChB,aAAc,yBActBnI,EAAK2J,cAAcG,aAAazJ,SAAS0J,KAOrC,SAAC1J,GAAQ,OAAKA,EAAS1E,IAAI,IAQ3B,SAACsN,GACG,GAAIA,EAAM5I,SAAU,CAChB,IAAQ1E,EAASsN,EAAM5I,SAAf1E,KAER,GAAIzI,EAAQyI,EAAKqN,SAAWrN,EAAKqN,OAAOrV,OACpC,MAAM,IAAIqN,MAAMrF,EAAKqN,OAAO,IACzB,GAAIrN,EAAKsN,MACZ,MAAM,IAAIjI,MAAMrF,EAAKsN,MAE7B,CACA,MAAMA,CACV,IACFjJ,CACN,CAEA,OAAAjK,EAAA2T,EAAA1B,GAAAhS,EAAA0T,EAAA,CAAA,CAAA7U,IAAA,aAAAC,MASA,WAAyB,IAAdgT,EAAOpU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAKnB,OAJAoC,KAAK6T,cAAcK,SAASlC,QAAQmC,OAAM7M,EAAAA,KACnCtH,KAAK6T,cAAcK,SAASlC,QAAQmC,QACpCnC,GAEAhS,IACX,GAEA,CAAAjB,IAAA,UAAAC,MAcA,SAAQ4T,EAAQE,GAAmB,IAAd9N,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC7B,OAAOoC,KAAK6T,cAAcL,QAAOlM,EAAA,CAC7BsL,OAAAA,EACAE,IAAAA,GACG9N,GAEX,GAEA,CAAAjG,IAAA,MAAAC,MAeA,SAAImJ,GAAgC,IAA1BiL,EAAKxV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC9B,OAAOoC,KAAKwT,QAAQ,MAAOrL,EAAIb,EAAA,CAAIkG,OAAQ4F,GAAUpO,GACzD,GAEA,CAAAjG,IAAA,OAAAC,MAeA,SAAKmJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC9B,OAAOoC,KAAKwT,QAAQ,OAAQrL,EAAIb,EAAA,CAAIzB,KAAAA,GAASb,GACjD,GAEA,CAAAjG,IAAA,MAAAC,MAeA,SAAImJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC7B,OAAOoC,KAAKwT,QAAQ,MAAOrL,EAAIb,EAAA,CAAIzB,KAAAA,GAASb,GAChD,GAEA,CAAAjG,IAAA,SAAAC,MAcA,SAAOmJ,GAAoB,IAAdnD,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACrB,OAAOoC,KAAKwT,QAAQ,SAAUrL,EAAMnD,EACxC,GAEA,CAAAjG,IAAA,QAAAC,MAeA,SAAMmJ,GAA+B,IAAzBtC,EAAIjI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC/B,OAAOoC,KAAKwT,QAAQ,QAASrL,EAAIb,EAAA,CAAIzB,KAAAA,GAASb,GAClD,IAAC,EAxMqB6M,ICfpBuC,YAAclC,GAAA,SAAAkC,IAAA,OAAAvU,OAAAuU,GAAArU,EAAAC,KAAAoU,EAAAxW,UAAA,CAAA,OAAAqC,EAAAmU,EAAAlC,GAAAhS,EAAAkU,EAAA,EAASvC,ICoBRwC,GAAM,WACvB,SAAAA,EAAYC,GAAsB,IAAdC,IAAK3W,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAAOiC,OAAAwU,GAAAG,EAAAxU,KAAA,mBAKb,CAAC,YAAa,cAAe,OAAQ,QAAS,UAAW,SAAU,OAAQ,QAAS,QAAS,OAAQ,SAAOwU,EAAAxU,KAAA,cAEjH,CACV,CAAC,IAAIyU,OAAO,SAAU,MAAO,QAC7B,CAAC,IAAIA,OAAO,YAAa,MAAO,UAChC,CAAC,IAAIA,OAAO,WAAY,MAAO,SAC/B,CAAC,IAAIA,OAAO,SAAU,MAAO,QAC7B,CAAC,IAAIA,OAAO,eAAgB,MAAO,QACnC,CAAC,IAAIA,OAAO,iBAAkB,MAAO,OACrC,CAAC,IAAIA,OAAO,kBAAmB,MAAO,QACtC,CAAC,IAAIA,OAAO,SAAU,MAAO,SAC7B,CAAC,IAAIA,OAAO,yBAA0B,MAAO,SAC7C,CAAC,IAAIA,OAAO,YAAa,MAAO,OAChC,CAAC,IAAIA,OAAO,OAAQ,MAAO,OAC3B,CAAC,IAAIA,OAAO,wBAAyB,MAAO,WAC5C,CAAC,IAAIA,OAAO,UAAW,MAAO,OAC9B,CAAC,IAAIA,OAAO,mBAAoB,MAAO,SACvC,CAAC,IAAIA,OAAO,gBAAiB,MAAO,QACpC,CAAC,IAAIA,OAAO,wBAAyB,MAAO,UAC5C,CAAC,IAAIA,OAAO,eAAgB,MAAO,SACnC,CAAC,IAAIA,OAAO,UAAW,MAAO,SAC9B,CAAC,IAAIA,OAAO,KAAM,MAAO,KACzB,CAAC,IAAIA,OAAO,IAAK,MAAO,OAC3BD,EAEexU,KAAA,gBAAA,CACZ,CAAC,IAAIyU,OAAO,SAAU,MAAO,QAC7B,CAAC,IAAIA,OAAO,YAAa,MAAO,UAChC,CAAC,IAAIA,OAAO,cAAe,MAAO,MAClC,CAAC,IAAIA,OAAO,WAAY,MAAO,QAC/B,CAAC,IAAIA,OAAO,gEAAiE,MAAO,WACpF,CAAC,IAAIA,OAAO,WAAY,MAAO,MAC/B,CAAC,IAAIA,OAAO,WAAY,MAAO,MAC/B,CAAC,IAAIA,OAAO,YAAa,MAAO,MAChC,CAAC,IAAIA,OAAO,aAAc,MAAO,OACjC,CAAC,IAAIA,OAAO,cAAe,MAAO,QAClC,CAAC,IAAIA,OAAO,qBAAsB,MAAO,OACzC,CAAC,IAAIA,OAAO,YAAa,MAAO,WAChC,CAAC,IAAIA,OAAO,YAAa,MAAO,UAChC,CAAC,IAAIA,OAAO,kBAAmB,MAAO,MACtC,CAAC,IAAIA,OAAO,cAAe,MAAO,UAClC,CAAC,IAAIA,OAAO,WAAY,MAAO,MAC/B,CAAC,IAAIA,OAAO,SAAU,MAAO,MAC7B,CAAC,IAAIA,OAAO,WAAY,MAAO,MAC/B,CAAC,IAAIA,OAAO,oBAAqB,MAAO,QACxC,CAAC,IAAIA,OAAO,gBAAiB,MAAO,QACpC,CAAC,IAAIA,OAAO,oBAAqB,MAAO,MACxC,CAAC,IAAIA,OAAO,UAAW,MAAO,MAC9B,CAAC,IAAIA,OAAO,kBAAmB,MAAO,QACtC,CAAC,IAAIA,OAAO,cAAe,MAAO,QAClC,CAAC,IAAIA,OAAO,aAAc,MAAO,MACjC,CAAC,IAAIA,OAAO,KAAM,MAAO,MAC5BD,EAAAxU,KAAA,qBAEoB,CAAC,MAAO,KAAM,MAAO,IAAK,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,OAAQ,OAAQ,KAAM,OAAQ,MAAO,MAAO,KAAM,OAAQ,OAAQ,QAAMwU,kBAE9J,IAAIC,OAAO,cAAe,MAAID,kBAC9B,IAAIC,OAAO,IAAK,MAAID,yBACb,IAAIC,OAAO,OAAQ,MAAID,mBAC7B,IAAIC,OAAO,UAAW,MAAID,EACrBxU,KAAA,iBAAA,IAAIyU,OAAO,OAhExBzU,KAAK0U,IAAMJ,EACXtU,KAAKuU,MAAQA,CACjB,CAAC,OAAArU,EAAAmU,EAAA,CAAA,CAAAtV,IAAA,MAAAC,MAgED,WACI,OAAOgB,KAAK0U,GAChB,GAAC,CAAA3V,IAAA,aAAAC,MAED,SAAW0V,EAAKC,EAAOC,EAAMC,GACzB,GAAIA,EACAH,EAAMG,OAGN,KADaD,EAAKtV,QAAQoV,EAAII,gBAAkB,GAE5C,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAM9W,OAAQkX,IAC9B,GAAIL,EAAIM,MAAML,EAAMI,GAAG,IAAK,CACxBL,EAAMA,EAAInX,QAAQoX,EAAMI,GAAG,GAAIJ,EAAMI,GAAG,IACxC,KACJ,CAQZ,OAFA/U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,YAAAC,MAMA,SAAU0V,GAAoB,IAAfO,EAAMrX,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAGpB,OAFA8W,EAAMA,GAAO1U,KAAK0U,IAEX1U,KAAKkV,WAAWR,EAAK1U,KAAKmV,YAAanV,KAAKoV,iBAAkBH,EACzE,GAEA,CAAAlW,IAAA,cAAAC,MAMA,SAAY0V,EAAKW,GAGb,OAFAX,EAAMA,GAAO1U,KAAK0U,IAEX1U,KAAKkV,WAAWR,EAAK1U,KAAKsV,cAAetV,KAAKoV,iBAAkBC,EAC3E,GAEA,CAAAtW,IAAA,WAAAC,MAIA,SAAS0V,EAAKa,GAIV,IADA,IAAIC,GAFJd,EAAMA,GAAO1U,KAAK0U,KAECjM,MAAM,KAChBtK,EAAI,EAAGA,EAAIqX,EAAS3X,OAAQM,IAAK,CAItC,IAHA,IAAIsX,EAAUD,EAASrX,GAAGsK,MAAM,KAGvBsM,EAFGQ,GAAkBpX,EAAI,IAAMqX,EAAS3X,OAAS,EAAI,EAE1CkX,EAAIU,EAAQ5X,OAAQkX,IACpCU,EAAQV,GAAKU,EAAQV,GAAGW,OAAO,GAAGC,cAAgBF,EAAQV,GAAGa,UAAU,GAE3EJ,EAASrX,GAAKsX,EAAQxO,KAAK,GAC/B,CAIA,GAHAyN,EAAMc,EAASvO,KAAK,OAGG,IAAnBsO,EAAyB,CACzB,IAAIM,EAAQnB,EAAIgB,OAAO,GAAGZ,cACtBgB,EAAOpB,EAAIrW,MAAM,GACrBqW,EAAMmB,EAAQC,CAClB,CAKA,OAFA9V,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,aAAAC,MAIA,SAAW0V,GAIP,IADA,IAAIc,GAFJd,EAAMA,GAAO1U,KAAK0U,KAECjM,MAAM,MAChBtK,EAAI,EAAGA,EAAIqX,EAAS3X,OAAQM,IACjCqX,EAASrX,GAAKqX,EAASrX,GAAGZ,QAAQyC,KAAK+V,UAAW,OAClDP,EAASrX,GAAKqX,EAASrX,GAAGZ,QAAQyC,KAAKgW,eAAgB,IAO3D,OALAtB,EAAMc,EAASvO,KAAK,KAAK6N,cAGzB9U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,WAAAC,MAIA,SAAS0V,EAAKa,GAaV,OARAb,GADAA,GADIA,GAFJA,EAAMA,GAAO1U,KAAK0U,KAEJI,eACJvX,QAAQyC,KAAKiW,SAAU,KACvB1Y,QAAQyC,KAAKkW,SAAU,KAC5BX,IACDb,EAAM1U,KAAKmW,WAAWzB,IAI1B1U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,aAAAC,MAIA,SAAW0V,GASP,OALAA,GADAA,GAFAA,EAAMA,GAAO1U,KAAK0U,KAERI,eACAc,UAAU,EAAG,GAAGD,cAAgBjB,EAAIkB,UAAU,GAGxD5V,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,YAAAC,MAIA,SAAU0V,GASN,OALAA,GADAA,GAFAA,EAAMA,GAAO1U,KAAK0U,KAERnX,QAAQyC,KAAKoW,gBAAiB,MAC9BtB,cAGV9U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,UAAAC,MAKA,SAAQ0V,EAAK2B,GACT3B,EAAMA,GAAO1U,KAAK0U,KAGI,IAAlB2B,GACA3B,EAAM1U,KAAKsW,SAAS5B,GACpBA,EAAM1U,KAAKuW,WAAW7B,IAEtBA,EAAMA,EAAII,cAKd,IADA,IAAIW,GADJf,EAAMA,EAAInX,QAAQyC,KAAKkW,SAAU,MACfzN,MAAM,KACfsM,EAAI,EAAGA,EAAIU,EAAQ5X,OAAQkX,IAAK,CAErC,IADA,IAAIyB,EAAIf,EAAQV,GAAGtM,MAAM,KAChBtK,EAAI,EAAGA,EAAIqY,EAAE3Y,OAAQM,IACtB6B,KAAKyW,mBAAmBnX,QAAQkX,EAAErY,GAAG2W,eAAiB,IACtD0B,EAAErY,GAAK6B,KAAKmW,WAAWK,EAAErY,KAGjCsX,EAAQV,GAAKyB,EAAEvP,KAAK,IACxB,CAOA,OALAyN,GADAA,EAAMe,EAAQxO,KAAK,MACT2O,UAAU,EAAG,GAAGD,cAAgBjB,EAAIkB,UAAU,GAGxD5V,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,aAAAC,MAGA,SAAW0V,GAGP,IAAIe,GAFJf,EAAMA,GAAO1U,KAAK0U,KAEAjM,MAAM,MAMxB,OALAiM,EAAMe,EAAQA,EAAQ5X,OAAS,GAG/BmC,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,WAAAC,MAGA,SAAS0V,GAQL,OAPAA,EAAMA,GAAO1U,KAAK0U,IAElBA,EAAM1U,KAAK0W,UAAU1W,KAAKuW,WAAW7B,IAGrC1U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,WAAAC,MAGA,SAAS0V,GAQL,OAPAA,EAAMA,GAAO1U,KAAK0U,IAElBA,EAAM1U,KAAK2W,YAAY3W,KAAKsW,SAAS5B,IAGrC1U,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,aAAAC,MAIA,SAAW0V,GAAyB,IAApBkC,EAAUhZ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAQtB,OAPA8W,EAAMA,GAAO1U,KAAK0U,IAElBA,EAAM1U,KAAKuW,WAAWvW,KAAK6W,WAAWnC,KAASkC,EAAa,GAAK,KAAO,KAGxE5W,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,GAEA,CAAA3V,IAAA,aAAAC,MAGA,SAAW0V,GAIP,IADA,IAAIe,GAFJf,EAAMA,GAAO1U,KAAK0U,KAEAjM,MAAM,KACfsM,EAAI,EAAGA,EAAIU,EAAQ5X,OAAQkX,IAAK,CAErC,GAAU+B,MADFC,SAAStB,EAAQV,IACV,CACX,IAAIiC,EAAMvB,EAAQV,GAAGa,UAAUH,EAAQV,GAAGlX,OAAS,GAC/CoZ,EAAKxB,EAAQV,GAAGa,UAAUH,EAAQV,GAAGlX,OAAS,GAC9CqZ,EAAM,KACC,MAAPF,GAAsB,MAAPA,GAAsB,MAAPA,IACnB,MAAPC,EACAC,EAAM,KACQ,MAAPD,EACPC,EAAM,KACQ,MAAPD,IACPC,EAAM,OAGdzB,EAAQV,IAAMmC,CAClB,CACJ,CAMA,OALAxC,EAAMe,EAAQxO,KAAK,KAGnBjH,KAAK0U,IAAMA,GAEQ,IAAf1U,KAAKuU,MACEvU,KAIJ0U,CACX,IAEA,CAAA,CAAA3V,IAAA,SAAAC,MAGA,WACI,IAAMmY,EAAO9Q,OAAOC,OAAO1I,WACrBwZ,EAAW,IAAI/C,EAAO,MAAM,GAC5BzB,EAAShV,UAAU,GAGzB,OAFAuZ,EAAKE,QAE2B,mBAArBD,EAASxE,GACTwE,EAASxE,GAAO5U,MAAhBoZ,EAAoBD,GAGxB,IACX,IAAC,CAtasB,GAyarBT,GAAY,WACd,IAAMS,EAAI,CAAI,aAAWlZ,OAAAZ,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAE9B,OAAOyW,GAAOiD,OAAMtZ,MAAbqW,GAAMnW,EAAWiZ,GAC5B,EAEMR,GAAc,WAChB,IAAMQ,EAAI,CAAI,eAAalZ,OAAAZ,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAEhC,OAAOyW,GAAOiD,OAAMtZ,MAAbqW,GAAMnW,EAAWiZ,GAC5B,EAkDMI,GAAW,WACb,IAAMJ,EAAI,CAAI,YAAUlZ,OAAAZ,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAE7B,OAAOyW,GAAOiD,OAAMtZ,MAAbqW,GAAMnW,EAAWiZ,GAC5B,EC3fMK,GAAY,CACdhG,QAAAA,GACAJ,OAAAA,GACAtC,OAAAA,EACAR,MAAAA,EACAK,QAAAA,EACAI,MAAAA,GACAiB,eAAAA,GACAC,QAAAA,GACAsB,OAAAA,GACAzB,SAAAA,GACA2B,KAAAA,GACAC,YAAAA,GACAC,YAAAA,GACAC,aAAAA,GACAzB,aAAAA,IAGEsH,GAAW,CACbxF,eAAAA,GACA2B,YAAAA,GACAQ,eAAAA,IAGEsD,GAAQ,WAMT,OAAAxX,GALD,SAAAwX,IAII,OAJU7X,OAAA6X,GACV1X,KAAKwX,UAAYA,GACjBxX,KAAKyX,SAAWA,GAETzX,KAAKiF,OAAMjH,MAAXgC,KAAepC,UAC1B,GAAC,CAAA,CAAAmB,IAAA,SAAAC,MAED,SAAO+G,EAAM4R,GACT,IAAM5Y,EAAM2X,GAAU3Q,GAChByH,EAASnQ,MAAA4P,UAAA5O,MAAAgD,KAAIzD,WAAWS,MAAM,GAEpC,IAAK2B,KAAKjB,GACN,MAAM,IAAImM,MAAM,qCAGpB,IAAKlL,KAAKjB,GAAK4Y,GACX,MAAM,IAAIzM,MAAKjN,MAAAA,OAAO0Y,GAAY5Q,GAAK9H,WAAAA,OAAU0Z,kBAGrD,OAAAC,EAAW5X,KAAKjB,GAAK4Y,GAAUzZ,EAAIsP,GACvC,IAAC,CArBS,GAwBRvI,GAAS,WACX,OAAA2S,EAAWF,GAAQra,MAAA4P,UAAA5O,MAAAgD,KAAIzD,WAC3B,ECjDMia,GAAqB,SAAChO,GAAwB,IAAjBf,EAAOlL,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAGzC,GAFAiM,EAAMf,QAAU1L,EAAQ0L,GAAWA,EAAU,CAACA,IAE1C1L,EAAQ0L,GAaZ,OAJIA,aAAmBD,GACnBC,EAAQgP,OAAOjO,GAGZA,EAbe,IACWlI,EADXC,EAAAC,EACIiH,GAAO,IAA7B,IAAAlH,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA+B,CAAA,IACrBgH,EADQrH,EAAA3C,MAGd6K,EAAMkO,cAAc/O,EACxB,CAAC,CAAA,MAAA3G,GAAAT,EAAAU,EAAAD,EAAA,CAAA,QAAAT,EAAAW,GAAA,CAST,EAqBMuH,GAAK,WAQN,OAAA5J,GAPD,SAAA4J,EAAYX,EAAUD,GAAuB,IAAdlE,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAAiC,OAAAiK,GACvC9J,KAAKmJ,SAAWA,EAChBnJ,KAAKkJ,QAAUA,GAAWnE,IAC1B/E,KAAKyN,UAAYiJ,GAAUvN,GAC3BnJ,KAAKgY,QAAU,IAAIrZ,EACnBqB,KAAKgF,QAAUA,EACfhF,KAAK+X,cAAc/S,EAAQ8D,QAC/B,GAAC,CAAA,CAAA/J,IAAA,gBAAAC,MAED,WACI,OAAO6Y,GAAmB7X,KADTpC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAExB,GAAC,CAAAmB,IAAA,UAAAC,MAED,SAAQiZ,GAGJ,OAAOA,CACX,GAAC,CAAAlZ,IAAA,YAAAC,MAED,SAAU8I,GACN,OAAO7C,GAAO,WAAYsS,GAASvX,KAAKmJ,UAAWrB,EAAM9H,KAAKkJ,QAClE,GAAC,CAAAnK,IAAA,aAAAC,MAED,SAAW8I,GACP,OA5CW,SAAC+B,EAAO/B,GAKvB,GAJ0C,mBAA/B+B,EAAM7E,QAAQ+E,cACrBF,EAAM7E,QAAQ+E,aAAajC,GAG3B1K,EAAQ0K,GAAO,CACf,IAE0BoQ,EAFpBC,EAAa,GAAGC,EAAAvW,EAEAiG,GAAI,IAA1B,IAAAsQ,EAAAtW,MAAAoW,EAAAE,EAAArW,KAAAC,MAA4B,CAAA,IAAjBqW,EAAOH,EAAAlZ,MACdmZ,EAAW/W,KAAKyI,EAAMgE,WAAWwK,GACrC,CAAC,CAAA,MAAAhW,GAAA+V,EAAA9V,EAAAD,EAAA,CAAA,QAAA+V,EAAA7V,GAAA,CAED,OAAAqV,EAAWjZ,EAAcwZ,EAC7B,CAEA,IAAMF,EAAmBpO,EAAMhC,UAAUC,GACzC,OAAO+B,EAAMyO,QAAQL,EACzB,CA2BepK,CAAW7N,KAAM8H,EAC5B,GAAC,CAAA/I,IAAA,SAAAC,MAED,WAAsC,IAAAkL,EAAAlK,KAA/BuF,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAChC,OAAO,IAAI0U,QAAO,WAAA,IAAAiG,EAAAC,EAAAC,IAAAC,MAAC,SAAAC,EAAOpG,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAvH,MAAA,KAAA,EAAA,OAAAuH,EAAAvH,KAAA,EACdpH,EAAKhB,QAAQ0E,KAAI,GAAA3P,OAAIiM,EAAKuD,WAAalI,EAAYP,GAASsF,KAAKJ,EAAK2D,WAAWnN,KAAKwJ,IAAY,MAACsI,GAAO,KAAA,EAA3HjI,EAAQsO,EAAAE,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAAsO,EAAAG,OAAA,GAAAL,OACrB,OAAAM,SAAAA,EAAAC,GAAA,OAAAX,EAAAva,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,SAAAC,MAED,SAAOyL,GAAmC,IAAApK,EAAAL,KAA/BuF,EAAU3H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACpC,OAAO,IAAI0U,QAAO,WAAA,IAAA6G,EAAAX,EAAAC,IAAAC,MAAC,SAAAU,EAAO7G,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAS,GAAA,cAAAA,EAAAP,KAAAO,EAAA/H,MAAA,KAAA,EAAA,OAAA+H,EAAA/H,KAAA,EACdjR,EAAK6I,QAAQoQ,IAAGrb,GAAAA,OAAIoC,EAAKoN,UAAS,KAAAxP,OAAIwM,GAAMlF,EAAYP,GAASsF,KAAKjK,EAAKwN,WAAWnN,KAAKL,IAAY,MAACmS,GAAO,KAAA,EAAhIjI,EAAQ8O,EAAAN,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAA8O,EAAAL,OAAA,GAAAI,OACrB,OAAAG,SAAAA,EAAAC,GAAA,OAAAL,EAAAnb,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,aAAAC,MAED,SAAWyL,GAAkB,IAAAjH,EAAAxD,KAAdgF,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EACvB,OAAO,IAAI0U,QAAO,WAAA,IAAAmH,EAAAjB,EAAAC,IAAAC,MAAC,SAAAgB,EAAOnH,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAe,GAAA,cAAAA,EAAAb,KAAAa,EAAArI,MAAA,KAAA,EAAA,OAAAqI,EAAArI,KAAA,EACd9N,EAAK0F,QAAQ/I,OAAGlC,OAAIuF,EAAKiK,UAASxP,KAAAA,OAAIwM,GAAM,CAAE,EAAEzF,GAASsF,KAAK9G,EAAKqK,WAAWnN,KAAK8C,IAAY,MAACgP,GAAO,KAAA,EAAxHjI,EAAQoP,EAAAZ,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAAoP,EAAAX,OAAA,GAAAU,OACrB,OAAAE,SAAAA,EAAAC,GAAA,OAAAJ,EAAAzb,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,UAAAC,MAED,WAAsB,IAAA2L,EAAA3K,KAAdgF,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAChB,OAAO,IAAI0U,QAAO,WAAA,IAAAwH,EAAAtB,EAAAC,IAAAC,MAAC,SAAAqB,EAAOxH,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAoB,GAAA,cAAAA,EAAAlB,KAAAkB,EAAA1I,MAAA,KAAA,EAAA,OAAA0I,EAAA1I,KAAA,EACd3G,EAAKzB,QAAQ/I,IAAGlC,GAAAA,OAAI0M,EAAK8C,WAAa,CAAE,EAAEzI,GAASsF,KAAKK,EAAKkD,WAAWnN,KAAKiK,IAAY,MAAC6H,GAAO,KAAA,EAAlHjI,EAAQyP,EAAAjB,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAAyP,EAAAhB,OAAA,GAAAe,OACrB,OAAAE,SAAAA,EAAAC,GAAA,OAAAJ,EAAA9b,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,QAAAC,MAED,WAAgC,IAAA+M,EAAA/L,KAA1BoT,EAAKxV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAC1B,OAAO,IAAI0U,QAAO,WAAA,IAAA6H,EAAA3B,EAAAC,IAAAC,MAAC,SAAA0B,EAAO7H,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAyB,GAAA,cAAAA,EAAAvB,KAAAuB,EAAA/I,MAAA,KAAA,EAAA,OAAA+I,EAAA/I,KAAA,EACdvF,EAAK7C,QAAQ/I,IAAG,GAAAlC,OAAI8N,EAAK0B,WAAa2F,EAAOpO,GAASsF,KAAKyB,EAAK8B,WAAWnN,KAAKqL,IAAY,MAACyG,GAAO,KAAA,EAArHjI,EAAQ8P,EAAAtB,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAA8P,EAAArB,OAAA,GAAAoB,OACrB,OAAAE,SAAAA,EAAAC,GAAA,OAAAJ,EAAAnc,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,cAAAC,MAED,WAAsC,IAAAgO,EAAAhN,KAA1BoT,EAAKxV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAEoH,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAGhC,OAFAwV,EAAMoH,QAAS,EAER,IAAIlI,QAAO,WAAA,IAAAmI,EAAAjC,EAAAC,IAAAC,MAAC,SAAAgC,EAAOnI,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAA+B,GAAA,cAAAA,EAAA7B,KAAA6B,EAAArJ,MAAA,KAAA,EAAA,OAAAqJ,EAAArJ,KAAA,EACdtE,EAAK9D,QAAQ/I,IAAG,GAAAlC,OAAI+O,EAAKS,WAAa2F,EAAOpO,GAASsF,KAAK0C,EAAKa,WAAWnN,KAAKsM,IAAY,MAACwF,GAAO,KAAA,EAArHjI,EAAQoQ,EAAA5B,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAAoQ,EAAA3B,OAAA,GAAA0B,OACrB,OAAAE,SAAAA,EAAAC,GAAA,OAAAJ,EAAAzc,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,GAAC,CAAAmB,IAAA,UAAAC,MAED,SAAQiF,GAAsB,IAAA6W,EAAA9a,KAAdgF,EAAOpH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAClB6M,EAAKzG,EAAWC,GAAUA,EAAOgG,aAAa,MAAQhG,EAE5D,OAAO,IAAIqO,QAAO,WAAA,IAAAyI,EAAAvC,EAAAC,IAAAC,MAAC,SAAAsC,EAAOzI,EAASC,GAAM,IAAAjI,EAAA,OAAAkO,IAAAG,MAAA,SAAAqC,GAAA,cAAAA,EAAAnC,KAAAmC,EAAA3J,MAAA,KAAA,EAAA,OAAA2J,EAAA3J,KAAA,EACdwJ,EAAK5R,QAAO,UAAOjL,OAAI6c,EAAKrN,UAASxP,KAAAA,OAAIwM,GAAM,CAAA,EAAIzF,GAASsF,KAAKwQ,EAAKjN,WAAWnN,KAAKoa,IAAY,MAACtI,GAAO,KAAA,EAA3HjI,EAAQ0Q,EAAAlC,KAEdxG,EAAQhI,GAAU,KAAA,EAAA,IAAA,MAAA,OAAA0Q,EAAAjC,OAAA,GAAAgC,OACrB,OAAAE,SAAAA,EAAAC,GAAA,OAAAJ,EAAA/c,MAAAgC,KAAApC,UAAA,EAJiB,GAKtB,IAAC,CAtFM,GCTUwd,GAAS,WAS1B,SAAAA,EAAY/I,GAAuC,IAAAgJ,EAAAC,EAAAC,EAA5BzJ,EAAMlU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAE,EAAE4d,EAAK5d,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAUrC,GAV6CiC,OAAAub,GAC7Cpb,KAAK0J,QAAwB2R,QAAjBA,EAAGvJ,EAAOpI,eAAO2R,IAAAA,EAAAA,EAAI,KACjCrb,KAAKgF,QAAU,CACX0E,QAAS1J,KAAK0J,QACdqI,KAAiB,QAAbuJ,EAAExJ,EAAOC,YAAI,IAAAuJ,EAAAA,EAAI,2BACrB7N,UAA2B8N,QAAlBA,EAAEzJ,EAAOrE,iBAAS8N,IAAAA,EAAAA,EAAIvb,KAAK0J,QACpC8R,MAAAA,EACAnJ,UAAAA,GAGqB,iBAAdA,GAA+C,IAArBA,EAAUxU,OAC3C,MAAM,IAAIqN,MAAM,gDAGpB,IAAK/G,KAAuBkO,EAAUyC,cAAc2G,WAAW,KAC3D,MAAM,IAAIvQ,MAAM,iFAGpBlL,KAAKkJ,QAAU4I,EAAO5I,SAAWnE,EAAc/E,KAAKgF,SAEpDhF,KAAK0b,OAAS,IAAI5R,GAAM,QAAS9J,KAAKkJ,SAAS6O,cAAczK,GAC7DtN,KAAK2b,SAAW,IAAI7R,GAAM,SAAU9J,KAAKkJ,SACzClJ,KAAK4b,OAAS,IAAI9R,GAAM,QAAS9J,KAAKkJ,SACtClJ,KAAK6b,QAAU,IAAI/R,GAAM,SAAU9J,KAAKkJ,SAAS6O,cAAczH,IAC/DtQ,KAAK8b,SAAW,IAAIhS,GAAM,UAAW9J,KAAKkJ,SAC1ClJ,KAAK+b,QAAU,IAAIjS,GAAM,SAAU9J,KAAKkJ,SACxClJ,KAAKgc,SAAW,IAAIlS,GAAM,UAAW9J,KAAKkJ,SAC1ClJ,KAAKic,cAAgB,IAAInS,GAAM,eAAgB9J,KAAKkJ,SAAS6O,cAAc7H,GAC/E,CAAC,OAAAhQ,EAAAkb,EAAA,CAAA,CAAArc,IAAA,aAAAC,MAMD,SAAWkK,GACPlJ,KAAKkJ,QAAUA,CACnB,GAAC,CAAAnK,IAAA,aAAAC,MAED,WACI,OAAOgB,KAAKkJ,OAChB,IAAC,CAAA,CAAAnK,IAAA,cAAAC,MAVD,WACI,OAAA4Y,EAAWwD,EAAS/d,MAAA4P,UAAA5O,MAAAgD,KAAIzD,WAC5B,IAAC,CAzCyB,wXHqbb,WACb,IAAMuZ,EAAI,CAAI,YAAUlZ,OAAAZ,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAE7B,OAAOyW,GAAOiD,OAAMtZ,MAAbqW,GAAMnW,EAAWiZ,GAC5B,4BAQkB,WACd,IAAMA,EAAI,CAAI,aAAWlZ,OAAAZ,MAAA4P,UAAA5O,MAAAgD,KAAKzD,YAE9B,OAAOyW,GAAOiD,OAAMtZ,MAAbqW,GAAMnW,EAAWiZ,GAC5B,oDIvee,SAAoB+E,GAC/B,OAAOC,SAASD,IAAeE,KAAKC,IAAIH,IAAe,EAC3D,gBCFe,SAAqBA,GAChC,OAAOC,SAASD,IAAeE,KAAKC,IAAIH,IAAe,KAAOE,KAAKC,IAAIH,IAAe,EAC1F"} \ No newline at end of file diff --git a/dist/cjs/fleetbase.js b/dist/cjs/fleetbase.js deleted file mode 100644 index 513d2dc..0000000 --- a/dist/cjs/fleetbase.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";function t(t,e){this.v=t,this.k=e}function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function g(t,e,n){return(e=j(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function y(t){return y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},y(t)}function b(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&O(t,e)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(m=function(){return!!t})()}function w(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function k(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function x(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function A(t){for(var e=1;e=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;_(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:L(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function O(t,e){return O=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},O(t,e)}function R(t,e){return n(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,s=[],u=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(s.push(r.value),s.length!==e);u=!0);}catch(t){c=!0,i=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(t,e)||_(t,e)||k()}function S(t){return function(t){if(Array.isArray(t))return e(t)}(t)||w(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function j(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}function T(t){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T(t)}function _(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}function P(t){return function(){return new L(t.apply(this,arguments))}}function L(e){var n,r;function i(n,r){try{var a=e[n](r),s=a.value,u=s instanceof t;Promise.resolve(u?s.v:s).then((function(t){if(u){var r="return"===n?"return":"next";if(!s.k||t.done)return i(r,t);t=e[r](t).value}o(a.done?"return":"normal",t)}),(function(t){i("throw",t)}))}catch(t){o("throw",t)}}function o(t,e){switch(t){case"return":n.resolve({value:e,done:!0});break;case"throw":n.reject(e);break;default:n.resolve({value:e,done:!1})}(n=n.next)?i(n.key,n.arg):r=null}this._invoke=function(t,e){return new Promise((function(o,a){var s={key:t,arg:e,resolve:o,reject:a,next:null};r?r=r.next=s:(n=r=s,i(t,e))}))},"function"!=typeof e.return&&(this.return=void 0)}function C(t){var e="function"==typeof Map?new Map:void 0;return C=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return f(t,arguments,y(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),O(n,t)},C(t)}Object.defineProperty(exports,"__esModule",{value:!0}),L.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},L.prototype.next=function(t){return this._invoke("next",t)},L.prototype.throw=function(t){return this._invoke("throw",t)},L.prototype.return=function(t){return this._invoke("return",t)};var N=function(){function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];h(this,t),g(this,"uncountableWords",["equipment","information","rice","money","species","series","fish","sheep","moose","deer","news"]),g(this,"pluralRules",[[new RegExp("(m)an$","gi"),"$1en"],[new RegExp("(pe)rson$","gi"),"$1ople"],[new RegExp("(child)$","gi"),"$1ren"],[new RegExp("^(ox)$","gi"),"$1en"],[new RegExp("(ax|test)is$","gi"),"$1es"],[new RegExp("(octop|vir)us$","gi"),"$1i"],[new RegExp("(alias|status)$","gi"),"$1es"],[new RegExp("(bu)s$","gi"),"$1ses"],[new RegExp("(buffal|tomat|potat)o$","gi"),"$1oes"],[new RegExp("([ti])um$","gi"),"$1a"],[new RegExp("sis$","gi"),"ses"],[new RegExp("(?:([^f])fe|([lr])f)$","gi"),"$1$2ves"],[new RegExp("(hive)$","gi"),"$1s"],[new RegExp("([^aeiouy]|qu)y$","gi"),"$1ies"],[new RegExp("(x|ch|ss|sh)$","gi"),"$1es"],[new RegExp("(matr|vert|ind)ix|ex$","gi"),"$1ices"],[new RegExp("([m|l])ouse$","gi"),"$1ice"],[new RegExp("(quiz)$","gi"),"$1zes"],[new RegExp("s$","gi"),"s"],[new RegExp("$","gi"),"s"]]),g(this,"singularRules",[[new RegExp("(m)en$","gi"),"$1an"],[new RegExp("(pe)ople$","gi"),"$1rson"],[new RegExp("(child)ren$","gi"),"$1"],[new RegExp("([ti])a$","gi"),"$1um"],[new RegExp("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$","gi"),"$1$2sis"],[new RegExp("(hive)s$","gi"),"$1"],[new RegExp("(tive)s$","gi"),"$1"],[new RegExp("(curve)s$","gi"),"$1"],[new RegExp("([lr])ves$","gi"),"$1f"],[new RegExp("([^fo])ves$","gi"),"$1fe"],[new RegExp("([^aeiouy]|qu)ies$","gi"),"$1y"],[new RegExp("(s)eries$","gi"),"$1eries"],[new RegExp("(m)ovies$","gi"),"$1ovie"],[new RegExp("(x|ch|ss|sh)es$","gi"),"$1"],[new RegExp("([m|l])ice$","gi"),"$1ouse"],[new RegExp("(bus)es$","gi"),"$1"],[new RegExp("(o)es$","gi"),"$1"],[new RegExp("(shoe)s$","gi"),"$1"],[new RegExp("(cris|ax|test)es$","gi"),"$1is"],[new RegExp("(octop|vir)i$","gi"),"$1us"],[new RegExp("(alias|status)es$","gi"),"$1"],[new RegExp("^(ox)en","gi"),"$1"],[new RegExp("(vert|ind)ices$","gi"),"$1ex"],[new RegExp("(matr)ices$","gi"),"$1ix"],[new RegExp("(quiz)zes$","gi"),"$1"],[new RegExp("s$","gi"),""]]),g(this,"nonTitlecasedWords",["and","or","nor","a","an","the","so","but","to","of","at","by","from","into","on","onto","off","out","in","over","with","for"]),g(this,"idSuffix",new RegExp("(_ids|_id)$","g")),g(this,"underbar",new RegExp("_","g")),g(this,"spaceOrUnderbar",new RegExp("[ _]","g")),g(this,"uppercase",new RegExp("([A-Z])","g")),g(this,"underbarPrefix",new RegExp("^_")),this.str=e,this.chain=n}return p(t,[{key:"get",value:function(){return this.str}},{key:"applyRules",value:function(t,e,n,r){if(r)t=r;else if(!(n.indexOf(t.toLowerCase())>-1))for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;return t=t||this.str,this.applyRules(t,this.pluralRules,this.uncountableWords,e)}},{key:"singularize",value:function(t,e){return t=t||this.str,this.applyRules(t,this.singularRules,this.uncountableWords,e)}},{key:"camelize",value:function(t,e){for(var n=(t=t||this.str).split("/"),r=0;r1&&void 0!==arguments[1]&&arguments[1];return t=t||this.str,t=this.underscore(this.demodulize(t))+(e?"":"_")+"id",this.str=t,!0===this.chain?this:t}},{key:"ordinalize",value:function(t){for(var e=(t=t||this.str).split(" "),n=0;n2?i-2:0),a=2;a2?n-2:0),i=2;i2?n-2:0),i=2;i1?e-1:0),r=1;r3&&void 0!==arguments[3]?arguments[3]:[];if(J(t))if(r.length<=W)t.splice.apply(t,[e,n].concat(S(r)));else{t.splice(e,n);for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:0,r=t.length,i=n;i2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,i=t.length;return n<0&&(n+=i),Y(t,r&&e!=e?function(t){return t!=t}:function(t){return t===e},n)}function tt(t,e,n){return G(t,e,0,[n]),n}function et(){return f(nt,Array.prototype.slice.call(arguments))}var nt=function(){function t(){return h(this,t),r(J(arguments[0])?l(this,t,S(arguments[0])):l(this,t,arguments))}return b(t,C(Array)),p(t,[{key:"notEmpty",get:function(){return this.length>0}},{key:"empty",get:function(){return 0===this.length}},{key:"first",get:function(){return X(this,0)}},{key:"last",get:function(){return X(this,this.length-1)}},{key:"replace",value:function(t,e){return G(this,t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:[]),this}},{key:"objectsAt",value:function(t){var e=this;return t.map((function(t){return X(e,t)}))}},{key:"objectAt",value:function(t){return X(this,t)}},{key:"indexOf",value:function(t,e){return Z(this,t,e,!1)}},{key:"lastIndexOf",value:function(t,e){var n=this.length;(void 0===e||e>=n)&&(e=n-1),e<0&&(e+=n);for(var r=e;r>=0;r--)if(X(this,r)===t)return r;return-1}},{key:"includes",value:function(t,e){return-1!==Z(this,t,e,!0)}},{key:"findBy",value:function(){return t=this,e=Q.apply(void 0,arguments),-1===(r=Y(t,e.bind(n),0))?void 0:X(t,r);var t,e,n,r}},{key:"findIndexBy",value:function(){return Y(this,Q.apply(void 0,arguments))}},{key:"isEvery",value:function(){return t=this,e=Q.apply(void 0,arguments),r=e.bind(n),-1===Y(t,(function(t,e,n){return!r(t,e,n)}),0);var t,e,n,r}},{key:"isAny",value:function(){return t=this,e=Q.apply(void 0,arguments),-1!==Y(t,e.bind(n),0);var t,e,n}},{key:"invoke",value:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:K,n=[],r=new Set,i="function"==typeof e?e:function(t){return get(t,e)};return t.forEach((function(t){var e=i(t);r.has(e)||(r.add(e),n.push(t))})),n}(this,t)}},{key:"without",value:function(t){if(!this.includes(t))return this;var e=t==t?function(e){return e!==t}:function(t){return t==t};return this.filter(e)}},{key:"clear",value:function(){var t=this.length;return 0===t||this.replace(0,t,[]),this}},{key:"insertAt",value:function(t,e){return tt(this,t,e),this}},{key:"replaceAt",value:function(t,e){return this.replace(t,1,[e])}},{key:"removeAt",value:function(t,e){return function(t,e){return G(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,[]),t}(this,t,e)}},{key:"pushObject",value:function(t){return this.insertAt(this.length,t)}},{key:"pushObjects",value:function(t){return this.replace(this.length,0,t),this}},{key:"popObject",value:function(){var t=this.length;if(0===t)return null;var e=X(this,t-1);return this.removeAt(t-1,1),e}},{key:"shiftObject",value:function(){if(0===this.length)return null;var t=X(this,0);return this.removeAt(0),t}},{key:"unshiftObject",value:function(t){return tt(this,0,t)}},{key:"unshiftObjects",value:function(t){return this.replace(0,0,t),this}},{key:"reverseObjects",value:function(){var t=this.length;if(0===t)return this;var e=this.toArray().reverse();return this.replace(0,t,e),this}},{key:"setObjects",value:function(t){if(0===t.length)return this.clear();var e=this.length;return this.replace(0,e,t),this}},{key:"removeObject",value:function(t){for(var e=this.length||0;--e>=0;){X(this,e)===t&&this.removeAt(e)}return this}},{key:"removeObjects",value:function(t){for(var e=t.length-1;e>=0;e--)this.removeObject(t[e]);return this}},{key:"addObject",value:function(t){return this.includes(t)||this.pushObject(t),this}},{key:"addObjects",value:function(t){var e=this;return t.forEach((function(t){return e.addObject(t)})),this}}])}();function rt(t){var e=null==t;if(e)return e;if("number"==typeof t.size)return!t.size;var n=T(t);if("object"===n){var r=t.size;if("number"==typeof r)return!r}if("number"==typeof t.length&&"function"!==n)return!t.length;if("object"===n){var i=t.length;if("number"==typeof i)return!i}return!1}function it(){var t,e,n;return!("undefined"==typeof process||"object"!==T(null===(t=process)||void 0===t?void 0:t.env)&&-1===(null===(e=process.release)||void 0===e||null===(e=e.name)||void 0===e?void 0:e.search(/node|io.js/))||"undefined"!=typeof window&&"ReactNative"!==(null===(n=window)||void 0===n||null===(n=n.navigator)||void 0===n?void 0:n.product))}function ot(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return it()?M("adapter","NodeAdapter",t):M("adapter","BrowserAdapter",t)}var at=function(){return p((function t(e){h(this,t),this.place=e,this.geometry=null==e?void 0:e.geometry,this.components=this.parseComponents(),this.attributes=this.parseProperties()}),[{key:"parse",value:function(){this.parseComponents(),this.parseProperties()}},{key:"parseComponents",value:function(){var t;return((null===(t=this.place)||void 0===t?void 0:t.address_components)||[]).reduce((function(t,e){return e.types.forEach((function(n){t[n]=e})),t}),{})}},{key:"parseProperties",value:function(){var t,e={streetNumber:this.get("street_number"),streetName:this.get("route"),coordinates:null!==(t=this.geometry)&&void 0!==t&&t.location?Object.values(this.geometry.location):[0,0],city:this.or(["locality","sublocality","sublocality_level_1","neighborhood","administrative_area_level_3","administrative_area_level_2"]),county:this.get("administrative_area_level_2"),stateShort:this.get("administrative_area_level_1",!0),stateLong:this.get("administrative_area_level_1"),countryShort:this.get("country",!0),country:this.get("country",!0),countryLong:this.get("country"),postalCode:this.get("postal_code")};return e.address=[e.streetNumber,e.streetName].filter(Boolean).join(" "),e}},{key:"all",value:function(){return this.attributes}},{key:"or",value:function(){var t,e=v(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]);try{for(e.s();!(t=e.n()).done;){var n=t.value;if(J(n)){var r=n[0],i=n[1];if(this.has(r))return this.get(r,i)}else if(this.has(n))return this.get(n)}}catch(t){e.e(t)}finally{e.f()}return null}},{key:"has",value:function(t){return t in this.components}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t in this.components?e?this.components[t].short_name:this.components[t].long_name:null}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.attributes=A(A({},this.attributes),t),this}},{key:"setAttribute",value:function(t,e){return this.attributes[t]=e,this}},{key:"getAttribute",value:function(t){return this.attributes[t]||null}}])}(),st=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;h(this,t),this.type="Point",this.coordinates=[n,e]}return p(t,[{key:"latitude",get:function(){return this.coordinates[1]}},{key:"longitude",get:function(){return this.coordinates[0]}},{key:"lat",value:function(){return this.latitude}},{key:"lng",value:function(){return this.longitude}},{key:"serialize",value:function(){return{type:"Point",coorindates:[this.lat(),this.lng()]}}},{key:"toJson",value:function(){return this.serialize()}},{key:"toString",value:function(){return"(".concat(this.latitude,", ").concat(this.longitude,")")}}],[{key:"fromGeoJson",value:function(e){var n=R(e.coordinates,2),r=n[0];return new t(n[1],r)}}])}();function ut(t,e){var n=t();return Array.isArray(n)||"object"===T(n)?ct(n,e):null}function ct(t,e){var n,r=t,i=T(t),o="object"===i,a="function"===i,s=Array.isArray(t),u="string"===T(e)&&e.includes(".")?e.split("."):[e];if(s||o){for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:[];if(t.actions=J(e)?e:[e],!J(e))return e instanceof ft&&e.extend(t),t;var n,r=v(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.extendActions(i)}}catch(t){r.e(t)}finally{r.f()}}var ft=function(){return p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;h(this,t),this.actions=e,this.bind=n}),[{key:"extend",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||this.bind;if(!t)return this;if(null!=this&&this.actions&&"object"===T(this.actions))for(var e in this.actions){var n=this.actions[e];"function"==typeof n?lt(t,e,n.bind(t)):lt(t,e,n)}return this}}])}();function dt(t){return t instanceof pt}var pt=function(){return p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};h(this,t),this.attributes=e,this.dirtyAttributes={},this.changes={},this.isLoading=!1,this.isSaving=!1,this.isDestroying=!1,this.isReloading=!1,this.resource=r,this.options=i,this.version=i.version||"v1",this.setAdapter(n)}),[{key:"setAdapter",value:function(t){var e;return this.adapter=t,this.store=q(this.resource,t,{onAfterFetch:this.syncAttributes.bind(this),actions:null===(e=this.options)||void 0===e?void 0:e.actions}),this}},{key:"id",get:function(){return this.getAttribute("id")}},{key:"create",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.mergeAttributes(e);return this.setFlags(["isLoading","isSaving"]),this.store.create(n).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"update",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.setFlags(["isLoading","isSaving"]),this.store.update(this.attributes.id,e).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"destroy",value:function(){var t=this;return this.setFlags(["isLoading","isDestroying"]),this.store.destroy(this.attributes.id).then((function(e){return t.setFlags(["isLoading","isDestroying"],!1),e}))}},{key:"reload",value:function(){var t=this;return this.setFlags(["isLoading","isReloading"]),this.store.findRecord(this.attributes.id).then((function(e){return t.reset(),e}))}},{key:"setFlags",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=["isLoading","isSaving","isReloading","isDestroying"],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=this.getAttributes();return rt(this.id)?this.create(e):!0===t.onlyDirty?this.savedirty():this.update(e)}},{key:"saveDirty",value:function(){for(var t=Object.keys(this.dirtyAttributes),e={},n=0;n0}},{key:"mutate",value:function(t,e){this.attributes[t]=e}},{key:"setAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(null===n&&"object"===T(t))return this.setAttributes(t);var r=null!==(e=null==this?void 0:this.attributes[t])&&void 0!==e?e:null;return lt(this.attributes,t,n),lt(this.dirtyAttributes,t,r),J(null==this?void 0:this.changes[t])||(this.changes[t]=[]),this.changes[t].push({property:t,previousValue:r,value:n,changedAt:new Date}),this}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var e in t)this.setAttribute(e,t[e]);return this}},{key:"getAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=ct(null!==(e=null==this?void 0:this.attributes)&&void 0!==e?e:{},t);return void 0===r?n:r}},{key:"hasAttribute",value:function(t){if(J(t)){var e,n=t,r=Object.keys(null!==(e=this.attributes)&&void 0!==e?e:{});return n.every((function(t){return r.includes(t)}))}return!(null==this||!this.attributes)&&t in this.attributes}},{key:"hasAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this.hasAttribute(t)}},{key:"isAttributeFilled",value:function(t){var e=this;return J(t)?this.hasAttribute(t)&&t.every((function(t){return!rt(e.getAttribute(t))})):this.hasAttribute(t)&&!rt(this.getAttribute(t))}},{key:"getAttributes",value:function(t){var e={};if(null==t)return this.getAttributes(Object.keys(this.attributes));if("string"==typeof t)return this.getAttribute(Array.prototype.slice.call(arguments));if(!J(t))throw new Error("No attribute properties provided!");var n,r=v(t);try{for(r.s();!(n=r.n()).done;){var i,o,a=n.value;if("string"==typeof a){var s=this.getAttribute(a);"object"!==T(null===(i=s)||void 0===i?void 0:i.attributes)||J(null===(o=s)||void 0===o?void 0:o.attributes)||(s=s.attributes),e[a]=s}}}catch(t){r.e(t)}finally{r.f()}return e}},{key:"serialize",value:function(){return this.getAttributes()}},{key:"mergeAttributes",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!==(t=null==this?void 0:this.attributes)&&void 0!==t?t:{};return this.attributes=A(A({},n),e),this.attributes}},{key:"syncAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.attributes=t}}])}();z("resource","Resource",pt);var vt=function(){return p((function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};h(this,t),this.resource=e,this.adapter=n||ot(),this.namespace=F(e),this.storage=et(),this.options=r,this.extendActions(r.actions)}),[{key:"extendActions",value:function(){return ht(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])}},{key:"deposit",value:function(t){return t}},{key:"serialize",value:function(t){return M("resource",$(this.resource),t,this.adapter)}},{key:"afterFetch",value:function(t){return function(t,e){if("function"==typeof t.options.onAfterFetch&&t.options.onAfterFetch(e),J(e)){var n,r=[],i=v(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;r.push(t.afterFetch(o))}}catch(t){i.e(t)}finally{i.f()}return et.apply(void 0,r)}var a=t.serialize(e);return t.deposit(a)}(this,t)}},{key:"create",value:(a=u(E().mark((function t(){var e,n,r,i=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.post("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"update",value:(o=u(E().mark((function t(e){var n,r,i,o=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=o.length>2&&void 0!==o[2]?o[2]:{},t.next=4,this.adapter.put("".concat(this.namespace,"/").concat(e),n,r);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"findRecord",value:(i=u(E().mark((function t(e){var n,r,i=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=3,this.adapter.get("".concat(this.namespace,"/").concat(e),{},n);case 3:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return i.apply(this,arguments)})},{key:"findAll",value:(r=u(E().mark((function t(){var e,n,r=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=r.length>0&&void 0!==r[0]?r[0]:{},t.next=3,this.adapter.get("".concat(this.namespace),{},e);case 3:return n=t.sent,t.abrupt("return",this.afterFetch(n));case 5:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"query",value:(n=u(E().mark((function t(){var e,n,r,i=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.get("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return n.apply(this,arguments)})},{key:"queryRecord",value:(e=u(E().mark((function t(){var e,n,r,i=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},(e=i.length>0&&void 0!==i[0]?i[0]:{}).single=!0,t.next=5,this.adapter.get("".concat(this.namespace),e,n);case 5:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 7:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"destroy",value:(t=u(E().mark((function t(e){var n,r,i,o=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=dt(e)?e.getAttribute("id"):e,t.next=4,this.adapter.delete("".concat(this.namespace,"/").concat(r),{},n);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(e){return t.apply(this,arguments)})}]);var t,e,n,r,i,o,a}();z("store","Store",vt);var gt=new ft({getDistanceAndTime:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/distance-and-time"),e,n)},getNextActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/next-activity"),e,n)},dispatch:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/dispatch"),e,n).then(this.afterFetch.bind(this))},start:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/start"),e,n).then(this.afterFetch.bind(this))},updateActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/update-activity"),e,n).then(this.afterFetch.bind(this))},setDestination:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return dt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/set-destination/").concat(e),n,r).then(this.afterFetch.bind(this))},captureQrCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return dt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-qr").concat(e?"/"+e:""),n,r)},captureSignature:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return dt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-signature").concat(e?"/"+e:""),n,r)},complete:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/complete"),e,n).then(this.afterFetch.bind(this))},cancel:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.delete("".concat(this.namespace,"/").concat(t,"/cancel"),e,n).then(this.afterFetch.bind(this))}}),yt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"order",A({actions:gt},r)])}return b(t,pt),p(t,[{key:"getDistanceAndTime",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getDistanceAndTime(this.id,t,e)}},{key:"dispatch",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.dispatch(this.id,t,e)}},{key:"start",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.start(this.id,t,e)}},{key:"setDestination",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.setDestination(this.id,t,e,n)}},{key:"captureQrCode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureQrCode(this.id,t,e,n)}},{key:"captureSignature",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureSignature(this.id,t,e,n)}},{key:"getNextActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getNextActivity(this.id,t,e)}},{key:"updateActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.updateActivity(this.id,t,e)}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.cancel(this.id,t,e)}},{key:"complete",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.complete(this.id,t,e)}},{key:"isDispatched",get:function(){return null!==this.getAttribute("dispatched_at")}},{key:"isNotDispatched",get:function(){return null==this.getAttribute("dispatched_at")}},{key:"isStarted",get:function(){return null!==this.getAttribute("started_at")}},{key:"isNotStarted",get:function(){return null==this.getAttribute("started_at")}},{key:"isCompleted",get:function(){return"completed"==this.getAttribute("status")}},{key:"isCanceled",get:function(){return"canceled"==this.getAttribute("status")}},{key:"isEnroute",get:function(){return"driver_enroute"==this.getAttribute("status")||"enroute"===this.getAttribute("status")}},{key:"isInProgress",get:function(){return this.isStarted&&!this.isCanceled&&!this.isCompleted}},{key:"scheduledAt",get:function(){return this.isAttributeFilled("scheduled_at")?new Date(this.getAttribute("scheduled_at")):null}},{key:"startedAt",get:function(){return this.isAttributeFilled("started_at")?new Date(this.getAttribute("started_at")):null}},{key:"dispatchedAt",get:function(){return this.isAttributeFilled("dispatched_at")?new Date(this.getAttribute("dispatched_at")):null}},{key:"status",get:function(){return this.getAttribute("status")}}])}();z("resource","Order",yt);var bt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"payload",r])}return b(t,pt),p(t,[{key:"attach",value:function(t){}},{key:"entities",get:function(){var t=this;return et(this.entities.map((function(e){return H("Entity",e,t.adapter)})))}},{key:"dropoff",get:function(){return this.dropoff?H("Place",this.dropoff,this.adapter):null}},{key:"pickup",get:function(){return this.pickup?H("Place",this.pickup,this.adapter):null}},{key:"waypoints",get:function(){var t=this;return et(this.waypoints.map((function(e){return H("Waypoint",e,t.adapter)})))}}])}();z("resource","Payload",bt);var mt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"entity",r])}return b(t,pt),p(t)}();z("resource","Entity",mt);var wt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"place",r])}return b(t,pt),p(t,[{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new st))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new st))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"setOwner",value:function(t){return dt(t)&&this.setAttribute("owner",t.id),"string"==typeof t&&this.setAttribute("owner",t),this}}],[{key:"fromGoogleAddress",value:function(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=R(e.getAttribute("coordinates"),2),o=i[0],a=i[1];return new t({name:null,address:e.getAttribute("address"),location:new st(o,a),street1:e.getAttribute("address"),street2:null,city:e.getAttribute("city"),province:e.getAttribute("stateLong"),postal_code:e.getAttribute("postalCode"),neighborhood:e.get("neighborhood"),district:e.getAttribute("county"),building:e.get("building"),country:e.getAttribute("countryShort"),phone:null,security_access_code:null},n,r)}}])}();z("resource","Place",wt);var kt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"waypoint",r])}return b(t,wt),p(t)}();z("resource","Waypoint",kt);var xt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"tracking-status",r])}return b(t,pt),p(t)}();z("resource","TrackingStatus",xt);var At=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"vehicle",r])}return b(t,pt),p(t)}();z("resource","Vehicle",At);var Et=new ft({current:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.adapter.get("".concat(this.namespace,"/current"),t,e)}}),Ot=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"organization",A({actions:Et},r)])}return b(t,pt),p(t)}();z("resource","Organization",Ot);var Rt=function(t,e){return J(t)?t.map((function(t){return new Ot(t,e)})):new Ot(t,e)},St=new ft({login:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function(){return/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")}(t))return this.adapter.post("drivers/login-with-sms",{phone:t});if(!e)throw new Error("Login requires password!");return this.adapter.post("drivers/login",A({identity:t,password:e},n)).then(this.afterFetch.bind(this))},verifyCode:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/verify-code",A({identity:t,code:e},n)).then(this.afterFetch.bind(this))},track:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/track"),e,n).then(this.afterFetch.bind(this))},listOrganizations:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/organizations"),n,r).then((function(t){return Rt(t,e.adapter)}))},switchOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/switch-organization"),n,r).then((function(t){return Rt(t,e.adapter)}))},currentOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/current-organization"),n,r).then((function(t){return Rt(t,e.adapter)}))},retrieve:function(t){return this.findRecord(t)},syncDevice:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/register-device"),e,n)}}),jt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"driver",A({actions:St},r)])}return b(t,pt),p(t,[{key:"token",get:function(){return this.getAttribute("token")}},{key:"isOnline",get:function(){return!0===this.getAttribute("online")}},{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new st))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new st))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"track",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.track(this.id,t,e)}},{key:"syncDevice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.syncDevice(this.id,t,e)}},{key:"listOrganizations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.listOrganizations(this.id,t,e)}},{key:"switchOrganization",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.switchOrganization(this.id,{next:t},e)}},{key:"currentOrganization",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.currentOrganization(this.id,t,e)}}])}();z("resource","Driver",jt);var Tt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"vendor",r])}return b(t,pt),p(t)}();z("resource","Vendor",Tt);var _t=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"contact",r])}return b(t,pt),p(t)}();z("resource","Contact",_t);var Pt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"zone",r])}return b(t,pt),p(t)}();z("resource","Zone",Pt);var Lt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-area",r])}return b(t,pt),p(t)}();z("resource","ServiceArea",Lt);var Ct=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-rate",r])}return b(t,pt),p(t)}();z("resource","ServiceRate",Ct);var Nt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-quote",r])}return b(t,pt),p(t,[{key:"fromPreliminary",value:function(){}},{key:"fromPayload",value:function(){}}])}();z("resource","ServiceQuote",Nt);var Ft=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"fleet",r])}return b(t,pt),p(t)}();z("resource","Fleet",Ft);var Dt=p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};h(this,t),this.version=e.version||"v1",this.host=e.host||null,this.namespace=e.namespace||null,this.headers=e.headers||{}}));z("adapter","Adapter",Dt);var $t=function(){function t(e){var n;return h(this,t),(n=l(this,t,[e])).setHeaders({Authorization:"Bearer ".concat(e.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;browser"}),n}return b(t,Dt),p(t,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.headers=A(A({},this.headers),t),this}},{key:"parseJSON",value:function(t){return new Promise((function(e,n){t.json().then((function(n){e({statusText:t.statusText,status:t.status,ok:t.ok,json:n})})).catch((function(){n(new Error("Oops! Something went wrong when handling your request."))}))}))}},{key:"request",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise((function(o,a){fetch(i.url||"".concat(e.host,"/").concat(e.namespace,"/").concat(t),A({method:n,mode:i.mode||"cors",headers:new Headers(A(A({},e.headers||{}),i.headers||{}))},r)).then(e.parseJSON).then((function(t){if(t.ok)return o(t.json);a(new Error(t.json.errors?t.json.errors[0]:t.statusText))})).catch((function(t){a(t)}))}))}},{key:"get",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=rt(e=n)||"string"==typeof e&&!1===/\S/.test(e)?"":new URLSearchParams(n).toString();return this.request("".concat(t).concat(i?"?".concat(i):""),"GET",{},r)}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"POST",{body:JSON.stringify(e)},n)}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PUT",{body:JSON.stringify(e)},n)}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request(t,"DELETE",{},e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PATCH",{body:JSON.stringify(e)},n)}}])}();function Ut(t,e){return function(){return t.apply(e,arguments)}}z("adapter","BrowserAdapter",$t);var zt,Bt=Object.prototype.toString,qt=Object.getPrototypeOf,It=(zt=Object.create(null),function(t){var e=Bt.call(t);return zt[e]||(zt[e]=e.slice(8,-1).toLowerCase())}),Mt=function(t){return t=t.toLowerCase(),function(e){return It(e)===t}},Ht=function(t){return function(e){return T(e)===t}},Jt=Array.isArray,Wt=Ht("undefined");var Gt=Mt("ArrayBuffer");var Kt=Ht("string"),Vt=Ht("function"),Xt=Ht("number"),Qt=function(t){return null!==t&&"object"===T(t)},Yt=function(t){if("object"!==It(t))return!1;var e=qt(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},Zt=Mt("Date"),te=Mt("File"),ee=Mt("Blob"),ne=Mt("FileList"),re=Mt("URLSearchParams"),ie=R(["ReadableStream","Request","Response","Headers"].map(Mt),4),oe=ie[0],ae=ie[1],se=ie[2],ue=ie[3];function ce(t,e){var n,r,i=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).allOwnKeys,o=void 0!==i&&i;if(null!=t)if("object"!==T(t)&&(t=[t]),Jt(t))for(n=0,r=t.length;n0;)if(e===(n=r[i]).toLowerCase())return n;return null}var he="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,fe=function(t){return!Wt(t)&&t!==he};var de,pe=(de="undefined"!=typeof Uint8Array&&qt(Uint8Array),function(t){return de&&t instanceof de}),ve=Mt("HTMLFormElement"),ge=function(){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),ye=Mt("RegExp"),be=function(t,e){var n=Object.getOwnPropertyDescriptors(t),r={};ce(n,(function(n,i){var o;!1!==(o=e(n,i,t))&&(r[i]=o||n)})),Object.defineProperties(t,r)},me="abcdefghijklmnopqrstuvwxyz",we="0123456789",ke={DIGIT:we,ALPHA:me,ALPHA_DIGIT:me+me.toUpperCase()+we};var xe,Ae,Ee,Oe,Re=Mt("AsyncFunction"),Se=(xe="function"==typeof setImmediate,Ae=Vt(he.postMessage),xe?setImmediate:Ae?(Ee="axios@".concat(Math.random()),Oe=[],he.addEventListener("message",(function(t){var e=t.source,n=t.data;e===he&&n===Ee&&Oe.length&&Oe.shift()()}),!1),function(t){Oe.push(t),he.postMessage(Ee,"*")}):function(t){return setTimeout(t)}),je="undefined"!=typeof queueMicrotask?queueMicrotask.bind(he):"undefined"!=typeof process&&process.nextTick||Se,Te={isArray:Jt,isArrayBuffer:Gt,isBuffer:function(t){return null!==t&&!Wt(t)&&null!==t.constructor&&!Wt(t.constructor)&&Vt(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:function(t){var e;return t&&("function"==typeof FormData&&t instanceof FormData||Vt(t.append)&&("formdata"===(e=It(t))||"object"===e&&Vt(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Gt(t.buffer)},isString:Kt,isNumber:Xt,isBoolean:function(t){return!0===t||!1===t},isObject:Qt,isPlainObject:Yt,isReadableStream:oe,isRequest:ae,isResponse:se,isHeaders:ue,isUndefined:Wt,isDate:Zt,isFile:te,isBlob:ee,isRegExp:ye,isFunction:Vt,isStream:function(t){return Qt(t)&&Vt(t.pipe)},isURLSearchParams:re,isTypedArray:pe,isFileList:ne,forEach:ce,merge:function t(){for(var e=(fe(this)&&this||{}).caseless,n={},r=function(r,i){var o=e&&le(n,i)||i;Yt(n[o])&&Yt(r)?n[o]=t(n[o],r):Yt(r)?n[o]=t({},r):Jt(r)?n[o]=r.slice():n[o]=r},i=0,o=arguments.length;i3&&void 0!==arguments[3]?arguments[3]:{}).allOwnKeys}),t},trim:function(t){return t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n,r){var i,o,a,s={};if(e=e||{},null==t)return e;do{for(o=(i=Object.getOwnPropertyNames(t)).length;o-- >0;)a=i[o],r&&!r(a,t,e)||s[a]||(e[a]=t[a],s[a]=!0);t=!1!==n&&qt(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:It,kindOfTest:Mt,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;if(Jt(t))return t;var e=t.length;if(!Xt(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},forEachEntry:function(t,e){for(var n,r=(t&&t[Symbol.iterator]).call(t);(n=r.next())&&!n.done;){var i=n.value;e.call(t,i[0],i[1])}},matchAll:function(t,e){for(var n,r=[];null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:ve,hasOwnProperty:ge,hasOwnProp:ge,reduceDescriptors:be,freezeMethods:function(t){be(t,(function(e,n){if(Vt(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=t[n];Vt(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:function(t,e){var n={},r=function(t){t.forEach((function(t){n[t]=!0}))};return Jt(t)?r(t):r(String(t).split(e)),n},toCamelCase:function(t){return t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))},noop:function(){},toFiniteNumber:function(t,e){return null!=t&&Number.isFinite(t=+t)?t:e},findKey:le,global:he,isContextDefined:fe,ALPHABET:ke,generateString:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ke.ALPHA_DIGIT,n="",r=e.length;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&Vt(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:function(t){var e=new Array(10),n=function(t,r){if(Qt(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[r]=t;var i=Jt(t)?[]:{};return ce(t,(function(t,e){var o=n(t,r+1);!Wt(o)&&(i[e]=o)})),e[r]=void 0,i}}return t};return n(t,0)},isAsyncFn:Re,isThenable:function(t){return t&&(Qt(t)||Vt(t))&&Vt(t.then)&&Vt(t.catch)},setImmediate:Se,asap:je};function _e(t,e,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}Te.inherits(_e,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:Te.toJSONObject(this.config),code:this.code,status:this.status}}});var Pe=_e.prototype,Le={};["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((function(t){Le[t]={value:t}})),Object.defineProperties(_e,Le),Object.defineProperty(Pe,"isAxiosError",{value:!0}),_e.from=function(t,e,n,r,i,o){var a=Object.create(Pe);return Te.toFlatObject(t,a,(function(t){return t!==Error.prototype}),(function(t){return"isAxiosError"!==t})),_e.call(a,t.message,e,n,r,i),a.cause=t,a.name=t.name,o&&Object.assign(a,o),a};function Ce(t){return Te.isPlainObject(t)||Te.isArray(t)}function Ne(t){return Te.endsWith(t,"[]")?t.slice(0,-2):t}function Fe(t,e,n){return t?t.concat(e).map((function(t,e){return t=Ne(t),!n&&e?"["+t+"]":t})).join(n?".":""):e}var De=Te.toFlatObject(Te,{},null,(function(t){return/^is[A-Z]/.test(t)}));function $e(t,e,n){if(!Te.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;var r=(n=Te.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!Te.isUndefined(e[t])}))).metaTokens,i=n.visitor||c,o=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Te.isSpecCompliantForm(e);if(!Te.isFunction(i))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(Te.isDate(t))return t.toISOString();if(!s&&Te.isBlob(t))throw new _e("Blob is not supported. Use a Buffer instead.");return Te.isArrayBuffer(t)||Te.isTypedArray(t)?s&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,n,i){var s=t;if(t&&!i&&"object"===T(t))if(Te.endsWith(n,"{}"))n=r?n:n.slice(0,-2),t=JSON.stringify(t);else if(Te.isArray(t)&&function(t){return Te.isArray(t)&&!t.some(Ce)}(t)||(Te.isFileList(t)||Te.endsWith(n,"[]"))&&(s=Te.toArray(t)))return n=Ne(n),s.forEach((function(t,r){!Te.isUndefined(t)&&null!==t&&e.append(!0===a?Fe([n],r,o):null===a?n:n+"[]",u(t))})),!1;return!!Ce(t)||(e.append(Fe(i,n,o),u(t)),!1)}var l=[],h=Object.assign(De,{defaultVisitor:c,convertValue:u,isVisitable:Ce});if(!Te.isObject(t))throw new TypeError("data must be an object");return function t(n,r){if(!Te.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),Te.forEach(n,(function(n,o){!0===(!(Te.isUndefined(n)||null===n)&&i.call(e,n,Te.isString(o)?o.trim():o,r,h))&&t(n,r?r.concat(o):[o])})),l.pop()}}(t),e}function Ue(t){var e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function ze(t,e){this._pairs=[],t&&$e(t,this,e)}var Be=ze.prototype;function qe(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Ie(t,e,n){if(!e)return t;var r=n&&n.encode||qe;Te.isFunction(n)&&(n={serialize:n});var i,o=n&&n.serialize;if(i=o?o(e,n):Te.isURLSearchParams(e)?e.toString():new ze(e,n).toString(r)){var a=t.indexOf("#");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}Be.append=function(t,e){this._pairs.push([t,e])},Be.toString=function(t){var e=t?function(e){return t.call(this,e,Ue)}:Ue;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var Me=function(){return p((function t(){h(this,t),this.handlers=[]}),[{key:"use",value:function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(t){this.handlers[t]&&(this.handlers[t]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(t){Te.forEach(this.handlers,(function(e){null!==e&&t(e)}))}}])}(),He={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Je={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:ze,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},We="undefined"!=typeof window&&"undefined"!=typeof document,Ge="object"===("undefined"==typeof navigator?"undefined":T(navigator))&&navigator||void 0,Ke=We&&(!Ge||["ReactNative","NativeScript","NS"].indexOf(Ge.product)<0),Ve="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Xe=We&&window.location.href||"http://localhost",Qe=A(A({},Object.freeze({__proto__:null,hasBrowserEnv:We,hasStandardBrowserEnv:Ke,hasStandardBrowserWebWorkerEnv:Ve,navigator:Ge,origin:Xe})),Je);function Ye(t){function e(t,n,r,i){var o=t[i++];if("__proto__"===o)return!0;var a=Number.isFinite(+o),s=i>=t.length;return o=!o&&Te.isArray(r)?r.length:o,s?(Te.hasOwnProp(r,o)?r[o]=[r[o],n]:r[o]=n,!a):(r[o]&&Te.isObject(r[o])||(r[o]=[]),e(t,n,r[o],i)&&Te.isArray(r[o])&&(r[o]=function(t){var e,n,r={},i=Object.keys(t),o=i.length;for(e=0;e-1,o=Te.isObject(t);if(o&&Te.isHTMLForm(t)&&(t=new FormData(t)),Te.isFormData(t))return i?JSON.stringify(Ye(t)):t;if(Te.isArrayBuffer(t)||Te.isBuffer(t)||Te.isStream(t)||Te.isFile(t)||Te.isBlob(t)||Te.isReadableStream(t))return t;if(Te.isArrayBufferView(t))return t.buffer;if(Te.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return $e(t,new Qe.classes.URLSearchParams,Object.assign({visitor:function(t,e,n,r){return Qe.isNode&&Te.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((n=Te.isFileList(t))||r.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return $e(n?{"files[]":t}:t,a&&new a,this.formSerializer)}}return o||i?(e.setContentType("application/json",!1),function(t,e){if(Te.isString(t))try{return(e||JSON.parse)(t),Te.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||Ze.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(Te.isResponse(t)||Te.isReadableStream(t))return t;if(t&&Te.isString(t)&&(n&&!this.responseType||r)){var i=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw _e.from(t,_e.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Qe.classes.FormData,Blob:Qe.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Te.forEach(["delete","get","head","post","put","patch"],(function(t){Ze.headers[t]={}}));var tn=Te.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"]),en=Symbol("internals");function nn(t){return t&&String(t).trim().toLowerCase()}function rn(t){return!1===t||null==t?t:Te.isArray(t)?t.map(rn):String(t)}function on(t,e,n,r,i){return Te.isFunction(r)?r.call(this,e,n):(i&&(e=n),Te.isString(e)?Te.isString(r)?-1!==e.indexOf(r):Te.isRegExp(r)?r.test(e):void 0:void 0)}var an=function(){return p((function t(e){h(this,t),e&&this.set(e)}),[{key:"set",value:function(t,e,n){var r=this;function i(t,e,n){var i=nn(e);if(!i)throw new Error("header name must be a non-empty string");var o=Te.findKey(r,i);(!o||void 0===r[o]||!0===n||void 0===n&&!1!==r[o])&&(r[o||e]=rn(t))}var o=function(t,e){return Te.forEach(t,(function(t,n){return i(t,n,e)}))};if(Te.isPlainObject(t)||t instanceof this.constructor)o(t,e);else if(Te.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))o(function(t){var e,n,r,i={};return t&&t.split("\n").forEach((function(t){r=t.indexOf(":"),e=t.substring(0,r).trim().toLowerCase(),n=t.substring(r+1).trim(),!e||i[e]&&tn[e]||("set-cookie"===e?i[e]?i[e].push(n):i[e]=[n]:i[e]=i[e]?i[e]+", "+n:n)})),i}(t),e);else if(Te.isHeaders(t)){var a,s=v(t.entries());try{for(s.s();!(a=s.n()).done;){var u=R(a.value,2),c=u[0];i(u[1],c,n)}}catch(t){s.e(t)}finally{s.f()}}else null!=t&&i(e,t,n);return this}},{key:"get",value:function(t,e){if(t=nn(t)){var n=Te.findKey(this,t);if(n){var r=this[n];if(!e)return r;if(!0===e)return function(t){for(var e,n=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;e=r.exec(t);)n[e[1]]=e[2];return n}(r);if(Te.isFunction(e))return e.call(this,r,n);if(Te.isRegExp(e))return e.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(t,e){if(t=nn(t)){var n=Te.findKey(this,t);return!(!n||void 0===this[n]||e&&!on(0,this[n],n,e))}return!1}},{key:"delete",value:function(t,e){var n=this,r=!1;function i(t){if(t=nn(t)){var i=Te.findKey(n,t);!i||e&&!on(0,n[i],i,e)||(delete n[i],r=!0)}}return Te.isArray(t)?t.forEach(i):i(t),r}},{key:"clear",value:function(t){for(var e=Object.keys(this),n=e.length,r=!1;n--;){var i=e[n];t&&!on(0,this[i],i,t,!0)||(delete this[i],r=!0)}return r}},{key:"normalize",value:function(t){var e=this,n={};return Te.forEach(this,(function(r,i){var o=Te.findKey(n,i);if(o)return e[o]=rn(r),void delete e[i];var a=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))}(i):String(i).trim();a!==i&&delete e[i],e[a]=rn(r),n[a]=!0})),this}},{key:"concat",value:function(){for(var t,e=arguments.length,n=new Array(e),r=0;r1?n-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:3,r=0,i=function(t,e){t=t||10;var n,r=new Array(t),i=new Array(t),o=0,a=0;return e=void 0!==e?e:1e3,function(s){var u=Date.now(),c=i[a];n||(n=u),r[o]=s,i[o]=u;for(var l=a,h=0;l!==o;)h+=r[l++],l%=t;if((o=(o+1)%t)===a&&(a=(a+1)%t),!(u-n1&&void 0!==arguments[1]?arguments[1]:Date.now();i=o,n=null,r&&(clearTimeout(r),r=null),t.apply(null,e)};return[function(){for(var t=Date.now(),e=t-i,s=arguments.length,u=new Array(s),c=0;c=o?a(u,t):(n=u,r||(r=setTimeout((function(){r=null,a(n)}),o-e)))},function(){return n&&a(n)}]}((function(n){var o=n.loaded,a=n.lengthComputable?n.total:void 0,s=o-r,u=i(s);r=o;var c=g({loaded:o,total:a,progress:a?o/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&o<=a?(a-o)/u:void 0,event:n,lengthComputable:null!=a},e?"download":"upload",!0);t(c)}),n)},fn=function(t,e){var n=null!=t;return[function(r){return e[0]({lengthComputable:n,total:t,loaded:r})},e[1]]},dn=function(t){return function(){for(var e=arguments.length,n=new Array(e),r=0;r1?e-1:0),r=1;r1?"since :\n"+s.map(zn).join("\n"):" "+zn(s[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function In(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new cn(null,t)}function Mn(t){return In(t),t.headers=an.from(t.headers),t.data=sn.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1),qn(t.adapter||Ze.adapter)(t).then((function(e){return In(t),e.data=sn.call(t,t.transformResponse,e),e.headers=an.from(e.headers),e}),(function(e){return un(e)||(In(t),e&&e.response&&(e.response.data=sn.call(t,t.transformResponse,e.response),e.response.headers=an.from(e.response.headers))),Promise.reject(e)}))}var Hn="1.7.9",Jn={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Jn[t]=function(n){return T(n)===t||"a"+(e<1?"n ":" ")+t}}));var Wn={};Jn.transitional=function(t,e,n){function r(t,e){return"[Axios v1.7.9] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,o){if(!1===t)throw new _e(r(i," has been removed"+(e?" in "+e:"")),_e.ERR_DEPRECATED);return e&&!Wn[i]&&(Wn[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,o)}},Jn.spelling=function(t){return function(e,n){return console.warn("".concat(n," is likely a misspelling of ").concat(t)),!0}};var Gn={assertOptions:function(t,e,n){if("object"!==T(t))throw new _e("options must be an object",_e.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],a=e[o];if(a){var s=t[o],u=void 0===s||a(s,o,t);if(!0!==u)throw new _e("option "+o+" must be "+u,_e.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new _e("Unknown option "+o,_e.ERR_BAD_OPTION)}},validators:Jn},Kn=Gn.validators,Vn=function(){return p((function t(e){h(this,t),this.defaults=e,this.interceptors={request:new Me,response:new Me}}),[{key:"request",value:(t=u(E().mark((function t(e,n){var r,i;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this._request(e,n);case 3:return t.abrupt("return",t.sent);case 6:if(t.prev=6,t.t0=t.catch(0),t.t0 instanceof Error){r={},Error.captureStackTrace?Error.captureStackTrace(r):r=new Error,i=r.stack?r.stack.replace(/^.+\n/,""):"";try{t.t0.stack?i&&!String(t.t0.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(t.t0.stack+="\n"+i):t.t0.stack=i}catch(t){}}throw t.t0;case 10:case"end":return t.stop()}}),t,this,[[0,6]])}))),function(e,n){return t.apply(this,arguments)})},{key:"_request",value:function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{};var n=e=bn(this.defaults,e),r=n.transitional,i=n.paramsSerializer,o=n.headers;void 0!==r&&Gn.assertOptions(r,{silentJSONParsing:Kn.transitional(Kn.boolean),forcedJSONParsing:Kn.transitional(Kn.boolean),clarifyTimeoutError:Kn.transitional(Kn.boolean)},!1),null!=i&&(Te.isFunction(i)?e.paramsSerializer={serialize:i}:Gn.assertOptions(i,{encode:Kn.function,serialize:Kn.function},!0)),Gn.assertOptions(e,{baseUrl:Kn.spelling("baseURL"),withXsrfToken:Kn.spelling("withXSRFToken")},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase();var a=o&&Te.merge(o.common,o[e.method]);o&&Te.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete o[t]})),e.headers=an.concat(a,o);var s=[],u=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(u=u&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));var c,l=[];this.interceptors.response.forEach((function(t){l.push(t.fulfilled,t.rejected)}));var h,f=0;if(!u){var d=[Mn.bind(this),void 0];for(d.unshift.apply(d,s),d.push.apply(d,l),h=d.length,c=Promise.resolve(e);f0;)r._listeners[e](t);r._listeners=null}})),this.promise.then=function(t){var e,n=new Promise((function(t){r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},e((function(t,e,i){r.reason||(r.reason=new cn(t,e,i),n(r.reason))}))}return p(t,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}},{key:"unsubscribe",value:function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}}},{key:"toAbortSignal",value:function(){var t=this,e=new AbortController,n=function(t){e.abort(t)};return this.subscribe(n),e.signal.unsubscribe=function(){return t.unsubscribe(n)},e.signal}}],[{key:"source",value:function(){var e;return{token:new t((function(t){e=t})),cancel:e}}}])}();var Qn={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(Qn).forEach((function(t){var e=R(t,2),n=e[0],r=e[1];Qn[r]=n}));var Yn=function t(e){var n=new Vn(e),r=Ut(Vn.prototype.request,n);return Te.extend(r,Vn.prototype,n,{allOwnKeys:!0}),Te.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return t(bn(e,n))},r}(Ze);Yn.Axios=Vn,Yn.CanceledError=cn,Yn.CancelToken=Xn,Yn.isCancel=un,Yn.VERSION=Hn,Yn.toFormData=$e,Yn.AxiosError=_e,Yn.Cancel=Yn.CanceledError,Yn.all=function(t){return Promise.all(t)},Yn.spread=function(t){return function(e){return t.apply(null,e)}},Yn.isAxiosError=function(t){return Te.isObject(t)&&!0===t.isAxiosError},Yn.mergeConfig=bn,Yn.AxiosHeaders=an,Yn.formToJSON=function(t){return Ye(Te.isHTMLForm(t)?new FormData(t):t)},Yn.getAdapter=qn,Yn.HttpStatusCode=Qn,Yn.default=Yn,Yn.Axios,Yn.AxiosError,Yn.CanceledError,Yn.isCancel,Yn.CancelToken,Yn.VERSION,Yn.all,Yn.Cancel,Yn.isAxiosError,Yn.spread,Yn.toFormData,Yn.AxiosHeaders,Yn.HttpStatusCode,Yn.formToJSON,Yn.getAdapter,Yn.mergeConfig;var Zn=function(){function t(e){var n;return h(this,t),(n=l(this,t,[e])).axiosInstance=Yn.create({baseURL:"".concat(n.host,"/").concat(n.namespace),headers:{Authorization:"Bearer ".concat(e.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;node"}}),n.axiosInstance.interceptors.response.use((function(t){return t.data}),(function(t){if(t.response){var e=t.response.data;if(J(e.errors)&&e.errors.length)throw new Error(e.errors[0]);if(e.error)throw new Error(e.error)}throw t})),n}return b(t,Dt),p(t,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.axiosInstance.defaults.headers.common=A(A({},this.axiosInstance.defaults.headers.common),t),this}},{key:"request",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.axiosInstance.request(A({method:t,url:e},n))}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("GET",t,A({params:e},n))}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("POST",t,A({data:e},n))}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PUT",t,A({data:e},n))}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request("DELETE",t,e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PATCH",t,A({data:e},n))}}])}();z("adapter","NodeAdapter",Zn);var tr=function(){function t(){return h(this,t),l(this,t,arguments)}return b(t,Dt),p(t)}();z("adapter","EmberJsAdapter",tr);var er=function(){function t(e){var n,r,i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(h(this,t),this.version=null!==(n=o.version)&&void 0!==n?n:"v1",this.options={version:this.version,host:null!==(r=o.host)&&void 0!==r?r:"https://api.fleetbase.io",namespace:null!==(i=o.namespace)&&void 0!==i?i:this.version,debug:a,publicKey:e},"string"!=typeof e||0===e.length)throw new Error("⚠️ Invalid public key given to Fleetbase SDK");if(!it()&&e.toLowerCase().startsWith("$"))throw new Error("Secret key provided. You must use a public key with Fleetbase Javascript SDK!");this.adapter=o.adapter||ot(this.options),this.orders=new vt("order",this.adapter).extendActions(gt),this.entities=new vt("entity",this.adapter),this.places=new vt("place",this.adapter),this.drivers=new vt("driver",this.adapter).extendActions(St),this.vehicles=new vt("vehicle",this.adapter),this.vendors=new vt("vendor",this.adapter),this.contacts=new vt("contact",this.adapter),this.serviceAreas=new vt("service-area",this.adapter),this.zones=new vt("zone",this.adapter),this.fleets=new vt("fleet",this.adapter),this.organizations=new vt("organization",this.adapter).extendActions(Et)}return p(t,[{key:"setAdapter",value:function(t){this.adapter=t}},{key:"getAdapter",value:function(){return this.adapter}}],[{key:"newInstance",value:function(){return f(t,Array.prototype.slice.call(arguments))}}])}();exports.Adapter=Dt,exports.BrowserAdapter=$t,exports.Collection=nt,exports.Contact=_t,exports.Driver=jt,exports.EmberJsAdapter=tr,exports.Entity=mt,exports.Fleet=Ft,exports.GoogleAddress=at,exports.NodeAdapter=Zn,exports.Order=yt,exports.Organization=Ot,exports.Payload=bt,exports.Place=wt,exports.Point=st,exports.Resolver=I,exports.Resource=pt,exports.ServiceArea=Lt,exports.ServiceQuote=Nt,exports.ServiceRate=Ct,exports.Store=vt,exports.StoreActions=ft,exports.TrackingStatus=xt,exports.Vehicle=At,exports.Vendor=Tt,exports.Waypoint=kt,exports.Zone=Pt,exports.camelize=function(){var t=["camelize"].concat(Array.prototype.slice.call(arguments));return N.invoke.apply(N,S(t))},exports.classify=$,exports.createCollection=et,exports.createResource=function(){return B.apply(void 0,["resource","Resource"].concat(Array.prototype.slice.call(arguments)))},exports.createStore=q,exports.createStoreActions=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r=90},exports.isNodeEnvironment=it,exports.isResource=dt,exports.lookup=M,exports.pluralize=F,exports.register=z,exports.resolve=function(t,e){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i \"Hello world\"\n *\n * instance\n * const string = new String();\n * string.humanize('hello_world').get() => \"Hello world\"\n *\n * no chain\n * new String('hello_world', false).humanize() => \"Hello world\"\n *\n * static\n * String.invoke('humanize', 'hello_world') => \"Hello world\"\n *\n * exports {}\n * humanize('hello_world') => \"Hello world\"\n */\nexport default class String {\n constructor(string, chain = true) {\n this.str = string;\n this.chain = chain;\n }\n\n uncountableWords = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news'];\n\n pluralRules = [\n [new RegExp('(m)an$', 'gi'), '$1en'],\n [new RegExp('(pe)rson$', 'gi'), '$1ople'],\n [new RegExp('(child)$', 'gi'), '$1ren'],\n [new RegExp('^(ox)$', 'gi'), '$1en'],\n [new RegExp('(ax|test)is$', 'gi'), '$1es'],\n [new RegExp('(octop|vir)us$', 'gi'), '$1i'],\n [new RegExp('(alias|status)$', 'gi'), '$1es'],\n [new RegExp('(bu)s$', 'gi'), '$1ses'],\n [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],\n [new RegExp('([ti])um$', 'gi'), '$1a'],\n [new RegExp('sis$', 'gi'), 'ses'],\n [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'), '$1$2ves'],\n [new RegExp('(hive)$', 'gi'), '$1s'],\n [new RegExp('([^aeiouy]|qu)y$', 'gi'), '$1ies'],\n [new RegExp('(x|ch|ss|sh)$', 'gi'), '$1es'],\n [new RegExp('(matr|vert|ind)ix|ex$', 'gi'), '$1ices'],\n [new RegExp('([m|l])ouse$', 'gi'), '$1ice'],\n [new RegExp('(quiz)$', 'gi'), '$1zes'],\n [new RegExp('s$', 'gi'), 's'],\n [new RegExp('$', 'gi'), 's'],\n ];\n\n singularRules = [\n [new RegExp('(m)en$', 'gi'), '$1an'],\n [new RegExp('(pe)ople$', 'gi'), '$1rson'],\n [new RegExp('(child)ren$', 'gi'), '$1'],\n [new RegExp('([ti])a$', 'gi'), '$1um'],\n [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'), '$1$2sis'],\n [new RegExp('(hive)s$', 'gi'), '$1'],\n [new RegExp('(tive)s$', 'gi'), '$1'],\n [new RegExp('(curve)s$', 'gi'), '$1'],\n [new RegExp('([lr])ves$', 'gi'), '$1f'],\n [new RegExp('([^fo])ves$', 'gi'), '$1fe'],\n [new RegExp('([^aeiouy]|qu)ies$', 'gi'), '$1y'],\n [new RegExp('(s)eries$', 'gi'), '$1eries'],\n [new RegExp('(m)ovies$', 'gi'), '$1ovie'],\n [new RegExp('(x|ch|ss|sh)es$', 'gi'), '$1'],\n [new RegExp('([m|l])ice$', 'gi'), '$1ouse'],\n [new RegExp('(bus)es$', 'gi'), '$1'],\n [new RegExp('(o)es$', 'gi'), '$1'],\n [new RegExp('(shoe)s$', 'gi'), '$1'],\n [new RegExp('(cris|ax|test)es$', 'gi'), '$1is'],\n [new RegExp('(octop|vir)i$', 'gi'), '$1us'],\n [new RegExp('(alias|status)es$', 'gi'), '$1'],\n [new RegExp('^(ox)en', 'gi'), '$1'],\n [new RegExp('(vert|ind)ices$', 'gi'), '$1ex'],\n [new RegExp('(matr)ices$', 'gi'), '$1ix'],\n [new RegExp('(quiz)zes$', 'gi'), '$1'],\n [new RegExp('s$', 'gi'), ''],\n ];\n\n nonTitlecasedWords = ['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for'];\n\n idSuffix = new RegExp('(_ids|_id)$', 'g');\n underbar = new RegExp('_', 'g');\n spaceOrUnderbar = new RegExp('[ _]', 'g');\n uppercase = new RegExp('([A-Z])', 'g');\n underbarPrefix = new RegExp('^_');\n\n get() {\n return this.str;\n }\n\n applyRules(str, rules, skip, override) {\n if (override) {\n str = override;\n } else {\n var ignore = skip.indexOf(str.toLowerCase()) > -1;\n if (!ignore) {\n for (var x = 0; x < rules.length; x++) {\n if (str.match(rules[x][0])) {\n str = str.replace(rules[x][0], rules[x][1]);\n break;\n }\n }\n }\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.pluralize('person') -> 'people'\n String.pluralize('octopus') -> 'octopi'\n String.pluralize('Hat') -> 'Hats'\n String.pluralize('person', 'guys') -> 'guys' \n */\n pluralize(str, plural = null) {\n str = str || this.str;\n\n return this.applyRules(str, this.pluralRules, this.uncountableWords, plural);\n }\n\n /*\n String.singularize('person') -> 'person'\n String.singularize('octopi') -> 'octopus'\n String.singularize('hats') -> 'hat'\n String.singularize('guys', 'person') -> 'person'\n */\n singularize(str, singular) {\n str = str || this.str;\n\n return this.applyRules(str, this.singularRules, this.uncountableWords, singular);\n }\n\n /*\n String.camelize('message_properties') -> 'MessageProperties'\n String.camelize('message_properties', true) -> 'messageProperties'\n */\n camelize(str, lowFirstLetter) {\n str = str || this.str;\n\n let str_path = str.split('/');\n for (var i = 0; i < str_path.length; i++) {\n let str_arr = str_path[i].split('_');\n let initX = lowFirstLetter && i + 1 === str_path.length ? 1 : 0;\n\n for (let x = initX; x < str_arr.length; x++) {\n str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1);\n }\n str_path[i] = str_arr.join('');\n }\n str = str_path.join('::');\n\n // fix\n if (lowFirstLetter === true) {\n let first = str.charAt(0).toLowerCase();\n let last = str.slice(1);\n str = first + last;\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.underscore('MessageProperties') -> 'message_properties'\n String.underscore('messageProperties') -> 'message_properties'\n */\n underscore(str) {\n str = str || this.str;\n\n var str_path = str.split('::');\n for (var i = 0; i < str_path.length; i++) {\n str_path[i] = str_path[i].replace(this.uppercase, '_$1');\n str_path[i] = str_path[i].replace(this.underbarPrefix, '');\n }\n str = str_path.join('/').toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.humanize('message_properties') -> 'Message properties'\n String.humanize('message_properties') -> 'message properties'\n */\n humanize(str, lowFirstLetter) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.replace(this.idSuffix, '');\n str = str.replace(this.underbar, ' ');\n if (!lowFirstLetter) {\n str = this.capitalize(str);\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.capitalize('message_properties') -> 'Message_properties'\n String.capitalize('message properties') -> 'Message properties'\n */\n capitalize(str) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.dasherize('message_properties') -> 'message-properties'\n String.dasherize('message properties') -> 'message-properties'\n */\n dasherize(str) {\n str = str || this.str;\n\n str = str.replace(this.spaceOrUnderbar, '-');\n str = str.toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.normify('message_properties') -> 'Message Properties'\n String.normify('message properties') -> 'Message Properties'\n Inflactor.normify('Message_propertyId', true) -> 'Message Properties Id'\n */\n normify(str, allFirstUpper) {\n str = str || this.str;\n\n //var str = str.toLowerCase();\n if (allFirstUpper === true) {\n str = this.camelize(str);\n str = this.underscore(str);\n } else {\n str = str.toLowerCase();\n }\n\n str = str.replace(this.underbar, ' ');\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var d = str_arr[x].split('-');\n for (var i = 0; i < d.length; i++) {\n if (this.nonTitlecasedWords.indexOf(d[i].toLowerCase()) < 0) {\n d[i] = this.capitalize(d[i]);\n }\n }\n str_arr[x] = d.join('-');\n }\n str = str_arr.join(' ');\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.demodulize('Message::Bus::Properties') -> 'Properties'\n */\n demodulize(str) {\n str = str || this.str;\n\n var str_arr = str.split('::');\n str = str_arr[str_arr.length - 1];\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.tableize('MessageBusProperty') -> 'message_bus_properties'\n */\n tableize(str) {\n str = str || this.str;\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n str = this.pluralize(this.underscore(str));\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.classify('message_bus_properties') -> 'MessageBusProperty'\n */\n classify(str) {\n // Use the provided string or fallback to the instance's string.\n str = str || this.str;\n // Ensure we're working with a string and remove any extra whitespace.\n str = `${str}`.trim();\n\n // Normalize the input:\n // Replace one or more spaces, dashes, or underscores with a single underscore.\n // This handles cases like \"service-area\", \"service area\", \"service_area\", etc.\n str = str.replace(/[\\s\\-_]+/g, '_');\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n // First, singularize the underscored string.\n str = this.singularize(str);\n\n // Next, camelize the result.\n // Passing false for the lowFirstLetter parameter ensures the first letter is capitalized.\n str = this.camelize(str, false);\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // Update the instance's string.\n this.str = str;\n\n // Return the instance if chaining is enabled, or the string otherwise.\n return this.chain ? this : str;\n }\n\n /*\n String.foreignKey('MessageBusProperty') -> 'message_bus_property_id'\n String.foreignKey('MessageBusProperty', true) -> 'message_bus_propertyid'\n */\n foreignKey(str, dropIdUbar = false) {\n str = str || this.str;\n\n str = this.underscore(this.demodulize(str)) + (dropIdUbar ? '' : '_') + 'id';\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.ordinalize('the 1 pitch') -> 'the 1st pitch'\n */\n ordinalize(str) {\n str = str || this.str;\n\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var i = parseInt(str_arr[x]);\n if (isNaN(i)) {\n var ltd = str_arr[x].substring(str_arr[x].length - 2);\n var ld = str_arr[x].substring(str_arr[x].length - 1);\n var suf = 'th';\n if (ltd != '11' && ltd != '12' && ltd != '13') {\n if (ld === '1') {\n suf = 'st';\n } else if (ld === '2') {\n suf = 'nd';\n } else if (ld === '3') {\n suf = 'rd';\n }\n }\n str_arr[x] += suf;\n }\n }\n str = str_arr.join(' ');\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /**\n * @method invoke\n **/\n static invoke() {\n const argz = Object.values(arguments);\n const instance = new String(null, false);\n const method = arguments[0];\n argz.shift();\n\n if (typeof instance[method] === 'function') {\n return instance[method](...argz);\n }\n\n return null;\n }\n}\n\nexport const pluralize = function () {\n const argz = ['pluralize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const singularize = function () {\n const argz = ['singularize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const humanize = function () {\n const argz = ['humanize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const underscore = function () {\n const argz = ['underscore', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const camelize = function () {\n const argz = ['camelize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const capitalize = function () {\n const argz = ['capitalize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const dasherize = function () {\n const argz = ['dasherize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const normify = function () {\n const argz = ['normify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const demodulize = function () {\n const argz = ['demodulize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const tableize = function () {\n const argz = ['tableize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const classify = function () {\n const argz = ['classify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const foreignKey = function () {\n const argz = ['foreignKey', ...arguments];\n\n return String.invoke(...argz);\n};\n","import { pluralize, singularize } from './utils/string.js';\n\nexport const registry = {\n resources: {},\n adapters: {},\n storse: {},\n actions: {},\n};\n\nexport function register(type, className, cls) {\n const key = pluralize(type);\n if (!registry[key]) {\n registry[key] = {};\n }\n registry[key][className] = cls;\n}\n\nexport function create(type, className, ...params) {\n const key = pluralize(type);\n if (!registry[key]) {\n throw new Error(`Unknown type: ${singularize(type)}`);\n }\n if (!registry[key][className]) {\n throw new Error(`No ${singularize(type)} named '${className}' registered.`);\n }\n const ResourceClass = registry[key][className];\n return new ResourceClass(...params);\n}\n\nexport function createStore() {\n return create('store', 'Store', ...arguments);\n}\n\nexport function createAdapter() {\n return create('adapter', 'Adapter', ...arguments);\n}\n\nexport function createResource() {\n return create('resource', 'Resource', ...arguments);\n}\n","import { create } from './registry.js';\nimport { classify } from './utils/string.js';\n\nexport default class Resolver {\n constructor() {\n return this.lookup(...arguments);\n }\n\n lookup(type, className, ...params) {\n return create(type, className, ...params);\n }\n}\n\nexport function lookup(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\n// alias for lookup\nexport function resolve(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\nexport function resolveResource(className, ...params) {\n return lookup('resource', classify(className), ...params);\n}\n\nexport function resolveAdapter(className, ...params) {\n return lookup('adapter', classify(className), ...params);\n}\n","const { isArray } = Array;\n\nexport { isArray };\n","/* eslint no-undef: \"off\" */\nimport { isArray } from './array.js';\n\n/**\n * Collection\n * Extended array inspired by Ember's NativeArray\n **/\nconst CHUNK_SIZE = 60000;\n\n// To avoid overflowing the stack, we splice up to CHUNK_SIZE items at a time.\n// See https://code.google.com/p/chromium/issues/detail?id=56588 for more details.\nexport function replace(array, start, deleteCount, items = []) {\n if (isArray(array)) {\n if (items.length <= CHUNK_SIZE) {\n array.splice(start, deleteCount, ...items);\n } else {\n array.splice(start, deleteCount);\n\n for (let i = 0; i < items.length; i += CHUNK_SIZE) {\n let chunk = items.slice(i, i + CHUNK_SIZE);\n array.splice(start + i, 0, ...chunk);\n }\n }\n } else if (isCollection(array)) {\n array.replace(start, deleteCount, items);\n }\n}\n\nexport function identityFunction(item) {\n return item;\n}\n\nexport function uniqBy(array, key = identityFunction) {\n let ret = [];\n let seen = new Set();\n let getter = typeof key === 'function' ? key : (item) => get(item, key);\n\n array.forEach(function (item) {\n let val = getter(item);\n if (!seen.has(val)) {\n seen.add(val);\n ret.push(item);\n }\n });\n\n return ret;\n}\n\nexport function isCollection(mixed) {\n return mixed instanceof Collection;\n}\n\nexport function objectAt(array, index) {\n if (isArray(array)) {\n return array[index];\n } else if (isCollection(array)) {\n return array.objectAt(index);\n }\n\n return null;\n}\n\nexport function iter(key, value) {\n let valueProvided = arguments.length === 2;\n return valueProvided\n ? function (item) {\n return value === item[key];\n }\n : function (item) {\n return Boolean(item[key]);\n };\n}\n\nexport function findIndex(array, predicate, startAt = 0) {\n let len = array.length;\n for (let index = startAt; index < len; index++) {\n let item = objectAt(array, index);\n if (predicate(item, index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport function find(array, callback, target) {\n let predicate = callback.bind(target);\n let index = findIndex(array, predicate, 0);\n return index === -1 ? undefined : objectAt(array, index);\n}\n\nexport function any(array, callback, target) {\n let predicate = callback.bind(target);\n return findIndex(array, predicate, 0) !== -1;\n}\n\nexport function every(array, callback, target) {\n let cb = callback.bind(target);\n let predicate = function (item, index, array) {\n return !cb(item, index, array);\n };\n return findIndex(array, predicate, 0) === -1;\n}\n\nexport function indexOf(array, val, startAt = 0, withNaNCheck) {\n let len = array.length;\n\n if (startAt < 0) {\n startAt += len;\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate =\n withNaNCheck && val !== val\n ? function (item) {\n return item !== item;\n }\n : function (item) {\n return item === val;\n };\n return findIndex(array, predicate, startAt);\n}\n\nexport function removeAt(array, index, len = 1) {\n replace(array, index, len, []);\n return array;\n}\n\nexport function insertAt(array, index, item) {\n replace(array, index, 0, [item]);\n return item;\n}\n\nexport function createCollection() {\n return new Collection(...arguments);\n}\n\nexport default class Collection extends Array {\n constructor() {\n if (isArray(arguments[0])) {\n super(...arguments[0]);\n } else {\n super(...arguments);\n }\n }\n\n get notEmpty() {\n return this.length > 0;\n }\n\n get empty() {\n return this.length === 0;\n }\n\n get first() {\n return objectAt(this, 0);\n }\n\n get last() {\n return objectAt(this, this.length - 1);\n }\n\n replace(start, deleteCount, items = []) {\n replace(this, start, deleteCount, items);\n\n return this;\n }\n\n objectsAt(indexes) {\n return indexes.map((idx) => objectAt(this, idx));\n }\n\n objectAt(index) {\n return objectAt(this, index);\n }\n\n indexOf(object, startAt) {\n return indexOf(this, object, startAt, false);\n }\n\n lastIndexOf(object, startAt) {\n let len = this.length;\n\n if (startAt === undefined || startAt >= len) {\n startAt = len - 1;\n }\n\n if (startAt < 0) {\n startAt += len;\n }\n\n for (let idx = startAt; idx >= 0; idx--) {\n if (objectAt(this, idx) === object) {\n return idx;\n }\n }\n\n return -1;\n }\n\n includes(object, startAt) {\n return indexOf(this, object, startAt, true) !== -1;\n }\n\n findBy() {\n return find(this, iter(...arguments));\n }\n\n findIndexBy() {\n return findIndex(this, iter(...arguments));\n }\n\n isEvery() {\n return every(this, iter(...arguments));\n }\n\n isAny() {\n return any(this, iter(...arguments));\n }\n\n invoke(methodName, ...args) {\n let ret = [];\n\n this.forEach((item) => ret.push(item[methodName]?.(...args)));\n\n return ret;\n }\n\n toArray() {\n return this.map((item) => item);\n }\n\n compact() {\n return this.filter((value) => value != null);\n }\n\n sortBy() {\n let sortKeys = arguments;\n\n return this.sort((a, b) => {\n for (const element of sortKeys) {\n let key = element;\n let propA = a[key];\n let propB = b[key];\n // return 1 or -1 else continue to the next sortKey\n let compareValue = compare(propA, propB);\n\n if (compareValue) {\n return compareValue;\n }\n }\n return 0;\n });\n }\n\n uniqBy(key) {\n return uniqBy(this, key);\n }\n\n without(value) {\n if (!this.includes(value)) {\n return this; // nothing to do\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate = value === value ? (item) => item !== value : (item) => item === item;\n return this.filter(predicate);\n }\n\n clear() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n this.replace(0, len, []);\n return this;\n }\n\n insertAt(idx, object) {\n insertAt(this, idx, object);\n return this;\n }\n\n replaceAt(idx, object) {\n return this.replace(idx, 1, [object]);\n }\n\n removeAt(start, len) {\n return removeAt(this, start, len);\n }\n\n pushObject(obj) {\n return this.insertAt(this.length, obj);\n }\n\n pushObjects(objects) {\n this.replace(this.length, 0, objects);\n return this;\n }\n\n popObject() {\n let len = this.length;\n if (len === 0) {\n return null;\n }\n\n let ret = objectAt(this, len - 1);\n this.removeAt(len - 1, 1);\n return ret;\n }\n\n shiftObject() {\n if (this.length === 0) {\n return null;\n }\n\n let ret = objectAt(this, 0);\n this.removeAt(0);\n return ret;\n }\n\n unshiftObject(obj) {\n return insertAt(this, 0, obj);\n }\n\n unshiftObjects(objects) {\n this.replace(0, 0, objects);\n return this;\n }\n\n reverseObjects() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n let objects = this.toArray().reverse();\n this.replace(0, len, objects);\n return this;\n }\n\n setObjects(objects) {\n if (objects.length === 0) {\n return this.clear();\n }\n\n let len = this.length;\n this.replace(0, len, objects);\n return this;\n }\n\n removeObject(obj) {\n let loc = this.length || 0;\n while (--loc >= 0) {\n let curObject = objectAt(this, loc);\n\n if (curObject === obj) {\n this.removeAt(loc);\n }\n }\n return this;\n }\n\n removeObjects(objects) {\n for (let i = objects.length - 1; i >= 0; i--) {\n this.removeObject(objects[i]);\n }\n\n return this;\n }\n\n addObject(obj) {\n let included = this.includes(obj);\n\n if (!included) {\n this.pushObject(obj);\n }\n\n return this;\n }\n\n addObjects(objects) {\n objects.forEach((obj) => this.addObject(obj));\n return this;\n }\n}\n","export function isEmpty(obj) {\n const none = obj === null || obj === undefined;\n if (none) {\n return none;\n }\n\n if (typeof obj.size === 'number') {\n return !obj.size;\n }\n\n const objectType = typeof obj;\n\n if (objectType === 'object') {\n const { size } = obj;\n if (typeof size === 'number') {\n return !size;\n }\n }\n\n if (typeof obj.length === 'number' && objectType !== 'function') {\n return !obj.length;\n }\n\n if (objectType === 'object') {\n const { length } = obj;\n if (typeof length === 'number') {\n return !length;\n }\n }\n\n return false;\n}\n\nexport default isEmpty;\n","/**\n * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative.\n *\n * @returns boolean\n */\nexport function isNodeEnvironment() {\n return (\n typeof process !== 'undefined' &&\n (typeof process?.env === 'object' || process.release?.name?.search(/node|io.js/) !== -1) &&\n (typeof window === 'undefined' || window?.navigator?.product === 'ReactNative')\n );\n}\n\nexport default isNodeEnvironment;\n","import { lookup } from '../resolver.js';\nimport isNodeEnvironment from './is-node-environment.js';\n\nexport function detectAdapter(options = {}) {\n if (isNodeEnvironment()) {\n return lookup('adapter', 'NodeAdapter', options);\n }\n\n return lookup('adapter', 'BrowserAdapter', options);\n}\n\nexport default detectAdapter;\n","import { isArray } from './array.js';\n\nexport default class GoogleAddress {\n constructor(place) {\n this.place = place;\n this.geometry = place?.geometry;\n this.components = this.parseComponents();\n this.attributes = this.parseProperties();\n }\n\n parse() {\n this.parseComponents();\n this.parseProperties();\n }\n\n parseComponents() {\n const components = (this.place?.address_components || []).reduce(function (acc, data) {\n data.types.forEach(function (type) {\n acc[type] = data;\n });\n return acc;\n }, {});\n\n return components;\n }\n\n parseProperties() {\n const attributes = {\n streetNumber: this.get('street_number'),\n streetName: this.get('route'),\n coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0],\n city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']),\n county: this.get('administrative_area_level_2'),\n stateShort: this.get('administrative_area_level_1', true),\n stateLong: this.get('administrative_area_level_1'),\n countryShort: this.get('country', true),\n country: this.get('country', true),\n countryLong: this.get('country'),\n postalCode: this.get('postal_code'),\n };\n\n attributes.address = [attributes.streetNumber, attributes.streetName].filter(Boolean).join(' ');\n\n return attributes;\n }\n\n all() {\n return this.attributes;\n }\n\n or(keys = []) {\n for (const element of keys) {\n const key = element;\n\n if (isArray(key)) {\n const pkey = key[0];\n const short = key[1];\n\n if (this.has(pkey)) {\n return this.get(pkey, short);\n }\n\n continue;\n }\n\n if (this.has(key)) {\n return this.get(key);\n }\n }\n\n return null;\n }\n\n has(key) {\n return key in this.components;\n }\n\n get(key, short = false) {\n if (!(key in this.components)) {\n return null;\n }\n\n return short ? this.components[key].short_name : this.components[key].long_name;\n }\n\n setAttributes(attributes = {}) {\n this.attributes = { ...this.attributes, ...attributes };\n\n return this;\n }\n\n setAttribute(key, value) {\n this.attributes[key] = value;\n\n return this;\n }\n\n getAttribute(key) {\n return this.attributes[key] || null;\n }\n}\n\nexport function createGoogleAddress() {\n return new GoogleAddress(...arguments);\n}\n\nexport { GoogleAddress };\n","export default class Point {\n constructor(latitude = 0, longitude = 0) {\n this.type = 'Point';\n this.coordinates = [longitude, latitude];\n }\n\n get latitude() {\n return this.coordinates[1];\n }\n\n get longitude() {\n return this.coordinates[0];\n }\n\n lat() {\n return this.latitude;\n }\n\n lng() {\n return this.longitude;\n }\n\n static fromGeoJson(json) {\n const [longitude, latitude] = json.coordinates;\n\n return new Point(latitude, longitude);\n }\n\n serialize() {\n return {\n type: 'Point',\n coorindates: [this.lat(), this.lng()],\n };\n }\n\n toJson() {\n return this.serialize();\n }\n\n toString() {\n return `(${this.latitude}, ${this.longitude})`;\n }\n}\n\nexport { Point };\n","/* eslint no-undef: \"off\" */\nimport isEmpty from './is-empty.js';\n\nexport function isResource(mixed) {\n return typeof mixed === 'object' && !isEmpty(mixed?.attributes) && typeof mixed?.attributes === 'object';\n}\n\nexport function isCallable(object, property) {\n return typeof object[property] === 'function';\n}\n\nexport function getResolved(func, path) {\n const resolved = func();\n return Array.isArray(resolved) || typeof resolved === 'object' ? get(resolved, path) : null;\n}\n\nexport function invoke(object, method) {\n if (typeof object[method] === 'function') {\n return object[method].bind(object);\n }\n}\n\nexport function get(object, path) {\n let current = object;\n\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n\n if (isArray || isObject) {\n for (let i = 0; i < pathArray.length; i++) {\n if (current && current[pathArray[i]] === undefined) {\n return null;\n } else if (current) {\n current = current[pathArray[i]];\n\n // if is resource then return get on its attributes\n if (isResource(current) && pathArray[i + 1] !== undefined) {\n const newPath = pathArray.slice(i + 1).join('.');\n\n return get(current.attributes, newPath);\n }\n\n // resolve functions and continue\n if (typeof current === 'function') {\n const newPath = pathArray.slice(i + 1).join('.');\n return getResolved(current, newPath);\n }\n }\n }\n return current;\n }\n\n if (isFunction) {\n return getResolved(object, path);\n }\n}\n\nexport function getProperties(object, properties = []) {\n const selected = {};\n let propertyNames = arguments;\n let i = 1;\n\n if (arguments.length === 2 && Array.isArray(properties)) {\n i = 0;\n propertyNames = arguments[1];\n }\n\n for (; i < propertyNames.length; i++) {\n selected[propertyNames[i]] = get(object, propertyNames[i]);\n }\n\n return selected;\n}\n\nexport function set(object, path, value) {\n let current = object;\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n // if is function\n if (isFunction) {\n // throw error should be object or array or object like\n }\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n const iterations = pathArray.length;\n\n if (isArray || isObject) {\n for (let i = 0; i < iterations - 1; i++) {\n if (!current[pathArray[i]]) {\n current[pathArray[i]] = {};\n }\n current = current[pathArray[i]];\n }\n\n current[pathArray[iterations - 1]] = value;\n }\n\n return value;\n}\n\nexport function setProperties(object, properties = {}) {\n for (const property in properties) {\n set(object, property, properties[property]);\n }\n\n return object;\n}\n\nexport function extend(target, classes = []) {\n if (arguments.length > 1) {\n classes = arguments;\n }\n for (const element of classes) {\n for (const property in element) {\n if (Object.prototype.hasOwnProperty.call(element, property)) {\n target[property] = element[property];\n }\n }\n }\n return target;\n}\n","import { set } from './object.js';\nimport { isArray } from './array.js';\nimport { register } from '../registry.js';\n\nexport function isStoreActions(target) {\n return target instanceof StoreActions;\n}\n\nexport function extendStoreActions(store, actions = []) {\n store.actions = isArray(actions) ? actions : [actions];\n\n if (isArray(actions)) {\n for (const element of actions) {\n store.extendActions(element);\n }\n return;\n }\n\n if (isStoreActions(actions)) {\n actions.extend(store);\n }\n\n return store;\n}\n\nexport function createStoreActions(name, ...params) {\n const actions = new StoreActions(...params);\n register('action', name, actions);\n return actions;\n}\n\nexport default class StoreActions {\n constructor(actions = {}, bind = null) {\n this.actions = actions;\n this.bind = bind;\n }\n\n extend(bindTo = null) {\n const binding = bindTo || this.bind;\n\n if (!binding) {\n return this;\n }\n\n if (this?.actions && typeof this.actions === 'object') {\n for (let action in this.actions) {\n const fn = this.actions[action];\n\n if (typeof fn !== 'function') {\n set(binding, action, fn);\n continue;\n }\n\n set(binding, action, fn.bind(binding));\n }\n }\n\n return this;\n }\n}\n","// import Store from './store.js';\nimport { isEmpty } from './utils/index.js';\nimport { isArray } from './utils/array.js';\nimport { set, get } from './utils/object.js';\nimport { register, createStore } from './registry.js';\n\nexport function isResource(target) {\n return target instanceof Resource;\n}\n\nexport default class Resource {\n /**\n\t * The base resource for all resources\n\n\t * @return {[type]} [description]\n\t */\n constructor(attributes = {}, adapter, resource, options = {}) {\n this.attributes = attributes;\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isDestroying = false;\n this.isReloading = false;\n this.resource = resource;\n this.options = options;\n this.version = options.version || 'v1';\n this.setAdapter(adapter);\n }\n\n /**\n * Set a new adapter to the resource instance, this will update the Store instance\n *\n * @param {Adapter} adapter\n * @return {Resource} this\n */\n setAdapter(adapter) {\n this.adapter = adapter;\n this.store = createStore(this.resource, adapter, {\n onAfterFetch: this.syncAttributes.bind(this),\n actions: this.options?.actions,\n });\n\n return this;\n }\n\n /**\n * Getter for id attribute\n *\n * @var {String}\n */\n get id() {\n return this.getAttribute('id');\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n create(attributes = {}) {\n const data = this.mergeAttributes(attributes);\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.create(data).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n update(attributes = {}) {\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.update(this.attributes.id, attributes).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Deletes the resource instance on the server\n *\n * @return {[type]} [description]\n */\n destroy() {\n this.setFlags(['isLoading', 'isDestroying']);\n\n return this.store.destroy(this.attributes.id).then((response) => {\n this.setFlags(['isLoading', 'isDestroying'], false);\n\n return response;\n });\n }\n\n /**\n * Reloads the resource from the server.\n *\n * @return {[type]} [description]\n */\n reload() {\n this.setFlags(['isLoading', 'isReloading']);\n\n return this.store.findRecord(this.attributes.id).then((response) => {\n this.reset();\n\n return response;\n });\n }\n\n /**\n * Sets flag properties.\n *\n * @return this\n */\n setFlags(flags = [], state = true) {\n const validFlags = ['isLoading', 'isSaving', 'isReloading', 'isDestroying'];\n\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i];\n\n if (typeof flag !== 'string' || !validFlags.includes(flag)) {\n throw new Error(`${flag} is not a valid flag!`);\n }\n\n this[flag] = state;\n }\n\n return this;\n }\n\n /**\n * Resets tracked properties\n *\n * @return this\n */\n reset() {\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isReloading = false;\n\n return this;\n }\n\n /**\n * Emptys resource.\n *\n * @return this\n */\n empty() {\n this.reset();\n this.attribues = {};\n\n return this;\n }\n\n /**\n * Saves the resource instance on the server\n *\n * @return {[type]} [description]\n */\n save(options = {}) {\n const attributes = this.getAttributes();\n\n if (isEmpty(this.id)) {\n return this.create(attributes);\n }\n\n if (options.onlyDirty === true) {\n return this.savedirty();\n }\n\n return this.update(attributes);\n }\n\n /**\n * Saves only dirtied attributes.\n *\n * @return {[type]} [description]\n */\n saveDirty() {\n const dirtyAttributeKeys = Object.keys(this.dirtyAttributes);\n const dirtyAttributes = {};\n\n for (let i = 0; i < dirtyAttributeKeys.length; i++) {\n const key = dirtyAttributeKeys[i];\n dirtyAttributes[key] = this.getAttribute(key);\n }\n\n return this.update(dirtyAttributes);\n }\n\n /**\n * Returns the resource meta if exists.\n *\n * @return {Object}\n */\n get meta() {\n return this.getAttribute('meta', {});\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get createdAt() {\n return this.isAttributeFilled('created_at') ? new Date(this.getAttribute('created_at')) : null;\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get updatedAt() {\n return this.isAttributeFilled('updated_at') ? new Date(this.getAttribute('updated_at')) : null;\n }\n\n /**\n * Checks if resource is loaded from the server.\n *\n * @return {Boolean}\n */\n get isLoaded() {\n return this.hasAttributes(['created_at', 'id']);\n }\n\n /**\n * Checks if resource ihas no attributes\n *\n * @return {Boolean}\n */\n get isEmpty() {\n return Object.values(this?.attributes).length === 0;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isNew() {\n return !this.id;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isSaved() {\n return !this.isNew && this.isLoaded;\n }\n\n /**\n * Checks if resource is deleted on server.\n *\n * @return {Boolean}\n */\n get isDeleted() {\n return this.hasAttributes(['deleted', 'time']);\n }\n\n /**\n * Iterates over each attribute value and property executing a user supplied callback.\n *\n * @return {Object}\n */\n eachAttribute(callback) {\n if (typeof callback !== 'function') {\n return this;\n }\n\n Object.keys(this?.attributes ?? {}).forEach((property) => {\n const value = this.getAttribute(property);\n callback.call(this, value, property);\n });\n\n return this;\n }\n\n /**\n * Gets all changes\n *\n * @return {Object}\n */\n changes() {\n return this.changes;\n }\n\n /**\n * Gets all dirty attributes.\n *\n * @return {Object}\n */\n getDirtyAttributes() {\n return this.dirtyAttributes;\n }\n\n /**\n * Checks if property is dirty.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n isDirty(property) {\n return property in this.dirtyAttributes;\n }\n\n /**\n * Checks if any properties is dirty.\n *\n * @return {Boolean}\n */\n hasDirtyAttributes() {\n return Object.keys(this?.dirtyAttributes ?? {}).length > 0;\n }\n\n /**\n * Updates a instance property without tracking changes or dirtying attribute.\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n mutate(property, value) {\n this.attributes[property] = value;\n }\n\n /**\n * Set an instance property locally\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n setAttribute(property, value = null) {\n if (value === null && typeof property === 'object') {\n return this.setAttributes(property);\n }\n\n const previousValue = this?.attributes[property] ?? null;\n\n // use object setter\n set(this.attributes, property, value);\n set(this.dirtyAttributes, property, previousValue);\n\n // track changes\n if (!isArray(this?.changes[property])) {\n this.changes[property] = [];\n }\n\n this.changes[property].push({\n property,\n previousValue,\n value,\n changedAt: new Date(),\n });\n\n return this;\n }\n\n /**\n * Set multiple instance properties locally\n *\n * @param {Object} properties [description]\n */\n setAttributes(attributes = {}) {\n for (let property in attributes) {\n this.setAttribute(property, attributes[property]);\n }\n\n return this;\n }\n\n /**\n * Get an attribute\n *\n * @param {String} attribute The attribute key to get\n * @param {mixed} defaultValue The default value if no attribute value\n */\n getAttribute(attribute, defaultValue = null) {\n const value = get(this?.attributes ?? {}, attribute);\n\n if (value === undefined) {\n return defaultValue;\n }\n\n return value;\n }\n\n /**\n * Checks if attribute exists.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n hasAttribute(property) {\n if (isArray(property)) {\n const properties = property;\n const attributeKeys = Object.keys(this.attributes ?? {});\n\n return properties.every((prop) => attributeKeys.includes(prop));\n }\n\n if (!this?.attributes) {\n return false;\n }\n\n return property in this.attributes;\n }\n\n /**\n * Alias for checking if has multiple attributes.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n hasAttributes(properties = []) {\n return this.hasAttribute(properties);\n }\n\n /**\n * Returns true if attribute has value.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n isAttributeFilled(property) {\n if (isArray(property)) {\n return this.hasAttribute(property) && property.every((prop) => !isEmpty(this.getAttribute(prop)));\n }\n\n return this.hasAttribute(property) && !isEmpty(this.getAttribute(property));\n }\n\n /**\n * Get multiple attributes.\n *\n * @param {Array} properties [description]\n * @param {[type]} value [description]\n */\n getAttributes(properties) {\n const attributes = {};\n\n if (properties === null || properties === undefined) {\n return this.getAttributes(Object.keys(this.attributes));\n }\n\n if (typeof properties === 'string') {\n return this.getAttribute([...arguments]);\n }\n\n if (!isArray(properties)) {\n throw new Error('No attribute properties provided!');\n }\n\n for (const element of properties) {\n const property = element;\n\n if (typeof property !== 'string') {\n continue;\n }\n\n let value = this.getAttribute(property);\n\n if (typeof value?.attributes === 'object' && !isArray(value?.attributes)) {\n value = value.attributes;\n }\n\n attributes[property] = value;\n }\n\n return attributes;\n }\n\n /**\n * Serialize resource to a POJO\n *\n * @returns {Object}\n */\n serialize() {\n return this.getAttributes();\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n mergeAttributes(attributes = {}) {\n const modelAttributes = this?.attributes ?? {};\n this.attributes = { ...modelAttributes, ...attributes };\n\n return this.attributes;\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n syncAttributes(json = {}) {\n this.attributes = json;\n }\n}\n\nregister('resource', 'Resource', Resource);\n","import { lookup } from './resolver.js';\nimport { isResource } from './resource.js';\nimport { createCollection } from './utils/collection.js';\nimport { detectAdapter } from './utils/detect-adapter.js';\nimport { isArray } from './utils/array.js';\nimport { classify, pluralize } from './utils/string.js';\nimport { extendStoreActions } from './utils/store-actions.js';\nimport { register } from './registry.js';\n\nexport function createStore() {\n return new Store(...arguments);\n}\n\nexport function afterFetch(store, json) {\n if (typeof store.options.onAfterFetch === 'function') {\n store.options.onAfterFetch(json);\n }\n\n if (isArray(json)) {\n const serialized = [];\n\n for (const element of json) {\n serialized.push(store.afterFetch(element));\n }\n\n return createCollection(...serialized);\n }\n\n const resourceInstance = store.serialize(json);\n return store.deposit(resourceInstance);\n}\n\nexport default class Store {\n constructor(resource, adapter, options = {}) {\n this.resource = resource;\n this.adapter = adapter || detectAdapter();\n this.namespace = pluralize(resource);\n this.storage = createCollection();\n this.options = options;\n this.extendActions(options.actions);\n }\n\n extendActions(actions = []) {\n return extendStoreActions(this, actions);\n }\n\n deposit(resourceInstance) {\n // this.storage[this.namespace].pushObject(resourceInstance);\n return resourceInstance;\n }\n\n serialize(json) {\n return lookup('resource', classify(this.resource), json, this.adapter);\n }\n\n afterFetch(json) {\n return afterFetch(this, json);\n }\n\n /**\n * Creates a new record via POST\n *\n * @param {Object} attributes - The attributes to create the record with\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async create(attributes = {}, options = {}) {\n const response = await this.adapter.post(`${this.namespace}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Updates an existing record via PUT\n *\n * @param {string|number} id - ID of the record to update\n * @param {Object} attributes - The attributes to update\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async update(id, attributes = {}, options = {}) {\n const response = await this.adapter.put(`${this.namespace}/${id}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Finds a single record by ID\n *\n * @param {string|number} id - ID of the record to fetch\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findRecord(id, options = {}) {\n const response = await this.adapter.get(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Fetches all records from the resource\n *\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findAll(options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource using the given query params\n *\n * @param {Object} query - Query parameters\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async query(query = {}, options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource, but returns a single record\n *\n * @param {Object} query - Query parameters (with `query.single = true`)\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async queryRecord(query = {}, options = {}) {\n query.single = true;\n\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Deletes/destroys a record by ID\n *\n * @param {any} record - Resource or ID\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async destroy(record, options = {}) {\n const id = isResource(record) ? record.getAttribute('id') : record;\n const response = await this.adapter.delete(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n}\n\nregister('store', 'Store', Store);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport StoreActions from '../utils/store-actions.js';\n\nexport const orderActions = new StoreActions({\n getDistanceAndTime: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/distance-and-time`, params, options);\n },\n\n getNextActivity: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/next-activity`, params, options);\n },\n\n dispatch: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/dispatch`, params, options).then(this.afterFetch.bind(this));\n },\n\n start: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/start`, params, options).then(this.afterFetch.bind(this));\n },\n\n updateActivity: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/update-activity`, params, options).then(this.afterFetch.bind(this));\n },\n\n setDestination: function (id, destinationId, params = {}, options = {}) {\n if (isResource(destinationId)) {\n destinationId = destinationId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/set-destination/${destinationId}`, params, options).then(this.afterFetch.bind(this));\n },\n\n captureQrCode: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-qr${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n captureSignature: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-signature${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n complete: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/complete`, params, options).then(this.afterFetch.bind(this));\n },\n\n cancel: function (id, params = {}, options = {}) {\n return this.adapter.delete(`${this.namespace}/${id}/cancel`, params, options).then(this.afterFetch.bind(this));\n },\n});\n\nexport default class Order extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'order', { actions: orderActions, ...options });\n }\n\n getDistanceAndTime(params = {}, options = {}) {\n return this.store.getDistanceAndTime(this.id, params, options);\n }\n\n dispatch(params = {}, options = {}) {\n return this.store.dispatch(this.id, params, options);\n }\n\n start(params = {}, options = {}) {\n return this.store.start(this.id, params, options);\n }\n\n setDestination(destinationId, params = {}, options = {}) {\n return this.store.setDestination(this.id, destinationId, params, options);\n }\n\n captureQrCode(subjectId = null, params = {}, options = {}) {\n return this.store.captureQrCode(this.id, subjectId, params, options);\n }\n\n captureSignature(subjectId = null, params = {}, options = {}) {\n return this.store.captureSignature(this.id, subjectId, params, options);\n }\n\n getNextActivity(params = {}, options = {}) {\n return this.store.getNextActivity(this.id, params, options);\n }\n\n updateActivity(params = {}, options = {}) {\n return this.store.updateActivity(this.id, params, options);\n }\n\n cancel(params = {}, options = {}) {\n return this.store.cancel(this.id, params, options);\n }\n\n complete(params = {}, options = {}) {\n return this.store.complete(this.id, params, options);\n }\n\n get isDispatched() {\n return this.getAttribute('dispatched_at') !== null;\n }\n\n get isNotDispatched() {\n return this.getAttribute('dispatched_at') == null;\n }\n\n get isStarted() {\n return this.getAttribute('started_at') !== null;\n }\n\n get isNotStarted() {\n return this.getAttribute('started_at') == null;\n }\n\n get isCompleted() {\n return this.getAttribute('status') == 'completed';\n }\n\n get isCanceled() {\n return this.getAttribute('status') == 'canceled';\n }\n\n get isEnroute() {\n return this.getAttribute('status') == 'driver_enroute' || this.getAttribute('status') === 'enroute';\n }\n\n get isInProgress() {\n return this.isStarted && !this.isCanceled && !this.isCompleted;\n }\n\n get scheduledAt() {\n return this.isAttributeFilled('scheduled_at') ? new Date(this.getAttribute('scheduled_at')) : null;\n }\n\n get startedAt() {\n return this.isAttributeFilled('started_at') ? new Date(this.getAttribute('started_at')) : null;\n }\n\n get dispatchedAt() {\n return this.isAttributeFilled('dispatched_at') ? new Date(this.getAttribute('dispatched_at')) : null;\n }\n\n get status() {\n return this.getAttribute('status');\n }\n}\n\nregister('resource', 'Order', Order);\n","import Resource from '../resource.js';\nimport { createCollection } from '../utils/collection.js';\nimport { resolveResource } from '../resolver.js';\nimport { register } from '../registry.js';\n\nexport default class Payload extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'payload', options);\n }\n\n /**\n * Attaches an entity to an existing payload and returns\n * the payload with the entity attached\n *\n * @param {Entity} Entity entity [description]\n * @return {Payload} [description]\n */\n // eslint-disable-next-line no-unused-vars\n attach(entity) {\n // perform op return payload\n }\n\n /**\n * Returns all of the entities attached to this payload\n *\n * @return {Collection} [description]\n */\n get entities() {\n return createCollection(this.entities.map((data) => resolveResource('Entity', data, this.adapter)));\n }\n\n /**\n * Returns the dropoff for this payload\n *\n * @return {Place|null} [description]\n */\n get dropoff() {\n return this.dropoff ? resolveResource('Place', this.dropoff, this.adapter) : null;\n }\n\n /**\n * Returns the pickup for this payload\n *\n * @return {Place|null} [description]\n */\n get pickup() {\n return this.pickup ? resolveResource('Place', this.pickup, this.adapter) : null;\n }\n\n /**\n * Returns all the waypoints for this payload\n *\n * @return {Collection} [description]\n */\n get waypoints() {\n return createCollection(this.waypoints.map((data) => resolveResource('Waypoint', data, this.adapter)));\n }\n}\n\nregister('resource', 'Payload', Payload);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Entity extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'entity', options);\n }\n}\n\nregister('resource', 'Entity', Entity);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport { Point } from '../utils/index.js';\n\nexport default class Place extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'place', options);\n }\n\n static fromGoogleAddress(googleAddress, adapter, options = {}) {\n const [latitude, longitude] = googleAddress.getAttribute('coordinates');\n const attributes = {\n name: null,\n address: googleAddress.getAttribute('address'),\n location: new Point(latitude, longitude),\n street1: googleAddress.getAttribute('address'),\n street2: null,\n city: googleAddress.getAttribute('city'),\n province: googleAddress.getAttribute('stateLong'),\n postal_code: googleAddress.getAttribute('postalCode'),\n neighborhood: googleAddress.get('neighborhood'),\n district: googleAddress.getAttribute('county'),\n building: googleAddress.get('building'),\n country: googleAddress.getAttribute('countryShort'),\n phone: null,\n security_access_code: null,\n };\n\n return new Place(attributes, adapter, options);\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n /**\n * Set the owner of the place.\n *\n * @param {Object|String} owner\n * @return {Place}\n */\n setOwner(owner) {\n if (isResource(owner)) {\n this.setAttribute('owner', owner.id);\n }\n\n if (typeof owner === 'string') {\n this.setAttribute('owner', owner);\n }\n\n return this;\n }\n}\n\nregister('resource', 'Place', Place);\n","import Place from './place.js';\nimport { register } from '../registry.js';\n\nexport default class Waypoint extends Place {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'waypoint', options);\n }\n}\n\nregister('resource', 'Waypoint', Waypoint);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class TrackingStatus extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'tracking-status', options);\n }\n}\n\nregister('resource', 'TrackingStatus', TrackingStatus);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vehicle extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vehicle', options);\n }\n}\n\nregister('resource', 'Vehicle', Vehicle);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\nimport { StoreActions } from '../utils/index.js';\n\nexport const organizationActions = new StoreActions({\n current: function (params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/current`, params, options);\n },\n});\n\nexport default class Organization extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'organization', { actions: organizationActions, ...options });\n }\n}\n\nregister('resource', 'Organization', Organization);\n","import Resource from '../resource.js';\nimport Organization from './organization.js';\nimport { register } from '../registry.js';\nimport { StoreActions, isPhone, Point } from '../utils/index.js';\nimport { isArray } from '../utils/array.js';\n\nexport const serializeOrganizations = (response, adapter) => {\n if (isArray(response)) {\n return response.map((organizationJson) => {\n return new Organization(organizationJson, adapter);\n });\n }\n\n return new Organization(response, adapter);\n};\n\nexport const driverActions = new StoreActions({\n // const { error } = await fleetbase.drivers.login('+1 111-1111');\n login: function (identity, password = null, attributes = {}) {\n // handle phone number authentication\n if (isPhone(identity)) {\n return this.adapter.post('drivers/login-with-sms', { phone: identity });\n }\n\n if (!password) {\n throw new Error('Login requires password!');\n }\n\n return this.adapter.post('drivers/login', { identity, password, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n verifyCode: function (identity, code, attributes = {}) {\n return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n track: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/track`, params, options).then(this.afterFetch.bind(this));\n },\n\n listOrganizations: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n switchOrganization: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n currentOrganization: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n retrieve: function (id) {\n return this.findRecord(id);\n },\n\n syncDevice(id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/register-device`, params, options);\n },\n});\n\nexport default class Driver extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'driver', { actions: driverActions, ...options });\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get isOnline() {\n return this.getAttribute('online') === true;\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n track(params = {}, options = {}) {\n return this.store.track(this.id, params, options);\n }\n\n syncDevice(params = {}, options = {}) {\n return this.store.syncDevice(this.id, params, options);\n }\n\n listOrganizations(params = {}, options = {}) {\n return this.store.listOrganizations(this.id, params, options);\n }\n\n switchOrganization(organizationId, options = {}) {\n return this.store.switchOrganization(this.id, { next: organizationId }, options);\n }\n\n currentOrganization(params = {}, options = {}) {\n return this.store.currentOrganization(this.id, params, options);\n }\n}\n\nregister('resource', 'Driver', Driver);\n","export function isPhone(phone = '') {\n return /^[+]?[\\s./0-9]*[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/g.test(phone);\n}\n\nexport default isPhone;\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vendor extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vendor', options);\n }\n}\n\nregister('resource', 'Vendor', Vendor);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Contact extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'contact', options);\n }\n}\n\nregister('resource', 'Contact', Contact);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Zone extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'zone', options);\n }\n}\n\nregister('resource', 'Zone', Zone);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceArea extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-area', options);\n }\n}\n\nregister('resource', 'ServiceArea', ServiceArea);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceRate extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-rate', options);\n }\n}\n\nregister('resource', 'ServiceRate', ServiceRate);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceQuote extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-quote', options);\n }\n\n fromPreliminary() {}\n\n fromPayload() {}\n}\n\nregister('resource', 'ServiceQuote', ServiceQuote);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Fleet extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'fleet', options);\n }\n}\n\nregister('resource', 'Fleet', Fleet);\n","import { register } from './registry.js';\n\nexport default class Adapter {\n /**\n * Creates a configured base adapter for Fleetbase.\n *\n * @param {Object} config Configuration options for adapter\n */\n constructor(config = {}) {\n this.version = config.version || 'v1';\n this.host = config.host || null;\n this.namespace = config.namespace || null;\n this.headers = config.headers || {};\n }\n}\n\nregister('adapter', 'Adapter', Adapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isBlank } from '../utils/index.js';\n\n/**\n * @class BrowserAdapter\n * @extends Adapter\n *\n * @classdesc\n * The BrowserAdapter extends the base Adapter for browser-based environments.\n * It leverages the Fetch API to make HTTP requests and handles JSON parsing, headers,\n * and error propagation.\n *\n * @example\n * // Example usage:\n * const adapter = new BrowserAdapter({\n * publicKey: 'MY_PUBLIC_KEY',\n * host: 'https://api.example.com',\n * namespace: 'v1'\n * });\n *\n * adapter.get('users')\n * .then(users => console.log(users))\n * .catch(error => console.error(error));\n */\nexport default class BrowserAdapter extends Adapter {\n /**\n * Initializes a BrowserAdapter instance by configuring default headers,\n * including Authorization and Content-Type.\n *\n * @param {Object} config - Configuration object for the adapter.\n * @param {string} config.publicKey - A valid public key for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - A namespace or version for the API.\n */\n constructor(config) {\n super(config);\n\n // Set default headers\n this.setHeaders({\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;browser',\n });\n }\n\n /**\n * Updates the adapter’s request headers.\n *\n * @param {Object} [headers={}] - An object of header key-value pairs.\n * @returns {BrowserAdapter} Returns the current adapter instance for method chaining.\n *\n * @example\n * adapter.setHeaders({\n * 'X-Custom-Header': 'SomeValue'\n * }).get('users');\n */\n setHeaders(headers = {}) {\n this.headers = { ...this.headers, ...headers };\n return this;\n }\n\n /**\n * Parses JSON from a fetch Response object.\n *\n * @private\n * @param {Response} response - The Fetch API response object.\n * @returns {Promise<{ statusText: string, status: number, ok: boolean, json: any }>}\n * A promise that resolves with an object containing:\n * - `statusText`: The status text from the response\n * - `status`: The numeric HTTP status\n * - `ok`: A boolean indicating if the request was successful (status in the 200–299 range)\n * - `json`: The parsed JSON from the response body\n *\n * @example\n * fetch('/api')\n * .then(this.parseJSON)\n * .then(({ json }) => console.log(json));\n */\n parseJSON(response) {\n return new Promise((resolve, reject) => {\n response\n .json()\n .then((json) => {\n resolve({\n statusText: response.statusText,\n status: response.status,\n ok: response.ok,\n json,\n });\n })\n .catch(() => {\n reject(new Error('Oops! Something went wrong when handling your request.'));\n });\n });\n }\n\n /**\n * The base method for sending fetch requests. Manages headers, HTTP method,\n * and body serialization where necessary.\n *\n * @private\n * @param {string} path - The endpoint path (relative to `this.host/this.namespace`).\n * @param {string} [method='GET'] - The HTTP method (GET, POST, PUT, DELETE, PATCH).\n * @param {Object} [data={}] - The request payload. Usually includes `body`.\n * @param {Object} [options={}] - Additional fetch options (e.g. `mode`, `headers`, or `url` override).\n * @returns {Promise} A promise resolving to the parsed JSON data or rejecting with an error.\n *\n * @example\n * this.request('users', 'POST', { body: JSON.stringify({ name: 'John' }) })\n * .then(responseData => console.log(responseData));\n */\n request(path, method = 'GET', data = {}, options = {}) {\n return new Promise((resolve, reject) => {\n fetch(\n options.url || `${this.host}/${this.namespace}/${path}`, // Fallback to constructed URL if options.url is not provided\n {\n method,\n mode: options.mode || 'cors',\n headers: new Headers({\n ...(this.headers || {}),\n ...(options.headers || {}),\n }),\n ...data, // Typically { body: JSON.stringify(payload) }\n }\n )\n .then(this.parseJSON)\n .then((response) => {\n if (response.ok) {\n // If the HTTP status code is 2xx, resolve with JSON data\n return resolve(response.json);\n }\n // Otherwise, reject with error message or fallback to status text\n reject(new Error(response.json.errors ? response.json.errors[0] : response.statusText));\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Issues a GET request to the specified path, optionally with query parameters.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [query={}] - Query parameters to append to the request URL.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the fetched data or rejects with an error.\n *\n * @example\n * // GET /users?limit=10\n * adapter.get('users', { limit: 10 })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n get(path, query = {}, options = {}) {\n const urlParams = !isBlank(query) ? new URLSearchParams(query).toString() : '';\n return this.request(`${path}${urlParams ? `?${urlParams}` : ''}`, 'GET', {}, options);\n }\n\n /**\n * Issues a POST request with a JSON body.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.post('users', { name: 'John Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n post(path, data = {}, options = {}) {\n return this.request(path, 'POST', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a PUT request with a JSON body, commonly used for full updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.put('users/123', { name: 'Jane Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n put(path, data = {}, options = {}) {\n return this.request(path, 'PUT', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a DELETE request. Note that many APIs don't require a body for DELETE.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.delete('users/123')\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n delete(path, options = {}) {\n return this.request(path, 'DELETE', {}, options);\n }\n\n /**\n * Issues a PATCH request with a JSON body, commonly used for partial updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.patch('users/123', { email: 'newemail@example.com' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n patch(path, data = {}, options = {}) {\n return this.request(path, 'PATCH', { body: JSON.stringify(data) }, options);\n }\n}\n\nregister('adapter', 'BrowserAdapter', BrowserAdapter);\n","import isEmpty from './is-empty.js';\n\nexport function isBlank(obj) {\n return isEmpty(obj) || (typeof obj === 'string' && /\\S/.test(obj) === false);\n}\n\nexport default isBlank;\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\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\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 setImmediate: _setImmediate,\n asap\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 if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\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.status\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|Function)} 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 if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \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","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\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';\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// 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","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\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 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","'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 utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, 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 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, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\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 test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\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 test(() => utils.isReadableStream(new Response('').body));\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 const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\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 = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\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 const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\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 credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /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 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, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !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 (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? 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","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\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.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\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) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\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","// eslint-disable-next-line strict\nexport default null;\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","export const VERSION = \"1.7.9\";","'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\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('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 validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\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 toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","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","'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","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isArray } from '../utils/array.js';\nimport axios from 'axios';\n\n/**\n * @class NodeAdapter\n * @extends Adapter\n *\n * @classdesc\n * The NodeAdapter extends the base Adapter class to facilitate making HTTP requests using Axios in a Node environment.\n * It provides convenient methods for all standard HTTP verbs (GET, POST, PUT, DELETE, PATCH) and supports:\n *\n * - Automatic JSON serialization and deserialization.\n * - Base URL and common headers.\n * - Interceptors for transforming responses and handling errors.\n * - Customizable headers at runtime via `setHeaders`.\n */\nexport default class NodeAdapter extends Adapter {\n /**\n * Creates an instance of NodeAdapter.\n *\n * @param {Object} config - Configuration object\n * @param {string} config.publicKey - The public key used for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - The default namespace or version for the API.\n *\n * @example\n * const adapter = new NodeAdapter({\n * publicKey: 'YOUR_PUBLIC_KEY',\n * host: 'https://api.yourapp.com',\n * namespace: 'v1'\n * });\n */\n constructor(config) {\n super(config);\n\n // Create a dedicated Axios instance with base URL and default headers\n this.axiosInstance = axios.create({\n baseURL: `${this.host}/${this.namespace}`,\n headers: {\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;node',\n },\n });\n\n /**\n * Sets up Axios interceptors for response success and error handling.\n *\n * Success:\n * - Returns `response.data` by default.\n *\n * Error:\n * - If the server returned a response, checks for `data.errors` or `data.error` and throws an Error accordingly.\n * - Otherwise, re-throws the original error to preserve stack trace.\n */\n this.axiosInstance.interceptors.response.use(\n /**\n * Transform successful responses by returning only `response.data`.\n *\n * @param {import('axios').AxiosResponse} response - The successful Axios response object\n * @returns {any} - The `data` property of the response, containing the actual payload\n */\n (response) => response.data,\n\n /**\n * Handle error responses, extracting relevant information from the response payload.\n *\n * @param {import('axios').AxiosError} error - The error object thrown by Axios\n * @throws {Error} - An Error instance with a message derived from the server response\n */\n (error) => {\n if (error.response) {\n const { data } = error.response;\n\n if (isArray(data.errors) && data.errors.length) {\n throw new Error(data.errors[0]);\n } else if (data.error) {\n throw new Error(data.error);\n }\n }\n throw error;\n }\n );\n }\n\n /**\n * Merges the provided headers with existing default headers.\n *\n * @param {Object} [headers={}] - Additional headers to add or override.\n * @returns {NodeAdapter} - The current instance of NodeAdapter for method chaining.\n *\n * @example\n * adapter.setHeaders({ 'X-Custom-Header': 'my-value' });\n */\n setHeaders(headers = {}) {\n this.axiosInstance.defaults.headers.common = {\n ...this.axiosInstance.defaults.headers.common,\n ...headers,\n };\n return this;\n }\n\n /**\n * A generic method to make an HTTP request with Axios.\n * This method is utilized internally by specialized request methods such as `get`, `post`, etc.\n *\n * @private\n * @param {string} method - HTTP verb (e.g., GET, POST, PUT, DELETE, PATCH).\n * @param {string} url - The URL path (relative to `baseURL`).\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request configuration.\n * @returns {Promise} - A promise resolving to the response data or rejecting with an Error.\n *\n * @example\n * // Example usage inside another method:\n * this.request('GET', '/users', { params: { limit: 50 } });\n */\n request(method, url, options = {}) {\n return this.axiosInstance.request({\n method,\n url,\n ...options,\n });\n }\n\n /**\n * Makes a GET request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [query={}] - Query parameters to include in the request URL.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.get('/users', { limit: 25 }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n get(path, query = {}, options = {}) {\n return this.request('GET', path, { params: query, ...options });\n }\n\n /**\n * Makes a POST request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The request body payload.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.post('/users', { name: 'John Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n post(path, data = {}, options = {}) {\n return this.request('POST', path, { data, ...options });\n }\n\n /**\n * Makes a PUT request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The updated data to send in the request body.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.put('/users/123', { name: 'Jane Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n put(path, data = {}, options = {}) {\n return this.request('PUT', path, { data, ...options });\n }\n\n /**\n * Makes a DELETE request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.delete('/users/123').then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n delete(path, options = {}) {\n return this.request('DELETE', path, options);\n }\n\n /**\n * Makes a PATCH request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - Partial data to update on the server.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.patch('/users/123', { email: 'new_email@example.com' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n patch(path, data = {}, options = {}) {\n return this.request('PATCH', path, { data, ...options });\n }\n}\n\nregister('adapter', 'NodeAdapter', NodeAdapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\n\nexport default class EmberJsAdapter extends Adapter {}\n\nregister('adapter', 'EmberJsAdapter', EmberJsAdapter);\n","import Store from './store.js';\nimport Resource, { isResource } from './resource.js';\nimport { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization, Fleet } from './resources.js';\nimport { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter } from './adapters.js';\nimport { isNodeEnvironment, detectAdapter, isLatitude, isLongitude, Point, GoogleAddress, StoreActions } from './utils/index.js';\nimport Collection, { createCollection } from './utils/collection.js';\nimport { pluralize, singularize, classify, dasherize, camelize } from './utils/string.js';\nimport { extendStoreActions, createStoreActions } from './utils/store-actions.js';\nimport { orderActions } from './resources/order.js';\nimport { driverActions } from './resources/driver.js';\nimport { organizationActions } from './resources/organization.js';\nimport Resolver, { lookup, resolve, resolveResource } from './resolver.js';\nimport { register, createResource, createStore } from './registry.js';\n\n/**\n * // instance\n * const fleetbase = new Fleetbase();\n *\n * const contact = fleetbase.contacts.create({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * constact.update({ name: 'Hollywood Ron' });\n *\n * // export\n * import { Contact } from '@fleetbase/sdk';\n *\n * const contact = new Contact({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * contact.save();\n */\nexport default class Fleetbase {\n /**\n * Builds an instance of the Fleetbase SDK\n *\n * @param {String} publicKey The public key issued\n * @param {Object} config The version of resource to access\n * @param {Boolean} debug Debug mode for SDK\n * @return {Fleetbase} Instance\n */\n constructor(publicKey, config = {}, debug = false) {\n this.version = config.version ?? 'v1';\n this.options = {\n version: this.version,\n host: config.host ?? 'https://api.fleetbase.io',\n namespace: config.namespace ?? this.version,\n debug,\n publicKey,\n };\n\n if (typeof publicKey !== 'string' || publicKey.length === 0) {\n throw new Error('⚠️ Invalid public key given to Fleetbase SDK');\n }\n\n if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) {\n throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!');\n }\n\n this.adapter = config.adapter || detectAdapter(this.options);\n\n this.orders = new Store('order', this.adapter).extendActions(orderActions);\n this.entities = new Store('entity', this.adapter);\n this.places = new Store('place', this.adapter);\n this.drivers = new Store('driver', this.adapter).extendActions(driverActions);\n this.vehicles = new Store('vehicle', this.adapter);\n this.vendors = new Store('vendor', this.adapter);\n this.contacts = new Store('contact', this.adapter);\n this.serviceAreas = new Store('service-area', this.adapter);\n this.zones = new Store('zone', this.adapter);\n this.fleets = new Store('fleet', this.adapter);\n this.organizations = new Store('organization', this.adapter).extendActions(organizationActions);\n }\n\n static newInstance() {\n return new Fleetbase(...arguments);\n }\n\n setAdapter(adapter) {\n this.adapter = adapter;\n }\n\n getAdapter() {\n return this.adapter;\n }\n}\n\nexport {\n Store,\n Resource,\n Contact,\n Driver,\n Entity,\n Order,\n Payload,\n Place,\n TrackingStatus,\n Vehicle,\n Vendor,\n Waypoint,\n Zone,\n ServiceArea,\n ServiceRate,\n ServiceQuote,\n Organization,\n Fleet,\n BrowserAdapter,\n NodeAdapter,\n EmberJsAdapter,\n Adapter,\n detectAdapter,\n isNodeEnvironment,\n isLatitude,\n isLongitude,\n Point,\n isResource,\n GoogleAddress,\n Collection,\n createCollection,\n StoreActions,\n extendStoreActions,\n createStoreActions,\n pluralize,\n singularize,\n classify,\n dasherize,\n camelize,\n lookup,\n register,\n createResource,\n Resolver,\n resolve,\n resolveResource,\n createStore,\n};\n","export function isLatitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 90;\n}\n\nexport default isLatitude;\n","export function isLongitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 180 && Math.abs(coordinate) >= 90;\n}\n\nexport default isLongitude;\n"],"names":["String","string","chain","arguments","length","undefined","_classCallCheck","_defineProperty","this","RegExp","str","_createClass","key","value","rules","skip","override","indexOf","toLowerCase","x","match","replace","plural","applyRules","pluralRules","uncountableWords","singular","singularRules","lowFirstLetter","str_path","split","i","str_arr","charAt","toUpperCase","substring","join","first","last","slice","uppercase","underbarPrefix","idSuffix","underbar","capitalize","spaceOrUnderbar","allFirstUpper","camelize","underscore","d","nonTitlecasedWords","originalChain","pluralize","concat","trim","singularize","dropIdUbar","demodulize","parseInt","isNaN","ltd","ld","suf","argz","Object","values","instance","method","shift","apply","Array","prototype","call","invoke","_toConsumableArray","classify","registry","resources","adapters","storse","actions","register","type","className","cls","create","Error","ResourceClass","_len","params","_key","_construct","createStore","Resolver","lookup","_len2","_key2","resolveResource","_len4","_key4","isArray","CHUNK_SIZE","array","start","deleteCount","items","splice","chunk","isCollection","identityFunction","item","mixed","Collection","objectAt","index","iter","Boolean","findIndex","predicate","startAt","len","val","withNaNCheck","insertAt","createCollection","_assertThisInitialized","_callSuper","_inherits","_wrapNativeSuper","get","indexes","_this2","map","idx","object","callback","bind","target","cb","methodName","args","ret","forEach","_item$methodName","push","filter","sortKeys","sort","a","b","_step","_iterator","_createForOfIteratorHelper","s","n","done","propA","propB","compareValue","compare","err","e","f","seen","Set","getter","has","add","uniqBy","includes","removeAt","obj","objects","toArray","reverse","clear","loc","removeObject","pushObject","_this3","addObject","isEmpty","none","size","objectType","_typeof","isNodeEnvironment","_process","_process$release","_window","process","env","release","name","search","window","navigator","product","detectAdapter","options","GoogleAddress","place","geometry","components","parseComponents","attributes","parseProperties","_this$place","address_components","reduce","acc","data","types","_this$geometry","streetNumber","streetName","coordinates","location","city","or","county","stateShort","stateLong","countryShort","country","countryLong","postalCode","address","pkey","short","short_name","long_name","_objectSpread","Point","latitude","longitude","coorindates","lat","lng","serialize","json","_json$coordinates","_slicedToArray","getResolved","func","path","resolved","current","isObject","isFunction","pathArray","newPath","set","iterations","extendStoreActions","store","StoreActions","extend","element","extendActions","binding","action","fn","isResource","Resource","adapter","resource","dirtyAttributes","changes","isLoading","isSaving","isDestroying","isReloading","version","setAdapter","_this$options","onAfterFetch","syncAttributes","getAttribute","_this","mergeAttributes","setFlags","then","response","update","id","destroy","_this4","findRecord","reset","flags","state","validFlags","flag","attribues","getAttributes","onlyDirty","savedirty","dirtyAttributeKeys","keys","isAttributeFilled","Date","hasAttributes","isNew","isLoaded","_this$attributes","_this5","property","_this$dirtyAttributes","_this$attributes$prop","setAttributes","previousValue","changedAt","setAttribute","attribute","_this$attributes2","defaultValue","_this$attributes3","properties","attributeKeys","every","prop","hasAttribute","_this6","_value","_value2","_this$attributes4","modelAttributes","Store","namespace","storage","resourceInstance","serialized","afterFetch","deposit","_create","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","wrap","_context","prev","next","post","sent","abrupt","stop","_update","_callee2","_args2","_context2","put","_x","_findRecord","_callee3","_args3","_context3","_x2","_findAll","_callee4","_args4","_context4","_query2","_callee5","_query","_args5","_context5","query","_queryRecord","_callee6","_args6","_context6","single","_destroy","_callee7","record","_args7","_context7","_x3","orderActions","getDistanceAndTime","getNextActivity","dispatch","updateActivity","setDestination","destinationId","captureQrCode","subjectId","captureSignature","complete","cancel","Order","isStarted","isCanceled","isCompleted","Payload","entity","entities","dropoff","pickup","waypoints","Entity","Place","_this$getAttribute","_this$getAttribute2","owner","googleAddress","_googleAddress$getAtt2","street1","street2","province","postal_code","neighborhood","district","building","phone","security_access_code","Waypoint","TrackingStatus","Vehicle","organizationActions","Organization","serializeOrganizations","organizationJson","driverActions","login","identity","password","test","isPhone","verifyCode","code","track","listOrganizations","switchOrganization","currentOrganization","retrieve","syncDevice","Driver","organizationId","Vendor","Contact","Zone","ServiceArea","ServiceRate","ServiceQuote","Fleet","Adapter","config","host","headers","BrowserAdapter","setHeaders","Authorization","publicKey","Promise","resolve","reject","statusText","status","ok","fetch","url","mode","Headers","parseJSON","errors","error","urlParams","URLSearchParams","toString","request","body","JSON","stringify","thisArg","cache","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isNumber","isPlainObject","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","isReadableStream","isRequest","isResponse","isHeaders","l","_ref$allOwnKeys","allOwnKeys","getOwnPropertyNames","findKey","_global","globalThis","self","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","Math","random","addEventListener","_ref5","source","setTimeout","asap","queueMicrotask","nextTick","utils$1","isBuffer","constructor","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","result","assignValue","targetKey","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","assign","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","position","lastIndex","arr","forEachEntry","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","m","p1","p2","noop","toFiniteNumber","Number","isFinite","generateString","alphabet","isSpecCompliantForm","toJSONObject","stack","visit","reducedValue","isThenable","AxiosError","message","captureStackTrace","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","TypeError","metaTokens","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","some","isFlatArray","el","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","buildURL","_encode","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager","handlers","fulfilled","rejected","synchronous","runWhen","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","href","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","rawHeaders","parsed","line","parseHeaders","_step$value","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","targets","asStrings","_ref","_ref2","computed","accessors","defineAccessor","accessorName","arg1","arg2","arg3","configurable","buildAccessors","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","floor","accessor","_ref3","mapped","headerValue","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","unescape","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","abort","subscribe","aborted","send","composeSignals","signals","controller","AbortController","reason","streamChunk","chunkSize","pos","end","byteLength","readBytes","_wrapAsyncGenerator","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_asyncIterator","readStream","_awaitAsyncGenerator","delegateYield","_asyncGeneratorDelegate","t1","finish","stream","reader","_yield$_awaitAsyncGen","asyncIterator","getReader","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_yield$iterator$next","_done","loadedBytes","close","enqueue","t0","highWaterMark","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","resolveBodyLength","getContentLength","_x4","_ref4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","toAbortSignal","credentials","t2","_x5","knownAdapters","http","xhr","fetchAdapter","renderReason","isResolvedHandle","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","onFulfilled","onRejected","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","c","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","all","promises","spread","isAxiosError","payload","formToJSON","getAdapter","NodeAdapter","axiosInstance","use","EmberJsAdapter","Fleetbase","_config$version","_config$host","_config$namespace","debug","startsWith","orders","places","drivers","vehicles","vendors","contacts","serviceAreas","zones","fleets","organizations","coordinate","abs","_len3","_key3"],"mappings":"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","x_google_ignoreList":[34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83]} \ No newline at end of file diff --git a/dist/esm/fleetbase.js b/dist/esm/fleetbase.js deleted file mode 100644 index fb79923..0000000 --- a/dist/esm/fleetbase.js +++ /dev/null @@ -1,2 +0,0 @@ -function t(t,e){this.v=t,this.k=e}function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function g(t,e,n){return(e=j(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function y(t){return y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},y(t)}function b(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&O(t,e)}function m(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(m=function(){return!!t})()}function w(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function k(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function A(t){for(var e=1;e=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;_(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:L(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function O(t,e){return O=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},O(t,e)}function R(t,e){return n(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,s=[],u=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(s.push(r.value),s.length!==e);u=!0);}catch(t){c=!0,i=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(t,e)||_(t,e)||k()}function S(t){return function(t){if(Array.isArray(t))return e(t)}(t)||w(t)||_(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function j(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}function T(t){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T(t)}function _(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}function P(t){return function(){return new L(t.apply(this,arguments))}}function L(e){var n,r;function i(n,r){try{var a=e[n](r),s=a.value,u=s instanceof t;Promise.resolve(u?s.v:s).then((function(t){if(u){var r="return"===n?"return":"next";if(!s.k||t.done)return i(r,t);t=e[r](t).value}o(a.done?"return":"normal",t)}),(function(t){i("throw",t)}))}catch(t){o("throw",t)}}function o(t,e){switch(t){case"return":n.resolve({value:e,done:!0});break;case"throw":n.reject(e);break;default:n.resolve({value:e,done:!1})}(n=n.next)?i(n.key,n.arg):r=null}this._invoke=function(t,e){return new Promise((function(o,a){var s={key:t,arg:e,resolve:o,reject:a,next:null};r?r=r.next=s:(n=r=s,i(t,e))}))},"function"!=typeof e.return&&(this.return=void 0)}function C(t){var e="function"==typeof Map?new Map:void 0;return C=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return f(t,arguments,y(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),O(n,t)},C(t)}L.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},L.prototype.next=function(t){return this._invoke("next",t)},L.prototype.throw=function(t){return this._invoke("throw",t)},L.prototype.return=function(t){return this._invoke("return",t)};var N=function(){function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];h(this,t),g(this,"uncountableWords",["equipment","information","rice","money","species","series","fish","sheep","moose","deer","news"]),g(this,"pluralRules",[[new RegExp("(m)an$","gi"),"$1en"],[new RegExp("(pe)rson$","gi"),"$1ople"],[new RegExp("(child)$","gi"),"$1ren"],[new RegExp("^(ox)$","gi"),"$1en"],[new RegExp("(ax|test)is$","gi"),"$1es"],[new RegExp("(octop|vir)us$","gi"),"$1i"],[new RegExp("(alias|status)$","gi"),"$1es"],[new RegExp("(bu)s$","gi"),"$1ses"],[new RegExp("(buffal|tomat|potat)o$","gi"),"$1oes"],[new RegExp("([ti])um$","gi"),"$1a"],[new RegExp("sis$","gi"),"ses"],[new RegExp("(?:([^f])fe|([lr])f)$","gi"),"$1$2ves"],[new RegExp("(hive)$","gi"),"$1s"],[new RegExp("([^aeiouy]|qu)y$","gi"),"$1ies"],[new RegExp("(x|ch|ss|sh)$","gi"),"$1es"],[new RegExp("(matr|vert|ind)ix|ex$","gi"),"$1ices"],[new RegExp("([m|l])ouse$","gi"),"$1ice"],[new RegExp("(quiz)$","gi"),"$1zes"],[new RegExp("s$","gi"),"s"],[new RegExp("$","gi"),"s"]]),g(this,"singularRules",[[new RegExp("(m)en$","gi"),"$1an"],[new RegExp("(pe)ople$","gi"),"$1rson"],[new RegExp("(child)ren$","gi"),"$1"],[new RegExp("([ti])a$","gi"),"$1um"],[new RegExp("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$","gi"),"$1$2sis"],[new RegExp("(hive)s$","gi"),"$1"],[new RegExp("(tive)s$","gi"),"$1"],[new RegExp("(curve)s$","gi"),"$1"],[new RegExp("([lr])ves$","gi"),"$1f"],[new RegExp("([^fo])ves$","gi"),"$1fe"],[new RegExp("([^aeiouy]|qu)ies$","gi"),"$1y"],[new RegExp("(s)eries$","gi"),"$1eries"],[new RegExp("(m)ovies$","gi"),"$1ovie"],[new RegExp("(x|ch|ss|sh)es$","gi"),"$1"],[new RegExp("([m|l])ice$","gi"),"$1ouse"],[new RegExp("(bus)es$","gi"),"$1"],[new RegExp("(o)es$","gi"),"$1"],[new RegExp("(shoe)s$","gi"),"$1"],[new RegExp("(cris|ax|test)es$","gi"),"$1is"],[new RegExp("(octop|vir)i$","gi"),"$1us"],[new RegExp("(alias|status)es$","gi"),"$1"],[new RegExp("^(ox)en","gi"),"$1"],[new RegExp("(vert|ind)ices$","gi"),"$1ex"],[new RegExp("(matr)ices$","gi"),"$1ix"],[new RegExp("(quiz)zes$","gi"),"$1"],[new RegExp("s$","gi"),""]]),g(this,"nonTitlecasedWords",["and","or","nor","a","an","the","so","but","to","of","at","by","from","into","on","onto","off","out","in","over","with","for"]),g(this,"idSuffix",new RegExp("(_ids|_id)$","g")),g(this,"underbar",new RegExp("_","g")),g(this,"spaceOrUnderbar",new RegExp("[ _]","g")),g(this,"uppercase",new RegExp("([A-Z])","g")),g(this,"underbarPrefix",new RegExp("^_")),this.str=e,this.chain=n}return v(t,[{key:"get",value:function(){return this.str}},{key:"applyRules",value:function(t,e,n,r){if(r)t=r;else if(!(n.indexOf(t.toLowerCase())>-1))for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;return t=t||this.str,this.applyRules(t,this.pluralRules,this.uncountableWords,e)}},{key:"singularize",value:function(t,e){return t=t||this.str,this.applyRules(t,this.singularRules,this.uncountableWords,e)}},{key:"camelize",value:function(t,e){for(var n=(t=t||this.str).split("/"),r=0;r1&&void 0!==arguments[1]&&arguments[1];return t=t||this.str,t=this.underscore(this.demodulize(t))+(e?"":"_")+"id",this.str=t,!0===this.chain?this:t}},{key:"ordinalize",value:function(t){for(var e=(t=t||this.str).split(" "),n=0;n2?i-2:0),a=2;a2?n-2:0),i=2;i2?n-2:0),i=2;i2?n-2:0),i=2;i1?e-1:0),r=1;r3&&void 0!==arguments[3]?arguments[3]:[];if(V(t))if(r.length<=X)t.splice.apply(t,[e,n].concat(S(r)));else{t.splice(e,n);for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:0,r=t.length,i=n;i2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,i=t.length;return n<0&&(n+=i),nt(t,r&&e!=e?function(t){return t!=t}:function(t){return t===e},n)}function it(t,e,n){return Q(t,e,0,[n]),n}function ot(){return f(at,Array.prototype.slice.call(arguments))}var at=function(){function t(){return h(this,t),r(V(arguments[0])?l(this,t,S(arguments[0])):l(this,t,arguments))}return b(t,C(Array)),v(t,[{key:"notEmpty",get:function(){return this.length>0}},{key:"empty",get:function(){return 0===this.length}},{key:"first",get:function(){return tt(this,0)}},{key:"last",get:function(){return tt(this,this.length-1)}},{key:"replace",value:function(t,e){return Q(this,t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:[]),this}},{key:"objectsAt",value:function(t){var e=this;return t.map((function(t){return tt(e,t)}))}},{key:"objectAt",value:function(t){return tt(this,t)}},{key:"indexOf",value:function(t,e){return rt(this,t,e,!1)}},{key:"lastIndexOf",value:function(t,e){var n=this.length;(void 0===e||e>=n)&&(e=n-1),e<0&&(e+=n);for(var r=e;r>=0;r--)if(tt(this,r)===t)return r;return-1}},{key:"includes",value:function(t,e){return-1!==rt(this,t,e,!0)}},{key:"findBy",value:function(){return t=this,e=et.apply(void 0,arguments),-1===(r=nt(t,e.bind(n),0))?void 0:tt(t,r);var t,e,n,r}},{key:"findIndexBy",value:function(){return nt(this,et.apply(void 0,arguments))}},{key:"isEvery",value:function(){return t=this,e=et.apply(void 0,arguments),r=e.bind(n),-1===nt(t,(function(t,e,n){return!r(t,e,n)}),0);var t,e,n,r}},{key:"isAny",value:function(){return t=this,e=et.apply(void 0,arguments),-1!==nt(t,e.bind(n),0);var t,e,n}},{key:"invoke",value:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:Y,n=[],r=new Set,i="function"==typeof e?e:function(t){return get(t,e)};return t.forEach((function(t){var e=i(t);r.has(e)||(r.add(e),n.push(t))})),n}(this,t)}},{key:"without",value:function(t){if(!this.includes(t))return this;var e=t==t?function(e){return e!==t}:function(t){return t==t};return this.filter(e)}},{key:"clear",value:function(){var t=this.length;return 0===t||this.replace(0,t,[]),this}},{key:"insertAt",value:function(t,e){return it(this,t,e),this}},{key:"replaceAt",value:function(t,e){return this.replace(t,1,[e])}},{key:"removeAt",value:function(t,e){return function(t,e){return Q(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,[]),t}(this,t,e)}},{key:"pushObject",value:function(t){return this.insertAt(this.length,t)}},{key:"pushObjects",value:function(t){return this.replace(this.length,0,t),this}},{key:"popObject",value:function(){var t=this.length;if(0===t)return null;var e=tt(this,t-1);return this.removeAt(t-1,1),e}},{key:"shiftObject",value:function(){if(0===this.length)return null;var t=tt(this,0);return this.removeAt(0),t}},{key:"unshiftObject",value:function(t){return it(this,0,t)}},{key:"unshiftObjects",value:function(t){return this.replace(0,0,t),this}},{key:"reverseObjects",value:function(){var t=this.length;if(0===t)return this;var e=this.toArray().reverse();return this.replace(0,t,e),this}},{key:"setObjects",value:function(t){if(0===t.length)return this.clear();var e=this.length;return this.replace(0,e,t),this}},{key:"removeObject",value:function(t){for(var e=this.length||0;--e>=0;){tt(this,e)===t&&this.removeAt(e)}return this}},{key:"removeObjects",value:function(t){for(var e=t.length-1;e>=0;e--)this.removeObject(t[e]);return this}},{key:"addObject",value:function(t){return this.includes(t)||this.pushObject(t),this}},{key:"addObjects",value:function(t){var e=this;return t.forEach((function(t){return e.addObject(t)})),this}}])}();function st(t){var e=null==t;if(e)return e;if("number"==typeof t.size)return!t.size;var n=T(t);if("object"===n){var r=t.size;if("number"==typeof r)return!r}if("number"==typeof t.length&&"function"!==n)return!t.length;if("object"===n){var i=t.length;if("number"==typeof i)return!i}return!1}function ut(t){return isFinite(t)&&Math.abs(t)<=90}function ct(t){return isFinite(t)&&Math.abs(t)<=180&&Math.abs(t)>=90}function lt(){var t,e,n;return!("undefined"==typeof process||"object"!==T(null===(t=process)||void 0===t?void 0:t.env)&&-1===(null===(e=process.release)||void 0===e||null===(e=e.name)||void 0===e?void 0:e.search(/node|io.js/))||"undefined"!=typeof window&&"ReactNative"!==(null===(n=window)||void 0===n||null===(n=n.navigator)||void 0===n?void 0:n.product))}function ht(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return lt()?W("adapter","NodeAdapter",t):W("adapter","BrowserAdapter",t)}var ft=function(){return v((function t(e){h(this,t),this.place=e,this.geometry=null==e?void 0:e.geometry,this.components=this.parseComponents(),this.attributes=this.parseProperties()}),[{key:"parse",value:function(){this.parseComponents(),this.parseProperties()}},{key:"parseComponents",value:function(){var t;return((null===(t=this.place)||void 0===t?void 0:t.address_components)||[]).reduce((function(t,e){return e.types.forEach((function(n){t[n]=e})),t}),{})}},{key:"parseProperties",value:function(){var t,e={streetNumber:this.get("street_number"),streetName:this.get("route"),coordinates:null!==(t=this.geometry)&&void 0!==t&&t.location?Object.values(this.geometry.location):[0,0],city:this.or(["locality","sublocality","sublocality_level_1","neighborhood","administrative_area_level_3","administrative_area_level_2"]),county:this.get("administrative_area_level_2"),stateShort:this.get("administrative_area_level_1",!0),stateLong:this.get("administrative_area_level_1"),countryShort:this.get("country",!0),country:this.get("country",!0),countryLong:this.get("country"),postalCode:this.get("postal_code")};return e.address=[e.streetNumber,e.streetName].filter(Boolean).join(" "),e}},{key:"all",value:function(){return this.attributes}},{key:"or",value:function(){var t,e=p(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]);try{for(e.s();!(t=e.n()).done;){var n=t.value;if(V(n)){var r=n[0],i=n[1];if(this.has(r))return this.get(r,i)}else if(this.has(n))return this.get(n)}}catch(t){e.e(t)}finally{e.f()}return null}},{key:"has",value:function(t){return t in this.components}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t in this.components?e?this.components[t].short_name:this.components[t].long_name:null}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.attributes=A(A({},this.attributes),t),this}},{key:"setAttribute",value:function(t,e){return this.attributes[t]=e,this}},{key:"getAttribute",value:function(t){return this.attributes[t]||null}}])}(),dt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;h(this,t),this.type="Point",this.coordinates=[n,e]}return v(t,[{key:"latitude",get:function(){return this.coordinates[1]}},{key:"longitude",get:function(){return this.coordinates[0]}},{key:"lat",value:function(){return this.latitude}},{key:"lng",value:function(){return this.longitude}},{key:"serialize",value:function(){return{type:"Point",coorindates:[this.lat(),this.lng()]}}},{key:"toJson",value:function(){return this.serialize()}},{key:"toString",value:function(){return"(".concat(this.latitude,", ").concat(this.longitude,")")}}],[{key:"fromGeoJson",value:function(e){var n=R(e.coordinates,2),r=n[0];return new t(n[1],r)}}])}();function vt(t,e){var n=t();return Array.isArray(n)||"object"===T(n)?pt(n,e):null}function pt(t,e){var n,r=t,i=T(t),o="object"===i,a="function"===i,s=Array.isArray(t),u="string"===T(e)&&e.includes(".")?e.split("."):[e];if(s||o){for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:[];if(t.actions=V(e)?e:[e],!V(e))return e instanceof mt&&e.extend(t),t;var n,r=p(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.extendActions(i)}}catch(t){r.e(t)}finally{r.f()}}function bt(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;h(this,t),this.actions=e,this.bind=n}),[{key:"extend",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||this.bind;if(!t)return this;if(null!=this&&this.actions&&"object"===T(this.actions))for(var e in this.actions){var n=this.actions[e];"function"==typeof n?gt(t,e,n.bind(t)):gt(t,e,n)}return this}}])}();function wt(t){return t instanceof kt}var kt=function(){return v((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};h(this,t),this.attributes=e,this.dirtyAttributes={},this.changes={},this.isLoading=!1,this.isSaving=!1,this.isDestroying=!1,this.isReloading=!1,this.resource=r,this.options=i,this.version=i.version||"v1",this.setAdapter(n)}),[{key:"setAdapter",value:function(t){var e;return this.adapter=t,this.store=M(this.resource,t,{onAfterFetch:this.syncAttributes.bind(this),actions:null===(e=this.options)||void 0===e?void 0:e.actions}),this}},{key:"id",get:function(){return this.getAttribute("id")}},{key:"create",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.mergeAttributes(e);return this.setFlags(["isLoading","isSaving"]),this.store.create(n).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"update",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.setFlags(["isLoading","isSaving"]),this.store.update(this.attributes.id,e).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"destroy",value:function(){var t=this;return this.setFlags(["isLoading","isDestroying"]),this.store.destroy(this.attributes.id).then((function(e){return t.setFlags(["isLoading","isDestroying"],!1),e}))}},{key:"reload",value:function(){var t=this;return this.setFlags(["isLoading","isReloading"]),this.store.findRecord(this.attributes.id).then((function(e){return t.reset(),e}))}},{key:"setFlags",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=["isLoading","isSaving","isReloading","isDestroying"],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=this.getAttributes();return st(this.id)?this.create(e):!0===t.onlyDirty?this.savedirty():this.update(e)}},{key:"saveDirty",value:function(){for(var t=Object.keys(this.dirtyAttributes),e={},n=0;n0}},{key:"mutate",value:function(t,e){this.attributes[t]=e}},{key:"setAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(null===n&&"object"===T(t))return this.setAttributes(t);var r=null!==(e=null==this?void 0:this.attributes[t])&&void 0!==e?e:null;return gt(this.attributes,t,n),gt(this.dirtyAttributes,t,r),V(null==this?void 0:this.changes[t])||(this.changes[t]=[]),this.changes[t].push({property:t,previousValue:r,value:n,changedAt:new Date}),this}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var e in t)this.setAttribute(e,t[e]);return this}},{key:"getAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=pt(null!==(e=null==this?void 0:this.attributes)&&void 0!==e?e:{},t);return void 0===r?n:r}},{key:"hasAttribute",value:function(t){if(V(t)){var e,n=t,r=Object.keys(null!==(e=this.attributes)&&void 0!==e?e:{});return n.every((function(t){return r.includes(t)}))}return!(null==this||!this.attributes)&&t in this.attributes}},{key:"hasAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this.hasAttribute(t)}},{key:"isAttributeFilled",value:function(t){var e=this;return V(t)?this.hasAttribute(t)&&t.every((function(t){return!st(e.getAttribute(t))})):this.hasAttribute(t)&&!st(this.getAttribute(t))}},{key:"getAttributes",value:function(t){var e={};if(null==t)return this.getAttributes(Object.keys(this.attributes));if("string"==typeof t)return this.getAttribute(Array.prototype.slice.call(arguments));if(!V(t))throw new Error("No attribute properties provided!");var n,r=p(t);try{for(r.s();!(n=r.n()).done;){var i,o,a=n.value;if("string"==typeof a){var s=this.getAttribute(a);"object"!==T(null===(i=s)||void 0===i?void 0:i.attributes)||V(null===(o=s)||void 0===o?void 0:o.attributes)||(s=s.attributes),e[a]=s}}}catch(t){r.e(t)}finally{r.f()}return e}},{key:"serialize",value:function(){return this.getAttributes()}},{key:"mergeAttributes",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!==(t=null==this?void 0:this.attributes)&&void 0!==t?t:{};return this.attributes=A(A({},n),e),this.attributes}},{key:"syncAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.attributes=t}}])}();q("resource","Resource",kt);var Et=function(){return v((function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};h(this,t),this.resource=e,this.adapter=n||ht(),this.namespace=F(e),this.storage=ot(),this.options=r,this.extendActions(r.actions)}),[{key:"extendActions",value:function(){return yt(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])}},{key:"deposit",value:function(t){return t}},{key:"serialize",value:function(t){return W("resource",z(this.resource),t,this.adapter)}},{key:"afterFetch",value:function(t){return function(t,e){if("function"==typeof t.options.onAfterFetch&&t.options.onAfterFetch(e),V(e)){var n,r=[],i=p(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;r.push(t.afterFetch(o))}}catch(t){i.e(t)}finally{i.f()}return ot.apply(void 0,r)}var a=t.serialize(e);return t.deposit(a)}(this,t)}},{key:"create",value:(a=u(x().mark((function t(){var e,n,r,i=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.post("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"update",value:(o=u(x().mark((function t(e){var n,r,i,o=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=o.length>2&&void 0!==o[2]?o[2]:{},t.next=4,this.adapter.put("".concat(this.namespace,"/").concat(e),n,r);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"findRecord",value:(i=u(x().mark((function t(e){var n,r,i=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=3,this.adapter.get("".concat(this.namespace,"/").concat(e),{},n);case 3:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return i.apply(this,arguments)})},{key:"findAll",value:(r=u(x().mark((function t(){var e,n,r=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=r.length>0&&void 0!==r[0]?r[0]:{},t.next=3,this.adapter.get("".concat(this.namespace),{},e);case 3:return n=t.sent,t.abrupt("return",this.afterFetch(n));case 5:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"query",value:(n=u(x().mark((function t(){var e,n,r,i=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.get("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return n.apply(this,arguments)})},{key:"queryRecord",value:(e=u(x().mark((function t(){var e,n,r,i=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},(e=i.length>0&&void 0!==i[0]?i[0]:{}).single=!0,t.next=5,this.adapter.get("".concat(this.namespace),e,n);case 5:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 7:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"destroy",value:(t=u(x().mark((function t(e){var n,r,i,o=arguments;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=wt(e)?e.getAttribute("id"):e,t.next=4,this.adapter.delete("".concat(this.namespace,"/").concat(r),{},n);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(e){return t.apply(this,arguments)})}]);var t,e,n,r,i,o,a}();q("store","Store",Et);var At=new mt({getDistanceAndTime:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/distance-and-time"),e,n)},getNextActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/next-activity"),e,n)},dispatch:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/dispatch"),e,n).then(this.afterFetch.bind(this))},start:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/start"),e,n).then(this.afterFetch.bind(this))},updateActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/update-activity"),e,n).then(this.afterFetch.bind(this))},setDestination:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return wt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/set-destination/").concat(e),n,r).then(this.afterFetch.bind(this))},captureQrCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return wt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-qr").concat(e?"/"+e:""),n,r)},captureSignature:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return wt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-signature").concat(e?"/"+e:""),n,r)},complete:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/complete"),e,n).then(this.afterFetch.bind(this))},cancel:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.delete("".concat(this.namespace,"/").concat(t,"/cancel"),e,n).then(this.afterFetch.bind(this))}}),xt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"order",A({actions:At},r)])}return b(t,kt),v(t,[{key:"getDistanceAndTime",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getDistanceAndTime(this.id,t,e)}},{key:"dispatch",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.dispatch(this.id,t,e)}},{key:"start",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.start(this.id,t,e)}},{key:"setDestination",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.setDestination(this.id,t,e,n)}},{key:"captureQrCode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureQrCode(this.id,t,e,n)}},{key:"captureSignature",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureSignature(this.id,t,e,n)}},{key:"getNextActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getNextActivity(this.id,t,e)}},{key:"updateActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.updateActivity(this.id,t,e)}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.cancel(this.id,t,e)}},{key:"complete",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.complete(this.id,t,e)}},{key:"isDispatched",get:function(){return null!==this.getAttribute("dispatched_at")}},{key:"isNotDispatched",get:function(){return null==this.getAttribute("dispatched_at")}},{key:"isStarted",get:function(){return null!==this.getAttribute("started_at")}},{key:"isNotStarted",get:function(){return null==this.getAttribute("started_at")}},{key:"isCompleted",get:function(){return"completed"==this.getAttribute("status")}},{key:"isCanceled",get:function(){return"canceled"==this.getAttribute("status")}},{key:"isEnroute",get:function(){return"driver_enroute"==this.getAttribute("status")||"enroute"===this.getAttribute("status")}},{key:"isInProgress",get:function(){return this.isStarted&&!this.isCanceled&&!this.isCompleted}},{key:"scheduledAt",get:function(){return this.isAttributeFilled("scheduled_at")?new Date(this.getAttribute("scheduled_at")):null}},{key:"startedAt",get:function(){return this.isAttributeFilled("started_at")?new Date(this.getAttribute("started_at")):null}},{key:"dispatchedAt",get:function(){return this.isAttributeFilled("dispatched_at")?new Date(this.getAttribute("dispatched_at")):null}},{key:"status",get:function(){return this.getAttribute("status")}}])}();q("resource","Order",xt);var Ot=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"payload",r])}return b(t,kt),v(t,[{key:"attach",value:function(t){}},{key:"entities",get:function(){var t=this;return ot(this.entities.map((function(e){return G("Entity",e,t.adapter)})))}},{key:"dropoff",get:function(){return this.dropoff?G("Place",this.dropoff,this.adapter):null}},{key:"pickup",get:function(){return this.pickup?G("Place",this.pickup,this.adapter):null}},{key:"waypoints",get:function(){var t=this;return ot(this.waypoints.map((function(e){return G("Waypoint",e,t.adapter)})))}}])}();q("resource","Payload",Ot);var Rt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"entity",r])}return b(t,kt),v(t)}();q("resource","Entity",Rt);var St=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"place",r])}return b(t,kt),v(t,[{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new dt))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new dt))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"setOwner",value:function(t){return wt(t)&&this.setAttribute("owner",t.id),"string"==typeof t&&this.setAttribute("owner",t),this}}],[{key:"fromGoogleAddress",value:function(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=R(e.getAttribute("coordinates"),2),o=i[0],a=i[1];return new t({name:null,address:e.getAttribute("address"),location:new dt(o,a),street1:e.getAttribute("address"),street2:null,city:e.getAttribute("city"),province:e.getAttribute("stateLong"),postal_code:e.getAttribute("postalCode"),neighborhood:e.get("neighborhood"),district:e.getAttribute("county"),building:e.get("building"),country:e.getAttribute("countryShort"),phone:null,security_access_code:null},n,r)}}])}();q("resource","Place",St);var jt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"waypoint",r])}return b(t,St),v(t)}();q("resource","Waypoint",jt);var Tt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"tracking-status",r])}return b(t,kt),v(t)}();q("resource","TrackingStatus",Tt);var _t=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"vehicle",r])}return b(t,kt),v(t)}();q("resource","Vehicle",_t);var Pt=new mt({current:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.adapter.get("".concat(this.namespace,"/current"),t,e)}}),Lt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"organization",A({actions:Pt},r)])}return b(t,kt),v(t)}();q("resource","Organization",Lt);var Ct=function(t,e){return V(t)?t.map((function(t){return new Lt(t,e)})):new Lt(t,e)},Nt=new mt({login:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function(){return/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")}(t))return this.adapter.post("drivers/login-with-sms",{phone:t});if(!e)throw new Error("Login requires password!");return this.adapter.post("drivers/login",A({identity:t,password:e},n)).then(this.afterFetch.bind(this))},verifyCode:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/verify-code",A({identity:t,code:e},n)).then(this.afterFetch.bind(this))},track:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/track"),e,n).then(this.afterFetch.bind(this))},listOrganizations:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/organizations"),n,r).then((function(t){return Ct(t,e.adapter)}))},switchOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/switch-organization"),n,r).then((function(t){return Ct(t,e.adapter)}))},currentOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/current-organization"),n,r).then((function(t){return Ct(t,e.adapter)}))},retrieve:function(t){return this.findRecord(t)},syncDevice:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/register-device"),e,n)}}),Ft=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"driver",A({actions:Nt},r)])}return b(t,kt),v(t,[{key:"token",get:function(){return this.getAttribute("token")}},{key:"isOnline",get:function(){return!0===this.getAttribute("online")}},{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new dt))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new dt))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"track",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.track(this.id,t,e)}},{key:"syncDevice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.syncDevice(this.id,t,e)}},{key:"listOrganizations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.listOrganizations(this.id,t,e)}},{key:"switchOrganization",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.switchOrganization(this.id,{next:t},e)}},{key:"currentOrganization",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.currentOrganization(this.id,t,e)}}])}();q("resource","Driver",Ft);var Dt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"vendor",r])}return b(t,kt),v(t)}();q("resource","Vendor",Dt);var $t=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"contact",r])}return b(t,kt),v(t)}();q("resource","Contact",$t);var Ut=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"zone",r])}return b(t,kt),v(t)}();q("resource","Zone",Ut);var zt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-area",r])}return b(t,kt),v(t)}();q("resource","ServiceArea",zt);var Bt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-rate",r])}return b(t,kt),v(t)}();q("resource","ServiceRate",Bt);var qt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"service-quote",r])}return b(t,kt),v(t,[{key:"fromPreliminary",value:function(){}},{key:"fromPayload",value:function(){}}])}();q("resource","ServiceQuote",qt);var It=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return h(this,t),l(this,t,[e,n,"fleet",r])}return b(t,kt),v(t)}();q("resource","Fleet",It);var Mt=v((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};h(this,t),this.version=e.version||"v1",this.host=e.host||null,this.namespace=e.namespace||null,this.headers=e.headers||{}}));q("adapter","Adapter",Mt);var Ht=function(){function t(e){var n;return h(this,t),(n=l(this,t,[e])).setHeaders({Authorization:"Bearer ".concat(e.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;browser"}),n}return b(t,Mt),v(t,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.headers=A(A({},this.headers),t),this}},{key:"parseJSON",value:function(t){return new Promise((function(e,n){t.json().then((function(n){e({statusText:t.statusText,status:t.status,ok:t.ok,json:n})})).catch((function(){n(new Error("Oops! Something went wrong when handling your request."))}))}))}},{key:"request",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise((function(o,a){fetch(i.url||"".concat(e.host,"/").concat(e.namespace,"/").concat(t),A({method:n,mode:i.mode||"cors",headers:new Headers(A(A({},e.headers||{}),i.headers||{}))},r)).then(e.parseJSON).then((function(t){if(t.ok)return o(t.json);a(new Error(t.json.errors?t.json.errors[0]:t.statusText))})).catch((function(t){a(t)}))}))}},{key:"get",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=st(e=n)||"string"==typeof e&&!1===/\S/.test(e)?"":new URLSearchParams(n).toString();return this.request("".concat(t).concat(i?"?".concat(i):""),"GET",{},r)}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"POST",{body:JSON.stringify(e)},n)}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PUT",{body:JSON.stringify(e)},n)}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request(t,"DELETE",{},e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PATCH",{body:JSON.stringify(e)},n)}}])}();function Jt(t,e){return function(){return t.apply(e,arguments)}}q("adapter","BrowserAdapter",Ht);var Wt,Kt=Object.prototype.toString,Gt=Object.getPrototypeOf,Vt=(Wt=Object.create(null),function(t){var e=Kt.call(t);return Wt[e]||(Wt[e]=e.slice(8,-1).toLowerCase())}),Xt=function(t){return t=t.toLowerCase(),function(e){return Vt(e)===t}},Qt=function(t){return function(e){return T(e)===t}},Yt=Array.isArray,Zt=Qt("undefined");var te=Xt("ArrayBuffer");var ee=Qt("string"),ne=Qt("function"),re=Qt("number"),ie=function(t){return null!==t&&"object"===T(t)},oe=function(t){if("object"!==Vt(t))return!1;var e=Gt(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},ae=Xt("Date"),se=Xt("File"),ue=Xt("Blob"),ce=Xt("FileList"),le=Xt("URLSearchParams"),he=R(["ReadableStream","Request","Response","Headers"].map(Xt),4),fe=he[0],de=he[1],ve=he[2],pe=he[3];function ge(t,e){var n,r,i=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).allOwnKeys,o=void 0!==i&&i;if(null!=t)if("object"!==T(t)&&(t=[t]),Yt(t))for(n=0,r=t.length;n0;)if(e===(n=r[i]).toLowerCase())return n;return null}var be="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,me=function(t){return!Zt(t)&&t!==be};var we,ke=(we="undefined"!=typeof Uint8Array&&Gt(Uint8Array),function(t){return we&&t instanceof we}),Ee=Xt("HTMLFormElement"),Ae=function(){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),xe=Xt("RegExp"),Oe=function(t,e){var n=Object.getOwnPropertyDescriptors(t),r={};ge(n,(function(n,i){var o;!1!==(o=e(n,i,t))&&(r[i]=o||n)})),Object.defineProperties(t,r)},Re="abcdefghijklmnopqrstuvwxyz",Se="0123456789",je={DIGIT:Se,ALPHA:Re,ALPHA_DIGIT:Re+Re.toUpperCase()+Se};var Te,_e,Pe,Le,Ce=Xt("AsyncFunction"),Ne=(Te="function"==typeof setImmediate,_e=ne(be.postMessage),Te?setImmediate:_e?(Pe="axios@".concat(Math.random()),Le=[],be.addEventListener("message",(function(t){var e=t.source,n=t.data;e===be&&n===Pe&&Le.length&&Le.shift()()}),!1),function(t){Le.push(t),be.postMessage(Pe,"*")}):function(t){return setTimeout(t)}),Fe="undefined"!=typeof queueMicrotask?queueMicrotask.bind(be):"undefined"!=typeof process&&process.nextTick||Ne,De={isArray:Yt,isArrayBuffer:te,isBuffer:function(t){return null!==t&&!Zt(t)&&null!==t.constructor&&!Zt(t.constructor)&&ne(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:function(t){var e;return t&&("function"==typeof FormData&&t instanceof FormData||ne(t.append)&&("formdata"===(e=Vt(t))||"object"===e&&ne(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&te(t.buffer)},isString:ee,isNumber:re,isBoolean:function(t){return!0===t||!1===t},isObject:ie,isPlainObject:oe,isReadableStream:fe,isRequest:de,isResponse:ve,isHeaders:pe,isUndefined:Zt,isDate:ae,isFile:se,isBlob:ue,isRegExp:xe,isFunction:ne,isStream:function(t){return ie(t)&&ne(t.pipe)},isURLSearchParams:le,isTypedArray:ke,isFileList:ce,forEach:ge,merge:function t(){for(var e=(me(this)&&this||{}).caseless,n={},r=function(r,i){var o=e&&ye(n,i)||i;oe(n[o])&&oe(r)?n[o]=t(n[o],r):oe(r)?n[o]=t({},r):Yt(r)?n[o]=r.slice():n[o]=r},i=0,o=arguments.length;i3&&void 0!==arguments[3]?arguments[3]:{}).allOwnKeys}),t},trim:function(t){return t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n,r){var i,o,a,s={};if(e=e||{},null==t)return e;do{for(o=(i=Object.getOwnPropertyNames(t)).length;o-- >0;)a=i[o],r&&!r(a,t,e)||s[a]||(e[a]=t[a],s[a]=!0);t=!1!==n&&Gt(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:Vt,kindOfTest:Xt,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;if(Yt(t))return t;var e=t.length;if(!re(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},forEachEntry:function(t,e){for(var n,r=(t&&t[Symbol.iterator]).call(t);(n=r.next())&&!n.done;){var i=n.value;e.call(t,i[0],i[1])}},matchAll:function(t,e){for(var n,r=[];null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:Ee,hasOwnProperty:Ae,hasOwnProp:Ae,reduceDescriptors:Oe,freezeMethods:function(t){Oe(t,(function(e,n){if(ne(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=t[n];ne(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:function(t,e){var n={},r=function(t){t.forEach((function(t){n[t]=!0}))};return Yt(t)?r(t):r(String(t).split(e)),n},toCamelCase:function(t){return t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))},noop:function(){},toFiniteNumber:function(t,e){return null!=t&&Number.isFinite(t=+t)?t:e},findKey:ye,global:be,isContextDefined:me,ALPHABET:je,generateString:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:je.ALPHA_DIGIT,n="",r=e.length;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&ne(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:function(t){var e=new Array(10),n=function(t,r){if(ie(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[r]=t;var i=Yt(t)?[]:{};return ge(t,(function(t,e){var o=n(t,r+1);!Zt(o)&&(i[e]=o)})),e[r]=void 0,i}}return t};return n(t,0)},isAsyncFn:Ce,isThenable:function(t){return t&&(ie(t)||ne(t))&&ne(t.then)&&ne(t.catch)},setImmediate:Ne,asap:Fe};function $e(t,e,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}De.inherits($e,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:De.toJSONObject(this.config),code:this.code,status:this.status}}});var Ue=$e.prototype,ze={};["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((function(t){ze[t]={value:t}})),Object.defineProperties($e,ze),Object.defineProperty(Ue,"isAxiosError",{value:!0}),$e.from=function(t,e,n,r,i,o){var a=Object.create(Ue);return De.toFlatObject(t,a,(function(t){return t!==Error.prototype}),(function(t){return"isAxiosError"!==t})),$e.call(a,t.message,e,n,r,i),a.cause=t,a.name=t.name,o&&Object.assign(a,o),a};function Be(t){return De.isPlainObject(t)||De.isArray(t)}function qe(t){return De.endsWith(t,"[]")?t.slice(0,-2):t}function Ie(t,e,n){return t?t.concat(e).map((function(t,e){return t=qe(t),!n&&e?"["+t+"]":t})).join(n?".":""):e}var Me=De.toFlatObject(De,{},null,(function(t){return/^is[A-Z]/.test(t)}));function He(t,e,n){if(!De.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;var r=(n=De.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!De.isUndefined(e[t])}))).metaTokens,i=n.visitor||c,o=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&De.isSpecCompliantForm(e);if(!De.isFunction(i))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(De.isDate(t))return t.toISOString();if(!s&&De.isBlob(t))throw new $e("Blob is not supported. Use a Buffer instead.");return De.isArrayBuffer(t)||De.isTypedArray(t)?s&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,n,i){var s=t;if(t&&!i&&"object"===T(t))if(De.endsWith(n,"{}"))n=r?n:n.slice(0,-2),t=JSON.stringify(t);else if(De.isArray(t)&&function(t){return De.isArray(t)&&!t.some(Be)}(t)||(De.isFileList(t)||De.endsWith(n,"[]"))&&(s=De.toArray(t)))return n=qe(n),s.forEach((function(t,r){!De.isUndefined(t)&&null!==t&&e.append(!0===a?Ie([n],r,o):null===a?n:n+"[]",u(t))})),!1;return!!Be(t)||(e.append(Ie(i,n,o),u(t)),!1)}var l=[],h=Object.assign(Me,{defaultVisitor:c,convertValue:u,isVisitable:Be});if(!De.isObject(t))throw new TypeError("data must be an object");return function t(n,r){if(!De.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),De.forEach(n,(function(n,o){!0===(!(De.isUndefined(n)||null===n)&&i.call(e,n,De.isString(o)?o.trim():o,r,h))&&t(n,r?r.concat(o):[o])})),l.pop()}}(t),e}function Je(t){var e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function We(t,e){this._pairs=[],t&&He(t,this,e)}var Ke=We.prototype;function Ge(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Ve(t,e,n){if(!e)return t;var r=n&&n.encode||Ge;De.isFunction(n)&&(n={serialize:n});var i,o=n&&n.serialize;if(i=o?o(e,n):De.isURLSearchParams(e)?e.toString():new We(e,n).toString(r)){var a=t.indexOf("#");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}Ke.append=function(t,e){this._pairs.push([t,e])},Ke.toString=function(t){var e=t?function(e){return t.call(this,e,Je)}:Je;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var Xe=function(){return v((function t(){h(this,t),this.handlers=[]}),[{key:"use",value:function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(t){this.handlers[t]&&(this.handlers[t]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(t){De.forEach(this.handlers,(function(e){null!==e&&t(e)}))}}])}(),Qe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Ye={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:We,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ze="undefined"!=typeof window&&"undefined"!=typeof document,tn="object"===("undefined"==typeof navigator?"undefined":T(navigator))&&navigator||void 0,en=Ze&&(!tn||["ReactNative","NativeScript","NS"].indexOf(tn.product)<0),nn="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,rn=Ze&&window.location.href||"http://localhost",on=A(A({},Object.freeze({__proto__:null,hasBrowserEnv:Ze,hasStandardBrowserEnv:en,hasStandardBrowserWebWorkerEnv:nn,navigator:tn,origin:rn})),Ye);function an(t){function e(t,n,r,i){var o=t[i++];if("__proto__"===o)return!0;var a=Number.isFinite(+o),s=i>=t.length;return o=!o&&De.isArray(r)?r.length:o,s?(De.hasOwnProp(r,o)?r[o]=[r[o],n]:r[o]=n,!a):(r[o]&&De.isObject(r[o])||(r[o]=[]),e(t,n,r[o],i)&&De.isArray(r[o])&&(r[o]=function(t){var e,n,r={},i=Object.keys(t),o=i.length;for(e=0;e-1,o=De.isObject(t);if(o&&De.isHTMLForm(t)&&(t=new FormData(t)),De.isFormData(t))return i?JSON.stringify(an(t)):t;if(De.isArrayBuffer(t)||De.isBuffer(t)||De.isStream(t)||De.isFile(t)||De.isBlob(t)||De.isReadableStream(t))return t;if(De.isArrayBufferView(t))return t.buffer;if(De.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return He(t,new on.classes.URLSearchParams,Object.assign({visitor:function(t,e,n,r){return on.isNode&&De.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((n=De.isFileList(t))||r.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return He(n?{"files[]":t}:t,a&&new a,this.formSerializer)}}return o||i?(e.setContentType("application/json",!1),function(t,e){if(De.isString(t))try{return(e||JSON.parse)(t),De.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||sn.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(De.isResponse(t)||De.isReadableStream(t))return t;if(t&&De.isString(t)&&(n&&!this.responseType||r)){var i=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw $e.from(t,$e.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:on.classes.FormData,Blob:on.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};De.forEach(["delete","get","head","post","put","patch"],(function(t){sn.headers[t]={}}));var un=De.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"]),cn=Symbol("internals");function ln(t){return t&&String(t).trim().toLowerCase()}function hn(t){return!1===t||null==t?t:De.isArray(t)?t.map(hn):String(t)}function fn(t,e,n,r,i){return De.isFunction(r)?r.call(this,e,n):(i&&(e=n),De.isString(e)?De.isString(r)?-1!==e.indexOf(r):De.isRegExp(r)?r.test(e):void 0:void 0)}var dn=function(){return v((function t(e){h(this,t),e&&this.set(e)}),[{key:"set",value:function(t,e,n){var r=this;function i(t,e,n){var i=ln(e);if(!i)throw new Error("header name must be a non-empty string");var o=De.findKey(r,i);(!o||void 0===r[o]||!0===n||void 0===n&&!1!==r[o])&&(r[o||e]=hn(t))}var o=function(t,e){return De.forEach(t,(function(t,n){return i(t,n,e)}))};if(De.isPlainObject(t)||t instanceof this.constructor)o(t,e);else if(De.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))o(function(t){var e,n,r,i={};return t&&t.split("\n").forEach((function(t){r=t.indexOf(":"),e=t.substring(0,r).trim().toLowerCase(),n=t.substring(r+1).trim(),!e||i[e]&&un[e]||("set-cookie"===e?i[e]?i[e].push(n):i[e]=[n]:i[e]=i[e]?i[e]+", "+n:n)})),i}(t),e);else if(De.isHeaders(t)){var a,s=p(t.entries());try{for(s.s();!(a=s.n()).done;){var u=R(a.value,2),c=u[0];i(u[1],c,n)}}catch(t){s.e(t)}finally{s.f()}}else null!=t&&i(e,t,n);return this}},{key:"get",value:function(t,e){if(t=ln(t)){var n=De.findKey(this,t);if(n){var r=this[n];if(!e)return r;if(!0===e)return function(t){for(var e,n=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;e=r.exec(t);)n[e[1]]=e[2];return n}(r);if(De.isFunction(e))return e.call(this,r,n);if(De.isRegExp(e))return e.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(t,e){if(t=ln(t)){var n=De.findKey(this,t);return!(!n||void 0===this[n]||e&&!fn(0,this[n],n,e))}return!1}},{key:"delete",value:function(t,e){var n=this,r=!1;function i(t){if(t=ln(t)){var i=De.findKey(n,t);!i||e&&!fn(0,n[i],i,e)||(delete n[i],r=!0)}}return De.isArray(t)?t.forEach(i):i(t),r}},{key:"clear",value:function(t){for(var e=Object.keys(this),n=e.length,r=!1;n--;){var i=e[n];t&&!fn(0,this[i],i,t,!0)||(delete this[i],r=!0)}return r}},{key:"normalize",value:function(t){var e=this,n={};return De.forEach(this,(function(r,i){var o=De.findKey(n,i);if(o)return e[o]=hn(r),void delete e[i];var a=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))}(i):String(i).trim();a!==i&&delete e[i],e[a]=hn(r),n[a]=!0})),this}},{key:"concat",value:function(){for(var t,e=arguments.length,n=new Array(e),r=0;r1?n-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:3,r=0,i=function(t,e){t=t||10;var n,r=new Array(t),i=new Array(t),o=0,a=0;return e=void 0!==e?e:1e3,function(s){var u=Date.now(),c=i[a];n||(n=u),r[o]=s,i[o]=u;for(var l=a,h=0;l!==o;)h+=r[l++],l%=t;if((o=(o+1)%t)===a&&(a=(a+1)%t),!(u-n1&&void 0!==arguments[1]?arguments[1]:Date.now();i=o,n=null,r&&(clearTimeout(r),r=null),t.apply(null,e)};return[function(){for(var t=Date.now(),e=t-i,s=arguments.length,u=new Array(s),c=0;c=o?a(u,t):(n=u,r||(r=setTimeout((function(){r=null,a(n)}),o-e)))},function(){return n&&a(n)}]}((function(n){var o=n.loaded,a=n.lengthComputable?n.total:void 0,s=o-r,u=i(s);r=o;var c=g({loaded:o,total:a,progress:a?o/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&o<=a?(a-o)/u:void 0,event:n,lengthComputable:null!=a},e?"download":"upload",!0);t(c)}),n)},mn=function(t,e){var n=null!=t;return[function(r){return e[0]({lengthComputable:n,total:t,loaded:r})},e[1]]},wn=function(t){return function(){for(var e=arguments.length,n=new Array(e),r=0;r1?e-1:0),r=1;r1?"since :\n"+s.map(Wn).join("\n"):" "+Wn(s[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function Vn(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new gn(null,t)}function Xn(t){return Vn(t),t.headers=dn.from(t.headers),t.data=vn.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1),Gn(t.adapter||sn.adapter)(t).then((function(e){return Vn(t),e.data=vn.call(t,t.transformResponse,e),e.headers=dn.from(e.headers),e}),(function(e){return pn(e)||(Vn(t),e&&e.response&&(e.response.data=vn.call(t,t.transformResponse,e.response),e.response.headers=dn.from(e.response.headers))),Promise.reject(e)}))}var Qn="1.7.9",Yn={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Yn[t]=function(n){return T(n)===t||"a"+(e<1?"n ":" ")+t}}));var Zn={};Yn.transitional=function(t,e,n){function r(t,e){return"[Axios v1.7.9] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,o){if(!1===t)throw new $e(r(i," has been removed"+(e?" in "+e:"")),$e.ERR_DEPRECATED);return e&&!Zn[i]&&(Zn[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,o)}},Yn.spelling=function(t){return function(e,n){return console.warn("".concat(n," is likely a misspelling of ").concat(t)),!0}};var tr={assertOptions:function(t,e,n){if("object"!==T(t))throw new $e("options must be an object",$e.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],a=e[o];if(a){var s=t[o],u=void 0===s||a(s,o,t);if(!0!==u)throw new $e("option "+o+" must be "+u,$e.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new $e("Unknown option "+o,$e.ERR_BAD_OPTION)}},validators:Yn},er=tr.validators,nr=function(){return v((function t(e){h(this,t),this.defaults=e,this.interceptors={request:new Xe,response:new Xe}}),[{key:"request",value:(t=u(x().mark((function t(e,n){var r,i;return x().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this._request(e,n);case 3:return t.abrupt("return",t.sent);case 6:if(t.prev=6,t.t0=t.catch(0),t.t0 instanceof Error){r={},Error.captureStackTrace?Error.captureStackTrace(r):r=new Error,i=r.stack?r.stack.replace(/^.+\n/,""):"";try{t.t0.stack?i&&!String(t.t0.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(t.t0.stack+="\n"+i):t.t0.stack=i}catch(t){}}throw t.t0;case 10:case"end":return t.stop()}}),t,this,[[0,6]])}))),function(e,n){return t.apply(this,arguments)})},{key:"_request",value:function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{};var n=e=On(this.defaults,e),r=n.transitional,i=n.paramsSerializer,o=n.headers;void 0!==r&&tr.assertOptions(r,{silentJSONParsing:er.transitional(er.boolean),forcedJSONParsing:er.transitional(er.boolean),clarifyTimeoutError:er.transitional(er.boolean)},!1),null!=i&&(De.isFunction(i)?e.paramsSerializer={serialize:i}:tr.assertOptions(i,{encode:er.function,serialize:er.function},!0)),tr.assertOptions(e,{baseUrl:er.spelling("baseURL"),withXsrfToken:er.spelling("withXSRFToken")},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase();var a=o&&De.merge(o.common,o[e.method]);o&&De.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete o[t]})),e.headers=dn.concat(a,o);var s=[],u=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(u=u&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));var c,l=[];this.interceptors.response.forEach((function(t){l.push(t.fulfilled,t.rejected)}));var h,f=0;if(!u){var d=[Xn.bind(this),void 0];for(d.unshift.apply(d,s),d.push.apply(d,l),h=d.length,c=Promise.resolve(e);f0;)r._listeners[e](t);r._listeners=null}})),this.promise.then=function(t){var e,n=new Promise((function(t){r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},e((function(t,e,i){r.reason||(r.reason=new gn(t,e,i),n(r.reason))}))}return v(t,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}},{key:"unsubscribe",value:function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}}},{key:"toAbortSignal",value:function(){var t=this,e=new AbortController,n=function(t){e.abort(t)};return this.subscribe(n),e.signal.unsubscribe=function(){return t.unsubscribe(n)},e.signal}}],[{key:"source",value:function(){var e;return{token:new t((function(t){e=t})),cancel:e}}}])}();var ir={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(ir).forEach((function(t){var e=R(t,2),n=e[0],r=e[1];ir[r]=n}));var or=function t(e){var n=new nr(e),r=Jt(nr.prototype.request,n);return De.extend(r,nr.prototype,n,{allOwnKeys:!0}),De.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return t(On(e,n))},r}(sn);or.Axios=nr,or.CanceledError=gn,or.CancelToken=rr,or.isCancel=pn,or.VERSION=Qn,or.toFormData=He,or.AxiosError=$e,or.Cancel=or.CanceledError,or.all=function(t){return Promise.all(t)},or.spread=function(t){return function(e){return t.apply(null,e)}},or.isAxiosError=function(t){return De.isObject(t)&&!0===t.isAxiosError},or.mergeConfig=On,or.AxiosHeaders=dn,or.formToJSON=function(t){return an(De.isHTMLForm(t)?new FormData(t):t)},or.getAdapter=Gn,or.HttpStatusCode=ir,or.default=or,or.Axios,or.AxiosError,or.CanceledError,or.isCancel,or.CancelToken,or.VERSION,or.all,or.Cancel,or.isAxiosError,or.spread,or.toFormData,or.AxiosHeaders,or.HttpStatusCode,or.formToJSON,or.getAdapter,or.mergeConfig;var ar=function(){function t(e){var n;return h(this,t),(n=l(this,t,[e])).axiosInstance=or.create({baseURL:"".concat(n.host,"/").concat(n.namespace),headers:{Authorization:"Bearer ".concat(e.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;node"}}),n.axiosInstance.interceptors.response.use((function(t){return t.data}),(function(t){if(t.response){var e=t.response.data;if(V(e.errors)&&e.errors.length)throw new Error(e.errors[0]);if(e.error)throw new Error(e.error)}throw t})),n}return b(t,Mt),v(t,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.axiosInstance.defaults.headers.common=A(A({},this.axiosInstance.defaults.headers.common),t),this}},{key:"request",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.axiosInstance.request(A({method:t,url:e},n))}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("GET",t,A({params:e},n))}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("POST",t,A({data:e},n))}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PUT",t,A({data:e},n))}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request("DELETE",t,e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PATCH",t,A({data:e},n))}}])}();q("adapter","NodeAdapter",ar);var sr=function(){function t(){return h(this,t),l(this,t,arguments)}return b(t,Mt),v(t)}();q("adapter","EmberJsAdapter",sr);var ur=function(){function t(e){var n,r,i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(h(this,t),this.version=null!==(n=o.version)&&void 0!==n?n:"v1",this.options={version:this.version,host:null!==(r=o.host)&&void 0!==r?r:"https://api.fleetbase.io",namespace:null!==(i=o.namespace)&&void 0!==i?i:this.version,debug:a,publicKey:e},"string"!=typeof e||0===e.length)throw new Error("⚠️ Invalid public key given to Fleetbase SDK");if(!lt()&&e.toLowerCase().startsWith("$"))throw new Error("Secret key provided. You must use a public key with Fleetbase Javascript SDK!");this.adapter=o.adapter||ht(this.options),this.orders=new Et("order",this.adapter).extendActions(At),this.entities=new Et("entity",this.adapter),this.places=new Et("place",this.adapter),this.drivers=new Et("driver",this.adapter).extendActions(Nt),this.vehicles=new Et("vehicle",this.adapter),this.vendors=new Et("vendor",this.adapter),this.contacts=new Et("contact",this.adapter),this.serviceAreas=new Et("service-area",this.adapter),this.zones=new Et("zone",this.adapter),this.fleets=new Et("fleet",this.adapter),this.organizations=new Et("organization",this.adapter).extendActions(Pt)}return v(t,[{key:"setAdapter",value:function(t){this.adapter=t}},{key:"getAdapter",value:function(){return this.adapter}}],[{key:"newInstance",value:function(){return f(t,Array.prototype.slice.call(arguments))}}])}();export{Mt as Adapter,Ht as BrowserAdapter,at as Collection,$t as Contact,Ft as Driver,sr as EmberJsAdapter,Rt as Entity,It as Fleet,ft as GoogleAddress,ar as NodeAdapter,xt as Order,Lt as Organization,Ot as Payload,St as Place,dt as Point,J as Resolver,kt as Resource,zt as ServiceArea,qt as ServiceQuote,Bt as ServiceRate,Et as Store,mt as StoreActions,Tt as TrackingStatus,_t as Vehicle,Dt as Vendor,jt as Waypoint,Ut as Zone,$ as camelize,z as classify,ot as createCollection,H as createResource,M as createStore,bt as createStoreActions,U as dasherize,ur as default,ht as detectAdapter,yt as extendStoreActions,ut as isLatitude,ct as isLongitude,lt as isNodeEnvironment,wt as isResource,W as lookup,F as pluralize,q as register,K as resolve,G as resolveResource,D as singularize}; -//# sourceMappingURL=fleetbase.js.map diff --git a/dist/esm/fleetbase.js.map b/dist/esm/fleetbase.js.map deleted file mode 100644 index 60ccd25..0000000 --- a/dist/esm/fleetbase.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fleetbase.js","sources":["../../src/utils/string.js","../../src/registry.js","../../src/resolver.js","../../src/utils/array.js","../../src/utils/collection.js","../../src/utils/is-empty.js","../../src/utils/is-latitude.js","../../src/utils/is-longitude.js","../../src/utils/is-node-environment.js","../../src/utils/detect-adapter.js","../../src/utils/google-address.js","../../src/utils/point.js","../../src/utils/object.js","../../src/utils/store-actions.js","../../src/resource.js","../../src/store.js","../../src/resources/order.js","../../src/resources/payload.js","../../src/resources/entity.js","../../src/resources/place.js","../../src/resources/waypoint.js","../../src/resources/tracking-status.js","../../src/resources/vehicle.js","../../src/resources/organization.js","../../src/resources/driver.js","../../src/utils/is-phone.js","../../src/resources/vendor.js","../../src/resources/contact.js","../../src/resources/zone.js","../../src/resources/service-area.js","../../src/resources/service-rate.js","../../src/resources/service-quote.js","../../src/resources/fleet.js","../../src/adapter.js","../../src/adapters/browser.js","../../src/utils/is-blank.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/bind.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/utils.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/AxiosError.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/toFormData.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/buildURL.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/InterceptorManager.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/defaults/transitional.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/browser/index.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/browser/classes/FormData.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/browser/classes/Blob.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/common/utils.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/platform/index.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/formDataToJSON.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/defaults/index.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/toURLEncodedForm.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/parseHeaders.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/AxiosHeaders.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/transformData.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/cancel/isCancel.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/cancel/CanceledError.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/settle.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/progressEventReducer.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/speedometer.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/throttle.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/isURLSameOrigin.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/cookies.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/buildFullPath.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/isAbsoluteURL.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/combineURLs.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/mergeConfig.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/resolveConfig.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/adapters/fetch.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/adapters/xhr.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/parseProtocol.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/composeSignals.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/trackStream.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/adapters/adapters.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/null.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/dispatchRequest.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/env/data.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/validator.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/core/Axios.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/cancel/CancelToken.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/HttpStatusCode.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/axios.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/spread.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/lib/helpers/isAxiosError.js","../../node_modules/.pnpm/axios@1.7.9/node_modules/axios/index.js","../../src/adapters/node.js","../../src/adapters/ember.js","../../src/fleetbase.js"],"sourcesContent":["/**\n * Javascript String\n *\n * instance\n * new String('hello_world').humanize().get() => \"Hello world\"\n *\n * instance\n * const string = new String();\n * string.humanize('hello_world').get() => \"Hello world\"\n *\n * no chain\n * new String('hello_world', false).humanize() => \"Hello world\"\n *\n * static\n * String.invoke('humanize', 'hello_world') => \"Hello world\"\n *\n * exports {}\n * humanize('hello_world') => \"Hello world\"\n */\nexport default class String {\n constructor(string, chain = true) {\n this.str = string;\n this.chain = chain;\n }\n\n uncountableWords = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news'];\n\n pluralRules = [\n [new RegExp('(m)an$', 'gi'), '$1en'],\n [new RegExp('(pe)rson$', 'gi'), '$1ople'],\n [new RegExp('(child)$', 'gi'), '$1ren'],\n [new RegExp('^(ox)$', 'gi'), '$1en'],\n [new RegExp('(ax|test)is$', 'gi'), '$1es'],\n [new RegExp('(octop|vir)us$', 'gi'), '$1i'],\n [new RegExp('(alias|status)$', 'gi'), '$1es'],\n [new RegExp('(bu)s$', 'gi'), '$1ses'],\n [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],\n [new RegExp('([ti])um$', 'gi'), '$1a'],\n [new RegExp('sis$', 'gi'), 'ses'],\n [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'), '$1$2ves'],\n [new RegExp('(hive)$', 'gi'), '$1s'],\n [new RegExp('([^aeiouy]|qu)y$', 'gi'), '$1ies'],\n [new RegExp('(x|ch|ss|sh)$', 'gi'), '$1es'],\n [new RegExp('(matr|vert|ind)ix|ex$', 'gi'), '$1ices'],\n [new RegExp('([m|l])ouse$', 'gi'), '$1ice'],\n [new RegExp('(quiz)$', 'gi'), '$1zes'],\n [new RegExp('s$', 'gi'), 's'],\n [new RegExp('$', 'gi'), 's'],\n ];\n\n singularRules = [\n [new RegExp('(m)en$', 'gi'), '$1an'],\n [new RegExp('(pe)ople$', 'gi'), '$1rson'],\n [new RegExp('(child)ren$', 'gi'), '$1'],\n [new RegExp('([ti])a$', 'gi'), '$1um'],\n [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'), '$1$2sis'],\n [new RegExp('(hive)s$', 'gi'), '$1'],\n [new RegExp('(tive)s$', 'gi'), '$1'],\n [new RegExp('(curve)s$', 'gi'), '$1'],\n [new RegExp('([lr])ves$', 'gi'), '$1f'],\n [new RegExp('([^fo])ves$', 'gi'), '$1fe'],\n [new RegExp('([^aeiouy]|qu)ies$', 'gi'), '$1y'],\n [new RegExp('(s)eries$', 'gi'), '$1eries'],\n [new RegExp('(m)ovies$', 'gi'), '$1ovie'],\n [new RegExp('(x|ch|ss|sh)es$', 'gi'), '$1'],\n [new RegExp('([m|l])ice$', 'gi'), '$1ouse'],\n [new RegExp('(bus)es$', 'gi'), '$1'],\n [new RegExp('(o)es$', 'gi'), '$1'],\n [new RegExp('(shoe)s$', 'gi'), '$1'],\n [new RegExp('(cris|ax|test)es$', 'gi'), '$1is'],\n [new RegExp('(octop|vir)i$', 'gi'), '$1us'],\n [new RegExp('(alias|status)es$', 'gi'), '$1'],\n [new RegExp('^(ox)en', 'gi'), '$1'],\n [new RegExp('(vert|ind)ices$', 'gi'), '$1ex'],\n [new RegExp('(matr)ices$', 'gi'), '$1ix'],\n [new RegExp('(quiz)zes$', 'gi'), '$1'],\n [new RegExp('s$', 'gi'), ''],\n ];\n\n nonTitlecasedWords = ['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for'];\n\n idSuffix = new RegExp('(_ids|_id)$', 'g');\n underbar = new RegExp('_', 'g');\n spaceOrUnderbar = new RegExp('[ _]', 'g');\n uppercase = new RegExp('([A-Z])', 'g');\n underbarPrefix = new RegExp('^_');\n\n get() {\n return this.str;\n }\n\n applyRules(str, rules, skip, override) {\n if (override) {\n str = override;\n } else {\n var ignore = skip.indexOf(str.toLowerCase()) > -1;\n if (!ignore) {\n for (var x = 0; x < rules.length; x++) {\n if (str.match(rules[x][0])) {\n str = str.replace(rules[x][0], rules[x][1]);\n break;\n }\n }\n }\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.pluralize('person') -> 'people'\n String.pluralize('octopus') -> 'octopi'\n String.pluralize('Hat') -> 'Hats'\n String.pluralize('person', 'guys') -> 'guys' \n */\n pluralize(str, plural = null) {\n str = str || this.str;\n\n return this.applyRules(str, this.pluralRules, this.uncountableWords, plural);\n }\n\n /*\n String.singularize('person') -> 'person'\n String.singularize('octopi') -> 'octopus'\n String.singularize('hats') -> 'hat'\n String.singularize('guys', 'person') -> 'person'\n */\n singularize(str, singular) {\n str = str || this.str;\n\n return this.applyRules(str, this.singularRules, this.uncountableWords, singular);\n }\n\n /*\n String.camelize('message_properties') -> 'MessageProperties'\n String.camelize('message_properties', true) -> 'messageProperties'\n */\n camelize(str, lowFirstLetter) {\n str = str || this.str;\n\n let str_path = str.split('/');\n for (var i = 0; i < str_path.length; i++) {\n let str_arr = str_path[i].split('_');\n let initX = lowFirstLetter && i + 1 === str_path.length ? 1 : 0;\n\n for (let x = initX; x < str_arr.length; x++) {\n str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1);\n }\n str_path[i] = str_arr.join('');\n }\n str = str_path.join('::');\n\n // fix\n if (lowFirstLetter === true) {\n let first = str.charAt(0).toLowerCase();\n let last = str.slice(1);\n str = first + last;\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.underscore('MessageProperties') -> 'message_properties'\n String.underscore('messageProperties') -> 'message_properties'\n */\n underscore(str) {\n str = str || this.str;\n\n var str_path = str.split('::');\n for (var i = 0; i < str_path.length; i++) {\n str_path[i] = str_path[i].replace(this.uppercase, '_$1');\n str_path[i] = str_path[i].replace(this.underbarPrefix, '');\n }\n str = str_path.join('/').toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.humanize('message_properties') -> 'Message properties'\n String.humanize('message_properties') -> 'message properties'\n */\n humanize(str, lowFirstLetter) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.replace(this.idSuffix, '');\n str = str.replace(this.underbar, ' ');\n if (!lowFirstLetter) {\n str = this.capitalize(str);\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.capitalize('message_properties') -> 'Message_properties'\n String.capitalize('message properties') -> 'Message properties'\n */\n capitalize(str) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.dasherize('message_properties') -> 'message-properties'\n String.dasherize('message properties') -> 'message-properties'\n */\n dasherize(str) {\n str = str || this.str;\n\n str = str.replace(this.spaceOrUnderbar, '-');\n str = str.toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.normify('message_properties') -> 'Message Properties'\n String.normify('message properties') -> 'Message Properties'\n Inflactor.normify('Message_propertyId', true) -> 'Message Properties Id'\n */\n normify(str, allFirstUpper) {\n str = str || this.str;\n\n //var str = str.toLowerCase();\n if (allFirstUpper === true) {\n str = this.camelize(str);\n str = this.underscore(str);\n } else {\n str = str.toLowerCase();\n }\n\n str = str.replace(this.underbar, ' ');\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var d = str_arr[x].split('-');\n for (var i = 0; i < d.length; i++) {\n if (this.nonTitlecasedWords.indexOf(d[i].toLowerCase()) < 0) {\n d[i] = this.capitalize(d[i]);\n }\n }\n str_arr[x] = d.join('-');\n }\n str = str_arr.join(' ');\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.demodulize('Message::Bus::Properties') -> 'Properties'\n */\n demodulize(str) {\n str = str || this.str;\n\n var str_arr = str.split('::');\n str = str_arr[str_arr.length - 1];\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.tableize('MessageBusProperty') -> 'message_bus_properties'\n */\n tableize(str) {\n str = str || this.str;\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n str = this.pluralize(this.underscore(str));\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.classify('message_bus_properties') -> 'MessageBusProperty'\n */\n classify(str) {\n // Use the provided string or fallback to the instance's string.\n str = str || this.str;\n // Ensure we're working with a string and remove any extra whitespace.\n str = `${str}`.trim();\n\n // Normalize the input:\n // Replace one or more spaces, dashes, or underscores with a single underscore.\n // This handles cases like \"service-area\", \"service area\", \"service_area\", etc.\n str = str.replace(/[\\s\\-_]+/g, '_');\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n // First, singularize the underscored string.\n str = this.singularize(str);\n\n // Next, camelize the result.\n // Passing false for the lowFirstLetter parameter ensures the first letter is capitalized.\n str = this.camelize(str, false);\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // Update the instance's string.\n this.str = str;\n\n // Return the instance if chaining is enabled, or the string otherwise.\n return this.chain ? this : str;\n }\n\n /*\n String.foreignKey('MessageBusProperty') -> 'message_bus_property_id'\n String.foreignKey('MessageBusProperty', true) -> 'message_bus_propertyid'\n */\n foreignKey(str, dropIdUbar = false) {\n str = str || this.str;\n\n str = this.underscore(this.demodulize(str)) + (dropIdUbar ? '' : '_') + 'id';\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.ordinalize('the 1 pitch') -> 'the 1st pitch'\n */\n ordinalize(str) {\n str = str || this.str;\n\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var i = parseInt(str_arr[x]);\n if (isNaN(i)) {\n var ltd = str_arr[x].substring(str_arr[x].length - 2);\n var ld = str_arr[x].substring(str_arr[x].length - 1);\n var suf = 'th';\n if (ltd != '11' && ltd != '12' && ltd != '13') {\n if (ld === '1') {\n suf = 'st';\n } else if (ld === '2') {\n suf = 'nd';\n } else if (ld === '3') {\n suf = 'rd';\n }\n }\n str_arr[x] += suf;\n }\n }\n str = str_arr.join(' ');\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /**\n * @method invoke\n **/\n static invoke() {\n const argz = Object.values(arguments);\n const instance = new String(null, false);\n const method = arguments[0];\n argz.shift();\n\n if (typeof instance[method] === 'function') {\n return instance[method](...argz);\n }\n\n return null;\n }\n}\n\nexport const pluralize = function () {\n const argz = ['pluralize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const singularize = function () {\n const argz = ['singularize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const humanize = function () {\n const argz = ['humanize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const underscore = function () {\n const argz = ['underscore', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const camelize = function () {\n const argz = ['camelize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const capitalize = function () {\n const argz = ['capitalize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const dasherize = function () {\n const argz = ['dasherize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const normify = function () {\n const argz = ['normify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const demodulize = function () {\n const argz = ['demodulize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const tableize = function () {\n const argz = ['tableize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const classify = function () {\n const argz = ['classify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const foreignKey = function () {\n const argz = ['foreignKey', ...arguments];\n\n return String.invoke(...argz);\n};\n","import { pluralize, singularize } from './utils/string.js';\n\nexport const registry = {\n resources: {},\n adapters: {},\n storse: {},\n actions: {},\n};\n\nexport function register(type, className, cls) {\n const key = pluralize(type);\n if (!registry[key]) {\n registry[key] = {};\n }\n registry[key][className] = cls;\n}\n\nexport function create(type, className, ...params) {\n const key = pluralize(type);\n if (!registry[key]) {\n throw new Error(`Unknown type: ${singularize(type)}`);\n }\n if (!registry[key][className]) {\n throw new Error(`No ${singularize(type)} named '${className}' registered.`);\n }\n const ResourceClass = registry[key][className];\n return new ResourceClass(...params);\n}\n\nexport function createStore() {\n return create('store', 'Store', ...arguments);\n}\n\nexport function createAdapter() {\n return create('adapter', 'Adapter', ...arguments);\n}\n\nexport function createResource() {\n return create('resource', 'Resource', ...arguments);\n}\n","import { create } from './registry.js';\nimport { classify } from './utils/string.js';\n\nexport default class Resolver {\n constructor() {\n return this.lookup(...arguments);\n }\n\n lookup(type, className, ...params) {\n return create(type, className, ...params);\n }\n}\n\nexport function lookup(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\n// alias for lookup\nexport function resolve(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\nexport function resolveResource(className, ...params) {\n return lookup('resource', classify(className), ...params);\n}\n\nexport function resolveAdapter(className, ...params) {\n return lookup('adapter', classify(className), ...params);\n}\n","const { isArray } = Array;\n\nexport { isArray };\n","/* eslint no-undef: \"off\" */\nimport { isArray } from './array.js';\n\n/**\n * Collection\n * Extended array inspired by Ember's NativeArray\n **/\nconst CHUNK_SIZE = 60000;\n\n// To avoid overflowing the stack, we splice up to CHUNK_SIZE items at a time.\n// See https://code.google.com/p/chromium/issues/detail?id=56588 for more details.\nexport function replace(array, start, deleteCount, items = []) {\n if (isArray(array)) {\n if (items.length <= CHUNK_SIZE) {\n array.splice(start, deleteCount, ...items);\n } else {\n array.splice(start, deleteCount);\n\n for (let i = 0; i < items.length; i += CHUNK_SIZE) {\n let chunk = items.slice(i, i + CHUNK_SIZE);\n array.splice(start + i, 0, ...chunk);\n }\n }\n } else if (isCollection(array)) {\n array.replace(start, deleteCount, items);\n }\n}\n\nexport function identityFunction(item) {\n return item;\n}\n\nexport function uniqBy(array, key = identityFunction) {\n let ret = [];\n let seen = new Set();\n let getter = typeof key === 'function' ? key : (item) => get(item, key);\n\n array.forEach(function (item) {\n let val = getter(item);\n if (!seen.has(val)) {\n seen.add(val);\n ret.push(item);\n }\n });\n\n return ret;\n}\n\nexport function isCollection(mixed) {\n return mixed instanceof Collection;\n}\n\nexport function objectAt(array, index) {\n if (isArray(array)) {\n return array[index];\n } else if (isCollection(array)) {\n return array.objectAt(index);\n }\n\n return null;\n}\n\nexport function iter(key, value) {\n let valueProvided = arguments.length === 2;\n return valueProvided\n ? function (item) {\n return value === item[key];\n }\n : function (item) {\n return Boolean(item[key]);\n };\n}\n\nexport function findIndex(array, predicate, startAt = 0) {\n let len = array.length;\n for (let index = startAt; index < len; index++) {\n let item = objectAt(array, index);\n if (predicate(item, index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport function find(array, callback, target) {\n let predicate = callback.bind(target);\n let index = findIndex(array, predicate, 0);\n return index === -1 ? undefined : objectAt(array, index);\n}\n\nexport function any(array, callback, target) {\n let predicate = callback.bind(target);\n return findIndex(array, predicate, 0) !== -1;\n}\n\nexport function every(array, callback, target) {\n let cb = callback.bind(target);\n let predicate = function (item, index, array) {\n return !cb(item, index, array);\n };\n return findIndex(array, predicate, 0) === -1;\n}\n\nexport function indexOf(array, val, startAt = 0, withNaNCheck) {\n let len = array.length;\n\n if (startAt < 0) {\n startAt += len;\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate =\n withNaNCheck && val !== val\n ? function (item) {\n return item !== item;\n }\n : function (item) {\n return item === val;\n };\n return findIndex(array, predicate, startAt);\n}\n\nexport function removeAt(array, index, len = 1) {\n replace(array, index, len, []);\n return array;\n}\n\nexport function insertAt(array, index, item) {\n replace(array, index, 0, [item]);\n return item;\n}\n\nexport function createCollection() {\n return new Collection(...arguments);\n}\n\nexport default class Collection extends Array {\n constructor() {\n if (isArray(arguments[0])) {\n super(...arguments[0]);\n } else {\n super(...arguments);\n }\n }\n\n get notEmpty() {\n return this.length > 0;\n }\n\n get empty() {\n return this.length === 0;\n }\n\n get first() {\n return objectAt(this, 0);\n }\n\n get last() {\n return objectAt(this, this.length - 1);\n }\n\n replace(start, deleteCount, items = []) {\n replace(this, start, deleteCount, items);\n\n return this;\n }\n\n objectsAt(indexes) {\n return indexes.map((idx) => objectAt(this, idx));\n }\n\n objectAt(index) {\n return objectAt(this, index);\n }\n\n indexOf(object, startAt) {\n return indexOf(this, object, startAt, false);\n }\n\n lastIndexOf(object, startAt) {\n let len = this.length;\n\n if (startAt === undefined || startAt >= len) {\n startAt = len - 1;\n }\n\n if (startAt < 0) {\n startAt += len;\n }\n\n for (let idx = startAt; idx >= 0; idx--) {\n if (objectAt(this, idx) === object) {\n return idx;\n }\n }\n\n return -1;\n }\n\n includes(object, startAt) {\n return indexOf(this, object, startAt, true) !== -1;\n }\n\n findBy() {\n return find(this, iter(...arguments));\n }\n\n findIndexBy() {\n return findIndex(this, iter(...arguments));\n }\n\n isEvery() {\n return every(this, iter(...arguments));\n }\n\n isAny() {\n return any(this, iter(...arguments));\n }\n\n invoke(methodName, ...args) {\n let ret = [];\n\n this.forEach((item) => ret.push(item[methodName]?.(...args)));\n\n return ret;\n }\n\n toArray() {\n return this.map((item) => item);\n }\n\n compact() {\n return this.filter((value) => value != null);\n }\n\n sortBy() {\n let sortKeys = arguments;\n\n return this.sort((a, b) => {\n for (const element of sortKeys) {\n let key = element;\n let propA = a[key];\n let propB = b[key];\n // return 1 or -1 else continue to the next sortKey\n let compareValue = compare(propA, propB);\n\n if (compareValue) {\n return compareValue;\n }\n }\n return 0;\n });\n }\n\n uniqBy(key) {\n return uniqBy(this, key);\n }\n\n without(value) {\n if (!this.includes(value)) {\n return this; // nothing to do\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate = value === value ? (item) => item !== value : (item) => item === item;\n return this.filter(predicate);\n }\n\n clear() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n this.replace(0, len, []);\n return this;\n }\n\n insertAt(idx, object) {\n insertAt(this, idx, object);\n return this;\n }\n\n replaceAt(idx, object) {\n return this.replace(idx, 1, [object]);\n }\n\n removeAt(start, len) {\n return removeAt(this, start, len);\n }\n\n pushObject(obj) {\n return this.insertAt(this.length, obj);\n }\n\n pushObjects(objects) {\n this.replace(this.length, 0, objects);\n return this;\n }\n\n popObject() {\n let len = this.length;\n if (len === 0) {\n return null;\n }\n\n let ret = objectAt(this, len - 1);\n this.removeAt(len - 1, 1);\n return ret;\n }\n\n shiftObject() {\n if (this.length === 0) {\n return null;\n }\n\n let ret = objectAt(this, 0);\n this.removeAt(0);\n return ret;\n }\n\n unshiftObject(obj) {\n return insertAt(this, 0, obj);\n }\n\n unshiftObjects(objects) {\n this.replace(0, 0, objects);\n return this;\n }\n\n reverseObjects() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n let objects = this.toArray().reverse();\n this.replace(0, len, objects);\n return this;\n }\n\n setObjects(objects) {\n if (objects.length === 0) {\n return this.clear();\n }\n\n let len = this.length;\n this.replace(0, len, objects);\n return this;\n }\n\n removeObject(obj) {\n let loc = this.length || 0;\n while (--loc >= 0) {\n let curObject = objectAt(this, loc);\n\n if (curObject === obj) {\n this.removeAt(loc);\n }\n }\n return this;\n }\n\n removeObjects(objects) {\n for (let i = objects.length - 1; i >= 0; i--) {\n this.removeObject(objects[i]);\n }\n\n return this;\n }\n\n addObject(obj) {\n let included = this.includes(obj);\n\n if (!included) {\n this.pushObject(obj);\n }\n\n return this;\n }\n\n addObjects(objects) {\n objects.forEach((obj) => this.addObject(obj));\n return this;\n }\n}\n","export function isEmpty(obj) {\n const none = obj === null || obj === undefined;\n if (none) {\n return none;\n }\n\n if (typeof obj.size === 'number') {\n return !obj.size;\n }\n\n const objectType = typeof obj;\n\n if (objectType === 'object') {\n const { size } = obj;\n if (typeof size === 'number') {\n return !size;\n }\n }\n\n if (typeof obj.length === 'number' && objectType !== 'function') {\n return !obj.length;\n }\n\n if (objectType === 'object') {\n const { length } = obj;\n if (typeof length === 'number') {\n return !length;\n }\n }\n\n return false;\n}\n\nexport default isEmpty;\n","export function isLatitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 90;\n}\n\nexport default isLatitude;\n","export function isLongitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 180 && Math.abs(coordinate) >= 90;\n}\n\nexport default isLongitude;\n","/**\n * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative.\n *\n * @returns boolean\n */\nexport function isNodeEnvironment() {\n return (\n typeof process !== 'undefined' &&\n (typeof process?.env === 'object' || process.release?.name?.search(/node|io.js/) !== -1) &&\n (typeof window === 'undefined' || window?.navigator?.product === 'ReactNative')\n );\n}\n\nexport default isNodeEnvironment;\n","import { lookup } from '../resolver.js';\nimport isNodeEnvironment from './is-node-environment.js';\n\nexport function detectAdapter(options = {}) {\n if (isNodeEnvironment()) {\n return lookup('adapter', 'NodeAdapter', options);\n }\n\n return lookup('adapter', 'BrowserAdapter', options);\n}\n\nexport default detectAdapter;\n","import { isArray } from './array.js';\n\nexport default class GoogleAddress {\n constructor(place) {\n this.place = place;\n this.geometry = place?.geometry;\n this.components = this.parseComponents();\n this.attributes = this.parseProperties();\n }\n\n parse() {\n this.parseComponents();\n this.parseProperties();\n }\n\n parseComponents() {\n const components = (this.place?.address_components || []).reduce(function (acc, data) {\n data.types.forEach(function (type) {\n acc[type] = data;\n });\n return acc;\n }, {});\n\n return components;\n }\n\n parseProperties() {\n const attributes = {\n streetNumber: this.get('street_number'),\n streetName: this.get('route'),\n coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0],\n city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']),\n county: this.get('administrative_area_level_2'),\n stateShort: this.get('administrative_area_level_1', true),\n stateLong: this.get('administrative_area_level_1'),\n countryShort: this.get('country', true),\n country: this.get('country', true),\n countryLong: this.get('country'),\n postalCode: this.get('postal_code'),\n };\n\n attributes.address = [attributes.streetNumber, attributes.streetName].filter(Boolean).join(' ');\n\n return attributes;\n }\n\n all() {\n return this.attributes;\n }\n\n or(keys = []) {\n for (const element of keys) {\n const key = element;\n\n if (isArray(key)) {\n const pkey = key[0];\n const short = key[1];\n\n if (this.has(pkey)) {\n return this.get(pkey, short);\n }\n\n continue;\n }\n\n if (this.has(key)) {\n return this.get(key);\n }\n }\n\n return null;\n }\n\n has(key) {\n return key in this.components;\n }\n\n get(key, short = false) {\n if (!(key in this.components)) {\n return null;\n }\n\n return short ? this.components[key].short_name : this.components[key].long_name;\n }\n\n setAttributes(attributes = {}) {\n this.attributes = { ...this.attributes, ...attributes };\n\n return this;\n }\n\n setAttribute(key, value) {\n this.attributes[key] = value;\n\n return this;\n }\n\n getAttribute(key) {\n return this.attributes[key] || null;\n }\n}\n\nexport function createGoogleAddress() {\n return new GoogleAddress(...arguments);\n}\n\nexport { GoogleAddress };\n","export default class Point {\n constructor(latitude = 0, longitude = 0) {\n this.type = 'Point';\n this.coordinates = [longitude, latitude];\n }\n\n get latitude() {\n return this.coordinates[1];\n }\n\n get longitude() {\n return this.coordinates[0];\n }\n\n lat() {\n return this.latitude;\n }\n\n lng() {\n return this.longitude;\n }\n\n static fromGeoJson(json) {\n const [longitude, latitude] = json.coordinates;\n\n return new Point(latitude, longitude);\n }\n\n serialize() {\n return {\n type: 'Point',\n coorindates: [this.lat(), this.lng()],\n };\n }\n\n toJson() {\n return this.serialize();\n }\n\n toString() {\n return `(${this.latitude}, ${this.longitude})`;\n }\n}\n\nexport { Point };\n","/* eslint no-undef: \"off\" */\nimport isEmpty from './is-empty.js';\n\nexport function isResource(mixed) {\n return typeof mixed === 'object' && !isEmpty(mixed?.attributes) && typeof mixed?.attributes === 'object';\n}\n\nexport function isCallable(object, property) {\n return typeof object[property] === 'function';\n}\n\nexport function getResolved(func, path) {\n const resolved = func();\n return Array.isArray(resolved) || typeof resolved === 'object' ? get(resolved, path) : null;\n}\n\nexport function invoke(object, method) {\n if (typeof object[method] === 'function') {\n return object[method].bind(object);\n }\n}\n\nexport function get(object, path) {\n let current = object;\n\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n\n if (isArray || isObject) {\n for (let i = 0; i < pathArray.length; i++) {\n if (current && current[pathArray[i]] === undefined) {\n return null;\n } else if (current) {\n current = current[pathArray[i]];\n\n // if is resource then return get on its attributes\n if (isResource(current) && pathArray[i + 1] !== undefined) {\n const newPath = pathArray.slice(i + 1).join('.');\n\n return get(current.attributes, newPath);\n }\n\n // resolve functions and continue\n if (typeof current === 'function') {\n const newPath = pathArray.slice(i + 1).join('.');\n return getResolved(current, newPath);\n }\n }\n }\n return current;\n }\n\n if (isFunction) {\n return getResolved(object, path);\n }\n}\n\nexport function getProperties(object, properties = []) {\n const selected = {};\n let propertyNames = arguments;\n let i = 1;\n\n if (arguments.length === 2 && Array.isArray(properties)) {\n i = 0;\n propertyNames = arguments[1];\n }\n\n for (; i < propertyNames.length; i++) {\n selected[propertyNames[i]] = get(object, propertyNames[i]);\n }\n\n return selected;\n}\n\nexport function set(object, path, value) {\n let current = object;\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n // if is function\n if (isFunction) {\n // throw error should be object or array or object like\n }\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n const iterations = pathArray.length;\n\n if (isArray || isObject) {\n for (let i = 0; i < iterations - 1; i++) {\n if (!current[pathArray[i]]) {\n current[pathArray[i]] = {};\n }\n current = current[pathArray[i]];\n }\n\n current[pathArray[iterations - 1]] = value;\n }\n\n return value;\n}\n\nexport function setProperties(object, properties = {}) {\n for (const property in properties) {\n set(object, property, properties[property]);\n }\n\n return object;\n}\n\nexport function extend(target, classes = []) {\n if (arguments.length > 1) {\n classes = arguments;\n }\n for (const element of classes) {\n for (const property in element) {\n if (Object.prototype.hasOwnProperty.call(element, property)) {\n target[property] = element[property];\n }\n }\n }\n return target;\n}\n","import { set } from './object.js';\nimport { isArray } from './array.js';\nimport { register } from '../registry.js';\n\nexport function isStoreActions(target) {\n return target instanceof StoreActions;\n}\n\nexport function extendStoreActions(store, actions = []) {\n store.actions = isArray(actions) ? actions : [actions];\n\n if (isArray(actions)) {\n for (const element of actions) {\n store.extendActions(element);\n }\n return;\n }\n\n if (isStoreActions(actions)) {\n actions.extend(store);\n }\n\n return store;\n}\n\nexport function createStoreActions(name, ...params) {\n const actions = new StoreActions(...params);\n register('action', name, actions);\n return actions;\n}\n\nexport default class StoreActions {\n constructor(actions = {}, bind = null) {\n this.actions = actions;\n this.bind = bind;\n }\n\n extend(bindTo = null) {\n const binding = bindTo || this.bind;\n\n if (!binding) {\n return this;\n }\n\n if (this?.actions && typeof this.actions === 'object') {\n for (let action in this.actions) {\n const fn = this.actions[action];\n\n if (typeof fn !== 'function') {\n set(binding, action, fn);\n continue;\n }\n\n set(binding, action, fn.bind(binding));\n }\n }\n\n return this;\n }\n}\n","// import Store from './store.js';\nimport { isEmpty } from './utils/index.js';\nimport { isArray } from './utils/array.js';\nimport { set, get } from './utils/object.js';\nimport { register, createStore } from './registry.js';\n\nexport function isResource(target) {\n return target instanceof Resource;\n}\n\nexport default class Resource {\n /**\n\t * The base resource for all resources\n\n\t * @return {[type]} [description]\n\t */\n constructor(attributes = {}, adapter, resource, options = {}) {\n this.attributes = attributes;\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isDestroying = false;\n this.isReloading = false;\n this.resource = resource;\n this.options = options;\n this.version = options.version || 'v1';\n this.setAdapter(adapter);\n }\n\n /**\n * Set a new adapter to the resource instance, this will update the Store instance\n *\n * @param {Adapter} adapter\n * @return {Resource} this\n */\n setAdapter(adapter) {\n this.adapter = adapter;\n this.store = createStore(this.resource, adapter, {\n onAfterFetch: this.syncAttributes.bind(this),\n actions: this.options?.actions,\n });\n\n return this;\n }\n\n /**\n * Getter for id attribute\n *\n * @var {String}\n */\n get id() {\n return this.getAttribute('id');\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n create(attributes = {}) {\n const data = this.mergeAttributes(attributes);\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.create(data).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n update(attributes = {}) {\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.update(this.attributes.id, attributes).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Deletes the resource instance on the server\n *\n * @return {[type]} [description]\n */\n destroy() {\n this.setFlags(['isLoading', 'isDestroying']);\n\n return this.store.destroy(this.attributes.id).then((response) => {\n this.setFlags(['isLoading', 'isDestroying'], false);\n\n return response;\n });\n }\n\n /**\n * Reloads the resource from the server.\n *\n * @return {[type]} [description]\n */\n reload() {\n this.setFlags(['isLoading', 'isReloading']);\n\n return this.store.findRecord(this.attributes.id).then((response) => {\n this.reset();\n\n return response;\n });\n }\n\n /**\n * Sets flag properties.\n *\n * @return this\n */\n setFlags(flags = [], state = true) {\n const validFlags = ['isLoading', 'isSaving', 'isReloading', 'isDestroying'];\n\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i];\n\n if (typeof flag !== 'string' || !validFlags.includes(flag)) {\n throw new Error(`${flag} is not a valid flag!`);\n }\n\n this[flag] = state;\n }\n\n return this;\n }\n\n /**\n * Resets tracked properties\n *\n * @return this\n */\n reset() {\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isReloading = false;\n\n return this;\n }\n\n /**\n * Emptys resource.\n *\n * @return this\n */\n empty() {\n this.reset();\n this.attribues = {};\n\n return this;\n }\n\n /**\n * Saves the resource instance on the server\n *\n * @return {[type]} [description]\n */\n save(options = {}) {\n const attributes = this.getAttributes();\n\n if (isEmpty(this.id)) {\n return this.create(attributes);\n }\n\n if (options.onlyDirty === true) {\n return this.savedirty();\n }\n\n return this.update(attributes);\n }\n\n /**\n * Saves only dirtied attributes.\n *\n * @return {[type]} [description]\n */\n saveDirty() {\n const dirtyAttributeKeys = Object.keys(this.dirtyAttributes);\n const dirtyAttributes = {};\n\n for (let i = 0; i < dirtyAttributeKeys.length; i++) {\n const key = dirtyAttributeKeys[i];\n dirtyAttributes[key] = this.getAttribute(key);\n }\n\n return this.update(dirtyAttributes);\n }\n\n /**\n * Returns the resource meta if exists.\n *\n * @return {Object}\n */\n get meta() {\n return this.getAttribute('meta', {});\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get createdAt() {\n return this.isAttributeFilled('created_at') ? new Date(this.getAttribute('created_at')) : null;\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get updatedAt() {\n return this.isAttributeFilled('updated_at') ? new Date(this.getAttribute('updated_at')) : null;\n }\n\n /**\n * Checks if resource is loaded from the server.\n *\n * @return {Boolean}\n */\n get isLoaded() {\n return this.hasAttributes(['created_at', 'id']);\n }\n\n /**\n * Checks if resource ihas no attributes\n *\n * @return {Boolean}\n */\n get isEmpty() {\n return Object.values(this?.attributes).length === 0;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isNew() {\n return !this.id;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isSaved() {\n return !this.isNew && this.isLoaded;\n }\n\n /**\n * Checks if resource is deleted on server.\n *\n * @return {Boolean}\n */\n get isDeleted() {\n return this.hasAttributes(['deleted', 'time']);\n }\n\n /**\n * Iterates over each attribute value and property executing a user supplied callback.\n *\n * @return {Object}\n */\n eachAttribute(callback) {\n if (typeof callback !== 'function') {\n return this;\n }\n\n Object.keys(this?.attributes ?? {}).forEach((property) => {\n const value = this.getAttribute(property);\n callback.call(this, value, property);\n });\n\n return this;\n }\n\n /**\n * Gets all changes\n *\n * @return {Object}\n */\n changes() {\n return this.changes;\n }\n\n /**\n * Gets all dirty attributes.\n *\n * @return {Object}\n */\n getDirtyAttributes() {\n return this.dirtyAttributes;\n }\n\n /**\n * Checks if property is dirty.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n isDirty(property) {\n return property in this.dirtyAttributes;\n }\n\n /**\n * Checks if any properties is dirty.\n *\n * @return {Boolean}\n */\n hasDirtyAttributes() {\n return Object.keys(this?.dirtyAttributes ?? {}).length > 0;\n }\n\n /**\n * Updates a instance property without tracking changes or dirtying attribute.\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n mutate(property, value) {\n this.attributes[property] = value;\n }\n\n /**\n * Set an instance property locally\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n setAttribute(property, value = null) {\n if (value === null && typeof property === 'object') {\n return this.setAttributes(property);\n }\n\n const previousValue = this?.attributes[property] ?? null;\n\n // use object setter\n set(this.attributes, property, value);\n set(this.dirtyAttributes, property, previousValue);\n\n // track changes\n if (!isArray(this?.changes[property])) {\n this.changes[property] = [];\n }\n\n this.changes[property].push({\n property,\n previousValue,\n value,\n changedAt: new Date(),\n });\n\n return this;\n }\n\n /**\n * Set multiple instance properties locally\n *\n * @param {Object} properties [description]\n */\n setAttributes(attributes = {}) {\n for (let property in attributes) {\n this.setAttribute(property, attributes[property]);\n }\n\n return this;\n }\n\n /**\n * Get an attribute\n *\n * @param {String} attribute The attribute key to get\n * @param {mixed} defaultValue The default value if no attribute value\n */\n getAttribute(attribute, defaultValue = null) {\n const value = get(this?.attributes ?? {}, attribute);\n\n if (value === undefined) {\n return defaultValue;\n }\n\n return value;\n }\n\n /**\n * Checks if attribute exists.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n hasAttribute(property) {\n if (isArray(property)) {\n const properties = property;\n const attributeKeys = Object.keys(this.attributes ?? {});\n\n return properties.every((prop) => attributeKeys.includes(prop));\n }\n\n if (!this?.attributes) {\n return false;\n }\n\n return property in this.attributes;\n }\n\n /**\n * Alias for checking if has multiple attributes.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n hasAttributes(properties = []) {\n return this.hasAttribute(properties);\n }\n\n /**\n * Returns true if attribute has value.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n isAttributeFilled(property) {\n if (isArray(property)) {\n return this.hasAttribute(property) && property.every((prop) => !isEmpty(this.getAttribute(prop)));\n }\n\n return this.hasAttribute(property) && !isEmpty(this.getAttribute(property));\n }\n\n /**\n * Get multiple attributes.\n *\n * @param {Array} properties [description]\n * @param {[type]} value [description]\n */\n getAttributes(properties) {\n const attributes = {};\n\n if (properties === null || properties === undefined) {\n return this.getAttributes(Object.keys(this.attributes));\n }\n\n if (typeof properties === 'string') {\n return this.getAttribute([...arguments]);\n }\n\n if (!isArray(properties)) {\n throw new Error('No attribute properties provided!');\n }\n\n for (const element of properties) {\n const property = element;\n\n if (typeof property !== 'string') {\n continue;\n }\n\n let value = this.getAttribute(property);\n\n if (typeof value?.attributes === 'object' && !isArray(value?.attributes)) {\n value = value.attributes;\n }\n\n attributes[property] = value;\n }\n\n return attributes;\n }\n\n /**\n * Serialize resource to a POJO\n *\n * @returns {Object}\n */\n serialize() {\n return this.getAttributes();\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n mergeAttributes(attributes = {}) {\n const modelAttributes = this?.attributes ?? {};\n this.attributes = { ...modelAttributes, ...attributes };\n\n return this.attributes;\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n syncAttributes(json = {}) {\n this.attributes = json;\n }\n}\n\nregister('resource', 'Resource', Resource);\n","import { lookup } from './resolver.js';\nimport { isResource } from './resource.js';\nimport { createCollection } from './utils/collection.js';\nimport { detectAdapter } from './utils/detect-adapter.js';\nimport { isArray } from './utils/array.js';\nimport { classify, pluralize } from './utils/string.js';\nimport { extendStoreActions } from './utils/store-actions.js';\nimport { register } from './registry.js';\n\nexport function createStore() {\n return new Store(...arguments);\n}\n\nexport function afterFetch(store, json) {\n if (typeof store.options.onAfterFetch === 'function') {\n store.options.onAfterFetch(json);\n }\n\n if (isArray(json)) {\n const serialized = [];\n\n for (const element of json) {\n serialized.push(store.afterFetch(element));\n }\n\n return createCollection(...serialized);\n }\n\n const resourceInstance = store.serialize(json);\n return store.deposit(resourceInstance);\n}\n\nexport default class Store {\n constructor(resource, adapter, options = {}) {\n this.resource = resource;\n this.adapter = adapter || detectAdapter();\n this.namespace = pluralize(resource);\n this.storage = createCollection();\n this.options = options;\n this.extendActions(options.actions);\n }\n\n extendActions(actions = []) {\n return extendStoreActions(this, actions);\n }\n\n deposit(resourceInstance) {\n // this.storage[this.namespace].pushObject(resourceInstance);\n return resourceInstance;\n }\n\n serialize(json) {\n return lookup('resource', classify(this.resource), json, this.adapter);\n }\n\n afterFetch(json) {\n return afterFetch(this, json);\n }\n\n /**\n * Creates a new record via POST\n *\n * @param {Object} attributes - The attributes to create the record with\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async create(attributes = {}, options = {}) {\n const response = await this.adapter.post(`${this.namespace}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Updates an existing record via PUT\n *\n * @param {string|number} id - ID of the record to update\n * @param {Object} attributes - The attributes to update\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async update(id, attributes = {}, options = {}) {\n const response = await this.adapter.put(`${this.namespace}/${id}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Finds a single record by ID\n *\n * @param {string|number} id - ID of the record to fetch\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findRecord(id, options = {}) {\n const response = await this.adapter.get(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Fetches all records from the resource\n *\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findAll(options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource using the given query params\n *\n * @param {Object} query - Query parameters\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async query(query = {}, options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource, but returns a single record\n *\n * @param {Object} query - Query parameters (with `query.single = true`)\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async queryRecord(query = {}, options = {}) {\n query.single = true;\n\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Deletes/destroys a record by ID\n *\n * @param {any} record - Resource or ID\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async destroy(record, options = {}) {\n const id = isResource(record) ? record.getAttribute('id') : record;\n const response = await this.adapter.delete(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n}\n\nregister('store', 'Store', Store);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport StoreActions from '../utils/store-actions.js';\n\nexport const orderActions = new StoreActions({\n getDistanceAndTime: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/distance-and-time`, params, options);\n },\n\n getNextActivity: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/next-activity`, params, options);\n },\n\n dispatch: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/dispatch`, params, options).then(this.afterFetch.bind(this));\n },\n\n start: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/start`, params, options).then(this.afterFetch.bind(this));\n },\n\n updateActivity: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/update-activity`, params, options).then(this.afterFetch.bind(this));\n },\n\n setDestination: function (id, destinationId, params = {}, options = {}) {\n if (isResource(destinationId)) {\n destinationId = destinationId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/set-destination/${destinationId}`, params, options).then(this.afterFetch.bind(this));\n },\n\n captureQrCode: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-qr${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n captureSignature: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-signature${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n complete: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/complete`, params, options).then(this.afterFetch.bind(this));\n },\n\n cancel: function (id, params = {}, options = {}) {\n return this.adapter.delete(`${this.namespace}/${id}/cancel`, params, options).then(this.afterFetch.bind(this));\n },\n});\n\nexport default class Order extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'order', { actions: orderActions, ...options });\n }\n\n getDistanceAndTime(params = {}, options = {}) {\n return this.store.getDistanceAndTime(this.id, params, options);\n }\n\n dispatch(params = {}, options = {}) {\n return this.store.dispatch(this.id, params, options);\n }\n\n start(params = {}, options = {}) {\n return this.store.start(this.id, params, options);\n }\n\n setDestination(destinationId, params = {}, options = {}) {\n return this.store.setDestination(this.id, destinationId, params, options);\n }\n\n captureQrCode(subjectId = null, params = {}, options = {}) {\n return this.store.captureQrCode(this.id, subjectId, params, options);\n }\n\n captureSignature(subjectId = null, params = {}, options = {}) {\n return this.store.captureSignature(this.id, subjectId, params, options);\n }\n\n getNextActivity(params = {}, options = {}) {\n return this.store.getNextActivity(this.id, params, options);\n }\n\n updateActivity(params = {}, options = {}) {\n return this.store.updateActivity(this.id, params, options);\n }\n\n cancel(params = {}, options = {}) {\n return this.store.cancel(this.id, params, options);\n }\n\n complete(params = {}, options = {}) {\n return this.store.complete(this.id, params, options);\n }\n\n get isDispatched() {\n return this.getAttribute('dispatched_at') !== null;\n }\n\n get isNotDispatched() {\n return this.getAttribute('dispatched_at') == null;\n }\n\n get isStarted() {\n return this.getAttribute('started_at') !== null;\n }\n\n get isNotStarted() {\n return this.getAttribute('started_at') == null;\n }\n\n get isCompleted() {\n return this.getAttribute('status') == 'completed';\n }\n\n get isCanceled() {\n return this.getAttribute('status') == 'canceled';\n }\n\n get isEnroute() {\n return this.getAttribute('status') == 'driver_enroute' || this.getAttribute('status') === 'enroute';\n }\n\n get isInProgress() {\n return this.isStarted && !this.isCanceled && !this.isCompleted;\n }\n\n get scheduledAt() {\n return this.isAttributeFilled('scheduled_at') ? new Date(this.getAttribute('scheduled_at')) : null;\n }\n\n get startedAt() {\n return this.isAttributeFilled('started_at') ? new Date(this.getAttribute('started_at')) : null;\n }\n\n get dispatchedAt() {\n return this.isAttributeFilled('dispatched_at') ? new Date(this.getAttribute('dispatched_at')) : null;\n }\n\n get status() {\n return this.getAttribute('status');\n }\n}\n\nregister('resource', 'Order', Order);\n","import Resource from '../resource.js';\nimport { createCollection } from '../utils/collection.js';\nimport { resolveResource } from '../resolver.js';\nimport { register } from '../registry.js';\n\nexport default class Payload extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'payload', options);\n }\n\n /**\n * Attaches an entity to an existing payload and returns\n * the payload with the entity attached\n *\n * @param {Entity} Entity entity [description]\n * @return {Payload} [description]\n */\n // eslint-disable-next-line no-unused-vars\n attach(entity) {\n // perform op return payload\n }\n\n /**\n * Returns all of the entities attached to this payload\n *\n * @return {Collection} [description]\n */\n get entities() {\n return createCollection(this.entities.map((data) => resolveResource('Entity', data, this.adapter)));\n }\n\n /**\n * Returns the dropoff for this payload\n *\n * @return {Place|null} [description]\n */\n get dropoff() {\n return this.dropoff ? resolveResource('Place', this.dropoff, this.adapter) : null;\n }\n\n /**\n * Returns the pickup for this payload\n *\n * @return {Place|null} [description]\n */\n get pickup() {\n return this.pickup ? resolveResource('Place', this.pickup, this.adapter) : null;\n }\n\n /**\n * Returns all the waypoints for this payload\n *\n * @return {Collection} [description]\n */\n get waypoints() {\n return createCollection(this.waypoints.map((data) => resolveResource('Waypoint', data, this.adapter)));\n }\n}\n\nregister('resource', 'Payload', Payload);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Entity extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'entity', options);\n }\n}\n\nregister('resource', 'Entity', Entity);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport { Point } from '../utils/index.js';\n\nexport default class Place extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'place', options);\n }\n\n static fromGoogleAddress(googleAddress, adapter, options = {}) {\n const [latitude, longitude] = googleAddress.getAttribute('coordinates');\n const attributes = {\n name: null,\n address: googleAddress.getAttribute('address'),\n location: new Point(latitude, longitude),\n street1: googleAddress.getAttribute('address'),\n street2: null,\n city: googleAddress.getAttribute('city'),\n province: googleAddress.getAttribute('stateLong'),\n postal_code: googleAddress.getAttribute('postalCode'),\n neighborhood: googleAddress.get('neighborhood'),\n district: googleAddress.getAttribute('county'),\n building: googleAddress.get('building'),\n country: googleAddress.getAttribute('countryShort'),\n phone: null,\n security_access_code: null,\n };\n\n return new Place(attributes, adapter, options);\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n /**\n * Set the owner of the place.\n *\n * @param {Object|String} owner\n * @return {Place}\n */\n setOwner(owner) {\n if (isResource(owner)) {\n this.setAttribute('owner', owner.id);\n }\n\n if (typeof owner === 'string') {\n this.setAttribute('owner', owner);\n }\n\n return this;\n }\n}\n\nregister('resource', 'Place', Place);\n","import Place from './place.js';\nimport { register } from '../registry.js';\n\nexport default class Waypoint extends Place {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'waypoint', options);\n }\n}\n\nregister('resource', 'Waypoint', Waypoint);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class TrackingStatus extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'tracking-status', options);\n }\n}\n\nregister('resource', 'TrackingStatus', TrackingStatus);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vehicle extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vehicle', options);\n }\n}\n\nregister('resource', 'Vehicle', Vehicle);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\nimport { StoreActions } from '../utils/index.js';\n\nexport const organizationActions = new StoreActions({\n current: function (params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/current`, params, options);\n },\n});\n\nexport default class Organization extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'organization', { actions: organizationActions, ...options });\n }\n}\n\nregister('resource', 'Organization', Organization);\n","import Resource from '../resource.js';\nimport Organization from './organization.js';\nimport { register } from '../registry.js';\nimport { StoreActions, isPhone, Point } from '../utils/index.js';\nimport { isArray } from '../utils/array.js';\n\nexport const serializeOrganizations = (response, adapter) => {\n if (isArray(response)) {\n return response.map((organizationJson) => {\n return new Organization(organizationJson, adapter);\n });\n }\n\n return new Organization(response, adapter);\n};\n\nexport const driverActions = new StoreActions({\n // const { error } = await fleetbase.drivers.login('+1 111-1111');\n login: function (identity, password = null, attributes = {}) {\n // handle phone number authentication\n if (isPhone(identity)) {\n return this.adapter.post('drivers/login-with-sms', { phone: identity });\n }\n\n if (!password) {\n throw new Error('Login requires password!');\n }\n\n return this.adapter.post('drivers/login', { identity, password, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n verifyCode: function (identity, code, attributes = {}) {\n return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n track: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/track`, params, options).then(this.afterFetch.bind(this));\n },\n\n listOrganizations: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n switchOrganization: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n currentOrganization: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n retrieve: function (id) {\n return this.findRecord(id);\n },\n\n syncDevice(id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/register-device`, params, options);\n },\n});\n\nexport default class Driver extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'driver', { actions: driverActions, ...options });\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get isOnline() {\n return this.getAttribute('online') === true;\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n track(params = {}, options = {}) {\n return this.store.track(this.id, params, options);\n }\n\n syncDevice(params = {}, options = {}) {\n return this.store.syncDevice(this.id, params, options);\n }\n\n listOrganizations(params = {}, options = {}) {\n return this.store.listOrganizations(this.id, params, options);\n }\n\n switchOrganization(organizationId, options = {}) {\n return this.store.switchOrganization(this.id, { next: organizationId }, options);\n }\n\n currentOrganization(params = {}, options = {}) {\n return this.store.currentOrganization(this.id, params, options);\n }\n}\n\nregister('resource', 'Driver', Driver);\n","export function isPhone(phone = '') {\n return /^[+]?[\\s./0-9]*[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/g.test(phone);\n}\n\nexport default isPhone;\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vendor extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vendor', options);\n }\n}\n\nregister('resource', 'Vendor', Vendor);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Contact extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'contact', options);\n }\n}\n\nregister('resource', 'Contact', Contact);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Zone extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'zone', options);\n }\n}\n\nregister('resource', 'Zone', Zone);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceArea extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-area', options);\n }\n}\n\nregister('resource', 'ServiceArea', ServiceArea);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceRate extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-rate', options);\n }\n}\n\nregister('resource', 'ServiceRate', ServiceRate);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceQuote extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-quote', options);\n }\n\n fromPreliminary() {}\n\n fromPayload() {}\n}\n\nregister('resource', 'ServiceQuote', ServiceQuote);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Fleet extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'fleet', options);\n }\n}\n\nregister('resource', 'Fleet', Fleet);\n","import { register } from './registry.js';\n\nexport default class Adapter {\n /**\n * Creates a configured base adapter for Fleetbase.\n *\n * @param {Object} config Configuration options for adapter\n */\n constructor(config = {}) {\n this.version = config.version || 'v1';\n this.host = config.host || null;\n this.namespace = config.namespace || null;\n this.headers = config.headers || {};\n }\n}\n\nregister('adapter', 'Adapter', Adapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isBlank } from '../utils/index.js';\n\n/**\n * @class BrowserAdapter\n * @extends Adapter\n *\n * @classdesc\n * The BrowserAdapter extends the base Adapter for browser-based environments.\n * It leverages the Fetch API to make HTTP requests and handles JSON parsing, headers,\n * and error propagation.\n *\n * @example\n * // Example usage:\n * const adapter = new BrowserAdapter({\n * publicKey: 'MY_PUBLIC_KEY',\n * host: 'https://api.example.com',\n * namespace: 'v1'\n * });\n *\n * adapter.get('users')\n * .then(users => console.log(users))\n * .catch(error => console.error(error));\n */\nexport default class BrowserAdapter extends Adapter {\n /**\n * Initializes a BrowserAdapter instance by configuring default headers,\n * including Authorization and Content-Type.\n *\n * @param {Object} config - Configuration object for the adapter.\n * @param {string} config.publicKey - A valid public key for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - A namespace or version for the API.\n */\n constructor(config) {\n super(config);\n\n // Set default headers\n this.setHeaders({\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;browser',\n });\n }\n\n /**\n * Updates the adapter’s request headers.\n *\n * @param {Object} [headers={}] - An object of header key-value pairs.\n * @returns {BrowserAdapter} Returns the current adapter instance for method chaining.\n *\n * @example\n * adapter.setHeaders({\n * 'X-Custom-Header': 'SomeValue'\n * }).get('users');\n */\n setHeaders(headers = {}) {\n this.headers = { ...this.headers, ...headers };\n return this;\n }\n\n /**\n * Parses JSON from a fetch Response object.\n *\n * @private\n * @param {Response} response - The Fetch API response object.\n * @returns {Promise<{ statusText: string, status: number, ok: boolean, json: any }>}\n * A promise that resolves with an object containing:\n * - `statusText`: The status text from the response\n * - `status`: The numeric HTTP status\n * - `ok`: A boolean indicating if the request was successful (status in the 200–299 range)\n * - `json`: The parsed JSON from the response body\n *\n * @example\n * fetch('/api')\n * .then(this.parseJSON)\n * .then(({ json }) => console.log(json));\n */\n parseJSON(response) {\n return new Promise((resolve, reject) => {\n response\n .json()\n .then((json) => {\n resolve({\n statusText: response.statusText,\n status: response.status,\n ok: response.ok,\n json,\n });\n })\n .catch(() => {\n reject(new Error('Oops! Something went wrong when handling your request.'));\n });\n });\n }\n\n /**\n * The base method for sending fetch requests. Manages headers, HTTP method,\n * and body serialization where necessary.\n *\n * @private\n * @param {string} path - The endpoint path (relative to `this.host/this.namespace`).\n * @param {string} [method='GET'] - The HTTP method (GET, POST, PUT, DELETE, PATCH).\n * @param {Object} [data={}] - The request payload. Usually includes `body`.\n * @param {Object} [options={}] - Additional fetch options (e.g. `mode`, `headers`, or `url` override).\n * @returns {Promise} A promise resolving to the parsed JSON data or rejecting with an error.\n *\n * @example\n * this.request('users', 'POST', { body: JSON.stringify({ name: 'John' }) })\n * .then(responseData => console.log(responseData));\n */\n request(path, method = 'GET', data = {}, options = {}) {\n return new Promise((resolve, reject) => {\n fetch(\n options.url || `${this.host}/${this.namespace}/${path}`, // Fallback to constructed URL if options.url is not provided\n {\n method,\n mode: options.mode || 'cors',\n headers: new Headers({\n ...(this.headers || {}),\n ...(options.headers || {}),\n }),\n ...data, // Typically { body: JSON.stringify(payload) }\n }\n )\n .then(this.parseJSON)\n .then((response) => {\n if (response.ok) {\n // If the HTTP status code is 2xx, resolve with JSON data\n return resolve(response.json);\n }\n // Otherwise, reject with error message or fallback to status text\n reject(new Error(response.json.errors ? response.json.errors[0] : response.statusText));\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Issues a GET request to the specified path, optionally with query parameters.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [query={}] - Query parameters to append to the request URL.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the fetched data or rejects with an error.\n *\n * @example\n * // GET /users?limit=10\n * adapter.get('users', { limit: 10 })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n get(path, query = {}, options = {}) {\n const urlParams = !isBlank(query) ? new URLSearchParams(query).toString() : '';\n return this.request(`${path}${urlParams ? `?${urlParams}` : ''}`, 'GET', {}, options);\n }\n\n /**\n * Issues a POST request with a JSON body.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.post('users', { name: 'John Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n post(path, data = {}, options = {}) {\n return this.request(path, 'POST', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a PUT request with a JSON body, commonly used for full updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.put('users/123', { name: 'Jane Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n put(path, data = {}, options = {}) {\n return this.request(path, 'PUT', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a DELETE request. Note that many APIs don't require a body for DELETE.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.delete('users/123')\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n delete(path, options = {}) {\n return this.request(path, 'DELETE', {}, options);\n }\n\n /**\n * Issues a PATCH request with a JSON body, commonly used for partial updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.patch('users/123', { email: 'newemail@example.com' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n patch(path, data = {}, options = {}) {\n return this.request(path, 'PATCH', { body: JSON.stringify(data) }, options);\n }\n}\n\nregister('adapter', 'BrowserAdapter', BrowserAdapter);\n","import isEmpty from './is-empty.js';\n\nexport function isBlank(obj) {\n return isEmpty(obj) || (typeof obj === 'string' && /\\S/.test(obj) === false);\n}\n\nexport default isBlank;\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\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\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 setImmediate: _setImmediate,\n asap\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 if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\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.status\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|Function)} 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 if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \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","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\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';\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// 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","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\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 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","'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 utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, 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 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, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\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 test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\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 test(() => utils.isReadableStream(new Response('').body));\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 const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\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 = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\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 const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\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 credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /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 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, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !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 (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? 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","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\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.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\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) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\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","// eslint-disable-next-line strict\nexport default null;\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","export const VERSION = \"1.7.9\";","'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\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('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 validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\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 toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","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","'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","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isArray } from '../utils/array.js';\nimport axios from 'axios';\n\n/**\n * @class NodeAdapter\n * @extends Adapter\n *\n * @classdesc\n * The NodeAdapter extends the base Adapter class to facilitate making HTTP requests using Axios in a Node environment.\n * It provides convenient methods for all standard HTTP verbs (GET, POST, PUT, DELETE, PATCH) and supports:\n *\n * - Automatic JSON serialization and deserialization.\n * - Base URL and common headers.\n * - Interceptors for transforming responses and handling errors.\n * - Customizable headers at runtime via `setHeaders`.\n */\nexport default class NodeAdapter extends Adapter {\n /**\n * Creates an instance of NodeAdapter.\n *\n * @param {Object} config - Configuration object\n * @param {string} config.publicKey - The public key used for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - The default namespace or version for the API.\n *\n * @example\n * const adapter = new NodeAdapter({\n * publicKey: 'YOUR_PUBLIC_KEY',\n * host: 'https://api.yourapp.com',\n * namespace: 'v1'\n * });\n */\n constructor(config) {\n super(config);\n\n // Create a dedicated Axios instance with base URL and default headers\n this.axiosInstance = axios.create({\n baseURL: `${this.host}/${this.namespace}`,\n headers: {\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;node',\n },\n });\n\n /**\n * Sets up Axios interceptors for response success and error handling.\n *\n * Success:\n * - Returns `response.data` by default.\n *\n * Error:\n * - If the server returned a response, checks for `data.errors` or `data.error` and throws an Error accordingly.\n * - Otherwise, re-throws the original error to preserve stack trace.\n */\n this.axiosInstance.interceptors.response.use(\n /**\n * Transform successful responses by returning only `response.data`.\n *\n * @param {import('axios').AxiosResponse} response - The successful Axios response object\n * @returns {any} - The `data` property of the response, containing the actual payload\n */\n (response) => response.data,\n\n /**\n * Handle error responses, extracting relevant information from the response payload.\n *\n * @param {import('axios').AxiosError} error - The error object thrown by Axios\n * @throws {Error} - An Error instance with a message derived from the server response\n */\n (error) => {\n if (error.response) {\n const { data } = error.response;\n\n if (isArray(data.errors) && data.errors.length) {\n throw new Error(data.errors[0]);\n } else if (data.error) {\n throw new Error(data.error);\n }\n }\n throw error;\n }\n );\n }\n\n /**\n * Merges the provided headers with existing default headers.\n *\n * @param {Object} [headers={}] - Additional headers to add or override.\n * @returns {NodeAdapter} - The current instance of NodeAdapter for method chaining.\n *\n * @example\n * adapter.setHeaders({ 'X-Custom-Header': 'my-value' });\n */\n setHeaders(headers = {}) {\n this.axiosInstance.defaults.headers.common = {\n ...this.axiosInstance.defaults.headers.common,\n ...headers,\n };\n return this;\n }\n\n /**\n * A generic method to make an HTTP request with Axios.\n * This method is utilized internally by specialized request methods such as `get`, `post`, etc.\n *\n * @private\n * @param {string} method - HTTP verb (e.g., GET, POST, PUT, DELETE, PATCH).\n * @param {string} url - The URL path (relative to `baseURL`).\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request configuration.\n * @returns {Promise} - A promise resolving to the response data or rejecting with an Error.\n *\n * @example\n * // Example usage inside another method:\n * this.request('GET', '/users', { params: { limit: 50 } });\n */\n request(method, url, options = {}) {\n return this.axiosInstance.request({\n method,\n url,\n ...options,\n });\n }\n\n /**\n * Makes a GET request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [query={}] - Query parameters to include in the request URL.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.get('/users', { limit: 25 }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n get(path, query = {}, options = {}) {\n return this.request('GET', path, { params: query, ...options });\n }\n\n /**\n * Makes a POST request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The request body payload.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.post('/users', { name: 'John Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n post(path, data = {}, options = {}) {\n return this.request('POST', path, { data, ...options });\n }\n\n /**\n * Makes a PUT request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The updated data to send in the request body.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.put('/users/123', { name: 'Jane Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n put(path, data = {}, options = {}) {\n return this.request('PUT', path, { data, ...options });\n }\n\n /**\n * Makes a DELETE request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.delete('/users/123').then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n delete(path, options = {}) {\n return this.request('DELETE', path, options);\n }\n\n /**\n * Makes a PATCH request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - Partial data to update on the server.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.patch('/users/123', { email: 'new_email@example.com' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n patch(path, data = {}, options = {}) {\n return this.request('PATCH', path, { data, ...options });\n }\n}\n\nregister('adapter', 'NodeAdapter', NodeAdapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\n\nexport default class EmberJsAdapter extends Adapter {}\n\nregister('adapter', 'EmberJsAdapter', EmberJsAdapter);\n","import Store from './store.js';\nimport Resource, { isResource } from './resource.js';\nimport { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization, Fleet } from './resources.js';\nimport { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter } from './adapters.js';\nimport { isNodeEnvironment, detectAdapter, isLatitude, isLongitude, Point, GoogleAddress, StoreActions } from './utils/index.js';\nimport Collection, { createCollection } from './utils/collection.js';\nimport { pluralize, singularize, classify, dasherize, camelize } from './utils/string.js';\nimport { extendStoreActions, createStoreActions } from './utils/store-actions.js';\nimport { orderActions } from './resources/order.js';\nimport { driverActions } from './resources/driver.js';\nimport { organizationActions } from './resources/organization.js';\nimport Resolver, { lookup, resolve, resolveResource } from './resolver.js';\nimport { register, createResource, createStore } from './registry.js';\n\n/**\n * // instance\n * const fleetbase = new Fleetbase();\n *\n * const contact = fleetbase.contacts.create({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * constact.update({ name: 'Hollywood Ron' });\n *\n * // export\n * import { Contact } from '@fleetbase/sdk';\n *\n * const contact = new Contact({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * contact.save();\n */\nexport default class Fleetbase {\n /**\n * Builds an instance of the Fleetbase SDK\n *\n * @param {String} publicKey The public key issued\n * @param {Object} config The version of resource to access\n * @param {Boolean} debug Debug mode for SDK\n * @return {Fleetbase} Instance\n */\n constructor(publicKey, config = {}, debug = false) {\n this.version = config.version ?? 'v1';\n this.options = {\n version: this.version,\n host: config.host ?? 'https://api.fleetbase.io',\n namespace: config.namespace ?? this.version,\n debug,\n publicKey,\n };\n\n if (typeof publicKey !== 'string' || publicKey.length === 0) {\n throw new Error('⚠️ Invalid public key given to Fleetbase SDK');\n }\n\n if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) {\n throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!');\n }\n\n this.adapter = config.adapter || detectAdapter(this.options);\n\n this.orders = new Store('order', this.adapter).extendActions(orderActions);\n this.entities = new Store('entity', this.adapter);\n this.places = new Store('place', this.adapter);\n this.drivers = new Store('driver', this.adapter).extendActions(driverActions);\n this.vehicles = new Store('vehicle', this.adapter);\n this.vendors = new Store('vendor', this.adapter);\n this.contacts = new Store('contact', this.adapter);\n this.serviceAreas = new Store('service-area', this.adapter);\n this.zones = new Store('zone', this.adapter);\n this.fleets = new Store('fleet', this.adapter);\n this.organizations = new Store('organization', this.adapter).extendActions(organizationActions);\n }\n\n static newInstance() {\n return new Fleetbase(...arguments);\n }\n\n setAdapter(adapter) {\n this.adapter = adapter;\n }\n\n getAdapter() {\n return this.adapter;\n }\n}\n\nexport {\n Store,\n Resource,\n Contact,\n Driver,\n Entity,\n Order,\n Payload,\n Place,\n TrackingStatus,\n Vehicle,\n Vendor,\n Waypoint,\n Zone,\n ServiceArea,\n ServiceRate,\n ServiceQuote,\n Organization,\n Fleet,\n BrowserAdapter,\n NodeAdapter,\n EmberJsAdapter,\n Adapter,\n detectAdapter,\n isNodeEnvironment,\n isLatitude,\n isLongitude,\n Point,\n isResource,\n GoogleAddress,\n Collection,\n createCollection,\n StoreActions,\n extendStoreActions,\n createStoreActions,\n pluralize,\n singularize,\n classify,\n dasherize,\n camelize,\n lookup,\n register,\n createResource,\n Resolver,\n resolve,\n resolveResource,\n createStore,\n};\n"],"names":["String","string","chain","arguments","length","undefined","_classCallCheck","_defineProperty","this","RegExp","str","_createClass","key","value","rules","skip","override","indexOf","toLowerCase","x","match","replace","plural","applyRules","pluralRules","uncountableWords","singular","singularRules","lowFirstLetter","str_path","split","i","str_arr","charAt","toUpperCase","substring","join","first","last","slice","uppercase","underbarPrefix","idSuffix","underbar","capitalize","spaceOrUnderbar","allFirstUpper","camelize","underscore","d","nonTitlecasedWords","originalChain","pluralize","concat","trim","singularize","dropIdUbar","demodulize","parseInt","isNaN","ltd","ld","suf","argz","Object","values","instance","method","shift","apply","Array","prototype","call","invoke","_toConsumableArray","dasherize","classify","registry","resources","adapters","storse","actions","register","type","className","cls","create","Error","ResourceClass","_len","params","_key","_construct","createStore","createResource","Resolver","lookup","_len2","_key2","resolve","_len3","_key3","resolveResource","_len4","_key4","isArray","CHUNK_SIZE","array","start","deleteCount","items","splice","chunk","isCollection","identityFunction","item","mixed","Collection","objectAt","index","iter","Boolean","findIndex","predicate","startAt","len","val","withNaNCheck","insertAt","createCollection","_assertThisInitialized","_callSuper","_inherits","_wrapNativeSuper","get","indexes","_this2","map","idx","object","callback","bind","target","cb","methodName","args","ret","forEach","_item$methodName","push","filter","sortKeys","sort","a","b","_step","_iterator","_createForOfIteratorHelper","s","n","done","propA","propB","compareValue","compare","err","e","f","seen","Set","getter","has","add","uniqBy","includes","removeAt","obj","objects","toArray","reverse","clear","loc","removeObject","pushObject","_this3","addObject","isEmpty","none","size","objectType","_typeof","isLatitude","coordinate","isFinite","Math","abs","isLongitude","isNodeEnvironment","_process","_process$release","_window","process","env","release","name","search","window","navigator","product","detectAdapter","options","GoogleAddress","place","geometry","components","parseComponents","attributes","parseProperties","_this$place","address_components","reduce","acc","data","types","_this$geometry","streetNumber","streetName","coordinates","location","city","or","county","stateShort","stateLong","countryShort","country","countryLong","postalCode","address","pkey","short","short_name","long_name","_objectSpread","Point","latitude","longitude","coorindates","lat","lng","serialize","json","_json$coordinates","_slicedToArray","getResolved","func","path","resolved","current","isObject","isFunction","pathArray","newPath","set","iterations","extendStoreActions","store","StoreActions","extend","element","extendActions","createStoreActions","binding","action","fn","isResource","Resource","adapter","resource","dirtyAttributes","changes","isLoading","isSaving","isDestroying","isReloading","version","setAdapter","_this$options","onAfterFetch","syncAttributes","getAttribute","_this","mergeAttributes","setFlags","then","response","update","id","destroy","_this4","findRecord","reset","flags","state","validFlags","flag","attribues","getAttributes","onlyDirty","savedirty","dirtyAttributeKeys","keys","isAttributeFilled","Date","hasAttributes","isNew","isLoaded","_this$attributes","_this5","property","_this$dirtyAttributes","_this$attributes$prop","setAttributes","previousValue","changedAt","setAttribute","attribute","_this$attributes2","defaultValue","_this$attributes3","properties","attributeKeys","every","prop","hasAttribute","_this6","_value","_value2","_this$attributes4","modelAttributes","Store","namespace","storage","resourceInstance","serialized","afterFetch","deposit","_create","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","wrap","_context","prev","next","post","sent","abrupt","stop","_update","_callee2","_args2","_context2","put","_x","_findRecord","_callee3","_args3","_context3","_x2","_findAll","_callee4","_args4","_context4","_query2","_callee5","_query","_args5","_context5","query","_queryRecord","_callee6","_args6","_context6","single","_destroy","_callee7","record","_args7","_context7","_x3","orderActions","getDistanceAndTime","getNextActivity","dispatch","updateActivity","setDestination","destinationId","captureQrCode","subjectId","captureSignature","complete","cancel","Order","isStarted","isCanceled","isCompleted","Payload","entity","entities","dropoff","pickup","waypoints","Entity","Place","_this$getAttribute","_this$getAttribute2","owner","googleAddress","_googleAddress$getAtt2","street1","street2","province","postal_code","neighborhood","district","building","phone","security_access_code","Waypoint","TrackingStatus","Vehicle","organizationActions","Organization","serializeOrganizations","organizationJson","driverActions","login","identity","password","test","isPhone","verifyCode","code","track","listOrganizations","switchOrganization","currentOrganization","retrieve","syncDevice","Driver","organizationId","Vendor","Contact","Zone","ServiceArea","ServiceRate","ServiceQuote","Fleet","Adapter","config","host","headers","BrowserAdapter","setHeaders","Authorization","publicKey","Promise","reject","statusText","status","ok","fetch","url","mode","Headers","parseJSON","errors","error","urlParams","URLSearchParams","toString","request","body","JSON","stringify","thisArg","cache","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isNumber","isPlainObject","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","isReadableStream","isRequest","isResponse","isHeaders","l","_ref$allOwnKeys","allOwnKeys","getOwnPropertyNames","findKey","_global","globalThis","self","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","random","addEventListener","_ref5","source","setTimeout","asap","queueMicrotask","nextTick","utils$1","isBuffer","constructor","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","result","assignValue","targetKey","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","assign","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","position","lastIndex","arr","forEachEntry","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","m","p1","p2","noop","toFiniteNumber","Number","generateString","alphabet","isSpecCompliantForm","toJSONObject","stack","visit","reducedValue","isThenable","AxiosError","message","captureStackTrace","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","TypeError","metaTokens","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","some","isFlatArray","el","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","buildURL","_encode","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager","handlers","fulfilled","rejected","synchronous","runWhen","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","href","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","rawHeaders","parsed","line","parseHeaders","_step$value","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","targets","asStrings","_ref","_ref2","computed","accessors","defineAccessor","accessorName","arg1","arg2","arg3","configurable","buildAccessors","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","floor","accessor","_ref3","mapped","headerValue","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","unescape","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","abort","subscribe","aborted","send","composeSignals","signals","controller","AbortController","reason","streamChunk","chunkSize","pos","end","byteLength","readBytes","_wrapAsyncGenerator","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_asyncIterator","readStream","_awaitAsyncGenerator","delegateYield","_asyncGeneratorDelegate","t1","finish","stream","reader","_yield$_awaitAsyncGen","asyncIterator","getReader","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_yield$iterator$next","_done","loadedBytes","close","enqueue","t0","highWaterMark","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","resolveBodyLength","getContentLength","_x4","_ref4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","toAbortSignal","credentials","t2","_x5","knownAdapters","http","xhr","fetchAdapter","renderReason","isResolvedHandle","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","onFulfilled","onRejected","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","c","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","all","promises","spread","isAxiosError","payload","formToJSON","getAdapter","NodeAdapter","axiosInstance","use","EmberJsAdapter","Fleetbase","_config$version","_config$host","_config$namespace","debug","startsWith","orders","places","drivers","vehicles","vendors","contacts","serviceAreas","zones","fleets","organizations"],"mappings":"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","x_google_ignoreList":[36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]} \ No newline at end of file diff --git a/dist/fleetbase.min.js b/dist/fleetbase.min.js deleted file mode 100644 index 35676cb..0000000 --- a/dist/fleetbase.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@fleetbase/sdk"]={})}(this,(function(t){"use strict";function e(t,e){this.v=t,this.k=e}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function y(t,e,n){return(e=T(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function b(t){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},b(t)}function m(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&R(t,e)}function w(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(w=function(){return!!t})()}function k(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function A(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function E(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function x(t){for(var e=1;e=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;_(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:L(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function R(t,e){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},R(t,e)}function S(t,e){return r(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,s=[],u=!0,c=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(s.push(r.value),s.length!==e);u=!0);}catch(t){c=!0,i=t}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(t,e)||P(t,e)||A()}function j(t){return function(t){if(Array.isArray(t))return n(t)}(t)||k(t)||P(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}function _(t){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(t)}function P(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}function L(t){return function(){return new C(t.apply(this,arguments))}}function C(t){var n,r;function i(n,r){try{var a=t[n](r),s=a.value,u=s instanceof e;Promise.resolve(u?s.v:s).then((function(e){if(u){var r="return"===n?"return":"next";if(!s.k||e.done)return i(r,e);e=t[r](e).value}o(a.done?"return":"normal",e)}),(function(t){i("throw",t)}))}catch(t){o("throw",t)}}function o(t,e){switch(t){case"return":n.resolve({value:e,done:!0});break;case"throw":n.reject(e);break;default:n.resolve({value:e,done:!1})}(n=n.next)?i(n.key,n.arg):r=null}this._invoke=function(t,e){return new Promise((function(o,a){var s={key:t,arg:e,resolve:o,reject:a,next:null};r?r=r.next=s:(n=r=s,i(t,e))}))},"function"!=typeof t.return&&(this.return=void 0)}function N(t){var e="function"==typeof Map?new Map:void 0;return N=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return d(t,arguments,b(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),R(n,t)},N(t)}C.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},C.prototype.next=function(t){return this._invoke("next",t)},C.prototype.throw=function(t){return this._invoke("throw",t)},C.prototype.return=function(t){return this._invoke("return",t)};var F=function(){function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];f(this,t),y(this,"uncountableWords",["equipment","information","rice","money","species","series","fish","sheep","moose","deer","news"]),y(this,"pluralRules",[[new RegExp("(m)an$","gi"),"$1en"],[new RegExp("(pe)rson$","gi"),"$1ople"],[new RegExp("(child)$","gi"),"$1ren"],[new RegExp("^(ox)$","gi"),"$1en"],[new RegExp("(ax|test)is$","gi"),"$1es"],[new RegExp("(octop|vir)us$","gi"),"$1i"],[new RegExp("(alias|status)$","gi"),"$1es"],[new RegExp("(bu)s$","gi"),"$1ses"],[new RegExp("(buffal|tomat|potat)o$","gi"),"$1oes"],[new RegExp("([ti])um$","gi"),"$1a"],[new RegExp("sis$","gi"),"ses"],[new RegExp("(?:([^f])fe|([lr])f)$","gi"),"$1$2ves"],[new RegExp("(hive)$","gi"),"$1s"],[new RegExp("([^aeiouy]|qu)y$","gi"),"$1ies"],[new RegExp("(x|ch|ss|sh)$","gi"),"$1es"],[new RegExp("(matr|vert|ind)ix|ex$","gi"),"$1ices"],[new RegExp("([m|l])ouse$","gi"),"$1ice"],[new RegExp("(quiz)$","gi"),"$1zes"],[new RegExp("s$","gi"),"s"],[new RegExp("$","gi"),"s"]]),y(this,"singularRules",[[new RegExp("(m)en$","gi"),"$1an"],[new RegExp("(pe)ople$","gi"),"$1rson"],[new RegExp("(child)ren$","gi"),"$1"],[new RegExp("([ti])a$","gi"),"$1um"],[new RegExp("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$","gi"),"$1$2sis"],[new RegExp("(hive)s$","gi"),"$1"],[new RegExp("(tive)s$","gi"),"$1"],[new RegExp("(curve)s$","gi"),"$1"],[new RegExp("([lr])ves$","gi"),"$1f"],[new RegExp("([^fo])ves$","gi"),"$1fe"],[new RegExp("([^aeiouy]|qu)ies$","gi"),"$1y"],[new RegExp("(s)eries$","gi"),"$1eries"],[new RegExp("(m)ovies$","gi"),"$1ovie"],[new RegExp("(x|ch|ss|sh)es$","gi"),"$1"],[new RegExp("([m|l])ice$","gi"),"$1ouse"],[new RegExp("(bus)es$","gi"),"$1"],[new RegExp("(o)es$","gi"),"$1"],[new RegExp("(shoe)s$","gi"),"$1"],[new RegExp("(cris|ax|test)es$","gi"),"$1is"],[new RegExp("(octop|vir)i$","gi"),"$1us"],[new RegExp("(alias|status)es$","gi"),"$1"],[new RegExp("^(ox)en","gi"),"$1"],[new RegExp("(vert|ind)ices$","gi"),"$1ex"],[new RegExp("(matr)ices$","gi"),"$1ix"],[new RegExp("(quiz)zes$","gi"),"$1"],[new RegExp("s$","gi"),""]]),y(this,"nonTitlecasedWords",["and","or","nor","a","an","the","so","but","to","of","at","by","from","into","on","onto","off","out","in","over","with","for"]),y(this,"idSuffix",new RegExp("(_ids|_id)$","g")),y(this,"underbar",new RegExp("_","g")),y(this,"spaceOrUnderbar",new RegExp("[ _]","g")),y(this,"uppercase",new RegExp("([A-Z])","g")),y(this,"underbarPrefix",new RegExp("^_")),this.str=e,this.chain=n}return p(t,[{key:"get",value:function(){return this.str}},{key:"applyRules",value:function(t,e,n,r){if(r)t=r;else if(!(n.indexOf(t.toLowerCase())>-1))for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;return t=t||this.str,this.applyRules(t,this.pluralRules,this.uncountableWords,e)}},{key:"singularize",value:function(t,e){return t=t||this.str,this.applyRules(t,this.singularRules,this.uncountableWords,e)}},{key:"camelize",value:function(t,e){for(var n=(t=t||this.str).split("/"),r=0;r1&&void 0!==arguments[1]&&arguments[1];return t=t||this.str,t=this.underscore(this.demodulize(t))+(e?"":"_")+"id",this.str=t,!0===this.chain?this:t}},{key:"ordinalize",value:function(t){for(var e=(t=t||this.str).split(" "),n=0;n2?i-2:0),a=2;a2?n-2:0),i=2;i2?n-2:0),i=2;i1?e-1:0),r=1;r3&&void 0!==arguments[3]?arguments[3]:[];if(W(t))if(r.length<=G)t.splice.apply(t,[e,n].concat(j(r)));else{t.splice(e,n);for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:0,r=t.length,i=n;i2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3?arguments[3]:void 0,i=t.length;return n<0&&(n+=i),Z(t,r&&e!=e?function(t){return t!=t}:function(t){return t===e},n)}function et(t,e,n){return K(t,e,0,[n]),n}function nt(){return d(rt,Array.prototype.slice.call(arguments))}var rt=function(t){function e(){return f(this,e),i(W(arguments[0])?h(this,e,j(arguments[0])):h(this,e,arguments))}return m(e,t),p(e,[{key:"notEmpty",get:function(){return this.length>0}},{key:"empty",get:function(){return 0===this.length}},{key:"first",get:function(){return Q(this,0)}},{key:"last",get:function(){return Q(this,this.length-1)}},{key:"replace",value:function(t,e){return K(this,t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:[]),this}},{key:"objectsAt",value:function(t){var e=this;return t.map((function(t){return Q(e,t)}))}},{key:"objectAt",value:function(t){return Q(this,t)}},{key:"indexOf",value:function(t,e){return tt(this,t,e,!1)}},{key:"lastIndexOf",value:function(t,e){var n=this.length;(void 0===e||e>=n)&&(e=n-1),e<0&&(e+=n);for(var r=e;r>=0;r--)if(Q(this,r)===t)return r;return-1}},{key:"includes",value:function(t,e){return-1!==tt(this,t,e,!0)}},{key:"findBy",value:function(){return t=this,e=Y.apply(void 0,arguments),-1===(r=Z(t,e.bind(n),0))?void 0:Q(t,r);var t,e,n,r}},{key:"findIndexBy",value:function(){return Z(this,Y.apply(void 0,arguments))}},{key:"isEvery",value:function(){return t=this,e=Y.apply(void 0,arguments),r=e.bind(n),-1===Z(t,(function(t,e,n){return!r(t,e,n)}),0);var t,e,n,r}},{key:"isAny",value:function(){return t=this,e=Y.apply(void 0,arguments),-1!==Z(t,e.bind(n),0);var t,e,n}},{key:"invoke",value:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:V,n=[],r=new Set,i="function"==typeof e?e:function(t){return get(t,e)};return t.forEach((function(t){var e=i(t);r.has(e)||(r.add(e),n.push(t))})),n}(this,t)}},{key:"without",value:function(t){if(!this.includes(t))return this;var e=t==t?function(e){return e!==t}:function(t){return t==t};return this.filter(e)}},{key:"clear",value:function(){var t=this.length;return 0===t||this.replace(0,t,[]),this}},{key:"insertAt",value:function(t,e){return et(this,t,e),this}},{key:"replaceAt",value:function(t,e){return this.replace(t,1,[e])}},{key:"removeAt",value:function(t,e){return function(t,e){return K(t,e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,[]),t}(this,t,e)}},{key:"pushObject",value:function(t){return this.insertAt(this.length,t)}},{key:"pushObjects",value:function(t){return this.replace(this.length,0,t),this}},{key:"popObject",value:function(){var t=this.length;if(0===t)return null;var e=Q(this,t-1);return this.removeAt(t-1,1),e}},{key:"shiftObject",value:function(){if(0===this.length)return null;var t=Q(this,0);return this.removeAt(0),t}},{key:"unshiftObject",value:function(t){return et(this,0,t)}},{key:"unshiftObjects",value:function(t){return this.replace(0,0,t),this}},{key:"reverseObjects",value:function(){var t=this.length;if(0===t)return this;var e=this.toArray().reverse();return this.replace(0,t,e),this}},{key:"setObjects",value:function(t){if(0===t.length)return this.clear();var e=this.length;return this.replace(0,e,t),this}},{key:"removeObject",value:function(t){for(var e=this.length||0;--e>=0;){Q(this,e)===t&&this.removeAt(e)}return this}},{key:"removeObjects",value:function(t){for(var e=t.length-1;e>=0;e--)this.removeObject(t[e]);return this}},{key:"addObject",value:function(t){return this.includes(t)||this.pushObject(t),this}},{key:"addObjects",value:function(t){var e=this;return t.forEach((function(t){return e.addObject(t)})),this}}])}(N(Array));function it(t){var e=null==t;if(e)return e;if("number"==typeof t.size)return!t.size;var n=_(t);if("object"===n){var r=t.size;if("number"==typeof r)return!r}if("number"==typeof t.length&&"function"!==n)return!t.length;if("object"===n){var i=t.length;if("number"==typeof i)return!i}return!1}function ot(){var t,e,n;return!("undefined"==typeof process||"object"!==_(null===(t=process)||void 0===t?void 0:t.env)&&-1===(null===(e=process.release)||void 0===e||null===(e=e.name)||void 0===e?void 0:e.search(/node|io.js/))||"undefined"!=typeof window&&"ReactNative"!==(null===(n=window)||void 0===n||null===(n=n.navigator)||void 0===n?void 0:n.product))}function at(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return ot()?H("adapter","NodeAdapter",t):H("adapter","BrowserAdapter",t)}var st=function(){return p((function t(e){f(this,t),this.place=e,this.geometry=null==e?void 0:e.geometry,this.components=this.parseComponents(),this.attributes=this.parseProperties()}),[{key:"parse",value:function(){this.parseComponents(),this.parseProperties()}},{key:"parseComponents",value:function(){var t;return((null===(t=this.place)||void 0===t?void 0:t.address_components)||[]).reduce((function(t,e){return e.types.forEach((function(n){t[n]=e})),t}),{})}},{key:"parseProperties",value:function(){var t,e={streetNumber:this.get("street_number"),streetName:this.get("route"),coordinates:null!==(t=this.geometry)&&void 0!==t&&t.location?Object.values(this.geometry.location):[0,0],city:this.or(["locality","sublocality","sublocality_level_1","neighborhood","administrative_area_level_3","administrative_area_level_2"]),county:this.get("administrative_area_level_2"),stateShort:this.get("administrative_area_level_1",!0),stateLong:this.get("administrative_area_level_1"),countryShort:this.get("country",!0),country:this.get("country",!0),countryLong:this.get("country"),postalCode:this.get("postal_code")};return e.address=[e.streetNumber,e.streetName].filter(Boolean).join(" "),e}},{key:"all",value:function(){return this.attributes}},{key:"or",value:function(){var t,e=g(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]);try{for(e.s();!(t=e.n()).done;){var n=t.value;if(W(n)){var r=n[0],i=n[1];if(this.has(r))return this.get(r,i)}else if(this.has(n))return this.get(n)}}catch(t){e.e(t)}finally{e.f()}return null}},{key:"has",value:function(t){return t in this.components}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t in this.components?e?this.components[t].short_name:this.components[t].long_name:null}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.attributes=x(x({},this.attributes),t),this}},{key:"setAttribute",value:function(t,e){return this.attributes[t]=e,this}},{key:"getAttribute",value:function(t){return this.attributes[t]||null}}])}(),ut=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;f(this,t),this.type="Point",this.coordinates=[n,e]}return p(t,[{key:"latitude",get:function(){return this.coordinates[1]}},{key:"longitude",get:function(){return this.coordinates[0]}},{key:"lat",value:function(){return this.latitude}},{key:"lng",value:function(){return this.longitude}},{key:"serialize",value:function(){return{type:"Point",coorindates:[this.lat(),this.lng()]}}},{key:"toJson",value:function(){return this.serialize()}},{key:"toString",value:function(){return"(".concat(this.latitude,", ").concat(this.longitude,")")}}],[{key:"fromGeoJson",value:function(e){var n=S(e.coordinates,2),r=n[0];return new t(n[1],r)}}])}();function ct(t,e){var n=t();return Array.isArray(n)||"object"===_(n)?lt(n,e):null}function lt(t,e){var n,r=t,i=_(t),o="object"===i,a="function"===i,s=Array.isArray(t),u="string"===_(e)&&e.includes(".")?e.split("."):[e];if(s||o){for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:[];if(t.actions=W(e)?e:[e],!W(e))return e instanceof dt&&e.extend(t),t;var n,r=g(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;t.extendActions(i)}}catch(t){r.e(t)}finally{r.f()}}var dt=function(){return p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;f(this,t),this.actions=e,this.bind=n}),[{key:"extend",value:function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||this.bind;if(!t)return this;if(null!=this&&this.actions&&"object"===_(this.actions))for(var e in this.actions){var n=this.actions[e];"function"==typeof n?ht(t,e,n.bind(t)):ht(t,e,n)}return this}}])}();function vt(t){return t instanceof pt}var pt=function(){return p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};f(this,t),this.attributes=e,this.dirtyAttributes={},this.changes={},this.isLoading=!1,this.isSaving=!1,this.isDestroying=!1,this.isReloading=!1,this.resource=r,this.options=i,this.version=i.version||"v1",this.setAdapter(n)}),[{key:"setAdapter",value:function(t){var e;return this.adapter=t,this.store=I(this.resource,t,{onAfterFetch:this.syncAttributes.bind(this),actions:null===(e=this.options)||void 0===e?void 0:e.actions}),this}},{key:"id",get:function(){return this.getAttribute("id")}},{key:"create",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.mergeAttributes(e);return this.setFlags(["isLoading","isSaving"]),this.store.create(n).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"update",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.setFlags(["isLoading","isSaving"]),this.store.update(this.attributes.id,e).then((function(e){return t.setFlags(["isLoading","isSaving"],!1),e}))}},{key:"destroy",value:function(){var t=this;return this.setFlags(["isLoading","isDestroying"]),this.store.destroy(this.attributes.id).then((function(e){return t.setFlags(["isLoading","isDestroying"],!1),e}))}},{key:"reload",value:function(){var t=this;return this.setFlags(["isLoading","isReloading"]),this.store.findRecord(this.attributes.id).then((function(e){return t.reset(),e}))}},{key:"setFlags",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=["isLoading","isSaving","isReloading","isDestroying"],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=this.getAttributes();return it(this.id)?this.create(e):!0===t.onlyDirty?this.savedirty():this.update(e)}},{key:"saveDirty",value:function(){for(var t=Object.keys(this.dirtyAttributes),e={},n=0;n0}},{key:"mutate",value:function(t,e){this.attributes[t]=e}},{key:"setAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(null===n&&"object"===_(t))return this.setAttributes(t);var r=null!==(e=null==this?void 0:this.attributes[t])&&void 0!==e?e:null;return ht(this.attributes,t,n),ht(this.dirtyAttributes,t,r),W(null==this?void 0:this.changes[t])||(this.changes[t]=[]),this.changes[t].push({property:t,previousValue:r,value:n,changedAt:new Date}),this}},{key:"setAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var e in t)this.setAttribute(e,t[e]);return this}},{key:"getAttribute",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=lt(null!==(e=null==this?void 0:this.attributes)&&void 0!==e?e:{},t);return void 0===r?n:r}},{key:"hasAttribute",value:function(t){if(W(t)){var e,n=t,r=Object.keys(null!==(e=this.attributes)&&void 0!==e?e:{});return n.every((function(t){return r.includes(t)}))}return!(null==this||!this.attributes)&&t in this.attributes}},{key:"hasAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return this.hasAttribute(t)}},{key:"isAttributeFilled",value:function(t){var e=this;return W(t)?this.hasAttribute(t)&&t.every((function(t){return!it(e.getAttribute(t))})):this.hasAttribute(t)&&!it(this.getAttribute(t))}},{key:"getAttributes",value:function(t){var e={};if(null==t)return this.getAttributes(Object.keys(this.attributes));if("string"==typeof t)return this.getAttribute(Array.prototype.slice.call(arguments));if(!W(t))throw new Error("No attribute properties provided!");var n,r=g(t);try{for(r.s();!(n=r.n()).done;){var i,o,a=n.value;if("string"==typeof a){var s=this.getAttribute(a);"object"!==_(null===(i=s)||void 0===i?void 0:i.attributes)||W(null===(o=s)||void 0===o?void 0:o.attributes)||(s=s.attributes),e[a]=s}}}catch(t){r.e(t)}finally{r.f()}return e}},{key:"serialize",value:function(){return this.getAttributes()}},{key:"mergeAttributes",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!==(t=null==this?void 0:this.attributes)&&void 0!==t?t:{};return this.attributes=x(x({},n),e),this.attributes}},{key:"syncAttributes",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.attributes=t}}])}();B("resource","Resource",pt);var gt=function(){return p((function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};f(this,t),this.resource=e,this.adapter=n||at(),this.namespace=D(e),this.storage=nt(),this.options=r,this.extendActions(r.actions)}),[{key:"extendActions",value:function(){return ft(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])}},{key:"deposit",value:function(t){return t}},{key:"serialize",value:function(t){return H("resource",U(this.resource),t,this.adapter)}},{key:"afterFetch",value:function(t){return function(t,e){if("function"==typeof t.options.onAfterFetch&&t.options.onAfterFetch(e),W(e)){var n,r=[],i=g(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;r.push(t.afterFetch(o))}}catch(t){i.e(t)}finally{i.f()}return nt.apply(void 0,r)}var a=t.serialize(e);return t.deposit(a)}(this,t)}},{key:"create",value:(a=c(O().mark((function t(){var e,n,r,i=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.post("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"update",value:(o=c(O().mark((function t(e){var n,r,i,o=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=o.length>2&&void 0!==o[2]?o[2]:{},t.next=4,this.adapter.put("".concat(this.namespace,"/").concat(e),n,r);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"findRecord",value:(i=c(O().mark((function t(e){var n,r,i=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=3,this.adapter.get("".concat(this.namespace,"/").concat(e),{},n);case 3:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return i.apply(this,arguments)})},{key:"findAll",value:(r=c(O().mark((function t(){var e,n,r=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=r.length>0&&void 0!==r[0]?r[0]:{},t.next=3,this.adapter.get("".concat(this.namespace),{},e);case 3:return n=t.sent,t.abrupt("return",this.afterFetch(n));case 5:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"query",value:(n=c(O().mark((function t(){var e,n,r,i=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:{},n=i.length>1&&void 0!==i[1]?i[1]:{},t.next=4,this.adapter.get("".concat(this.namespace),e,n);case 4:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 6:case"end":return t.stop()}}),t,this)}))),function(){return n.apply(this,arguments)})},{key:"queryRecord",value:(e=c(O().mark((function t(){var e,n,r,i=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},(e=i.length>0&&void 0!==i[0]?i[0]:{}).single=!0,t.next=5,this.adapter.get("".concat(this.namespace),e,n);case 5:return r=t.sent,t.abrupt("return",this.afterFetch(r));case 7:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"destroy",value:(t=c(O().mark((function t(e){var n,r,i,o=arguments;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=o.length>1&&void 0!==o[1]?o[1]:{},r=vt(e)?e.getAttribute("id"):e,t.next=4,this.adapter.delete("".concat(this.namespace,"/").concat(r),{},n);case 4:return i=t.sent,t.abrupt("return",this.afterFetch(i));case 6:case"end":return t.stop()}}),t,this)}))),function(e){return t.apply(this,arguments)})}]);var t,e,n,r,i,o,a}();B("store","Store",gt);var yt=new dt({getDistanceAndTime:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/distance-and-time"),e,n)},getNextActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("".concat(this.namespace,"/").concat(t,"/next-activity"),e,n)},dispatch:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/dispatch"),e,n).then(this.afterFetch.bind(this))},start:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/start"),e,n).then(this.afterFetch.bind(this))},updateActivity:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/update-activity"),e,n).then(this.afterFetch.bind(this))},setDestination:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return vt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/set-destination/").concat(e),n,r).then(this.afterFetch.bind(this))},captureQrCode:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return vt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-qr").concat(e?"/"+e:""),n,r)},captureSignature:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return vt(e)&&(e=e.id),this.adapter.post("".concat(this.namespace,"/").concat(t,"/capture-signature").concat(e?"/"+e:""),n,r)},complete:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("".concat(this.namespace,"/").concat(t,"/complete"),e,n).then(this.afterFetch.bind(this))},cancel:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.delete("".concat(this.namespace,"/").concat(t,"/cancel"),e,n).then(this.afterFetch.bind(this))}}),bt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"order",x({actions:yt},r)])}return m(e,t),p(e,[{key:"getDistanceAndTime",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getDistanceAndTime(this.id,t,e)}},{key:"dispatch",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.dispatch(this.id,t,e)}},{key:"start",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.start(this.id,t,e)}},{key:"setDestination",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.setDestination(this.id,t,e,n)}},{key:"captureQrCode",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureQrCode(this.id,t,e,n)}},{key:"captureSignature",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.store.captureSignature(this.id,t,e,n)}},{key:"getNextActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.getNextActivity(this.id,t,e)}},{key:"updateActivity",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.updateActivity(this.id,t,e)}},{key:"cancel",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.cancel(this.id,t,e)}},{key:"complete",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.complete(this.id,t,e)}},{key:"isDispatched",get:function(){return null!==this.getAttribute("dispatched_at")}},{key:"isNotDispatched",get:function(){return null==this.getAttribute("dispatched_at")}},{key:"isStarted",get:function(){return null!==this.getAttribute("started_at")}},{key:"isNotStarted",get:function(){return null==this.getAttribute("started_at")}},{key:"isCompleted",get:function(){return"completed"==this.getAttribute("status")}},{key:"isCanceled",get:function(){return"canceled"==this.getAttribute("status")}},{key:"isEnroute",get:function(){return"driver_enroute"==this.getAttribute("status")||"enroute"===this.getAttribute("status")}},{key:"isInProgress",get:function(){return this.isStarted&&!this.isCanceled&&!this.isCompleted}},{key:"scheduledAt",get:function(){return this.isAttributeFilled("scheduled_at")?new Date(this.getAttribute("scheduled_at")):null}},{key:"startedAt",get:function(){return this.isAttributeFilled("started_at")?new Date(this.getAttribute("started_at")):null}},{key:"dispatchedAt",get:function(){return this.isAttributeFilled("dispatched_at")?new Date(this.getAttribute("dispatched_at")):null}},{key:"status",get:function(){return this.getAttribute("status")}}])}(pt);B("resource","Order",bt);var mt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"payload",r])}return m(e,t),p(e,[{key:"attach",value:function(t){}},{key:"entities",get:function(){var t=this;return nt(this.entities.map((function(e){return J("Entity",e,t.adapter)})))}},{key:"dropoff",get:function(){return this.dropoff?J("Place",this.dropoff,this.adapter):null}},{key:"pickup",get:function(){return this.pickup?J("Place",this.pickup,this.adapter):null}},{key:"waypoints",get:function(){var t=this;return nt(this.waypoints.map((function(e){return J("Waypoint",e,t.adapter)})))}}])}(pt);B("resource","Payload",mt);var wt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"entity",r])}return m(e,t),p(e)}(pt);B("resource","Entity",wt);var kt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"place",r])}return m(e,t),p(e,[{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new ut))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new ut))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"setOwner",value:function(t){return vt(t)&&this.setAttribute("owner",t.id),"string"==typeof t&&this.setAttribute("owner",t),this}}],[{key:"fromGoogleAddress",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=S(t.getAttribute("coordinates"),2),o=i[0],a=i[1];return new e({name:null,address:t.getAttribute("address"),location:new ut(o,a),street1:t.getAttribute("address"),street2:null,city:t.getAttribute("city"),province:t.getAttribute("stateLong"),postal_code:t.getAttribute("postalCode"),neighborhood:t.get("neighborhood"),district:t.getAttribute("county"),building:t.get("building"),country:t.getAttribute("countryShort"),phone:null,security_access_code:null},n,r)}}])}(pt);B("resource","Place",kt);var At=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"waypoint",r])}return m(e,t),p(e)}(kt);B("resource","Waypoint",At);var Et=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"tracking-status",r])}return m(e,t),p(e)}(pt);B("resource","TrackingStatus",Et);var xt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"vehicle",r])}return m(e,t),p(e)}(pt);B("resource","Vehicle",xt);var Ot=new dt({current:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.adapter.get("".concat(this.namespace,"/current"),t,e)}}),Rt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"organization",x({actions:Ot},r)])}return m(e,t),p(e)}(pt);B("resource","Organization",Rt);var St=function(t,e){return W(t)?t.map((function(t){return new Rt(t,e)})):new Rt(t,e)},jt=new dt({login:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function(){return/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")}(t))return this.adapter.post("drivers/login-with-sms",{phone:t});if(!e)throw new Error("Login requires password!");return this.adapter.post("drivers/login",x({identity:t,password:e},n)).then(this.afterFetch.bind(this))},verifyCode:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/verify-code",x({identity:t,code:e},n)).then(this.afterFetch.bind(this))},track:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/track"),e,n).then(this.afterFetch.bind(this))},listOrganizations:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/organizations"),n,r).then((function(t){return St(t,e.adapter)}))},switchOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/switch-organization"),n,r).then((function(t){return St(t,e.adapter)}))},currentOrganization:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.get("drivers/".concat(t,"/current-organization"),n,r).then((function(t){return St(t,e.adapter)}))},retrieve:function(t){return this.findRecord(t)},syncDevice:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.adapter.post("drivers/".concat(t,"/register-device"),e,n)}}),Tt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"driver",x({actions:jt},r)])}return m(e,t),p(e,[{key:"token",get:function(){return this.getAttribute("token")}},{key:"isOnline",get:function(){return!0===this.getAttribute("online")}},{key:"latitude",get:function(){var t;return null===(t=this.getAttribute("location",new ut))||void 0===t?void 0:t.coordinates[1]}},{key:"longitude",get:function(){var t;return null===(t=this.getAttribute("location",new ut))||void 0===t?void 0:t.coordinates[0]}},{key:"coordinates",get:function(){return[this.latitude,this.longitude]}},{key:"track",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.track(this.id,t,e)}},{key:"syncDevice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.syncDevice(this.id,t,e)}},{key:"listOrganizations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.listOrganizations(this.id,t,e)}},{key:"switchOrganization",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.switchOrganization(this.id,{next:t},e)}},{key:"currentOrganization",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.store.currentOrganization(this.id,t,e)}}])}(pt);B("resource","Driver",Tt);var _t=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"vendor",r])}return m(e,t),p(e)}(pt);B("resource","Vendor",_t);var Pt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"contact",r])}return m(e,t),p(e)}(pt);B("resource","Contact",Pt);var Lt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"zone",r])}return m(e,t),p(e)}(pt);B("resource","Zone",Lt);var Ct=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"service-area",r])}return m(e,t),p(e)}(pt);B("resource","ServiceArea",Ct);var Nt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"service-rate",r])}return m(e,t),p(e)}(pt);B("resource","ServiceRate",Nt);var Ft=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"service-quote",r])}return m(e,t),p(e,[{key:"fromPreliminary",value:function(){}},{key:"fromPayload",value:function(){}}])}(pt);B("resource","ServiceQuote",Ft);var Dt=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f(this,e),h(this,e,[t,n,"fleet",r])}return m(e,t),p(e)}(pt);B("resource","Fleet",Dt);var $t=p((function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(this,t),this.version=e.version||"v1",this.host=e.host||null,this.namespace=e.namespace||null,this.headers=e.headers||{}}));B("adapter","Adapter",$t);var Ut=function(t){function e(t){var n;return f(this,e),(n=h(this,e,[t])).setHeaders({Authorization:"Bearer ".concat(t.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;browser"}),n}return m(e,t),p(e,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.headers=x(x({},this.headers),t),this}},{key:"parseJSON",value:function(t){return new Promise((function(e,n){t.json().then((function(n){e({statusText:t.statusText,status:t.status,ok:t.ok,json:n})})).catch((function(){n(new Error("Oops! Something went wrong when handling your request."))}))}))}},{key:"request",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise((function(o,a){fetch(i.url||"".concat(e.host,"/").concat(e.namespace,"/").concat(t),x({method:n,mode:i.mode||"cors",headers:new Headers(x(x({},e.headers||{}),i.headers||{}))},r)).then(e.parseJSON).then((function(t){if(t.ok)return o(t.json);a(new Error(t.json.errors?t.json.errors[0]:t.statusText))})).catch((function(t){a(t)}))}))}},{key:"get",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=it(e=n)||"string"==typeof e&&!1===/\S/.test(e)?"":new URLSearchParams(n).toString();return this.request("".concat(t).concat(i?"?".concat(i):""),"GET",{},r)}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"POST",{body:JSON.stringify(e)},n)}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PUT",{body:JSON.stringify(e)},n)}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request(t,"DELETE",{},e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(t,"PATCH",{body:JSON.stringify(e)},n)}}])}($t);function zt(t,e){return function(){return t.apply(e,arguments)}}B("adapter","BrowserAdapter",Ut);var Bt,qt=Object.prototype.toString,It=Object.getPrototypeOf,Mt=(Bt=Object.create(null),function(t){var e=qt.call(t);return Bt[e]||(Bt[e]=e.slice(8,-1).toLowerCase())}),Ht=function(t){return t=t.toLowerCase(),function(e){return Mt(e)===t}},Jt=function(t){return function(e){return _(e)===t}},Wt=Array.isArray,Gt=Jt("undefined");var Kt=Ht("ArrayBuffer");var Vt=Jt("string"),Xt=Jt("function"),Qt=Jt("number"),Yt=function(t){return null!==t&&"object"===_(t)},Zt=function(t){if("object"!==Mt(t))return!1;var e=It(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},te=Ht("Date"),ee=Ht("File"),ne=Ht("Blob"),re=Ht("FileList"),ie=Ht("URLSearchParams"),oe=S(["ReadableStream","Request","Response","Headers"].map(Ht),4),ae=oe[0],se=oe[1],ue=oe[2],ce=oe[3];function le(t,e){var n,r,i=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).allOwnKeys,o=void 0!==i&&i;if(null!=t)if("object"!==_(t)&&(t=[t]),Wt(t))for(n=0,r=t.length;n0;)if(e===(n=r[i]).toLowerCase())return n;return null}var fe="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,de=function(t){return!Gt(t)&&t!==fe};var ve,pe=(ve="undefined"!=typeof Uint8Array&&It(Uint8Array),function(t){return ve&&t instanceof ve}),ge=Ht("HTMLFormElement"),ye=function(){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),be=Ht("RegExp"),me=function(t,e){var n=Object.getOwnPropertyDescriptors(t),r={};le(n,(function(n,i){var o;!1!==(o=e(n,i,t))&&(r[i]=o||n)})),Object.defineProperties(t,r)},we="abcdefghijklmnopqrstuvwxyz",ke="0123456789",Ae={DIGIT:ke,ALPHA:we,ALPHA_DIGIT:we+we.toUpperCase()+ke};var Ee,xe,Oe,Re,Se=Ht("AsyncFunction"),je=(Ee="function"==typeof setImmediate,xe=Xt(fe.postMessage),Ee?setImmediate:xe?(Oe="axios@".concat(Math.random()),Re=[],fe.addEventListener("message",(function(t){var e=t.source,n=t.data;e===fe&&n===Oe&&Re.length&&Re.shift()()}),!1),function(t){Re.push(t),fe.postMessage(Oe,"*")}):function(t){return setTimeout(t)}),Te="undefined"!=typeof queueMicrotask?queueMicrotask.bind(fe):"undefined"!=typeof process&&process.nextTick||je,_e={isArray:Wt,isArrayBuffer:Kt,isBuffer:function(t){return null!==t&&!Gt(t)&&null!==t.constructor&&!Gt(t.constructor)&&Xt(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:function(t){var e;return t&&("function"==typeof FormData&&t instanceof FormData||Xt(t.append)&&("formdata"===(e=Mt(t))||"object"===e&&Xt(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Kt(t.buffer)},isString:Vt,isNumber:Qt,isBoolean:function(t){return!0===t||!1===t},isObject:Yt,isPlainObject:Zt,isReadableStream:ae,isRequest:se,isResponse:ue,isHeaders:ce,isUndefined:Gt,isDate:te,isFile:ee,isBlob:ne,isRegExp:be,isFunction:Xt,isStream:function(t){return Yt(t)&&Xt(t.pipe)},isURLSearchParams:ie,isTypedArray:pe,isFileList:re,forEach:le,merge:function t(){for(var e=(de(this)&&this||{}).caseless,n={},r=function(r,i){var o=e&&he(n,i)||i;Zt(n[o])&&Zt(r)?n[o]=t(n[o],r):Zt(r)?n[o]=t({},r):Wt(r)?n[o]=r.slice():n[o]=r},i=0,o=arguments.length;i3&&void 0!==arguments[3]?arguments[3]:{}).allOwnKeys}),t},trim:function(t){return t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n,r){var i,o,a,s={};if(e=e||{},null==t)return e;do{for(o=(i=Object.getOwnPropertyNames(t)).length;o-- >0;)a=i[o],r&&!r(a,t,e)||s[a]||(e[a]=t[a],s[a]=!0);t=!1!==n&&It(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:Mt,kindOfTest:Ht,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;if(Wt(t))return t;var e=t.length;if(!Qt(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},forEachEntry:function(t,e){for(var n,r=(t&&t[Symbol.iterator]).call(t);(n=r.next())&&!n.done;){var i=n.value;e.call(t,i[0],i[1])}},matchAll:function(t,e){for(var n,r=[];null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:ge,hasOwnProperty:ye,hasOwnProp:ye,reduceDescriptors:me,freezeMethods:function(t){me(t,(function(e,n){if(Xt(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=t[n];Xt(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:function(t,e){var n={},r=function(t){t.forEach((function(t){n[t]=!0}))};return Wt(t)?r(t):r(String(t).split(e)),n},toCamelCase:function(t){return t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))},noop:function(){},toFiniteNumber:function(t,e){return null!=t&&Number.isFinite(t=+t)?t:e},findKey:he,global:fe,isContextDefined:de,ALPHABET:Ae,generateString:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ae.ALPHA_DIGIT,n="",r=e.length;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&Xt(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:function(t){var e=new Array(10),n=function(t,r){if(Yt(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[r]=t;var i=Wt(t)?[]:{};return le(t,(function(t,e){var o=n(t,r+1);!Gt(o)&&(i[e]=o)})),e[r]=void 0,i}}return t};return n(t,0)},isAsyncFn:Se,isThenable:function(t){return t&&(Yt(t)||Xt(t))&&Xt(t.then)&&Xt(t.catch)},setImmediate:je,asap:Te};function Pe(t,e,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}_e.inherits(Pe,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:_e.toJSONObject(this.config),code:this.code,status:this.status}}});var Le=Pe.prototype,Ce={};["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((function(t){Ce[t]={value:t}})),Object.defineProperties(Pe,Ce),Object.defineProperty(Le,"isAxiosError",{value:!0}),Pe.from=function(t,e,n,r,i,o){var a=Object.create(Le);return _e.toFlatObject(t,a,(function(t){return t!==Error.prototype}),(function(t){return"isAxiosError"!==t})),Pe.call(a,t.message,e,n,r,i),a.cause=t,a.name=t.name,o&&Object.assign(a,o),a};function Ne(t){return _e.isPlainObject(t)||_e.isArray(t)}function Fe(t){return _e.endsWith(t,"[]")?t.slice(0,-2):t}function De(t,e,n){return t?t.concat(e).map((function(t,e){return t=Fe(t),!n&&e?"["+t+"]":t})).join(n?".":""):e}var $e=_e.toFlatObject(_e,{},null,(function(t){return/^is[A-Z]/.test(t)}));function Ue(t,e,n){if(!_e.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;var r=(n=_e.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!_e.isUndefined(e[t])}))).metaTokens,i=n.visitor||c,o=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&_e.isSpecCompliantForm(e);if(!_e.isFunction(i))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(_e.isDate(t))return t.toISOString();if(!s&&_e.isBlob(t))throw new Pe("Blob is not supported. Use a Buffer instead.");return _e.isArrayBuffer(t)||_e.isTypedArray(t)?s&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,n,i){var s=t;if(t&&!i&&"object"===_(t))if(_e.endsWith(n,"{}"))n=r?n:n.slice(0,-2),t=JSON.stringify(t);else if(_e.isArray(t)&&function(t){return _e.isArray(t)&&!t.some(Ne)}(t)||(_e.isFileList(t)||_e.endsWith(n,"[]"))&&(s=_e.toArray(t)))return n=Fe(n),s.forEach((function(t,r){!_e.isUndefined(t)&&null!==t&&e.append(!0===a?De([n],r,o):null===a?n:n+"[]",u(t))})),!1;return!!Ne(t)||(e.append(De(i,n,o),u(t)),!1)}var l=[],h=Object.assign($e,{defaultVisitor:c,convertValue:u,isVisitable:Ne});if(!_e.isObject(t))throw new TypeError("data must be an object");return function t(n,r){if(!_e.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),_e.forEach(n,(function(n,o){!0===(!(_e.isUndefined(n)||null===n)&&i.call(e,n,_e.isString(o)?o.trim():o,r,h))&&t(n,r?r.concat(o):[o])})),l.pop()}}(t),e}function ze(t){var e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function Be(t,e){this._pairs=[],t&&Ue(t,this,e)}var qe=Be.prototype;function Ie(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Me(t,e,n){if(!e)return t;var r=n&&n.encode||Ie;_e.isFunction(n)&&(n={serialize:n});var i,o=n&&n.serialize;if(i=o?o(e,n):_e.isURLSearchParams(e)?e.toString():new Be(e,n).toString(r)){var a=t.indexOf("#");-1!==a&&(t=t.slice(0,a)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}qe.append=function(t,e){this._pairs.push([t,e])},qe.toString=function(t){var e=t?function(e){return t.call(this,e,ze)}:ze;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var He=function(){return p((function t(){f(this,t),this.handlers=[]}),[{key:"use",value:function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(t){this.handlers[t]&&(this.handlers[t]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(t){_e.forEach(this.handlers,(function(e){null!==e&&t(e)}))}}])}(),Je={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},We={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Be,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ge="undefined"!=typeof window&&"undefined"!=typeof document,Ke="object"===("undefined"==typeof navigator?"undefined":_(navigator))&&navigator||void 0,Ve=Ge&&(!Ke||["ReactNative","NativeScript","NS"].indexOf(Ke.product)<0),Xe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Qe=Ge&&window.location.href||"http://localhost",Ye=x(x({},Object.freeze({__proto__:null,hasBrowserEnv:Ge,hasStandardBrowserEnv:Ve,hasStandardBrowserWebWorkerEnv:Xe,navigator:Ke,origin:Qe})),We);function Ze(t){function e(t,n,r,i){var o=t[i++];if("__proto__"===o)return!0;var a=Number.isFinite(+o),s=i>=t.length;return o=!o&&_e.isArray(r)?r.length:o,s?(_e.hasOwnProp(r,o)?r[o]=[r[o],n]:r[o]=n,!a):(r[o]&&_e.isObject(r[o])||(r[o]=[]),e(t,n,r[o],i)&&_e.isArray(r[o])&&(r[o]=function(t){var e,n,r={},i=Object.keys(t),o=i.length;for(e=0;e-1,o=_e.isObject(t);if(o&&_e.isHTMLForm(t)&&(t=new FormData(t)),_e.isFormData(t))return i?JSON.stringify(Ze(t)):t;if(_e.isArrayBuffer(t)||_e.isBuffer(t)||_e.isStream(t)||_e.isFile(t)||_e.isBlob(t)||_e.isReadableStream(t))return t;if(_e.isArrayBufferView(t))return t.buffer;if(_e.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return Ue(t,new Ye.classes.URLSearchParams,Object.assign({visitor:function(t,e,n,r){return Ye.isNode&&_e.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((n=_e.isFileList(t))||r.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return Ue(n?{"files[]":t}:t,a&&new a,this.formSerializer)}}return o||i?(e.setContentType("application/json",!1),function(t,e){if(_e.isString(t))try{return(e||JSON.parse)(t),_e.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||tn.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(_e.isResponse(t)||_e.isReadableStream(t))return t;if(t&&_e.isString(t)&&(n&&!this.responseType||r)){var i=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw Pe.from(t,Pe.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ye.classes.FormData,Blob:Ye.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_e.forEach(["delete","get","head","post","put","patch"],(function(t){tn.headers[t]={}}));var en=_e.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"]),nn=Symbol("internals");function rn(t){return t&&String(t).trim().toLowerCase()}function on(t){return!1===t||null==t?t:_e.isArray(t)?t.map(on):String(t)}function an(t,e,n,r,i){return _e.isFunction(r)?r.call(this,e,n):(i&&(e=n),_e.isString(e)?_e.isString(r)?-1!==e.indexOf(r):_e.isRegExp(r)?r.test(e):void 0:void 0)}var sn=function(){return p((function t(e){f(this,t),e&&this.set(e)}),[{key:"set",value:function(t,e,n){var r=this;function i(t,e,n){var i=rn(e);if(!i)throw new Error("header name must be a non-empty string");var o=_e.findKey(r,i);(!o||void 0===r[o]||!0===n||void 0===n&&!1!==r[o])&&(r[o||e]=on(t))}var o=function(t,e){return _e.forEach(t,(function(t,n){return i(t,n,e)}))};if(_e.isPlainObject(t)||t instanceof this.constructor)o(t,e);else if(_e.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))o(function(t){var e,n,r,i={};return t&&t.split("\n").forEach((function(t){r=t.indexOf(":"),e=t.substring(0,r).trim().toLowerCase(),n=t.substring(r+1).trim(),!e||i[e]&&en[e]||("set-cookie"===e?i[e]?i[e].push(n):i[e]=[n]:i[e]=i[e]?i[e]+", "+n:n)})),i}(t),e);else if(_e.isHeaders(t)){var a,s=g(t.entries());try{for(s.s();!(a=s.n()).done;){var u=S(a.value,2),c=u[0];i(u[1],c,n)}}catch(t){s.e(t)}finally{s.f()}}else null!=t&&i(e,t,n);return this}},{key:"get",value:function(t,e){if(t=rn(t)){var n=_e.findKey(this,t);if(n){var r=this[n];if(!e)return r;if(!0===e)return function(t){for(var e,n=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;e=r.exec(t);)n[e[1]]=e[2];return n}(r);if(_e.isFunction(e))return e.call(this,r,n);if(_e.isRegExp(e))return e.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(t,e){if(t=rn(t)){var n=_e.findKey(this,t);return!(!n||void 0===this[n]||e&&!an(0,this[n],n,e))}return!1}},{key:"delete",value:function(t,e){var n=this,r=!1;function i(t){if(t=rn(t)){var i=_e.findKey(n,t);!i||e&&!an(0,n[i],i,e)||(delete n[i],r=!0)}}return _e.isArray(t)?t.forEach(i):i(t),r}},{key:"clear",value:function(t){for(var e=Object.keys(this),n=e.length,r=!1;n--;){var i=e[n];t&&!an(0,this[i],i,t,!0)||(delete this[i],r=!0)}return r}},{key:"normalize",value:function(t){var e=this,n={};return _e.forEach(this,(function(r,i){var o=_e.findKey(n,i);if(o)return e[o]=on(r),void delete e[i];var a=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))}(i):String(i).trim();a!==i&&delete e[i],e[a]=on(r),n[a]=!0})),this}},{key:"concat",value:function(){for(var t,e=arguments.length,n=new Array(e),r=0;r1?n-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:3,r=0,i=function(t,e){t=t||10;var n,r=new Array(t),i=new Array(t),o=0,a=0;return e=void 0!==e?e:1e3,function(s){var u=Date.now(),c=i[a];n||(n=u),r[o]=s,i[o]=u;for(var l=a,h=0;l!==o;)h+=r[l++],l%=t;if((o=(o+1)%t)===a&&(a=(a+1)%t),!(u-n1&&void 0!==arguments[1]?arguments[1]:Date.now();i=o,n=null,r&&(clearTimeout(r),r=null),t.apply(null,e)};return[function(){for(var t=Date.now(),e=t-i,s=arguments.length,u=new Array(s),c=0;c=o?a(u,t):(n=u,r||(r=setTimeout((function(){r=null,a(n)}),o-e)))},function(){return n&&a(n)}]}((function(n){var o=n.loaded,a=n.lengthComputable?n.total:void 0,s=o-r,u=i(s);r=o;var c=y({loaded:o,total:a,progress:a?o/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&o<=a?(a-o)/u:void 0,event:n,lengthComputable:null!=a},e?"download":"upload",!0);t(c)}),n)},dn=function(t,e){var n=null!=t;return[function(r){return e[0]({lengthComputable:n,total:t,loaded:r})},e[1]]},vn=function(t){return function(){for(var e=arguments.length,n=new Array(e),r=0;r1?e-1:0),r=1;r1?"since :\n"+s.map(Bn).join("\n"):" "+Bn(s[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function Mn(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new ln(null,t)}function Hn(t){return Mn(t),t.headers=sn.from(t.headers),t.data=un.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1),In(t.adapter||tn.adapter)(t).then((function(e){return Mn(t),e.data=un.call(t,t.transformResponse,e),e.headers=sn.from(e.headers),e}),(function(e){return cn(e)||(Mn(t),e&&e.response&&(e.response.data=un.call(t,t.transformResponse,e.response),e.response.headers=sn.from(e.response.headers))),Promise.reject(e)}))}var Jn="1.7.9",Wn={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){Wn[t]=function(n){return _(n)===t||"a"+(e<1?"n ":" ")+t}}));var Gn={};Wn.transitional=function(t,e,n){function r(t,e){return"[Axios v1.7.9] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,o){if(!1===t)throw new Pe(r(i," has been removed"+(e?" in "+e:"")),Pe.ERR_DEPRECATED);return e&&!Gn[i]&&(Gn[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,o)}},Wn.spelling=function(t){return function(e,n){return console.warn("".concat(n," is likely a misspelling of ").concat(t)),!0}};var Kn={assertOptions:function(t,e,n){if("object"!==_(t))throw new Pe("options must be an object",Pe.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(t),i=r.length;i-- >0;){var o=r[i],a=e[o];if(a){var s=t[o],u=void 0===s||a(s,o,t);if(!0!==u)throw new Pe("option "+o+" must be "+u,Pe.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Pe("Unknown option "+o,Pe.ERR_BAD_OPTION)}},validators:Wn},Vn=Kn.validators,Xn=function(){return p((function t(e){f(this,t),this.defaults=e,this.interceptors={request:new He,response:new He}}),[{key:"request",value:(t=c(O().mark((function t(e,n){var r,i;return O().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this._request(e,n);case 3:return t.abrupt("return",t.sent);case 6:if(t.prev=6,t.t0=t.catch(0),t.t0 instanceof Error){r={},Error.captureStackTrace?Error.captureStackTrace(r):r=new Error,i=r.stack?r.stack.replace(/^.+\n/,""):"";try{t.t0.stack?i&&!String(t.t0.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(t.t0.stack+="\n"+i):t.t0.stack=i}catch(t){}}throw t.t0;case 10:case"end":return t.stop()}}),t,this,[[0,6]])}))),function(e,n){return t.apply(this,arguments)})},{key:"_request",value:function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{};var n=e=mn(this.defaults,e),r=n.transitional,i=n.paramsSerializer,o=n.headers;void 0!==r&&Kn.assertOptions(r,{silentJSONParsing:Vn.transitional(Vn.boolean),forcedJSONParsing:Vn.transitional(Vn.boolean),clarifyTimeoutError:Vn.transitional(Vn.boolean)},!1),null!=i&&(_e.isFunction(i)?e.paramsSerializer={serialize:i}:Kn.assertOptions(i,{encode:Vn.function,serialize:Vn.function},!0)),Kn.assertOptions(e,{baseUrl:Vn.spelling("baseURL"),withXsrfToken:Vn.spelling("withXSRFToken")},!0),e.method=(e.method||this.defaults.method||"get").toLowerCase();var a=o&&_e.merge(o.common,o[e.method]);o&&_e.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete o[t]})),e.headers=sn.concat(a,o);var s=[],u=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(u=u&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));var c,l=[];this.interceptors.response.forEach((function(t){l.push(t.fulfilled,t.rejected)}));var h,f=0;if(!u){var d=[Hn.bind(this),void 0];for(d.unshift.apply(d,s),d.push.apply(d,l),h=d.length,c=Promise.resolve(e);f0;)r._listeners[e](t);r._listeners=null}})),this.promise.then=function(t){var e,n=new Promise((function(t){r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},e((function(t,e,i){r.reason||(r.reason=new ln(t,e,i),n(r.reason))}))}return p(t,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}},{key:"unsubscribe",value:function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}}},{key:"toAbortSignal",value:function(){var t=this,e=new AbortController,n=function(t){e.abort(t)};return this.subscribe(n),e.signal.unsubscribe=function(){return t.unsubscribe(n)},e.signal}}],[{key:"source",value:function(){var e;return{token:new t((function(t){e=t})),cancel:e}}}])}();var Yn={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(Yn).forEach((function(t){var e=S(t,2),n=e[0],r=e[1];Yn[r]=n}));var Zn=function t(e){var n=new Xn(e),r=zt(Xn.prototype.request,n);return _e.extend(r,Xn.prototype,n,{allOwnKeys:!0}),_e.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return t(mn(e,n))},r}(tn);Zn.Axios=Xn,Zn.CanceledError=ln,Zn.CancelToken=Qn,Zn.isCancel=cn,Zn.VERSION=Jn,Zn.toFormData=Ue,Zn.AxiosError=Pe,Zn.Cancel=Zn.CanceledError,Zn.all=function(t){return Promise.all(t)},Zn.spread=function(t){return function(e){return t.apply(null,e)}},Zn.isAxiosError=function(t){return _e.isObject(t)&&!0===t.isAxiosError},Zn.mergeConfig=mn,Zn.AxiosHeaders=sn,Zn.formToJSON=function(t){return Ze(_e.isHTMLForm(t)?new FormData(t):t)},Zn.getAdapter=In,Zn.HttpStatusCode=Yn,Zn.default=Zn,Zn.Axios,Zn.AxiosError,Zn.CanceledError,Zn.isCancel,Zn.CancelToken,Zn.VERSION,Zn.all,Zn.Cancel,Zn.isAxiosError,Zn.spread,Zn.toFormData,Zn.AxiosHeaders,Zn.HttpStatusCode,Zn.formToJSON,Zn.getAdapter,Zn.mergeConfig;var tr=function(t){function e(t){var n;return f(this,e),(n=h(this,e,[t])).axiosInstance=Zn.create({baseURL:"".concat(n.host,"/").concat(n.namespace),headers:{Authorization:"Bearer ".concat(t.publicKey),"Content-Type":"application/json","User-Agent":"@fleetbase/sdk;node"}}),n.axiosInstance.interceptors.response.use((function(t){return t.data}),(function(t){if(t.response){var e=t.response.data;if(W(e.errors)&&e.errors.length)throw new Error(e.errors[0]);if(e.error)throw new Error(e.error)}throw t})),n}return m(e,t),p(e,[{key:"setHeaders",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.axiosInstance.defaults.headers.common=x(x({},this.axiosInstance.defaults.headers.common),t),this}},{key:"request",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.axiosInstance.request(x({method:t,url:e},n))}},{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("GET",t,x({params:e},n))}},{key:"post",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("POST",t,x({data:e},n))}},{key:"put",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PUT",t,x({data:e},n))}},{key:"delete",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request("DELETE",t,e)}},{key:"patch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request("PATCH",t,x({data:e},n))}}])}($t);B("adapter","NodeAdapter",tr);var er=function(t){function e(){return f(this,e),h(this,e,arguments)}return m(e,t),p(e)}($t);B("adapter","EmberJsAdapter",er);var nr=function(){function t(e){var n,r,i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(f(this,t),this.version=null!==(n=o.version)&&void 0!==n?n:"v1",this.options={version:this.version,host:null!==(r=o.host)&&void 0!==r?r:"https://api.fleetbase.io",namespace:null!==(i=o.namespace)&&void 0!==i?i:this.version,debug:a,publicKey:e},"string"!=typeof e||0===e.length)throw new Error("⚠️ Invalid public key given to Fleetbase SDK");if(!ot()&&e.toLowerCase().startsWith("$"))throw new Error("Secret key provided. You must use a public key with Fleetbase Javascript SDK!");this.adapter=o.adapter||at(this.options),this.orders=new gt("order",this.adapter).extendActions(yt),this.entities=new gt("entity",this.adapter),this.places=new gt("place",this.adapter),this.drivers=new gt("driver",this.adapter).extendActions(jt),this.vehicles=new gt("vehicle",this.adapter),this.vendors=new gt("vendor",this.adapter),this.contacts=new gt("contact",this.adapter),this.serviceAreas=new gt("service-area",this.adapter),this.zones=new gt("zone",this.adapter),this.fleets=new gt("fleet",this.adapter),this.organizations=new gt("organization",this.adapter).extendActions(Ot)}return p(t,[{key:"setAdapter",value:function(t){this.adapter=t}},{key:"getAdapter",value:function(){return this.adapter}}],[{key:"newInstance",value:function(){return d(t,Array.prototype.slice.call(arguments))}}])}();t.Adapter=$t,t.BrowserAdapter=Ut,t.Collection=rt,t.Contact=Pt,t.Driver=Tt,t.EmberJsAdapter=er,t.Entity=wt,t.Fleet=Dt,t.GoogleAddress=st,t.NodeAdapter=tr,t.Order=bt,t.Organization=Rt,t.Payload=mt,t.Place=kt,t.Point=ut,t.Resolver=M,t.Resource=pt,t.ServiceArea=Ct,t.ServiceQuote=Ft,t.ServiceRate=Nt,t.Store=gt,t.StoreActions=dt,t.TrackingStatus=Et,t.Vehicle=xt,t.Vendor=_t,t.Waypoint=At,t.Zone=Lt,t.camelize=function(){var t=["camelize"].concat(Array.prototype.slice.call(arguments));return F.invoke.apply(F,j(t))},t.classify=U,t.createCollection=nt,t.createResource=function(){return q.apply(void 0,["resource","Resource"].concat(Array.prototype.slice.call(arguments)))},t.createStore=I,t.createStoreActions=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r=90},t.isNodeEnvironment=ot,t.isResource=vt,t.lookup=H,t.pluralize=D,t.register=B,t.resolve=function(t,e){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i \"Hello world\"\n *\n * instance\n * const string = new String();\n * string.humanize('hello_world').get() => \"Hello world\"\n *\n * no chain\n * new String('hello_world', false).humanize() => \"Hello world\"\n *\n * static\n * String.invoke('humanize', 'hello_world') => \"Hello world\"\n *\n * exports {}\n * humanize('hello_world') => \"Hello world\"\n */\nexport default class String {\n constructor(string, chain = true) {\n this.str = string;\n this.chain = chain;\n }\n\n uncountableWords = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news'];\n\n pluralRules = [\n [new RegExp('(m)an$', 'gi'), '$1en'],\n [new RegExp('(pe)rson$', 'gi'), '$1ople'],\n [new RegExp('(child)$', 'gi'), '$1ren'],\n [new RegExp('^(ox)$', 'gi'), '$1en'],\n [new RegExp('(ax|test)is$', 'gi'), '$1es'],\n [new RegExp('(octop|vir)us$', 'gi'), '$1i'],\n [new RegExp('(alias|status)$', 'gi'), '$1es'],\n [new RegExp('(bu)s$', 'gi'), '$1ses'],\n [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],\n [new RegExp('([ti])um$', 'gi'), '$1a'],\n [new RegExp('sis$', 'gi'), 'ses'],\n [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'), '$1$2ves'],\n [new RegExp('(hive)$', 'gi'), '$1s'],\n [new RegExp('([^aeiouy]|qu)y$', 'gi'), '$1ies'],\n [new RegExp('(x|ch|ss|sh)$', 'gi'), '$1es'],\n [new RegExp('(matr|vert|ind)ix|ex$', 'gi'), '$1ices'],\n [new RegExp('([m|l])ouse$', 'gi'), '$1ice'],\n [new RegExp('(quiz)$', 'gi'), '$1zes'],\n [new RegExp('s$', 'gi'), 's'],\n [new RegExp('$', 'gi'), 's'],\n ];\n\n singularRules = [\n [new RegExp('(m)en$', 'gi'), '$1an'],\n [new RegExp('(pe)ople$', 'gi'), '$1rson'],\n [new RegExp('(child)ren$', 'gi'), '$1'],\n [new RegExp('([ti])a$', 'gi'), '$1um'],\n [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'), '$1$2sis'],\n [new RegExp('(hive)s$', 'gi'), '$1'],\n [new RegExp('(tive)s$', 'gi'), '$1'],\n [new RegExp('(curve)s$', 'gi'), '$1'],\n [new RegExp('([lr])ves$', 'gi'), '$1f'],\n [new RegExp('([^fo])ves$', 'gi'), '$1fe'],\n [new RegExp('([^aeiouy]|qu)ies$', 'gi'), '$1y'],\n [new RegExp('(s)eries$', 'gi'), '$1eries'],\n [new RegExp('(m)ovies$', 'gi'), '$1ovie'],\n [new RegExp('(x|ch|ss|sh)es$', 'gi'), '$1'],\n [new RegExp('([m|l])ice$', 'gi'), '$1ouse'],\n [new RegExp('(bus)es$', 'gi'), '$1'],\n [new RegExp('(o)es$', 'gi'), '$1'],\n [new RegExp('(shoe)s$', 'gi'), '$1'],\n [new RegExp('(cris|ax|test)es$', 'gi'), '$1is'],\n [new RegExp('(octop|vir)i$', 'gi'), '$1us'],\n [new RegExp('(alias|status)es$', 'gi'), '$1'],\n [new RegExp('^(ox)en', 'gi'), '$1'],\n [new RegExp('(vert|ind)ices$', 'gi'), '$1ex'],\n [new RegExp('(matr)ices$', 'gi'), '$1ix'],\n [new RegExp('(quiz)zes$', 'gi'), '$1'],\n [new RegExp('s$', 'gi'), ''],\n ];\n\n nonTitlecasedWords = ['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for'];\n\n idSuffix = new RegExp('(_ids|_id)$', 'g');\n underbar = new RegExp('_', 'g');\n spaceOrUnderbar = new RegExp('[ _]', 'g');\n uppercase = new RegExp('([A-Z])', 'g');\n underbarPrefix = new RegExp('^_');\n\n get() {\n return this.str;\n }\n\n applyRules(str, rules, skip, override) {\n if (override) {\n str = override;\n } else {\n var ignore = skip.indexOf(str.toLowerCase()) > -1;\n if (!ignore) {\n for (var x = 0; x < rules.length; x++) {\n if (str.match(rules[x][0])) {\n str = str.replace(rules[x][0], rules[x][1]);\n break;\n }\n }\n }\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.pluralize('person') -> 'people'\n String.pluralize('octopus') -> 'octopi'\n String.pluralize('Hat') -> 'Hats'\n String.pluralize('person', 'guys') -> 'guys' \n */\n pluralize(str, plural = null) {\n str = str || this.str;\n\n return this.applyRules(str, this.pluralRules, this.uncountableWords, plural);\n }\n\n /*\n String.singularize('person') -> 'person'\n String.singularize('octopi') -> 'octopus'\n String.singularize('hats') -> 'hat'\n String.singularize('guys', 'person') -> 'person'\n */\n singularize(str, singular) {\n str = str || this.str;\n\n return this.applyRules(str, this.singularRules, this.uncountableWords, singular);\n }\n\n /*\n String.camelize('message_properties') -> 'MessageProperties'\n String.camelize('message_properties', true) -> 'messageProperties'\n */\n camelize(str, lowFirstLetter) {\n str = str || this.str;\n\n let str_path = str.split('/');\n for (var i = 0; i < str_path.length; i++) {\n let str_arr = str_path[i].split('_');\n let initX = lowFirstLetter && i + 1 === str_path.length ? 1 : 0;\n\n for (let x = initX; x < str_arr.length; x++) {\n str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1);\n }\n str_path[i] = str_arr.join('');\n }\n str = str_path.join('::');\n\n // fix\n if (lowFirstLetter === true) {\n let first = str.charAt(0).toLowerCase();\n let last = str.slice(1);\n str = first + last;\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.underscore('MessageProperties') -> 'message_properties'\n String.underscore('messageProperties') -> 'message_properties'\n */\n underscore(str) {\n str = str || this.str;\n\n var str_path = str.split('::');\n for (var i = 0; i < str_path.length; i++) {\n str_path[i] = str_path[i].replace(this.uppercase, '_$1');\n str_path[i] = str_path[i].replace(this.underbarPrefix, '');\n }\n str = str_path.join('/').toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.humanize('message_properties') -> 'Message properties'\n String.humanize('message_properties') -> 'message properties'\n */\n humanize(str, lowFirstLetter) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.replace(this.idSuffix, '');\n str = str.replace(this.underbar, ' ');\n if (!lowFirstLetter) {\n str = this.capitalize(str);\n }\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.capitalize('message_properties') -> 'Message_properties'\n String.capitalize('message properties') -> 'Message properties'\n */\n capitalize(str) {\n str = str || this.str;\n\n str = str.toLowerCase();\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.dasherize('message_properties') -> 'message-properties'\n String.dasherize('message properties') -> 'message-properties'\n */\n dasherize(str) {\n str = str || this.str;\n\n str = str.replace(this.spaceOrUnderbar, '-');\n str = str.toLowerCase();\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.normify('message_properties') -> 'Message Properties'\n String.normify('message properties') -> 'Message Properties'\n Inflactor.normify('Message_propertyId', true) -> 'Message Properties Id'\n */\n normify(str, allFirstUpper) {\n str = str || this.str;\n\n //var str = str.toLowerCase();\n if (allFirstUpper === true) {\n str = this.camelize(str);\n str = this.underscore(str);\n } else {\n str = str.toLowerCase();\n }\n\n str = str.replace(this.underbar, ' ');\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var d = str_arr[x].split('-');\n for (var i = 0; i < d.length; i++) {\n if (this.nonTitlecasedWords.indexOf(d[i].toLowerCase()) < 0) {\n d[i] = this.capitalize(d[i]);\n }\n }\n str_arr[x] = d.join('-');\n }\n str = str_arr.join(' ');\n str = str.substring(0, 1).toUpperCase() + str.substring(1);\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.demodulize('Message::Bus::Properties') -> 'Properties'\n */\n demodulize(str) {\n str = str || this.str;\n\n var str_arr = str.split('::');\n str = str_arr[str_arr.length - 1];\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.tableize('MessageBusProperty') -> 'message_bus_properties'\n */\n tableize(str) {\n str = str || this.str;\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n str = this.pluralize(this.underscore(str));\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.classify('message_bus_properties') -> 'MessageBusProperty'\n */\n classify(str) {\n // Use the provided string or fallback to the instance's string.\n str = str || this.str;\n // Ensure we're working with a string and remove any extra whitespace.\n str = `${str}`.trim();\n\n // Normalize the input:\n // Replace one or more spaces, dashes, or underscores with a single underscore.\n // This handles cases like \"service-area\", \"service area\", \"service_area\", etc.\n str = str.replace(/[\\s\\-_]+/g, '_');\n\n // Temporarily disable chaining so that singularize and camelize return strings.\n const originalChain = this.chain;\n this.chain = false;\n\n // First, singularize the underscored string.\n str = this.singularize(str);\n\n // Next, camelize the result.\n // Passing false for the lowFirstLetter parameter ensures the first letter is capitalized.\n str = this.camelize(str, false);\n\n // Restore the original chaining setting.\n this.chain = originalChain;\n\n // Update the instance's string.\n this.str = str;\n\n // Return the instance if chaining is enabled, or the string otherwise.\n return this.chain ? this : str;\n }\n\n /*\n String.foreignKey('MessageBusProperty') -> 'message_bus_property_id'\n String.foreignKey('MessageBusProperty', true) -> 'message_bus_propertyid'\n */\n foreignKey(str, dropIdUbar = false) {\n str = str || this.str;\n\n str = this.underscore(this.demodulize(str)) + (dropIdUbar ? '' : '_') + 'id';\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /*\n String.ordinalize('the 1 pitch') -> 'the 1st pitch'\n */\n ordinalize(str) {\n str = str || this.str;\n\n var str_arr = str.split(' ');\n for (var x = 0; x < str_arr.length; x++) {\n var i = parseInt(str_arr[x]);\n if (isNaN(i)) {\n var ltd = str_arr[x].substring(str_arr[x].length - 2);\n var ld = str_arr[x].substring(str_arr[x].length - 1);\n var suf = 'th';\n if (ltd != '11' && ltd != '12' && ltd != '13') {\n if (ld === '1') {\n suf = 'st';\n } else if (ld === '2') {\n suf = 'nd';\n } else if (ld === '3') {\n suf = 'rd';\n }\n }\n str_arr[x] += suf;\n }\n }\n str = str_arr.join(' ');\n\n // set str\n this.str = str;\n\n if (this.chain === true) {\n return this;\n }\n\n // return result\n return str;\n }\n\n /**\n * @method invoke\n **/\n static invoke() {\n const argz = Object.values(arguments);\n const instance = new String(null, false);\n const method = arguments[0];\n argz.shift();\n\n if (typeof instance[method] === 'function') {\n return instance[method](...argz);\n }\n\n return null;\n }\n}\n\nexport const pluralize = function () {\n const argz = ['pluralize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const singularize = function () {\n const argz = ['singularize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const humanize = function () {\n const argz = ['humanize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const underscore = function () {\n const argz = ['underscore', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const camelize = function () {\n const argz = ['camelize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const capitalize = function () {\n const argz = ['capitalize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const dasherize = function () {\n const argz = ['dasherize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const normify = function () {\n const argz = ['normify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const demodulize = function () {\n const argz = ['demodulize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const tableize = function () {\n const argz = ['tableize', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const classify = function () {\n const argz = ['classify', ...arguments];\n\n return String.invoke(...argz);\n};\n\nexport const foreignKey = function () {\n const argz = ['foreignKey', ...arguments];\n\n return String.invoke(...argz);\n};\n","import { pluralize, singularize } from './utils/string.js';\n\nexport const registry = {\n resources: {},\n adapters: {},\n storse: {},\n actions: {},\n};\n\nexport function register(type, className, cls) {\n const key = pluralize(type);\n if (!registry[key]) {\n registry[key] = {};\n }\n registry[key][className] = cls;\n}\n\nexport function create(type, className, ...params) {\n const key = pluralize(type);\n if (!registry[key]) {\n throw new Error(`Unknown type: ${singularize(type)}`);\n }\n if (!registry[key][className]) {\n throw new Error(`No ${singularize(type)} named '${className}' registered.`);\n }\n const ResourceClass = registry[key][className];\n return new ResourceClass(...params);\n}\n\nexport function createStore() {\n return create('store', 'Store', ...arguments);\n}\n\nexport function createAdapter() {\n return create('adapter', 'Adapter', ...arguments);\n}\n\nexport function createResource() {\n return create('resource', 'Resource', ...arguments);\n}\n","import { create } from './registry.js';\nimport { classify } from './utils/string.js';\n\nexport default class Resolver {\n constructor() {\n return this.lookup(...arguments);\n }\n\n lookup(type, className, ...params) {\n return create(type, className, ...params);\n }\n}\n\nexport function lookup(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\n// alias for lookup\nexport function resolve(type, className, ...params) {\n return create(type, classify(className), ...params);\n}\n\nexport function resolveResource(className, ...params) {\n return lookup('resource', classify(className), ...params);\n}\n\nexport function resolveAdapter(className, ...params) {\n return lookup('adapter', classify(className), ...params);\n}\n","const { isArray } = Array;\n\nexport { isArray };\n","/* eslint no-undef: \"off\" */\nimport { isArray } from './array.js';\n\n/**\n * Collection\n * Extended array inspired by Ember's NativeArray\n **/\nconst CHUNK_SIZE = 60000;\n\n// To avoid overflowing the stack, we splice up to CHUNK_SIZE items at a time.\n// See https://code.google.com/p/chromium/issues/detail?id=56588 for more details.\nexport function replace(array, start, deleteCount, items = []) {\n if (isArray(array)) {\n if (items.length <= CHUNK_SIZE) {\n array.splice(start, deleteCount, ...items);\n } else {\n array.splice(start, deleteCount);\n\n for (let i = 0; i < items.length; i += CHUNK_SIZE) {\n let chunk = items.slice(i, i + CHUNK_SIZE);\n array.splice(start + i, 0, ...chunk);\n }\n }\n } else if (isCollection(array)) {\n array.replace(start, deleteCount, items);\n }\n}\n\nexport function identityFunction(item) {\n return item;\n}\n\nexport function uniqBy(array, key = identityFunction) {\n let ret = [];\n let seen = new Set();\n let getter = typeof key === 'function' ? key : (item) => get(item, key);\n\n array.forEach(function (item) {\n let val = getter(item);\n if (!seen.has(val)) {\n seen.add(val);\n ret.push(item);\n }\n });\n\n return ret;\n}\n\nexport function isCollection(mixed) {\n return mixed instanceof Collection;\n}\n\nexport function objectAt(array, index) {\n if (isArray(array)) {\n return array[index];\n } else if (isCollection(array)) {\n return array.objectAt(index);\n }\n\n return null;\n}\n\nexport function iter(key, value) {\n let valueProvided = arguments.length === 2;\n return valueProvided\n ? function (item) {\n return value === item[key];\n }\n : function (item) {\n return Boolean(item[key]);\n };\n}\n\nexport function findIndex(array, predicate, startAt = 0) {\n let len = array.length;\n for (let index = startAt; index < len; index++) {\n let item = objectAt(array, index);\n if (predicate(item, index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport function find(array, callback, target) {\n let predicate = callback.bind(target);\n let index = findIndex(array, predicate, 0);\n return index === -1 ? undefined : objectAt(array, index);\n}\n\nexport function any(array, callback, target) {\n let predicate = callback.bind(target);\n return findIndex(array, predicate, 0) !== -1;\n}\n\nexport function every(array, callback, target) {\n let cb = callback.bind(target);\n let predicate = function (item, index, array) {\n return !cb(item, index, array);\n };\n return findIndex(array, predicate, 0) === -1;\n}\n\nexport function indexOf(array, val, startAt = 0, withNaNCheck) {\n let len = array.length;\n\n if (startAt < 0) {\n startAt += len;\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate =\n withNaNCheck && val !== val\n ? function (item) {\n return item !== item;\n }\n : function (item) {\n return item === val;\n };\n return findIndex(array, predicate, startAt);\n}\n\nexport function removeAt(array, index, len = 1) {\n replace(array, index, len, []);\n return array;\n}\n\nexport function insertAt(array, index, item) {\n replace(array, index, 0, [item]);\n return item;\n}\n\nexport function createCollection() {\n return new Collection(...arguments);\n}\n\nexport default class Collection extends Array {\n constructor() {\n if (isArray(arguments[0])) {\n super(...arguments[0]);\n } else {\n super(...arguments);\n }\n }\n\n get notEmpty() {\n return this.length > 0;\n }\n\n get empty() {\n return this.length === 0;\n }\n\n get first() {\n return objectAt(this, 0);\n }\n\n get last() {\n return objectAt(this, this.length - 1);\n }\n\n replace(start, deleteCount, items = []) {\n replace(this, start, deleteCount, items);\n\n return this;\n }\n\n objectsAt(indexes) {\n return indexes.map((idx) => objectAt(this, idx));\n }\n\n objectAt(index) {\n return objectAt(this, index);\n }\n\n indexOf(object, startAt) {\n return indexOf(this, object, startAt, false);\n }\n\n lastIndexOf(object, startAt) {\n let len = this.length;\n\n if (startAt === undefined || startAt >= len) {\n startAt = len - 1;\n }\n\n if (startAt < 0) {\n startAt += len;\n }\n\n for (let idx = startAt; idx >= 0; idx--) {\n if (objectAt(this, idx) === object) {\n return idx;\n }\n }\n\n return -1;\n }\n\n includes(object, startAt) {\n return indexOf(this, object, startAt, true) !== -1;\n }\n\n findBy() {\n return find(this, iter(...arguments));\n }\n\n findIndexBy() {\n return findIndex(this, iter(...arguments));\n }\n\n isEvery() {\n return every(this, iter(...arguments));\n }\n\n isAny() {\n return any(this, iter(...arguments));\n }\n\n invoke(methodName, ...args) {\n let ret = [];\n\n this.forEach((item) => ret.push(item[methodName]?.(...args)));\n\n return ret;\n }\n\n toArray() {\n return this.map((item) => item);\n }\n\n compact() {\n return this.filter((value) => value != null);\n }\n\n sortBy() {\n let sortKeys = arguments;\n\n return this.sort((a, b) => {\n for (const element of sortKeys) {\n let key = element;\n let propA = a[key];\n let propB = b[key];\n // return 1 or -1 else continue to the next sortKey\n let compareValue = compare(propA, propB);\n\n if (compareValue) {\n return compareValue;\n }\n }\n return 0;\n });\n }\n\n uniqBy(key) {\n return uniqBy(this, key);\n }\n\n without(value) {\n if (!this.includes(value)) {\n return this; // nothing to do\n }\n\n // SameValueZero comparison (NaN !== NaN)\n let predicate = value === value ? (item) => item !== value : (item) => item === item;\n return this.filter(predicate);\n }\n\n clear() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n this.replace(0, len, []);\n return this;\n }\n\n insertAt(idx, object) {\n insertAt(this, idx, object);\n return this;\n }\n\n replaceAt(idx, object) {\n return this.replace(idx, 1, [object]);\n }\n\n removeAt(start, len) {\n return removeAt(this, start, len);\n }\n\n pushObject(obj) {\n return this.insertAt(this.length, obj);\n }\n\n pushObjects(objects) {\n this.replace(this.length, 0, objects);\n return this;\n }\n\n popObject() {\n let len = this.length;\n if (len === 0) {\n return null;\n }\n\n let ret = objectAt(this, len - 1);\n this.removeAt(len - 1, 1);\n return ret;\n }\n\n shiftObject() {\n if (this.length === 0) {\n return null;\n }\n\n let ret = objectAt(this, 0);\n this.removeAt(0);\n return ret;\n }\n\n unshiftObject(obj) {\n return insertAt(this, 0, obj);\n }\n\n unshiftObjects(objects) {\n this.replace(0, 0, objects);\n return this;\n }\n\n reverseObjects() {\n let len = this.length;\n if (len === 0) {\n return this;\n }\n\n let objects = this.toArray().reverse();\n this.replace(0, len, objects);\n return this;\n }\n\n setObjects(objects) {\n if (objects.length === 0) {\n return this.clear();\n }\n\n let len = this.length;\n this.replace(0, len, objects);\n return this;\n }\n\n removeObject(obj) {\n let loc = this.length || 0;\n while (--loc >= 0) {\n let curObject = objectAt(this, loc);\n\n if (curObject === obj) {\n this.removeAt(loc);\n }\n }\n return this;\n }\n\n removeObjects(objects) {\n for (let i = objects.length - 1; i >= 0; i--) {\n this.removeObject(objects[i]);\n }\n\n return this;\n }\n\n addObject(obj) {\n let included = this.includes(obj);\n\n if (!included) {\n this.pushObject(obj);\n }\n\n return this;\n }\n\n addObjects(objects) {\n objects.forEach((obj) => this.addObject(obj));\n return this;\n }\n}\n","export function isEmpty(obj) {\n const none = obj === null || obj === undefined;\n if (none) {\n return none;\n }\n\n if (typeof obj.size === 'number') {\n return !obj.size;\n }\n\n const objectType = typeof obj;\n\n if (objectType === 'object') {\n const { size } = obj;\n if (typeof size === 'number') {\n return !size;\n }\n }\n\n if (typeof obj.length === 'number' && objectType !== 'function') {\n return !obj.length;\n }\n\n if (objectType === 'object') {\n const { length } = obj;\n if (typeof length === 'number') {\n return !length;\n }\n }\n\n return false;\n}\n\nexport default isEmpty;\n","/**\n * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative.\n *\n * @returns boolean\n */\nexport function isNodeEnvironment() {\n return (\n typeof process !== 'undefined' &&\n (typeof process?.env === 'object' || process.release?.name?.search(/node|io.js/) !== -1) &&\n (typeof window === 'undefined' || window?.navigator?.product === 'ReactNative')\n );\n}\n\nexport default isNodeEnvironment;\n","import { lookup } from '../resolver.js';\nimport isNodeEnvironment from './is-node-environment.js';\n\nexport function detectAdapter(options = {}) {\n if (isNodeEnvironment()) {\n return lookup('adapter', 'NodeAdapter', options);\n }\n\n return lookup('adapter', 'BrowserAdapter', options);\n}\n\nexport default detectAdapter;\n","import { isArray } from './array.js';\n\nexport default class GoogleAddress {\n constructor(place) {\n this.place = place;\n this.geometry = place?.geometry;\n this.components = this.parseComponents();\n this.attributes = this.parseProperties();\n }\n\n parse() {\n this.parseComponents();\n this.parseProperties();\n }\n\n parseComponents() {\n const components = (this.place?.address_components || []).reduce(function (acc, data) {\n data.types.forEach(function (type) {\n acc[type] = data;\n });\n return acc;\n }, {});\n\n return components;\n }\n\n parseProperties() {\n const attributes = {\n streetNumber: this.get('street_number'),\n streetName: this.get('route'),\n coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0],\n city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']),\n county: this.get('administrative_area_level_2'),\n stateShort: this.get('administrative_area_level_1', true),\n stateLong: this.get('administrative_area_level_1'),\n countryShort: this.get('country', true),\n country: this.get('country', true),\n countryLong: this.get('country'),\n postalCode: this.get('postal_code'),\n };\n\n attributes.address = [attributes.streetNumber, attributes.streetName].filter(Boolean).join(' ');\n\n return attributes;\n }\n\n all() {\n return this.attributes;\n }\n\n or(keys = []) {\n for (const element of keys) {\n const key = element;\n\n if (isArray(key)) {\n const pkey = key[0];\n const short = key[1];\n\n if (this.has(pkey)) {\n return this.get(pkey, short);\n }\n\n continue;\n }\n\n if (this.has(key)) {\n return this.get(key);\n }\n }\n\n return null;\n }\n\n has(key) {\n return key in this.components;\n }\n\n get(key, short = false) {\n if (!(key in this.components)) {\n return null;\n }\n\n return short ? this.components[key].short_name : this.components[key].long_name;\n }\n\n setAttributes(attributes = {}) {\n this.attributes = { ...this.attributes, ...attributes };\n\n return this;\n }\n\n setAttribute(key, value) {\n this.attributes[key] = value;\n\n return this;\n }\n\n getAttribute(key) {\n return this.attributes[key] || null;\n }\n}\n\nexport function createGoogleAddress() {\n return new GoogleAddress(...arguments);\n}\n\nexport { GoogleAddress };\n","export default class Point {\n constructor(latitude = 0, longitude = 0) {\n this.type = 'Point';\n this.coordinates = [longitude, latitude];\n }\n\n get latitude() {\n return this.coordinates[1];\n }\n\n get longitude() {\n return this.coordinates[0];\n }\n\n lat() {\n return this.latitude;\n }\n\n lng() {\n return this.longitude;\n }\n\n static fromGeoJson(json) {\n const [longitude, latitude] = json.coordinates;\n\n return new Point(latitude, longitude);\n }\n\n serialize() {\n return {\n type: 'Point',\n coorindates: [this.lat(), this.lng()],\n };\n }\n\n toJson() {\n return this.serialize();\n }\n\n toString() {\n return `(${this.latitude}, ${this.longitude})`;\n }\n}\n\nexport { Point };\n","/* eslint no-undef: \"off\" */\nimport isEmpty from './is-empty.js';\n\nexport function isResource(mixed) {\n return typeof mixed === 'object' && !isEmpty(mixed?.attributes) && typeof mixed?.attributes === 'object';\n}\n\nexport function isCallable(object, property) {\n return typeof object[property] === 'function';\n}\n\nexport function getResolved(func, path) {\n const resolved = func();\n return Array.isArray(resolved) || typeof resolved === 'object' ? get(resolved, path) : null;\n}\n\nexport function invoke(object, method) {\n if (typeof object[method] === 'function') {\n return object[method].bind(object);\n }\n}\n\nexport function get(object, path) {\n let current = object;\n\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n\n if (isArray || isObject) {\n for (let i = 0; i < pathArray.length; i++) {\n if (current && current[pathArray[i]] === undefined) {\n return null;\n } else if (current) {\n current = current[pathArray[i]];\n\n // if is resource then return get on its attributes\n if (isResource(current) && pathArray[i + 1] !== undefined) {\n const newPath = pathArray.slice(i + 1).join('.');\n\n return get(current.attributes, newPath);\n }\n\n // resolve functions and continue\n if (typeof current === 'function') {\n const newPath = pathArray.slice(i + 1).join('.');\n return getResolved(current, newPath);\n }\n }\n }\n return current;\n }\n\n if (isFunction) {\n return getResolved(object, path);\n }\n}\n\nexport function getProperties(object, properties = []) {\n const selected = {};\n let propertyNames = arguments;\n let i = 1;\n\n if (arguments.length === 2 && Array.isArray(properties)) {\n i = 0;\n propertyNames = arguments[1];\n }\n\n for (; i < propertyNames.length; i++) {\n selected[propertyNames[i]] = get(object, propertyNames[i]);\n }\n\n return selected;\n}\n\nexport function set(object, path, value) {\n let current = object;\n const type = typeof object;\n const isObject = type === 'object';\n const isFunction = type === 'function';\n const isArray = Array.isArray(object);\n\n // if is function\n if (isFunction) {\n // throw error should be object or array or object like\n }\n\n const pathType = typeof path;\n const pathIsString = pathType === 'string';\n const pathIsDotted = pathIsString && path.includes('.');\n const pathArray = pathIsDotted ? path.split('.') : [path];\n const iterations = pathArray.length;\n\n if (isArray || isObject) {\n for (let i = 0; i < iterations - 1; i++) {\n if (!current[pathArray[i]]) {\n current[pathArray[i]] = {};\n }\n current = current[pathArray[i]];\n }\n\n current[pathArray[iterations - 1]] = value;\n }\n\n return value;\n}\n\nexport function setProperties(object, properties = {}) {\n for (const property in properties) {\n set(object, property, properties[property]);\n }\n\n return object;\n}\n\nexport function extend(target, classes = []) {\n if (arguments.length > 1) {\n classes = arguments;\n }\n for (const element of classes) {\n for (const property in element) {\n if (Object.prototype.hasOwnProperty.call(element, property)) {\n target[property] = element[property];\n }\n }\n }\n return target;\n}\n","import { set } from './object.js';\nimport { isArray } from './array.js';\nimport { register } from '../registry.js';\n\nexport function isStoreActions(target) {\n return target instanceof StoreActions;\n}\n\nexport function extendStoreActions(store, actions = []) {\n store.actions = isArray(actions) ? actions : [actions];\n\n if (isArray(actions)) {\n for (const element of actions) {\n store.extendActions(element);\n }\n return;\n }\n\n if (isStoreActions(actions)) {\n actions.extend(store);\n }\n\n return store;\n}\n\nexport function createStoreActions(name, ...params) {\n const actions = new StoreActions(...params);\n register('action', name, actions);\n return actions;\n}\n\nexport default class StoreActions {\n constructor(actions = {}, bind = null) {\n this.actions = actions;\n this.bind = bind;\n }\n\n extend(bindTo = null) {\n const binding = bindTo || this.bind;\n\n if (!binding) {\n return this;\n }\n\n if (this?.actions && typeof this.actions === 'object') {\n for (let action in this.actions) {\n const fn = this.actions[action];\n\n if (typeof fn !== 'function') {\n set(binding, action, fn);\n continue;\n }\n\n set(binding, action, fn.bind(binding));\n }\n }\n\n return this;\n }\n}\n","// import Store from './store.js';\nimport { isEmpty } from './utils/index.js';\nimport { isArray } from './utils/array.js';\nimport { set, get } from './utils/object.js';\nimport { register, createStore } from './registry.js';\n\nexport function isResource(target) {\n return target instanceof Resource;\n}\n\nexport default class Resource {\n /**\n\t * The base resource for all resources\n\n\t * @return {[type]} [description]\n\t */\n constructor(attributes = {}, adapter, resource, options = {}) {\n this.attributes = attributes;\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isDestroying = false;\n this.isReloading = false;\n this.resource = resource;\n this.options = options;\n this.version = options.version || 'v1';\n this.setAdapter(adapter);\n }\n\n /**\n * Set a new adapter to the resource instance, this will update the Store instance\n *\n * @param {Adapter} adapter\n * @return {Resource} this\n */\n setAdapter(adapter) {\n this.adapter = adapter;\n this.store = createStore(this.resource, adapter, {\n onAfterFetch: this.syncAttributes.bind(this),\n actions: this.options?.actions,\n });\n\n return this;\n }\n\n /**\n * Getter for id attribute\n *\n * @var {String}\n */\n get id() {\n return this.getAttribute('id');\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n create(attributes = {}) {\n const data = this.mergeAttributes(attributes);\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.create(data).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Creates a new resource on the server\n *\n * @param {Object} payload [description]\n * @return {[type]} [description]\n */\n update(attributes = {}) {\n this.setFlags(['isLoading', 'isSaving']);\n\n return this.store.update(this.attributes.id, attributes).then((response) => {\n this.setFlags(['isLoading', 'isSaving'], false);\n\n return response;\n });\n }\n\n /**\n * Deletes the resource instance on the server\n *\n * @return {[type]} [description]\n */\n destroy() {\n this.setFlags(['isLoading', 'isDestroying']);\n\n return this.store.destroy(this.attributes.id).then((response) => {\n this.setFlags(['isLoading', 'isDestroying'], false);\n\n return response;\n });\n }\n\n /**\n * Reloads the resource from the server.\n *\n * @return {[type]} [description]\n */\n reload() {\n this.setFlags(['isLoading', 'isReloading']);\n\n return this.store.findRecord(this.attributes.id).then((response) => {\n this.reset();\n\n return response;\n });\n }\n\n /**\n * Sets flag properties.\n *\n * @return this\n */\n setFlags(flags = [], state = true) {\n const validFlags = ['isLoading', 'isSaving', 'isReloading', 'isDestroying'];\n\n for (let i = 0; i < flags.length; i++) {\n const flag = flags[i];\n\n if (typeof flag !== 'string' || !validFlags.includes(flag)) {\n throw new Error(`${flag} is not a valid flag!`);\n }\n\n this[flag] = state;\n }\n\n return this;\n }\n\n /**\n * Resets tracked properties\n *\n * @return this\n */\n reset() {\n this.dirtyAttributes = {};\n this.changes = {};\n this.isLoading = false;\n this.isSaving = false;\n this.isReloading = false;\n\n return this;\n }\n\n /**\n * Emptys resource.\n *\n * @return this\n */\n empty() {\n this.reset();\n this.attribues = {};\n\n return this;\n }\n\n /**\n * Saves the resource instance on the server\n *\n * @return {[type]} [description]\n */\n save(options = {}) {\n const attributes = this.getAttributes();\n\n if (isEmpty(this.id)) {\n return this.create(attributes);\n }\n\n if (options.onlyDirty === true) {\n return this.savedirty();\n }\n\n return this.update(attributes);\n }\n\n /**\n * Saves only dirtied attributes.\n *\n * @return {[type]} [description]\n */\n saveDirty() {\n const dirtyAttributeKeys = Object.keys(this.dirtyAttributes);\n const dirtyAttributes = {};\n\n for (let i = 0; i < dirtyAttributeKeys.length; i++) {\n const key = dirtyAttributeKeys[i];\n dirtyAttributes[key] = this.getAttribute(key);\n }\n\n return this.update(dirtyAttributes);\n }\n\n /**\n * Returns the resource meta if exists.\n *\n * @return {Object}\n */\n get meta() {\n return this.getAttribute('meta', {});\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get createdAt() {\n return this.isAttributeFilled('created_at') ? new Date(this.getAttribute('created_at')) : null;\n }\n\n /**\n * Returns the date instance resource was created.\n *\n * @return {Date}\n */\n get updatedAt() {\n return this.isAttributeFilled('updated_at') ? new Date(this.getAttribute('updated_at')) : null;\n }\n\n /**\n * Checks if resource is loaded from the server.\n *\n * @return {Boolean}\n */\n get isLoaded() {\n return this.hasAttributes(['created_at', 'id']);\n }\n\n /**\n * Checks if resource ihas no attributes\n *\n * @return {Boolean}\n */\n get isEmpty() {\n return Object.values(this?.attributes).length === 0;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isNew() {\n return !this.id;\n }\n\n /**\n * Checks if resource is not saved to server.\n *\n * @return {Boolean}\n */\n get isSaved() {\n return !this.isNew && this.isLoaded;\n }\n\n /**\n * Checks if resource is deleted on server.\n *\n * @return {Boolean}\n */\n get isDeleted() {\n return this.hasAttributes(['deleted', 'time']);\n }\n\n /**\n * Iterates over each attribute value and property executing a user supplied callback.\n *\n * @return {Object}\n */\n eachAttribute(callback) {\n if (typeof callback !== 'function') {\n return this;\n }\n\n Object.keys(this?.attributes ?? {}).forEach((property) => {\n const value = this.getAttribute(property);\n callback.call(this, value, property);\n });\n\n return this;\n }\n\n /**\n * Gets all changes\n *\n * @return {Object}\n */\n changes() {\n return this.changes;\n }\n\n /**\n * Gets all dirty attributes.\n *\n * @return {Object}\n */\n getDirtyAttributes() {\n return this.dirtyAttributes;\n }\n\n /**\n * Checks if property is dirty.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n isDirty(property) {\n return property in this.dirtyAttributes;\n }\n\n /**\n * Checks if any properties is dirty.\n *\n * @return {Boolean}\n */\n hasDirtyAttributes() {\n return Object.keys(this?.dirtyAttributes ?? {}).length > 0;\n }\n\n /**\n * Updates a instance property without tracking changes or dirtying attribute.\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n mutate(property, value) {\n this.attributes[property] = value;\n }\n\n /**\n * Set an instance property locally\n *\n * @param {String} property [description]\n * @param {mixed} value [description]\n */\n setAttribute(property, value = null) {\n if (value === null && typeof property === 'object') {\n return this.setAttributes(property);\n }\n\n const previousValue = this?.attributes[property] ?? null;\n\n // use object setter\n set(this.attributes, property, value);\n set(this.dirtyAttributes, property, previousValue);\n\n // track changes\n if (!isArray(this?.changes[property])) {\n this.changes[property] = [];\n }\n\n this.changes[property].push({\n property,\n previousValue,\n value,\n changedAt: new Date(),\n });\n\n return this;\n }\n\n /**\n * Set multiple instance properties locally\n *\n * @param {Object} properties [description]\n */\n setAttributes(attributes = {}) {\n for (let property in attributes) {\n this.setAttribute(property, attributes[property]);\n }\n\n return this;\n }\n\n /**\n * Get an attribute\n *\n * @param {String} attribute The attribute key to get\n * @param {mixed} defaultValue The default value if no attribute value\n */\n getAttribute(attribute, defaultValue = null) {\n const value = get(this?.attributes ?? {}, attribute);\n\n if (value === undefined) {\n return defaultValue;\n }\n\n return value;\n }\n\n /**\n * Checks if attribute exists.\n *\n * @param {String} property [description]\n * @return {Boolean}\n */\n hasAttribute(property) {\n if (isArray(property)) {\n const properties = property;\n const attributeKeys = Object.keys(this.attributes ?? {});\n\n return properties.every((prop) => attributeKeys.includes(prop));\n }\n\n if (!this?.attributes) {\n return false;\n }\n\n return property in this.attributes;\n }\n\n /**\n * Alias for checking if has multiple attributes.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n hasAttributes(properties = []) {\n return this.hasAttribute(properties);\n }\n\n /**\n * Returns true if attribute has value.\n *\n * @param {Array} properties\n * @return {Boolean}\n */\n isAttributeFilled(property) {\n if (isArray(property)) {\n return this.hasAttribute(property) && property.every((prop) => !isEmpty(this.getAttribute(prop)));\n }\n\n return this.hasAttribute(property) && !isEmpty(this.getAttribute(property));\n }\n\n /**\n * Get multiple attributes.\n *\n * @param {Array} properties [description]\n * @param {[type]} value [description]\n */\n getAttributes(properties) {\n const attributes = {};\n\n if (properties === null || properties === undefined) {\n return this.getAttributes(Object.keys(this.attributes));\n }\n\n if (typeof properties === 'string') {\n return this.getAttribute([...arguments]);\n }\n\n if (!isArray(properties)) {\n throw new Error('No attribute properties provided!');\n }\n\n for (const element of properties) {\n const property = element;\n\n if (typeof property !== 'string') {\n continue;\n }\n\n let value = this.getAttribute(property);\n\n if (typeof value?.attributes === 'object' && !isArray(value?.attributes)) {\n value = value.attributes;\n }\n\n attributes[property] = value;\n }\n\n return attributes;\n }\n\n /**\n * Serialize resource to a POJO\n *\n * @returns {Object}\n */\n serialize() {\n return this.getAttributes();\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n mergeAttributes(attributes = {}) {\n const modelAttributes = this?.attributes ?? {};\n this.attributes = { ...modelAttributes, ...attributes };\n\n return this.attributes;\n }\n\n /**\n * Merge and return attributes on the resource instance.\n *\n * @param {[type]} property [description]\n * @param {[type]} value [description]\n */\n syncAttributes(json = {}) {\n this.attributes = json;\n }\n}\n\nregister('resource', 'Resource', Resource);\n","import { lookup } from './resolver.js';\nimport { isResource } from './resource.js';\nimport { createCollection } from './utils/collection.js';\nimport { detectAdapter } from './utils/detect-adapter.js';\nimport { isArray } from './utils/array.js';\nimport { classify, pluralize } from './utils/string.js';\nimport { extendStoreActions } from './utils/store-actions.js';\nimport { register } from './registry.js';\n\nexport function createStore() {\n return new Store(...arguments);\n}\n\nexport function afterFetch(store, json) {\n if (typeof store.options.onAfterFetch === 'function') {\n store.options.onAfterFetch(json);\n }\n\n if (isArray(json)) {\n const serialized = [];\n\n for (const element of json) {\n serialized.push(store.afterFetch(element));\n }\n\n return createCollection(...serialized);\n }\n\n const resourceInstance = store.serialize(json);\n return store.deposit(resourceInstance);\n}\n\nexport default class Store {\n constructor(resource, adapter, options = {}) {\n this.resource = resource;\n this.adapter = adapter || detectAdapter();\n this.namespace = pluralize(resource);\n this.storage = createCollection();\n this.options = options;\n this.extendActions(options.actions);\n }\n\n extendActions(actions = []) {\n return extendStoreActions(this, actions);\n }\n\n deposit(resourceInstance) {\n // this.storage[this.namespace].pushObject(resourceInstance);\n return resourceInstance;\n }\n\n serialize(json) {\n return lookup('resource', classify(this.resource), json, this.adapter);\n }\n\n afterFetch(json) {\n return afterFetch(this, json);\n }\n\n /**\n * Creates a new record via POST\n *\n * @param {Object} attributes - The attributes to create the record with\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async create(attributes = {}, options = {}) {\n const response = await this.adapter.post(`${this.namespace}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Updates an existing record via PUT\n *\n * @param {string|number} id - ID of the record to update\n * @param {Object} attributes - The attributes to update\n * @param {Object} options - Adapter options (headers, etc.)\n * @returns {Promise}\n */\n async update(id, attributes = {}, options = {}) {\n const response = await this.adapter.put(`${this.namespace}/${id}`, attributes, options);\n return this.afterFetch(response);\n }\n\n /**\n * Finds a single record by ID\n *\n * @param {string|number} id - ID of the record to fetch\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findRecord(id, options = {}) {\n const response = await this.adapter.get(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Fetches all records from the resource\n *\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async findAll(options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, {}, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource using the given query params\n *\n * @param {Object} query - Query parameters\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async query(query = {}, options = {}) {\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Queries the resource, but returns a single record\n *\n * @param {Object} query - Query parameters (with `query.single = true`)\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async queryRecord(query = {}, options = {}) {\n query.single = true;\n\n const response = await this.adapter.get(`${this.namespace}`, query, options);\n return this.afterFetch(response);\n }\n\n /**\n * Deletes/destroys a record by ID\n *\n * @param {any} record - Resource or ID\n * @param {Object} options - Adapter options\n * @returns {Promise}\n */\n async destroy(record, options = {}) {\n const id = isResource(record) ? record.getAttribute('id') : record;\n const response = await this.adapter.delete(`${this.namespace}/${id}`, {}, options);\n return this.afterFetch(response);\n }\n}\n\nregister('store', 'Store', Store);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport StoreActions from '../utils/store-actions.js';\n\nexport const orderActions = new StoreActions({\n getDistanceAndTime: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/distance-and-time`, params, options);\n },\n\n getNextActivity: function (id, params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/${id}/next-activity`, params, options);\n },\n\n dispatch: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/dispatch`, params, options).then(this.afterFetch.bind(this));\n },\n\n start: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/start`, params, options).then(this.afterFetch.bind(this));\n },\n\n updateActivity: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/update-activity`, params, options).then(this.afterFetch.bind(this));\n },\n\n setDestination: function (id, destinationId, params = {}, options = {}) {\n if (isResource(destinationId)) {\n destinationId = destinationId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/set-destination/${destinationId}`, params, options).then(this.afterFetch.bind(this));\n },\n\n captureQrCode: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-qr${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n captureSignature: function (id, subjectId = null, params = {}, options = {}) {\n if (isResource(subjectId)) {\n subjectId = subjectId.id;\n }\n\n return this.adapter.post(`${this.namespace}/${id}/capture-signature${!subjectId ? '' : '/' + subjectId}`, params, options);\n },\n\n complete: function (id, params = {}, options = {}) {\n return this.adapter.post(`${this.namespace}/${id}/complete`, params, options).then(this.afterFetch.bind(this));\n },\n\n cancel: function (id, params = {}, options = {}) {\n return this.adapter.delete(`${this.namespace}/${id}/cancel`, params, options).then(this.afterFetch.bind(this));\n },\n});\n\nexport default class Order extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'order', { actions: orderActions, ...options });\n }\n\n getDistanceAndTime(params = {}, options = {}) {\n return this.store.getDistanceAndTime(this.id, params, options);\n }\n\n dispatch(params = {}, options = {}) {\n return this.store.dispatch(this.id, params, options);\n }\n\n start(params = {}, options = {}) {\n return this.store.start(this.id, params, options);\n }\n\n setDestination(destinationId, params = {}, options = {}) {\n return this.store.setDestination(this.id, destinationId, params, options);\n }\n\n captureQrCode(subjectId = null, params = {}, options = {}) {\n return this.store.captureQrCode(this.id, subjectId, params, options);\n }\n\n captureSignature(subjectId = null, params = {}, options = {}) {\n return this.store.captureSignature(this.id, subjectId, params, options);\n }\n\n getNextActivity(params = {}, options = {}) {\n return this.store.getNextActivity(this.id, params, options);\n }\n\n updateActivity(params = {}, options = {}) {\n return this.store.updateActivity(this.id, params, options);\n }\n\n cancel(params = {}, options = {}) {\n return this.store.cancel(this.id, params, options);\n }\n\n complete(params = {}, options = {}) {\n return this.store.complete(this.id, params, options);\n }\n\n get isDispatched() {\n return this.getAttribute('dispatched_at') !== null;\n }\n\n get isNotDispatched() {\n return this.getAttribute('dispatched_at') == null;\n }\n\n get isStarted() {\n return this.getAttribute('started_at') !== null;\n }\n\n get isNotStarted() {\n return this.getAttribute('started_at') == null;\n }\n\n get isCompleted() {\n return this.getAttribute('status') == 'completed';\n }\n\n get isCanceled() {\n return this.getAttribute('status') == 'canceled';\n }\n\n get isEnroute() {\n return this.getAttribute('status') == 'driver_enroute' || this.getAttribute('status') === 'enroute';\n }\n\n get isInProgress() {\n return this.isStarted && !this.isCanceled && !this.isCompleted;\n }\n\n get scheduledAt() {\n return this.isAttributeFilled('scheduled_at') ? new Date(this.getAttribute('scheduled_at')) : null;\n }\n\n get startedAt() {\n return this.isAttributeFilled('started_at') ? new Date(this.getAttribute('started_at')) : null;\n }\n\n get dispatchedAt() {\n return this.isAttributeFilled('dispatched_at') ? new Date(this.getAttribute('dispatched_at')) : null;\n }\n\n get status() {\n return this.getAttribute('status');\n }\n}\n\nregister('resource', 'Order', Order);\n","import Resource from '../resource.js';\nimport { createCollection } from '../utils/collection.js';\nimport { resolveResource } from '../resolver.js';\nimport { register } from '../registry.js';\n\nexport default class Payload extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'payload', options);\n }\n\n /**\n * Attaches an entity to an existing payload and returns\n * the payload with the entity attached\n *\n * @param {Entity} Entity entity [description]\n * @return {Payload} [description]\n */\n // eslint-disable-next-line no-unused-vars\n attach(entity) {\n // perform op return payload\n }\n\n /**\n * Returns all of the entities attached to this payload\n *\n * @return {Collection} [description]\n */\n get entities() {\n return createCollection(this.entities.map((data) => resolveResource('Entity', data, this.adapter)));\n }\n\n /**\n * Returns the dropoff for this payload\n *\n * @return {Place|null} [description]\n */\n get dropoff() {\n return this.dropoff ? resolveResource('Place', this.dropoff, this.adapter) : null;\n }\n\n /**\n * Returns the pickup for this payload\n *\n * @return {Place|null} [description]\n */\n get pickup() {\n return this.pickup ? resolveResource('Place', this.pickup, this.adapter) : null;\n }\n\n /**\n * Returns all the waypoints for this payload\n *\n * @return {Collection} [description]\n */\n get waypoints() {\n return createCollection(this.waypoints.map((data) => resolveResource('Waypoint', data, this.adapter)));\n }\n}\n\nregister('resource', 'Payload', Payload);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Entity extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'entity', options);\n }\n}\n\nregister('resource', 'Entity', Entity);\n","import Resource, { isResource } from '../resource.js';\nimport { register } from '../registry.js';\nimport { Point } from '../utils/index.js';\n\nexport default class Place extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'place', options);\n }\n\n static fromGoogleAddress(googleAddress, adapter, options = {}) {\n const [latitude, longitude] = googleAddress.getAttribute('coordinates');\n const attributes = {\n name: null,\n address: googleAddress.getAttribute('address'),\n location: new Point(latitude, longitude),\n street1: googleAddress.getAttribute('address'),\n street2: null,\n city: googleAddress.getAttribute('city'),\n province: googleAddress.getAttribute('stateLong'),\n postal_code: googleAddress.getAttribute('postalCode'),\n neighborhood: googleAddress.get('neighborhood'),\n district: googleAddress.getAttribute('county'),\n building: googleAddress.get('building'),\n country: googleAddress.getAttribute('countryShort'),\n phone: null,\n security_access_code: null,\n };\n\n return new Place(attributes, adapter, options);\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n /**\n * Set the owner of the place.\n *\n * @param {Object|String} owner\n * @return {Place}\n */\n setOwner(owner) {\n if (isResource(owner)) {\n this.setAttribute('owner', owner.id);\n }\n\n if (typeof owner === 'string') {\n this.setAttribute('owner', owner);\n }\n\n return this;\n }\n}\n\nregister('resource', 'Place', Place);\n","import Place from './place.js';\nimport { register } from '../registry.js';\n\nexport default class Waypoint extends Place {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'waypoint', options);\n }\n}\n\nregister('resource', 'Waypoint', Waypoint);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class TrackingStatus extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'tracking-status', options);\n }\n}\n\nregister('resource', 'TrackingStatus', TrackingStatus);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vehicle extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vehicle', options);\n }\n}\n\nregister('resource', 'Vehicle', Vehicle);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\nimport { StoreActions } from '../utils/index.js';\n\nexport const organizationActions = new StoreActions({\n current: function (params = {}, options = {}) {\n return this.adapter.get(`${this.namespace}/current`, params, options);\n },\n});\n\nexport default class Organization extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'organization', { actions: organizationActions, ...options });\n }\n}\n\nregister('resource', 'Organization', Organization);\n","import Resource from '../resource.js';\nimport Organization from './organization.js';\nimport { register } from '../registry.js';\nimport { StoreActions, isPhone, Point } from '../utils/index.js';\nimport { isArray } from '../utils/array.js';\n\nexport const serializeOrganizations = (response, adapter) => {\n if (isArray(response)) {\n return response.map((organizationJson) => {\n return new Organization(organizationJson, adapter);\n });\n }\n\n return new Organization(response, adapter);\n};\n\nexport const driverActions = new StoreActions({\n // const { error } = await fleetbase.drivers.login('+1 111-1111');\n login: function (identity, password = null, attributes = {}) {\n // handle phone number authentication\n if (isPhone(identity)) {\n return this.adapter.post('drivers/login-with-sms', { phone: identity });\n }\n\n if (!password) {\n throw new Error('Login requires password!');\n }\n\n return this.adapter.post('drivers/login', { identity, password, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n verifyCode: function (identity, code, attributes = {}) {\n return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then(this.afterFetch.bind(this));\n },\n\n track: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/track`, params, options).then(this.afterFetch.bind(this));\n },\n\n listOrganizations: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n switchOrganization: function (id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n currentOrganization: function (id, params = {}, options = {}) {\n return this.adapter.get(`drivers/${id}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter));\n },\n\n retrieve: function (id) {\n return this.findRecord(id);\n },\n\n syncDevice(id, params = {}, options = {}) {\n return this.adapter.post(`drivers/${id}/register-device`, params, options);\n },\n});\n\nexport default class Driver extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'driver', { actions: driverActions, ...options });\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get isOnline() {\n return this.getAttribute('online') === true;\n }\n\n /**\n * The latitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get latitude() {\n return this.getAttribute('location', new Point())?.coordinates[1];\n }\n\n /**\n * The longitude coordinate for the 'Place' location.\n *\n * @var {Integer}\n */\n get longitude() {\n return this.getAttribute('location', new Point())?.coordinates[0];\n }\n\n /**\n * Array coordinate pair for Place location.\n *\n * @var {Array}\n */\n get coordinates() {\n const { latitude, longitude } = this;\n\n return [latitude, longitude];\n }\n\n track(params = {}, options = {}) {\n return this.store.track(this.id, params, options);\n }\n\n syncDevice(params = {}, options = {}) {\n return this.store.syncDevice(this.id, params, options);\n }\n\n listOrganizations(params = {}, options = {}) {\n return this.store.listOrganizations(this.id, params, options);\n }\n\n switchOrganization(organizationId, options = {}) {\n return this.store.switchOrganization(this.id, { next: organizationId }, options);\n }\n\n currentOrganization(params = {}, options = {}) {\n return this.store.currentOrganization(this.id, params, options);\n }\n}\n\nregister('resource', 'Driver', Driver);\n","export function isPhone(phone = '') {\n return /^[+]?[\\s./0-9]*[(]?[0-9]{1,4}[)]?[-\\s./0-9]*$/g.test(phone);\n}\n\nexport default isPhone;\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Vendor extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'vendor', options);\n }\n}\n\nregister('resource', 'Vendor', Vendor);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Contact extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'contact', options);\n }\n}\n\nregister('resource', 'Contact', Contact);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Zone extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'zone', options);\n }\n}\n\nregister('resource', 'Zone', Zone);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceArea extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-area', options);\n }\n}\n\nregister('resource', 'ServiceArea', ServiceArea);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceRate extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-rate', options);\n }\n}\n\nregister('resource', 'ServiceRate', ServiceRate);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class ServiceQuote extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'service-quote', options);\n }\n\n fromPreliminary() {}\n\n fromPayload() {}\n}\n\nregister('resource', 'ServiceQuote', ServiceQuote);\n","import Resource from '../resource.js';\nimport { register } from '../registry.js';\n\nexport default class Fleet extends Resource {\n constructor(attributes = {}, adapter, options = {}) {\n super(attributes, adapter, 'fleet', options);\n }\n}\n\nregister('resource', 'Fleet', Fleet);\n","import { register } from './registry.js';\n\nexport default class Adapter {\n /**\n * Creates a configured base adapter for Fleetbase.\n *\n * @param {Object} config Configuration options for adapter\n */\n constructor(config = {}) {\n this.version = config.version || 'v1';\n this.host = config.host || null;\n this.namespace = config.namespace || null;\n this.headers = config.headers || {};\n }\n}\n\nregister('adapter', 'Adapter', Adapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isBlank } from '../utils/index.js';\n\n/**\n * @class BrowserAdapter\n * @extends Adapter\n *\n * @classdesc\n * The BrowserAdapter extends the base Adapter for browser-based environments.\n * It leverages the Fetch API to make HTTP requests and handles JSON parsing, headers,\n * and error propagation.\n *\n * @example\n * // Example usage:\n * const adapter = new BrowserAdapter({\n * publicKey: 'MY_PUBLIC_KEY',\n * host: 'https://api.example.com',\n * namespace: 'v1'\n * });\n *\n * adapter.get('users')\n * .then(users => console.log(users))\n * .catch(error => console.error(error));\n */\nexport default class BrowserAdapter extends Adapter {\n /**\n * Initializes a BrowserAdapter instance by configuring default headers,\n * including Authorization and Content-Type.\n *\n * @param {Object} config - Configuration object for the adapter.\n * @param {string} config.publicKey - A valid public key for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - A namespace or version for the API.\n */\n constructor(config) {\n super(config);\n\n // Set default headers\n this.setHeaders({\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;browser',\n });\n }\n\n /**\n * Updates the adapter’s request headers.\n *\n * @param {Object} [headers={}] - An object of header key-value pairs.\n * @returns {BrowserAdapter} Returns the current adapter instance for method chaining.\n *\n * @example\n * adapter.setHeaders({\n * 'X-Custom-Header': 'SomeValue'\n * }).get('users');\n */\n setHeaders(headers = {}) {\n this.headers = { ...this.headers, ...headers };\n return this;\n }\n\n /**\n * Parses JSON from a fetch Response object.\n *\n * @private\n * @param {Response} response - The Fetch API response object.\n * @returns {Promise<{ statusText: string, status: number, ok: boolean, json: any }>}\n * A promise that resolves with an object containing:\n * - `statusText`: The status text from the response\n * - `status`: The numeric HTTP status\n * - `ok`: A boolean indicating if the request was successful (status in the 200–299 range)\n * - `json`: The parsed JSON from the response body\n *\n * @example\n * fetch('/api')\n * .then(this.parseJSON)\n * .then(({ json }) => console.log(json));\n */\n parseJSON(response) {\n return new Promise((resolve, reject) => {\n response\n .json()\n .then((json) => {\n resolve({\n statusText: response.statusText,\n status: response.status,\n ok: response.ok,\n json,\n });\n })\n .catch(() => {\n reject(new Error('Oops! Something went wrong when handling your request.'));\n });\n });\n }\n\n /**\n * The base method for sending fetch requests. Manages headers, HTTP method,\n * and body serialization where necessary.\n *\n * @private\n * @param {string} path - The endpoint path (relative to `this.host/this.namespace`).\n * @param {string} [method='GET'] - The HTTP method (GET, POST, PUT, DELETE, PATCH).\n * @param {Object} [data={}] - The request payload. Usually includes `body`.\n * @param {Object} [options={}] - Additional fetch options (e.g. `mode`, `headers`, or `url` override).\n * @returns {Promise} A promise resolving to the parsed JSON data or rejecting with an error.\n *\n * @example\n * this.request('users', 'POST', { body: JSON.stringify({ name: 'John' }) })\n * .then(responseData => console.log(responseData));\n */\n request(path, method = 'GET', data = {}, options = {}) {\n return new Promise((resolve, reject) => {\n fetch(\n options.url || `${this.host}/${this.namespace}/${path}`, // Fallback to constructed URL if options.url is not provided\n {\n method,\n mode: options.mode || 'cors',\n headers: new Headers({\n ...(this.headers || {}),\n ...(options.headers || {}),\n }),\n ...data, // Typically { body: JSON.stringify(payload) }\n }\n )\n .then(this.parseJSON)\n .then((response) => {\n if (response.ok) {\n // If the HTTP status code is 2xx, resolve with JSON data\n return resolve(response.json);\n }\n // Otherwise, reject with error message or fallback to status text\n reject(new Error(response.json.errors ? response.json.errors[0] : response.statusText));\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Issues a GET request to the specified path, optionally with query parameters.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [query={}] - Query parameters to append to the request URL.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the fetched data or rejects with an error.\n *\n * @example\n * // GET /users?limit=10\n * adapter.get('users', { limit: 10 })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n get(path, query = {}, options = {}) {\n const urlParams = !isBlank(query) ? new URLSearchParams(query).toString() : '';\n return this.request(`${path}${urlParams ? `?${urlParams}` : ''}`, 'GET', {}, options);\n }\n\n /**\n * Issues a POST request with a JSON body.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.post('users', { name: 'John Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n post(path, data = {}, options = {}) {\n return this.request(path, 'POST', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a PUT request with a JSON body, commonly used for full updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.put('users/123', { name: 'Jane Doe' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n put(path, data = {}, options = {}) {\n return this.request(path, 'PUT', { body: JSON.stringify(data) }, options);\n }\n\n /**\n * Issues a DELETE request. Note that many APIs don't require a body for DELETE.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.delete('users/123')\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n delete(path, options = {}) {\n return this.request(path, 'DELETE', {}, options);\n }\n\n /**\n * Issues a PATCH request with a JSON body, commonly used for partial updates.\n *\n * @param {string} path - The endpoint path.\n * @param {Object} [data={}] - The request payload, which will be stringified as JSON.\n * @param {Object} [options={}] - Additional fetch options.\n * @returns {Promise} A promise that resolves with the server response or rejects with an error.\n *\n * @example\n * adapter.patch('users/123', { email: 'newemail@example.com' })\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n */\n patch(path, data = {}, options = {}) {\n return this.request(path, 'PATCH', { body: JSON.stringify(data) }, options);\n }\n}\n\nregister('adapter', 'BrowserAdapter', BrowserAdapter);\n","import isEmpty from './is-empty.js';\n\nexport function isBlank(obj) {\n return isEmpty(obj) || (typeof obj === 'string' && /\\S/.test(obj) === false);\n}\n\nexport default isBlank;\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\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\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 setImmediate: _setImmediate,\n asap\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 if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\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.status\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|Function)} 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 if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \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","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\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';\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// 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","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\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 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","'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 utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, 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 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, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\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 test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\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 test(() => utils.isReadableStream(new Response('').body));\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 const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\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 = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\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 const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\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 credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /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 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, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !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 (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? 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","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\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.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\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) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\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","// eslint-disable-next-line strict\nexport default null;\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","export const VERSION = \"1.7.9\";","'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\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('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 validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\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 toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","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","'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","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\nimport { isArray } from '../utils/array.js';\nimport axios from 'axios';\n\n/**\n * @class NodeAdapter\n * @extends Adapter\n *\n * @classdesc\n * The NodeAdapter extends the base Adapter class to facilitate making HTTP requests using Axios in a Node environment.\n * It provides convenient methods for all standard HTTP verbs (GET, POST, PUT, DELETE, PATCH) and supports:\n *\n * - Automatic JSON serialization and deserialization.\n * - Base URL and common headers.\n * - Interceptors for transforming responses and handling errors.\n * - Customizable headers at runtime via `setHeaders`.\n */\nexport default class NodeAdapter extends Adapter {\n /**\n * Creates an instance of NodeAdapter.\n *\n * @param {Object} config - Configuration object\n * @param {string} config.publicKey - The public key used for authorization.\n * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API.\n * @param {string} [config.namespace='v1'] - The default namespace or version for the API.\n *\n * @example\n * const adapter = new NodeAdapter({\n * publicKey: 'YOUR_PUBLIC_KEY',\n * host: 'https://api.yourapp.com',\n * namespace: 'v1'\n * });\n */\n constructor(config) {\n super(config);\n\n // Create a dedicated Axios instance with base URL and default headers\n this.axiosInstance = axios.create({\n baseURL: `${this.host}/${this.namespace}`,\n headers: {\n Authorization: `Bearer ${config.publicKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': '@fleetbase/sdk;node',\n },\n });\n\n /**\n * Sets up Axios interceptors for response success and error handling.\n *\n * Success:\n * - Returns `response.data` by default.\n *\n * Error:\n * - If the server returned a response, checks for `data.errors` or `data.error` and throws an Error accordingly.\n * - Otherwise, re-throws the original error to preserve stack trace.\n */\n this.axiosInstance.interceptors.response.use(\n /**\n * Transform successful responses by returning only `response.data`.\n *\n * @param {import('axios').AxiosResponse} response - The successful Axios response object\n * @returns {any} - The `data` property of the response, containing the actual payload\n */\n (response) => response.data,\n\n /**\n * Handle error responses, extracting relevant information from the response payload.\n *\n * @param {import('axios').AxiosError} error - The error object thrown by Axios\n * @throws {Error} - An Error instance with a message derived from the server response\n */\n (error) => {\n if (error.response) {\n const { data } = error.response;\n\n if (isArray(data.errors) && data.errors.length) {\n throw new Error(data.errors[0]);\n } else if (data.error) {\n throw new Error(data.error);\n }\n }\n throw error;\n }\n );\n }\n\n /**\n * Merges the provided headers with existing default headers.\n *\n * @param {Object} [headers={}] - Additional headers to add or override.\n * @returns {NodeAdapter} - The current instance of NodeAdapter for method chaining.\n *\n * @example\n * adapter.setHeaders({ 'X-Custom-Header': 'my-value' });\n */\n setHeaders(headers = {}) {\n this.axiosInstance.defaults.headers.common = {\n ...this.axiosInstance.defaults.headers.common,\n ...headers,\n };\n return this;\n }\n\n /**\n * A generic method to make an HTTP request with Axios.\n * This method is utilized internally by specialized request methods such as `get`, `post`, etc.\n *\n * @private\n * @param {string} method - HTTP verb (e.g., GET, POST, PUT, DELETE, PATCH).\n * @param {string} url - The URL path (relative to `baseURL`).\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request configuration.\n * @returns {Promise} - A promise resolving to the response data or rejecting with an Error.\n *\n * @example\n * // Example usage inside another method:\n * this.request('GET', '/users', { params: { limit: 50 } });\n */\n request(method, url, options = {}) {\n return this.axiosInstance.request({\n method,\n url,\n ...options,\n });\n }\n\n /**\n * Makes a GET request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [query={}] - Query parameters to include in the request URL.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.get('/users', { limit: 25 }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n get(path, query = {}, options = {}) {\n return this.request('GET', path, { params: query, ...options });\n }\n\n /**\n * Makes a POST request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The request body payload.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.post('/users', { name: 'John Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n post(path, data = {}, options = {}) {\n return this.request('POST', path, { data, ...options });\n }\n\n /**\n * Makes a PUT request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - The updated data to send in the request body.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.put('/users/123', { name: 'Jane Doe' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n put(path, data = {}, options = {}) {\n return this.request('PUT', path, { data, ...options });\n }\n\n /**\n * Makes a DELETE request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.delete('/users/123').then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n delete(path, options = {}) {\n return this.request('DELETE', path, options);\n }\n\n /**\n * Makes a PATCH request.\n *\n * @param {string} path - The endpoint path, relative to `baseURL`.\n * @param {Object} [data={}] - Partial data to update on the server.\n * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options.\n * @returns {Promise} - A promise that resolves with the response data or rejects with an Error.\n *\n * @example\n * adapter.patch('/users/123', { email: 'new_email@example.com' }).then(data => {\n * console.log(data);\n * }).catch(err => {\n * console.error(err);\n * });\n */\n patch(path, data = {}, options = {}) {\n return this.request('PATCH', path, { data, ...options });\n }\n}\n\nregister('adapter', 'NodeAdapter', NodeAdapter);\n","import Adapter from '../adapter.js';\nimport { register } from '../registry.js';\n\nexport default class EmberJsAdapter extends Adapter {}\n\nregister('adapter', 'EmberJsAdapter', EmberJsAdapter);\n","import Store from './store.js';\nimport Resource, { isResource } from './resource.js';\nimport { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization, Fleet } from './resources.js';\nimport { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter } from './adapters.js';\nimport { isNodeEnvironment, detectAdapter, isLatitude, isLongitude, Point, GoogleAddress, StoreActions } from './utils/index.js';\nimport Collection, { createCollection } from './utils/collection.js';\nimport { pluralize, singularize, classify, dasherize, camelize } from './utils/string.js';\nimport { extendStoreActions, createStoreActions } from './utils/store-actions.js';\nimport { orderActions } from './resources/order.js';\nimport { driverActions } from './resources/driver.js';\nimport { organizationActions } from './resources/organization.js';\nimport Resolver, { lookup, resolve, resolveResource } from './resolver.js';\nimport { register, createResource, createStore } from './registry.js';\n\n/**\n * // instance\n * const fleetbase = new Fleetbase();\n *\n * const contact = fleetbase.contacts.create({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * constact.update({ name: 'Hollywood Ron' });\n *\n * // export\n * import { Contact } from '@fleetbase/sdk';\n *\n * const contact = new Contact({\n * \t\tname: 'Ron',\n * \t\tphone: '+65 9999 8888'\n * });\n *\n * contact.save();\n */\nexport default class Fleetbase {\n /**\n * Builds an instance of the Fleetbase SDK\n *\n * @param {String} publicKey The public key issued\n * @param {Object} config The version of resource to access\n * @param {Boolean} debug Debug mode for SDK\n * @return {Fleetbase} Instance\n */\n constructor(publicKey, config = {}, debug = false) {\n this.version = config.version ?? 'v1';\n this.options = {\n version: this.version,\n host: config.host ?? 'https://api.fleetbase.io',\n namespace: config.namespace ?? this.version,\n debug,\n publicKey,\n };\n\n if (typeof publicKey !== 'string' || publicKey.length === 0) {\n throw new Error('⚠️ Invalid public key given to Fleetbase SDK');\n }\n\n if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) {\n throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!');\n }\n\n this.adapter = config.adapter || detectAdapter(this.options);\n\n this.orders = new Store('order', this.adapter).extendActions(orderActions);\n this.entities = new Store('entity', this.adapter);\n this.places = new Store('place', this.adapter);\n this.drivers = new Store('driver', this.adapter).extendActions(driverActions);\n this.vehicles = new Store('vehicle', this.adapter);\n this.vendors = new Store('vendor', this.adapter);\n this.contacts = new Store('contact', this.adapter);\n this.serviceAreas = new Store('service-area', this.adapter);\n this.zones = new Store('zone', this.adapter);\n this.fleets = new Store('fleet', this.adapter);\n this.organizations = new Store('organization', this.adapter).extendActions(organizationActions);\n }\n\n static newInstance() {\n return new Fleetbase(...arguments);\n }\n\n setAdapter(adapter) {\n this.adapter = adapter;\n }\n\n getAdapter() {\n return this.adapter;\n }\n}\n\nexport {\n Store,\n Resource,\n Contact,\n Driver,\n Entity,\n Order,\n Payload,\n Place,\n TrackingStatus,\n Vehicle,\n Vendor,\n Waypoint,\n Zone,\n ServiceArea,\n ServiceRate,\n ServiceQuote,\n Organization,\n Fleet,\n BrowserAdapter,\n NodeAdapter,\n EmberJsAdapter,\n Adapter,\n detectAdapter,\n isNodeEnvironment,\n isLatitude,\n isLongitude,\n Point,\n isResource,\n GoogleAddress,\n Collection,\n createCollection,\n StoreActions,\n extendStoreActions,\n createStoreActions,\n pluralize,\n singularize,\n classify,\n dasherize,\n camelize,\n lookup,\n register,\n createResource,\n Resolver,\n resolve,\n resolveResource,\n createStore,\n};\n","export function isLatitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 90;\n}\n\nexport default isLatitude;\n","export function isLongitude(coordinate) {\n return isFinite(coordinate) && Math.abs(coordinate) <= 180 && Math.abs(coordinate) >= 90;\n}\n\nexport default isLongitude;\n"],"names":["String","string","chain","arguments","length","undefined","_classCallCheck","_defineProperty","this","RegExp","str","_createClass","key","value","rules","skip","override","indexOf","toLowerCase","x","match","replace","plural","applyRules","pluralRules","uncountableWords","singular","singularRules","lowFirstLetter","str_path","split","i","str_arr","charAt","toUpperCase","substring","join","first","last","slice","uppercase","underbarPrefix","idSuffix","underbar","capitalize","spaceOrUnderbar","allFirstUpper","camelize","underscore","d","nonTitlecasedWords","originalChain","pluralize","concat","trim","singularize","dropIdUbar","demodulize","parseInt","isNaN","ltd","ld","suf","argz","Object","values","instance","method","shift","apply","Array","prototype","call","invoke","_toConsumableArray","classify","registry","resources","adapters","storse","actions","register","type","className","cls","create","Error","ResourceClass","_len","params","_key","_construct","createStore","Resolver","lookup","_len2","_key2","resolveResource","_len4","_key4","isArray","CHUNK_SIZE","array","start","deleteCount","items","splice","chunk","isCollection","identityFunction","item","mixed","Collection","objectAt","index","iter","Boolean","findIndex","predicate","startAt","len","val","withNaNCheck","insertAt","createCollection","_Array","_assertThisInitialized","_callSuper","_inherits","get","indexes","_this2","map","idx","object","callback","bind","target","cb","methodName","args","ret","forEach","_item$methodName","push","filter","sortKeys","sort","a","b","_step","_iterator","_createForOfIteratorHelper","s","n","done","propA","propB","compareValue","compare","err","e","f","seen","Set","getter","has","add","uniqBy","includes","removeAt","obj","objects","toArray","reverse","clear","loc","removeObject","pushObject","_this3","addObject","_wrapNativeSuper","isEmpty","none","size","objectType","_typeof","isNodeEnvironment","_process","_process$release","_window","process","env","release","name","search","window","navigator","product","detectAdapter","options","GoogleAddress","place","geometry","components","parseComponents","attributes","parseProperties","_this$place","address_components","reduce","acc","data","types","_this$geometry","streetNumber","streetName","coordinates","location","city","or","county","stateShort","stateLong","countryShort","country","countryLong","postalCode","address","pkey","short","short_name","long_name","_objectSpread","Point","latitude","longitude","coorindates","lat","lng","serialize","json","_json$coordinates","_slicedToArray","getResolved","func","path","resolved","current","isObject","isFunction","pathArray","newPath","set","iterations","extendStoreActions","store","StoreActions","extend","element","extendActions","binding","action","fn","isResource","Resource","adapter","resource","dirtyAttributes","changes","isLoading","isSaving","isDestroying","isReloading","version","setAdapter","_this$options","onAfterFetch","syncAttributes","getAttribute","_this","mergeAttributes","setFlags","then","response","update","id","destroy","_this4","findRecord","reset","flags","state","validFlags","flag","attribues","getAttributes","onlyDirty","savedirty","dirtyAttributeKeys","keys","isAttributeFilled","Date","hasAttributes","isNew","isLoaded","_this$attributes","_this5","property","_this$dirtyAttributes","_this$attributes$prop","setAttributes","previousValue","changedAt","setAttribute","attribute","_this$attributes2","defaultValue","_this$attributes3","properties","attributeKeys","every","prop","hasAttribute","_this6","_value","_value2","_this$attributes4","modelAttributes","Store","namespace","storage","resourceInstance","serialized","afterFetch","deposit","_create","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_args","wrap","_context","prev","next","post","sent","abrupt","stop","_update","_callee2","_args2","_context2","put","_x","_findRecord","_callee3","_args3","_context3","_x2","_findAll","_callee4","_args4","_context4","_query2","_callee5","_query","_args5","_context5","query","_queryRecord","_callee6","_args6","_context6","single","_destroy","_callee7","record","_args7","_context7","_x3","orderActions","getDistanceAndTime","getNextActivity","dispatch","updateActivity","setDestination","destinationId","captureQrCode","subjectId","captureSignature","complete","cancel","Order","_Resource","isStarted","isCanceled","isCompleted","Payload","entity","entities","dropoff","pickup","waypoints","Entity","Place","_this$getAttribute","_this$getAttribute2","owner","googleAddress","_googleAddress$getAtt2","street1","street2","province","postal_code","neighborhood","district","building","phone","security_access_code","Waypoint","_Place","TrackingStatus","Vehicle","organizationActions","Organization","serializeOrganizations","organizationJson","driverActions","login","identity","password","test","isPhone","verifyCode","code","track","listOrganizations","switchOrganization","currentOrganization","retrieve","syncDevice","Driver","organizationId","Vendor","Contact","Zone","ServiceArea","ServiceRate","ServiceQuote","Fleet","Adapter","config","host","headers","BrowserAdapter","_Adapter","setHeaders","Authorization","publicKey","Promise","resolve","reject","statusText","status","ok","fetch","url","mode","Headers","parseJSON","errors","error","urlParams","URLSearchParams","toString","request","body","JSON","stringify","thisArg","cache","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isNumber","isPlainObject","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","isReadableStream","isRequest","isResponse","isHeaders","l","_ref$allOwnKeys","allOwnKeys","getOwnPropertyNames","findKey","_global","globalThis","self","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","defineProperties","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","Math","random","addEventListener","_ref5","source","setTimeout","asap","queueMicrotask","nextTick","utils$1","isBuffer","constructor","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","result","assignValue","targetKey","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","assign","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","position","lastIndex","arr","forEachEntry","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","m","p1","p2","noop","toFiniteNumber","Number","isFinite","generateString","alphabet","isSpecCompliantForm","toJSONObject","stack","visit","reducedValue","isThenable","AxiosError","message","captureStackTrace","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","TypeError","metaTokens","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","some","isFlatArray","el","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","buildURL","_encode","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager","handlers","fulfilled","rejected","synchronous","runWhen","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","href","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","rawValue","parser","parse","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","rawHeaders","parsed","line","parseHeaders","_step$value","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","targets","asStrings","_ref","_ref2","computed","accessors","defineAccessor","accessorName","arg1","arg2","arg3","configurable","buildAccessors","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","floor","accessor","_ref3","mapped","headerValue","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","unescape","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","abort","subscribe","aborted","send","composeSignals","signals","controller","AbortController","reason","streamChunk","chunkSize","pos","end","byteLength","readBytes","_wrapAsyncGenerator","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_asyncIterator","readStream","_awaitAsyncGenerator","delegateYield","_asyncGeneratorDelegate","t1","finish","stream","reader","_yield$_awaitAsyncGen","asyncIterator","getReader","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_yield$iterator$next","_done","loadedBytes","close","enqueue","t0","highWaterMark","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","resolveBodyLength","getContentLength","_x4","_ref4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","toAbortSignal","credentials","t2","_x5","knownAdapters","http","xhr","fetchAdapter","renderReason","isResolvedHandle","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validators$1","validator","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","onFulfilled","onRejected","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","c","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","Cancel","all","promises","spread","isAxiosError","payload","formToJSON","getAdapter","NodeAdapter","axiosInstance","use","EmberJsAdapter","Fleetbase","_config$version","_config$host","_config$namespace","debug","startsWith","orders","places","drivers","vehicles","vendors","contacts","serviceAreas","zones","fleets","organizations","coordinate","abs","_len3","_key3"],"mappings":"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","x_google_ignoreList":[34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83]} \ No newline at end of file diff --git a/docs/api-source-baseline.md b/docs/api-source-baseline.md new file mode 100644 index 0000000..f48777f --- /dev/null +++ b/docs/api-source-baseline.md @@ -0,0 +1,38 @@ +# API source baseline + +The v2 SDK contract was checked against these authoritative snapshots on 2026-08-31: + +| Source | Commit | Purpose | +| ----------------------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------- | +| [fleetbase/postman](https://github.com/fleetbase/postman) | `9a7d4d898b4e74d735d93c78d67d4d5013c1a28b` | Public request URLs, verbs, parameters, and example workflows | +| [fleetbase/core-api](https://github.com/fleetbase/core-api) | `b7691c06ffdfe8f8874352e746aa8e523d5e3531` | Core authentication, organization, and API resource behavior | +| [fleetbase/fleetops](https://github.com/fleetbase/fleetops) | `a9131daeb1a23ed4b0046dd2d7b632fb100bfba0` | Fleet-Ops routes, controllers, request validation, and serialized resources | +| Published `@fleetbase/sdk@1.2.13` | npm tarball SHA-1 `18796779c03c3e136e22a076244a706b036b8a59` | Existing runtime export and prototype contract | +| `dev-v1.2.14` candidate | `69ace0808f8738bc4dc8b0930452c0d793217f8b` | Pending `serviceQuotes` store and service-quote action contract | + +The executable snapshots are in [`contracts/v1.2.13.json`](../contracts/v1.2.13.json) and [`contracts/v1.2.14-candidate.json`](../contracts/v1.2.14-candidate.json). + +## Confirmed action mappings + +| SDK action | HTTP contract | +| ----------------------------- | ----------------------------------------------------------- | +| `orders.getDistanceAndTime` | `GET /v1/orders/{id}/distance-and-time` | +| `orders.dispatch` | `POST` or `PATCH /v1/orders/{id}/dispatch` | +| `orders.start` | `POST /v1/orders/{id}/start` | +| `orders.updateActivity` | `POST` or `PATCH /v1/orders/{id}/update-activity` | +| `orders.setDestination` | `POST` or `PATCH /v1/orders/{id}/set-destination/{placeId}` | +| `orders.captureQrCode` | `POST /v1/orders/{id}/capture-qr/{subjectId?}` | +| `orders.captureSignature` | `POST /v1/orders/{id}/capture-signature/{subjectId?}` | +| `orders.cancel` | `DELETE /v1/orders/{id}/cancel` | +| `drivers.login` by phone | `POST /v1/drivers/login-with-sms` | +| `drivers.verifyCode` | `POST /v1/drivers/verify-code` | +| `drivers.track` | `POST`, `PUT`, or `PATCH /v1/drivers/{id}/track` | +| `drivers.syncDevice` | `POST /v1/drivers/{id}/register-device` | +| `drivers.listOrganizations` | `GET /v1/drivers/{id}/organizations` | +| `drivers.switchOrganization` | `POST /v1/drivers/{id}/switch-organization` | +| `drivers.currentOrganization` | `GET /v1/drivers/{id}/current-organization` | +| `serviceQuotes.fromPayload` | `GET /v1/service-quotes?payload={payloadId}` | + +## Known upstream drift + +The v1.2.14 candidate added `serviceQuotes.fromPreliminary()`, which requests `GET /v1/service-quotes/preliminary`. The current Fleet-Ops public routes and Postman collection document query and retrieve operations at `/v1/service-quotes`, but not that preliminary subpath. V2 retains the method for SDK compatibility while treating live support as unverified. It must not be presented as a confirmed current endpoint until the server route or public documentation establishes the contract. diff --git a/docs/compatibility-decisions.md b/docs/compatibility-decisions.md new file mode 100644 index 0000000..cbcdb20 --- /dev/null +++ b/docs/compatibility-decisions.md @@ -0,0 +1,28 @@ +# Compatibility decisions + +The v2 implementation preserves the published v1.2.13 root exports, client stores, and prototype method names through executable contract snapshots. The pending v1.2.14 `serviceQuotes` addition is also included. + +## Compatible fixes + +| Legacy behavior | V2 decision | +| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | +| `require('@fleetbase/sdk')` resolves an ambiguous module-scoped `.js` CommonJS file | Emit a true `.cjs` entry with matching `.d.cts` declarations. | +| `Resource.empty()` writes to misspelled `attribues` | Clear `attributes`. | +| `save({ onlyDirty: true })` calls missing `savedirty()` | Delegate to the existing `saveDirty()` API. | +| Rejected resource requests leave loading/saving/reloading/destroying flags set | Reset flags in `finally` blocks. | +| `Fleetbase.setAdapter()` leaves existing stores on the previous adapter | Update all stores while preserving the legacy `undefined` return value. | +| `Store.destroy()` can lose the caller's third adapter-options argument | Preserve the legacy three-argument adapter call and forward options. | +| Valid longitudes between -90 and 90 are rejected | Validate the standard -180 through 180 range. | +| Array-subclass operations can construct sparse collections for a single numeric item | Use normal item semantics and a native Array species for derived operations. | +| Browser responses assume every body is JSON | Support JSON, text, and empty responses while retaining `parseJSON()` for direct consumers. | +| Browser and Node errors lose status and response context | Reject with `FleetbaseError`, which remains an `Error` and adds status, code, request ID, response, and cause. | +| Browser code attempts to set a forbidden `User-Agent` header | Do not set it in browser requests; retain the Node header. | +| React Native is classified as Node | Select the standards-based browser/fetch adapter. | + +## Preserved quirks + +- Resource instances retain an own `changes` history object, which shadows the legacy `Resource.prototype.changes()` function. The prototype name remains present for reflection compatibility. +- Browser adapter `request(path, method, { body, ...options })` continues to accept the legacy direct-request shape in addition to the typed internal data form. +- The `serviceQuotes.fromPreliminary()` candidate API remains available even though the current authoritative server sources do not confirm its route. + +Any additional behavior change requires a failing regression test and an entry in this file. diff --git a/docs/main-branch-migration.md b/docs/main-branch-migration.md new file mode 100644 index 0000000..ecd5677 --- /dev/null +++ b/docs/main-branch-migration.md @@ -0,0 +1,25 @@ +# Default branch migration: `master` to `main` + +This is an owner-operated release step. PR #33 prepares repository files for `main`, but does not change the GitHub default branch or publish a package. + +## Preconditions + +- PR #33 and every required check are green and reviewed. +- Branch protection for `main` is configured with the `CI success` and CodeQL checks required. +- The protected `npm` environment exists and permits only reviewed release runs. +- npm trusted publishing is configured for `.github/workflows/release.yml` on `main`. +- Open pull requests and external automation have been inventoried for hard-coded `master` references. + +## Owner procedure + +1. Merge the reviewed modernization PR without publishing. +2. Rename the default branch in GitHub from `master` to `main` (or create `main` from the reviewed commit and make it default). +3. Confirm branch protection, rulesets, environments, webhooks, Pages settings, and installed apps target `main`. +4. Update local clones with GitHub's displayed branch-migration commands. +5. Confirm README badges, Codecov, Changesets, Dependabot, CI, and release automation resolve `main`. +6. Keep a temporary compatibility branch or redirect only as long as downstream automation requires it, then remove it in a separately reviewed owner action. +7. Run CI manually on `main`; do not merge the Changesets release PR until the exact candidate artifact and consumer matrix pass. + +## Rollback + +If repository automation or required consumers fail, restore the previous default branch in GitHub, restore its ruleset, and investigate on a dedicated branch. Default-branch rollback does not require or authorize an npm rollback. diff --git a/eslint.config.js b/eslint.config.js index da1e29f..ebd0e51 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,34 @@ +import eslint from '@eslint/js'; import globals from 'globals'; -import pluginJs from '@eslint/js'; +import tseslint from 'typescript-eslint'; -/** @type {import('eslint').Linter.Config[]} */ -export default [{ languageOptions: { globals: { ...globals.browser, ...globals.node } } }, pluginJs.configs.recommended]; +export default tseslint.config( + { ignores: ['coverage/**', 'dist/**', '.types/**', 'fixtures/**'] }, + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ + ...config, + files: ['src/**/*.ts', 'tests/**/*.ts', 'vitest.config.ts'], + })), + { + files: ['src/**/*.ts', 'tests/**/*.ts', 'vitest.config.ts'], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + globals: { ...globals.browser, ...globals.node }, + }, + rules: { + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + '@typescript-eslint/unbound-method': 'off', + }, + }, + { + files: ['rollup.config.js', 'scripts/**/*.mjs'], + languageOptions: { globals: globals.node }, + } +); diff --git a/fixtures/types/index.ts b/fixtures/types/index.ts new file mode 100644 index 0000000..5d1780e --- /dev/null +++ b/fixtures/types/index.ts @@ -0,0 +1,31 @@ +import Fleetbase, { + BrowserAdapter, + Collection, + FleetbaseError, + NodeAdapter, + Order, + Place, + Resource, + Store, + type Adapter, + type AdapterOptions, + type ResourceAttributes, +} from '@fleetbase/sdk'; + +const options: AdapterOptions = { host: 'https://api.example.test', namespace: 'v1', publicKey: 'test-token' }; +const adapter: Adapter = new BrowserAdapter(options); +const client = new Fleetbase('test-token', options); +client.setAdapter(adapter); + +const nodeAdapter: Adapter = new NodeAdapter(options); +const store: Store = client.orders; +const attributes: ResourceAttributes = { id: 'order_123', status: 'created' }; +const order: Promise = store.create(attributes); +const place: Promise = client.places.create({ name: 'Warehouse' }); +const resources: Collection = new Collection(new Order(attributes), new Place({ name: 'Warehouse' })); + +void nodeAdapter; +void order; +void place; +void resources; +void FleetbaseError; diff --git a/fixtures/types/package.json b/fixtures/types/package.json new file mode 100644 index 0000000..c0da0d6 --- /dev/null +++ b/fixtures/types/package.json @@ -0,0 +1,5 @@ +{ + "name": "@fleetbase/sdk-type-fixture", + "private": true, + "type": "module" +} diff --git a/fixtures/types/tsconfig.base.json b/fixtures/types/tsconfig.base.json new file mode 100644 index 0000000..5d85d33 --- /dev/null +++ b/fixtures/types/tsconfig.base.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "strict": true, + "noEmit": true, + "target": "ES2022", + "lib": ["ES2022", "DOM"], + "skipLibCheck": false + }, + "include": ["index.ts"] +} diff --git a/fixtures/types/tsconfig.bundler.json b/fixtures/types/tsconfig.bundler.json new file mode 100644 index 0000000..345acd3 --- /dev/null +++ b/fixtures/types/tsconfig.bundler.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler" + } +} diff --git a/fixtures/types/tsconfig.node16.json b/fixtures/types/tsconfig.node16.json new file mode 100644 index 0000000..93369dd --- /dev/null +++ b/fixtures/types/tsconfig.node16.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "Node16", + "moduleResolution": "Node16" + } +} diff --git a/fixtures/types/tsconfig.nodenext.json b/fixtures/types/tsconfig.nodenext.json new file mode 100644 index 0000000..a5a2bbd --- /dev/null +++ b/fixtures/types/tsconfig.nodenext.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext" + } +} diff --git a/package.json b/package.json index 4584cf9..bafb42d 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,92 @@ { "name": "@fleetbase/sdk", - "version": "1.2.13", - "description": "Fleetbase JS & Node SDK", - "repository": "https://github.com/fleetbase/fleetbase-js", - "license": "AGPL-3.0-or-later", - "author": "Ronald A. Richardson (https://ron.dev)", + "version": "2.0.0-next.0", + "description": "Official JavaScript and TypeScript SDK for the Fleetbase API", "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist", + "README.md", + "LICENSE.md", + "CHANGELOG.md" + ], + "sideEffects": false, + "engines": { + "node": ">=22.13.0" + }, + "packageManager": "pnpm@11.24.0", + "publishConfig": { + "access": "public", + "provenance": true, + "tag": "next" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/fleetbase/fleetbase-js.git" + }, + "homepage": "https://github.com/fleetbase/fleetbase-js#readme", + "bugs": { + "url": "https://github.com/fleetbase/fleetbase-js/issues" + }, + "license": "AGPL-3.0-or-later", + "author": "Fleetbase", "keywords": [ + "fleetbase", "logistics", "delivery", - "fleet" + "fleet", + "sdk", + "typescript" ], - "main": "dist/cjs/fleetbase.js", - "module": "dist/esm/fleetbase.js", - "exports": { - ".": { - "import": "./dist/esm/fleetbase.js", - "require": "./dist/cjs/fleetbase.js" - } - }, "scripts": { - "prebuild": "npm run lint", - "lint": "eslint src", - "lint:fix": "eslint src --fix", - "lint:tests": "eslint tests", - "bundle": "rollup -c", + "clean": "node scripts/clean.mjs", + "build": "pnpm run clean && tsc -p tsconfig.types.json && rollup -c", "dev": "rollup -c -w", - "test": "mocha -r @babel/register -r dotenv/config 'tests/*.test.js' --timeout 10000", - "format": "prettier . --write" - }, - "dependencies": { - "@babel/runtime": "^7.26.0", - "axios": "^1.7.0" + "format": "prettier . --write", + "format:check": "prettier . --check", + "lint": "eslint .", + "typecheck": "tsc -p tsconfig.json --noEmit", + "test": "vitest run", + "test:coverage": "vitest run --coverage", + "package:check": "publint && attw --pack . && node scripts/verify-package.mjs", + "verify": "pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm run test:coverage && pnpm run build && pnpm run package:check", + "changeset": "changeset", + "version-packages": "changeset version", + "release": "changeset publish", + "prepublishOnly": "pnpm run verify" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/node": "^7.26.0", - "@babel/plugin-proposal-decorators": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/register": "^7.25.9", - "@eslint/js": "^9.17.0", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-commonjs": "^28.0.2", - "@rollup/plugin-eslint": "^9.0.5", - "@rollup/plugin-node-resolve": "^16.0.0", - "@rollup/plugin-terser": "^0.4.4", - "chai": "^5.1.2", - "dotenv": "^16.4.7", - "eslint": "^9.17.0", - "globals": "^15.14.0", - "mocha": "^11.0.1", - "prettier": "3.4.2", - "rollup": "^4.29.1" + "@arethetypeswrong/cli": "^0.18.5", + "@changesets/cli": "^3.0.1", + "@eslint/js": "^10.0.0", + "@rollup/plugin-typescript": "^12.3.0", + "@vitest/coverage-v8": "^4.1.11", + "eslint": "^10.0.0", + "globals": "^16.4.0", + "prettier": "^3.9.0", + "publint": "^0.3.24", + "rollup": "^4.63.0", + "rollup-plugin-dts": "^6.5.1", + "terser": "^5.46.0", + "tslib": "^2.8.1", + "typescript": "^6.0.2", + "typescript-eslint": "^8.68.0", + "vitest": "^4.1.11" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cbdfa4..1103cd4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4544 +1,2881 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false -importers: +overrides: + flatted: '>=3.4.2' + picomatch@>=4.0.0 <4.0.4: '>=4.0.4' + serialize-javascript: '>=7.0.3' - .: - dependencies: - '@babel/runtime': - specifier: ^7.26.0 - version: 7.26.0 - axios: - specifier: ^1.7.0 - version: 1.7.9 - devDependencies: - '@babel/core': - specifier: ^7.26.0 - version: 7.26.0 - '@babel/node': - specifier: ^7.26.0 - version: 7.26.0(@babel/core@7.26.0) - '@babel/plugin-proposal-decorators': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.0) - '@babel/preset-env': - specifier: ^7.26.0 - version: 7.26.0(@babel/core@7.26.0) - '@babel/register': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.0) - '@eslint/js': - specifier: ^9.17.0 - version: 9.17.0 - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.26.0)(rollup@4.29.1) - '@rollup/plugin-commonjs': - specifier: ^28.0.2 - version: 28.0.2(rollup@4.29.1) - '@rollup/plugin-eslint': - specifier: ^9.0.5 - version: 9.0.5(rollup@4.29.1) - '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.0(rollup@4.29.1) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.29.1) - chai: - specifier: ^5.1.2 - version: 5.1.2 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - eslint: - specifier: ^9.17.0 - version: 9.17.0 - globals: - specifier: ^15.14.0 - version: 15.14.0 - mocha: - specifier: ^11.0.1 - version: 11.0.1 - prettier: - specifier: 3.4.2 - version: 3.4.2 - rollup: - specifier: ^4.29.1 - version: 4.29.1 +importers: + .: + devDependencies: + '@arethetypeswrong/cli': + specifier: ^0.18.5 + version: 0.18.5 + '@changesets/cli': + specifier: ^3.0.1 + version: 3.0.1 + '@eslint/js': + specifier: ^10.0.0 + version: 10.0.1(eslint@10.9.1(supports-color@8.1.1)) + '@rollup/plugin-typescript': + specifier: ^12.3.0 + version: 12.3.0(rollup@4.63.1)(tslib@2.8.1)(typescript@6.0.3) + '@vitest/coverage-v8': + specifier: ^4.1.11 + version: 4.1.11(vitest@4.1.11) + eslint: + specifier: ^10.0.0 + version: 10.9.1(supports-color@8.1.1) + globals: + specifier: ^16.4.0 + version: 16.5.0 + prettier: + specifier: ^3.9.0 + version: 3.9.6 + publint: + specifier: ^0.3.24 + version: 0.3.24 + rollup: + specifier: ^4.63.0 + version: 4.63.1 + rollup-plugin-dts: + specifier: ^6.5.1 + version: 6.5.1(rollup@4.63.1)(typescript@6.0.3) + terser: + specifier: ^5.46.0 + version: 5.51.2 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + typescript: + specifier: ^6.0.2 + version: 6.0.3 + typescript-eslint: + specifier: ^8.68.0 + version: 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + vitest: + specifier: ^4.1.11 + version: 4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.2(terser@5.51.2)(yaml@2.9.0)) packages: + '@andrewbranch/untar.js@1.0.4': + resolution: { integrity: sha512-pVXSwPsLuw8IGLo2Di0EaOfsk+ntVvpkk942J/sHYIkwvtKUakEcPh7HBgZ6tuimgzKSEHgCvO4XgQ05DEbwDw== } - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} - engines: {node: '>=6.9.0'} - - '@babel/node@7.26.0': - resolution: {integrity: sha512-5ASMjh42hbnqyCOK68Q5chh1jKAqn91IswFTN+niwt4FLABhEWCT1tEuuo6mlNQ4WG/oFQLvJ71PaHAKtWtJyA==} - engines: {node: '>=6.9.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-decorators@7.25.9': - resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-decorators@7.25.9': - resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.25.9': - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.25.9': - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.26.3': - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.25.9': - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.25.9': - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.25.9': - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.26.0': - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/register@7.25.9': - resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} - engines: {node: '>=6.9.0'} - - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@9.17.0': - resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} - engines: {node: '>=18.18'} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@rollup/plugin-babel@6.0.4': - resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - rollup: - optional: true - - '@rollup/plugin-commonjs@28.0.2': - resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-eslint@9.0.5': - resolution: {integrity: sha512-C4nh0sSeJuxVW5u5tDX+dCMjKcNfHm4hS+zeUVh1si7gttnhgGbrmPkUxIX7iZgYABwdEh/ewyMbZB+WXjSJdA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@arethetypeswrong/cli@0.18.5': + resolution: { integrity: sha512-gM+8vRsQOD/Uc7EnBedUhkG5OCsDWE4uoak5QvomGpMpaky0Eh41p04nIMgrWb8EOmqZUJGc6zz9hsP6E56R7g== } + engines: { node: '>=20' } + hasBin: true + + '@arethetypeswrong/core@0.18.5': + resolution: { integrity: sha512-9ytjzGwxjm9Uz7I9avfbt5vlQt6uk9uRRESzJjqrznl6WKvI6dwYTo+vJ3U02Wrq/mR3iql/PzhvHhKdJIAjDQ== } + engines: { node: '>=20' } + + '@babel/code-frame@8.0.0': + resolution: { integrity: sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-string-parser@7.29.7': + resolution: { integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-identifier@7.29.7': + resolution: { integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-identifier@8.0.4': + resolution: { integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/parser@7.29.8': + resolution: { integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA== } + engines: { node: '>=6.0.0' } + hasBin: true + + '@babel/types@7.29.8': + resolution: { integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== } + engines: { node: '>=6.9.0' } + + '@bcoe/v8-coverage@1.0.2': + resolution: { integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== } + engines: { node: '>=18' } + + '@braidai/lang@1.1.2': + resolution: { integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA== } + + '@changesets/apply-release-plan@8.0.0': + resolution: { integrity: sha512-kUd2pbf1w5/AYmBMb0Tt+rkIPCjFJdT0SZMrkOjJT/WV/QbtmvkyB5jkV0oaNPheavprZk+SfUiozUti7TIL2w== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/assemble-release-plan@7.0.0': + resolution: { integrity: sha512-oEW8BxdA604kGGtDSCiHr5w9Tv4UWe9I2k61IBNZzCOE1kbYaJj4v+lFQNgcEZFkUc2pV/+hASErGDvpJOZCTg== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/changelog-git@1.0.0': + resolution: { integrity: sha512-3Dst2Ime2Op5nd4XmWJLPIgp11ZFqJqSkVug9izK6TDcIV4YlhPS4ECbEVR+eGI0bk0r1ItogD4j2Oli87bJrA== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/cli@3.0.1': + resolution: { integrity: sha512-3IVpRSgiKDj2aRbBHKtWTXSRH2/iR3bWxau9iQUoEsZjDhRIj9nhl90k7FWMxZAJvLgJBbgMq8+qS0xQsenYsQ== } + engines: { node: ^22.11 || ^24 || >=26, npm: '>=10.9.0', pnpm: '>=10.0.0', yarn: '>=4.5.2' } + hasBin: true + + '@changesets/config@4.0.0': + resolution: { integrity: sha512-mw95/YrkOuhZZxfnVAA4bSXOFUi+KlhzOBTM8C4x777NhUU6HWIl9Z+K+nME+E4PVsv5NQVQwTfiHihAS1A/ow== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/errors@1.0.0': + resolution: { integrity: sha512-ElN/mEzn6zmETgjwf5MclCMa9ef59sAR0lfO8VSYIsiRvbC2FbLB/92EoYw10Sl0kGixxHFiJZUSv7dA+YpR8g== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/format@0.1.2': + resolution: { integrity: sha512-Caez5XtNXCFS/G5bwyav3wuXL0tMxVd2ZGbaumWbzN08tyzO21asCw7JZhNtVsAZDCvDRUzZN+Iit9SyRITSYA== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/get-dependents-graph@3.0.0': + resolution: { integrity: sha512-ji/t5wFA1zREKXRUePE6Qi+Qu2UgxCeSSGQrphezwvQZrp49B7sJ+8+wvM0tA7zPeSxYKCojDy3WWgrl+s+awg== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/git@4.0.0': + resolution: { integrity: sha512-uIEswpPUgzBBqrC0qg13byNaPorzhf05LE2T+gRizEKCXvMsJC6NPJp5iNDSV/gYj4Viqh09UiOF5E7XWeH5lQ== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/parse@1.0.0': + resolution: { integrity: sha512-P0iaMb9p9CRYZiTgAllEIF9AUMQHIy1G72tKlcIqJp61icZSsKQNiOPdxAMZG8m/DvZwt/oz5xEbTpike//dWg== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/pre@3.0.0': + resolution: { integrity: sha512-Zm/6YliV/a2oeWTqHJf6KxLrQwgcK1i/BRDl2m0EKZvbnxV5fG9QRhwJJGshjsZTUTS6dkfURQ2K6aAvgNw/3Q== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/read@1.0.0': + resolution: { integrity: sha512-8TdE2PwG6yArPt5Ozej83Z6iHz1G8BDBKvIEKZ455MccR4K3GNbLR2XqjBxa+5yLFnEd3xAOPXYboBg1pt8stQ== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/should-skip-package@1.0.0': + resolution: { integrity: sha512-pwqoJmbONn1XgXmZXPEExgAaT+HdZLjALFTDgIm+PnS5KeO2nLtzA2/Q+4aMFY14kFMuXKG30MObhvDzWgzDgg== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/types@7.0.0': + resolution: { integrity: sha512-c5GoiQyt3pxiXjrWSNoP8/GRf4kG+VnKzovx1OQM8dYYALlSwgedmkPmJ+ZqGxqwg9D3Bkj85Uo4KLd5BN3A0w== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@changesets/write@1.0.1': + resolution: { integrity: sha512-q/ThtP9gcnEP6xlv7LrY26C2mHqdGBti/MmOVngt/M/oIGYkssmQGxPK9WzBNt2juVcH/vml2WQ+ra8LXYOTaA== } + engines: { node: ^22.11 || ^24 || >=26 } + + '@clack/core@1.4.3': + resolution: { integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ== } + engines: { node: '>= 20.12.0' } - '@rollup/plugin-terser@0.4.4': - resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@clack/prompts@1.7.0': + resolution: { integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A== } + engines: { node: '>= 20.12.0' } - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@colors/colors@1.5.0': + resolution: { integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== } + engines: { node: '>=0.1.90' } - '@rollup/rollup-android-arm-eabi@4.29.1': - resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.29.1': - resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.29.1': - resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.29.1': - resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.29.1': - resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.29.1': - resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': - resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.29.1': - resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.29.1': - resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.29.1': - resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': - resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': - resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.29.1': - resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.29.1': - resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.29.1': - resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.29.1': - resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.29.1': - resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.29.1': - resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.29.1': - resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} - cpu: [x64] - os: [win32] - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - - '@ungap/structured-clone@1.2.1': - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + '@eslint-community/eslint-utils@4.10.1': + resolution: { integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + '@eslint-community/regexpp@4.12.2': + resolution: { integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + '@eslint/config-array@0.23.5': + resolution: { integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + '@eslint/config-helpers@0.7.0': + resolution: { integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + '@eslint/core@1.2.1': + resolution: { integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - array.prototype.reduce@1.0.7: - resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} - engines: {node: '>= 0.4'} + '@eslint/js@10.0.1': + resolution: { integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.5': + resolution: { integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + '@eslint/plugin-kit@0.7.2': + resolution: { integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + '@humanfs/core@0.19.1': + resolution: { integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== } + engines: { node: '>=18.18.0' } + + '@humanfs/node@0.16.6': + resolution: { integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== } + engines: { node: '>=18.18.0' } + + '@humanwhocodes/module-importer@1.0.1': + resolution: { integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== } + engines: { node: '>=12.22' } + + '@humanwhocodes/retry@0.3.1': + resolution: { integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== } + engines: { node: '>=18.18' } + + '@humanwhocodes/retry@0.4.3': + resolution: { integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== } + engines: { node: '>=18.18' } + + '@jridgewell/gen-mapping@0.3.8': + resolution: { integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== } + engines: { node: '>=6.0.0' } + + '@jridgewell/remapping@2.3.5': + resolution: { integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== } + + '@jridgewell/resolve-uri@3.1.2': + resolution: { integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== } + engines: { node: '>=6.0.0' } + + '@jridgewell/set-array@1.2.1': + resolution: { integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== } + engines: { node: '>=6.0.0' } + + '@jridgewell/source-map@0.3.6': + resolution: { integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== } + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: { integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== } + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: { integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw== } + + '@jridgewell/trace-mapping@0.3.25': + resolution: { integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== } + + '@jridgewell/trace-mapping@0.3.31': + resolution: { integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== } + + '@loaderkit/resolve@1.0.6': + resolution: { integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg== } + + '@manypkg/find-root@3.1.0': + resolution: { integrity: sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA== } + engines: { node: '>=20.0.0' } + + '@manypkg/get-packages@3.1.0': + resolution: { integrity: sha512-0TbBVyvPrP7xGYBI/cP8UP+yl/z+HtbTttAD7FMAJgn/kXOTwh5/60TsqP9ZYY710forNfyV0N8P/IE/ujGZJg== } + engines: { node: '>=20.0.0' } + + '@manypkg/tools@2.1.2': + resolution: { integrity: sha512-6QEf6yqFbETdwGITKq57aYoPfX/3K8XFNwsAlx0C1M7o8cb79sv1M3w+tWuWvIcSbNqrLF7OD7YpZMVVz335hQ== } + engines: { node: '>=20.0.0' } + + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: { integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ== } + engines: { node: ^22.20 || ^24.12 || >=25 } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-project/types@0.147.0': + resolution: { integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg== } + + '@pnpm/deps.graph-sequencer@1100.0.1': + resolution: { integrity: sha512-pOr5+q1fLYKwFN3LAJuGZEnfXDcQ73zqgDHMtGy+K+uIoUqyY+6MeDCWFwfu+4EFuq76I5EPFofoNAI+Bmmq4A== } + engines: { node: '>=22.13' } + + '@publint/pack@0.1.7': + resolution: { integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g== } + engines: { node: '>=18' } + + '@rolldown/binding-android-arm-eabi@1.2.6': + resolution: { integrity: sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.6': + resolution: { integrity: sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.6': + resolution: { integrity: sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.6': + resolution: { integrity: sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.6': + resolution: { integrity: sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.6': + resolution: { integrity: sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.6': + resolution: { integrity: sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.6': + resolution: { integrity: sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.6': + resolution: { integrity: sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.6': + resolution: { integrity: sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.6': + resolution: { integrity: sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.6': + resolution: { integrity: sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.6': + resolution: { integrity: sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.6': + resolution: { integrity: sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.6': + resolution: { integrity: sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: { integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw== } + + '@rollup/plugin-typescript@12.3.0': + resolution: { integrity: sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big== } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + + '@rollup/pluginutils@5.1.4': + resolution: { integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.63.1': + resolution: { integrity: sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ== } + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.63.1': + resolution: { integrity: sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ== } + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.63.1': + resolution: { integrity: sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q== } + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.63.1': + resolution: { integrity: sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg== } + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.63.1': + resolution: { integrity: sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw== } + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.63.1': + resolution: { integrity: sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q== } + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': + resolution: { integrity: sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw== } + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.63.1': + resolution: { integrity: sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw== } + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.63.1': + resolution: { integrity: sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg== } + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.63.1': + resolution: { integrity: sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw== } + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.63.1': + resolution: { integrity: sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ== } + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.63.1': + resolution: { integrity: sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA== } + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.63.1': + resolution: { integrity: sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA== } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.63.1': + resolution: { integrity: sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA== } + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.63.1': + resolution: { integrity: sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w== } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.63.1': + resolution: { integrity: sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ== } + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.63.1': + resolution: { integrity: sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A== } + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.63.1': + resolution: { integrity: sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w== } + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.63.1': + resolution: { integrity: sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow== } + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.63.1': + resolution: { integrity: sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA== } + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.63.1': + resolution: { integrity: sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw== } + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.63.1': + resolution: { integrity: sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg== } + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.63.1': + resolution: { integrity: sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg== } + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.63.1': + resolution: { integrity: sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg== } + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.63.1': + resolution: { integrity: sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w== } + cpu: [x64] + os: [win32] + + '@sindresorhus/is@4.6.0': + resolution: { integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== } + engines: { node: '>=10' } + + '@standard-schema/spec@1.1.0': + resolution: { integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== } + + '@types/chai@5.2.3': + resolution: { integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== } + + '@types/deep-eql@4.0.2': + resolution: { integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== } + + '@types/esrecurse@4.3.1': + resolution: { integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== } + + '@types/estree@1.0.6': + resolution: { integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== } + + '@types/estree@1.0.9': + resolution: { integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== } + + '@types/json-schema@7.0.15': + resolution: { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } + + '@typescript-eslint/eslint-plugin@8.68.0': + resolution: { integrity: sha512-WASHDpCm6qO5jj9g1a+8NiW5+GCkAyLReR56/4VruYmNgfUmqpxOfZ2Yfb8xGfJPWv5Qi6LSD8sXdces3vbp/Q== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + '@typescript-eslint/parser': ^8.68.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.68.0': + resolution: { integrity: sha512-fHq2VC1kpyYfvEcbiMjOpySY4WS7voEp89yAThrHRX5sm9j2lzYppCb2umFMEed4fWcyeLjHxrz0mpjNBaBxMQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.68.0': + resolution: { integrity: sha512-5GQtWZCXFcFYux955pvoS02WLc49pXNlvIxocKjS0clvwo3in1RdlzVKyiqQH9vE5AKWFLTaUgeQkOrTS+0Qxw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.68.0': + resolution: { integrity: sha512-T5eXpcaJNg8bhjHJ8Rjp68Vq/QBteYtTKY8TZqVNPaUbuz0f6jI9t6aDkylwvalpAB9XTTFeFOjrjXAZ3YvmVA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/tsconfig-utils@8.68.0': + resolution: { integrity: sha512-F7zrGQfiJHojPwi8vhxZQC1tWtJzvL74cK/nqri2lk8YUXvYaYwl263xOJ69jDWPUk1hmcdoayFwk9lX09npVw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.68.0': + resolution: { integrity: sha512-X77zqoY1EjeWGs/0JNxeaMfp5C5lIz4Tw8y66F1Ne8Faq6g424sBNYM6xBAqElfGZPLpWS+CZAp0DXyKDzWiHg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.68.0': + resolution: { integrity: sha512-9RnpsGJjrAllCMefGVVsImJM24YurhC0Q1h4UbvivtvOqXmR/vEJge2OoE++z9m6hyg8T1Q8t5SNT6tHSbrxcg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/typescript-estree@8.68.0': + resolution: { integrity: sha512-OKKsD0tYmoNiU5PW2zehO1yO56jYOm1ShYlxon/Z0SJNidAkdVg86eg9ruRuoXf8xfnuWZGbwDsStkoXbZtIIA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.68.0': + resolution: { integrity: sha512-PB5gJMMOg0Q5P1tsgWtEAqQacJXq0qEqRHDX/YJ4FaTMLfZPpHB3gjl2EJuiZyPABxmj4ZQYiY9m1bdAJ5y7tQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.68.0': + resolution: { integrity: sha512-YR65gGdGvTUAWLldC3xLOvOzamdGzB4A5/N8rehEaHs3Zvoe39BhgY+u0SPch1OvrVTfLcc55wsSgK2NcnTS/A== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@vitest/coverage-v8@4.1.11': + resolution: { integrity: sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw== } + peerDependencies: + '@vitest/browser': 4.1.11 + vitest: 4.1.11 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@4.1.11': + resolution: { integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw== } + + '@vitest/mocker@4.1.11': + resolution: { integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ== } + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.11': + resolution: { integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw== } + + '@vitest/runner@4.1.11': + resolution: { integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw== } + + '@vitest/snapshot@4.1.11': + resolution: { integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog== } + + '@vitest/spy@4.1.11': + resolution: { integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA== } + + '@vitest/utils@4.1.11': + resolution: { integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ== } + + acorn-jsx@5.3.2: + resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: { integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== } + engines: { node: '>=0.4.0' } + hasBin: true + + ajv@6.15.0: + resolution: { integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== } + + ansi-escapes@7.3.0: + resolution: { integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== } + engines: { node: '>=18' } + + ansi-regex@5.0.1: + resolution: { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== } + engines: { node: '>=8' } + + ansi-regex@6.1.0: + resolution: { integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== } + engines: { node: '>=12' } + + ansi-styles@4.3.0: + resolution: { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== } + engines: { node: '>=8' } + + any-promise@1.3.0: + resolution: { integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== } + + assertion-error@2.0.1: + resolution: { integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== } + engines: { node: '>=12' } + + ast-v8-to-istanbul@1.0.5: + resolution: { integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA== } + + balanced-match@4.0.4: + resolution: { integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== } + engines: { node: 18 || 20 || >=22 } + + brace-expansion@5.0.9: + resolution: { integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg== } + engines: { node: 20 || >=22 } + + buffer-from@1.1.2: + resolution: { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } + + cac@7.0.0: + resolution: { integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ== } + engines: { node: '>=20.19.0' } + + chai@6.2.2: + resolution: { integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== } + engines: { node: '>=18' } + + chalk@4.1.2: + resolution: { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== } + engines: { node: '>=10' } + + chalk@5.6.2: + resolution: { integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + char-regex@1.0.2: + resolution: { integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== } + engines: { node: '>=10' } + + cjs-module-lexer@1.4.3: + resolution: { integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== } + + cli-highlight@2.1.11: + resolution: { integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== } + engines: { node: '>=8.0.0', npm: '>=5.0.0' } + hasBin: true + + cli-table3@0.6.5: + resolution: { integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== } + engines: { node: 10.* || >= 12.* } - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + cliui@7.0.4: + resolution: { integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== } - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} + color-convert@2.0.1: + resolution: { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== } + engines: { node: '>=7.0.0' } + + color-name@1.1.4: + resolution: { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } + + commander@10.0.1: + resolution: { integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== } + engines: { node: '>=14' } - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + commander@2.20.3: + resolution: { integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== } + + convert-source-map@2.0.0: + resolution: { integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== } + + cross-spawn@7.0.6: + resolution: { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } + engines: { node: '>= 8' } + + debug@4.4.0: + resolution: { integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + debug@4.4.3: + resolution: { integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + deep-is@0.1.4: + resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + detect-libc@2.1.2: + resolution: { integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== } + engines: { node: '>=8' } - babel-plugin-polyfill-corejs3@0.10.6: - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + emoji-regex@8.0.0: + resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + emojilib@2.4.0: + resolution: { integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== } + + environment@1.1.0: + resolution: { integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== } + engines: { node: '>=18' } + + es-module-lexer@2.3.2: + resolution: { integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== } + + escalade@3.2.0: + resolution: { integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== } + engines: { node: '>=6' } + + escape-string-regexp@4.0.0: + resolution: { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } + engines: { node: '>=10' } + + eslint-scope@9.1.2: + resolution: { integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + eslint-visitor-keys@3.4.3: + resolution: { integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@5.0.1: + resolution: { integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + eslint@10.9.1: + resolution: { integrity: sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: { integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + esquery@1.7.0: + resolution: { integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== } + engines: { node: '>=0.10' } - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + esrecurse@4.3.0: + resolution: { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== } + engines: { node: '>=4.0' } + + estraverse@5.3.0: + resolution: { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== } + engines: { node: '>=4.0' } + + estree-walker@2.0.2: + resolution: { integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== } + + estree-walker@3.0.3: + resolution: { integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== } - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + esutils@2.0.3: + resolution: { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } + engines: { node: '>=0.10.0' } + + expect-type@1.4.0: + resolution: { integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA== } + engines: { node: '>=12.0.0' } + + fast-deep-equal@3.1.3: + resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } + + fast-json-stable-stringify@2.1.0: + resolution: { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + fast-levenshtein@2.0.6: + resolution: { integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== } - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + fast-string-truncated-width@3.0.3: + resolution: { integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g== } - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + fast-string-width@3.0.2: + resolution: { integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== } - browserslist@4.24.3: - resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + fast-wrap-ansi@0.2.2: + resolution: { integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q== } - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + fdir@6.5.0: + resolution: { integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== } + engines: { node: '>=12.0.0' } + peerDependencies: + picomatch: '>=4.0.4' + peerDependenciesMeta: + picomatch: + optional: true - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + fflate@0.8.3: + resolution: { integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA== } - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + file-entry-cache@8.0.0: + resolution: { integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== } + engines: { node: '>=16.0.0' } - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} + find-up@5.0.0: + resolution: { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } + engines: { node: '>=10' } - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + flat-cache@4.0.1: + resolution: { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== } + engines: { node: '>=16' } - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + flatted@3.4.4: + resolution: { integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q== } - caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + fsevents@2.3.3: + resolution: { integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + function-bind@1.1.2: + resolution: { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + get-caller-file@2.0.5: + resolution: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } + engines: { node: 6.* || 8.* || >= 10.* } - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + glob-parent@6.0.2: + resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } + engines: { node: '>=10.13.0' } - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + globals@16.5.0: + resolution: { integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== } + engines: { node: '>=18' } - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + has-flag@4.0.0: + resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } + engines: { node: '>=8' } - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + hasown@2.0.2: + resolution: { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } + engines: { node: '>= 0.4' } - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + highlight.js@10.7.3: + resolution: { integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== } - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + html-escaper@2.0.2: + resolution: { integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== } - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + human-id@4.2.1: + resolution: { integrity: sha512-zPGsiS+dWoTZtZ4AtpA9Y+BdSFSNWvnouNlWNoUFyAM6xHOHmdCvqO3k8AIbdamCOv4gUFUVNPf6rJFfc4UiJw== } + hasBin: true - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + ignore@5.3.2: + resolution: { integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== } + engines: { node: '>= 4' } - commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} - - core-js@3.39.0: - resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + ignore@7.0.6: + resolution: { integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw== } + engines: { node: '>= 4' } - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} + import-meta-resolve@4.2.0: + resolution: { integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg== } - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} + imurmurhash@0.1.4: + resolution: { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== } + engines: { node: '>=0.8.19' } - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + is-core-module@2.16.1: + resolution: { integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== } + engines: { node: '>= 0.4' } - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + is-extglob@2.1.1: + resolution: { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== } + engines: { node: '>=0.10.0' } + + is-fullwidth-code-point@3.0.0: + resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } + engines: { node: '>=8' } + + is-glob@4.0.3: + resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } + engines: { node: '>=0.10.0' } + + isexe@2.0.0: + resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } + + istanbul-lib-coverage@3.2.2: + resolution: { integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== } + engines: { node: '>=8' } + + istanbul-lib-report@3.0.1: + resolution: { integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== } + engines: { node: '>=10' } + + istanbul-reports@3.2.0: + resolution: { integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== } + engines: { node: '>=8' } + + jju@1.4.0: + resolution: { integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== } + + js-tokens@10.0.0: + resolution: { integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q== } + + json-buffer@3.0.1: + resolution: { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } + + json-schema-traverse@0.4.1: + resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } + + jsonc-parser@3.3.1: + resolution: { integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== } + + keyv@4.5.4: + resolution: { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== } + + launch-editor@2.14.1: + resolution: { integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA== } + + levn@0.4.1: + resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } + engines: { node: '>= 0.8.0' } + + lightningcss-android-arm64@1.33.0: + resolution: { integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg== } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: { integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg== } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: { integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ== } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: { integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg== } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: { integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ== } + engines: { node: '>= 12.0.0' } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: { integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg== } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: { integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ== } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: { integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg== } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: { integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw== } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: { integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA== } + engines: { node: '>= 12.0.0' } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: { integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA== } + engines: { node: '>= 12.0.0' } + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: { integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA== } + engines: { node: '>= 12.0.0' } + + locate-path@6.0.0: + resolution: { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } + engines: { node: '>=10' } + + lru-cache@11.5.2: + resolution: { integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g== } + engines: { node: 20 || >=22 } + + magic-string@0.30.21: + resolution: { integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== } + + magicast@0.5.4: + resolution: { integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w== } + + make-dir@4.0.0: + resolution: { integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== } + engines: { node: '>=10' } + + marked-terminal@7.3.0: + resolution: { integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw== } + engines: { node: '>=16.0.0' } + peerDependencies: + marked: '>=1 <16' + + marked@9.1.6: + resolution: { integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q== } + engines: { node: '>= 16' } + hasBin: true + + minimatch@10.2.6: + resolution: { integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== } + engines: { node: 18 || 20 || >=22 } + + mri@1.2.0: + resolution: { integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== } + engines: { node: '>=4' } + + ms@2.1.3: + resolution: { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } + + mz@2.7.0: + resolution: { integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== } + + nanoid@3.3.18: + resolution: { integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w== } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + natural-compare@1.4.0: + resolution: { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } + + node-emoji@2.2.0: + resolution: { integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== } + engines: { node: '>=18' } + + object-assign@4.1.1: + resolution: { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== } + engines: { node: '>=0.10.0' } + + obug@2.1.4: + resolution: { integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA== } + engines: { node: '>=12.20.0' } + + optionator@0.9.4: + resolution: { integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== } + engines: { node: '>= 0.8.0' } + + p-limit@3.1.0: + resolution: { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== } + engines: { node: '>=10' } + + p-locate@5.0.0: + resolution: { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== } + engines: { node: '>=10' } + + package-manager-detector@1.8.0: + resolution: { integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A== } + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: { integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== } + + parse5@5.1.1: + resolution: { integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== } + + parse5@6.0.1: + resolution: { integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== } + + path-exists@4.0.0: + resolution: { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } + engines: { node: '>=8' } + + path-key@3.1.1: + resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } + engines: { node: '>=8' } - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + path-parse@1.0.7: + resolution: { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + pathe@2.0.3: + resolution: { integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== } + + picocolors@1.1.1: + resolution: { integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== } - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + picomatch@4.0.7: + resolution: { integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== } + engines: { node: '>=12' } - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} + postcss@8.5.26: + resolution: { integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ== } + engines: { node: ^10 || ^12 || >=14 } - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + prelude-ls@1.2.1: + resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } + engines: { node: '>= 0.8.0' } - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} + prettier@3.9.6: + resolution: { integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g== } + engines: { node: '>=14' } + hasBin: true - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + publint@0.3.24: + resolution: { integrity: sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw== } + engines: { node: '>=18' } + hasBin: true - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + punycode@2.3.1: + resolution: { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== } + engines: { node: '>=6' } - electron-to-chromium@1.5.76: - resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + require-directory@2.1.1: + resolution: { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== } + engines: { node: '>=0.10.0' } - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolve@1.22.10: + resolution: { integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== } + engines: { node: '>= 0.4' } + hasBin: true - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + rolldown@1.2.6: + resolution: { integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA== } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true - es-abstract@1.23.7: - resolution: {integrity: sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==} - engines: {node: '>= 0.4'} + rollup-plugin-dts@6.5.1: + resolution: { integrity: sha512-jODTXp3H7MK/Ur/ErtsrQ0G1GvaCmc3du+y5pNrdBMf6d7HlL2Nd/N6TkEr+f75CkUj01zEoEd7y2elH0eHi1Q== } + engines: { node: '>=20' } + peerDependencies: + '@typescript/typescript6': ^6 + rollup: ^3 || ^4 + typescript: ^4.5 || ^5 || ^6 || ^7 + peerDependenciesMeta: + '@typescript/typescript6': + optional: true - es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + rollup@4.63.1: + resolution: { integrity: sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg== } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } + hasBin: true - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + sade@1.8.1: + resolution: { integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== } + engines: { node: '>=6' } + + semver@7.8.5: + resolution: { integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== } + engines: { node: '>=10' } + hasBin: true - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + shebang-command@2.0.0: + resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } + engines: { node: '>=8' } - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + shebang-regex@3.0.0: + resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } + engines: { node: '>=8' } + + shell-quote@1.10.0: + resolution: { integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA== } + engines: { node: '>= 0.4' } + + siginfo@2.0.0: + resolution: { integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== } + + sisteransi@1.0.5: + resolution: { integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== } + + skin-tone@2.0.0: + resolution: { integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== } + engines: { node: '>=8' } + + source-map-js@1.2.1: + resolution: { integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== } + engines: { node: '>=0.10.0' } + + source-map-support@0.5.21: + resolution: { integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== } + + source-map@0.6.1: + resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } + engines: { node: '>=0.10.0' } + + stackback@0.0.2: + resolution: { integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== } + + std-env@4.2.0: + resolution: { integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw== } + + string-width@4.2.3: + resolution: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } + engines: { node: '>=8' } + + strip-ansi@6.0.1: + resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } + engines: { node: '>=8' } + + supports-color@7.2.0: + resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } + engines: { node: '>=8' } + + supports-color@8.1.1: + resolution: { integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== } + engines: { node: '>=10' } + + supports-hyperlinks@3.2.0: + resolution: { integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig== } + engines: { node: '>=14.18' } + + supports-preserve-symlinks-flag@1.0.0: + resolution: { integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== } + engines: { node: '>= 0.4' } + + terser@5.51.2: + resolution: { integrity: sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q== } + engines: { node: '>=10' } + hasBin: true + + thenify-all@1.6.0: + resolution: { integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== } + engines: { node: '>=0.8' } + + thenify@3.3.1: + resolution: { integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== } + + tinybench@2.9.0: + resolution: { integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== } + + tinyexec@1.3.0: + resolution: { integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ== } + engines: { node: '>=18' } + + tinyglobby@0.2.17: + resolution: { integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== } + engines: { node: '>=12.0.0' } + + tinyrainbow@3.1.1: + resolution: { integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw== } + engines: { node: '>=14.0.0' } + + ts-api-utils@2.5.0: + resolution: { integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== } + engines: { node: '>=18.12' } + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: { integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== } + + type-check@0.4.0: + resolution: { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } + engines: { node: '>= 0.8.0' } + + typescript-eslint@8.68.0: + resolution: { integrity: sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.6.1-rc: + resolution: { integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ== } + engines: { node: '>=14.17' } + hasBin: true + + typescript@6.0.3: + resolution: { integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== } + engines: { node: '>=14.17' } + hasBin: true + + unicode-emoji-modifier-base@1.0.0: + resolution: { integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== } + engines: { node: '>=4' } + + uri-js@4.4.1: + resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } + + validate-npm-package-name@5.0.1: + resolution: { integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + vite@8.2.2: + resolution: { integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q== } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.4.0 || ^0.5.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.11: + resolution: { integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw== } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + which@2.0.2: + resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } + engines: { node: '>= 8' } + hasBin: true + + why-is-node-running@2.3.0: + resolution: { integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== } + engines: { node: '>=8' } + hasBin: true + + word-wrap@1.2.5: + resolution: { integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== } + engines: { node: '>=0.10.0' } + + wrap-ansi@7.0.0: + resolution: { integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== } + engines: { node: '>=10' } + + y18n@5.0.8: + resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } + engines: { node: '>=10' } + + yaml@2.9.0: + resolution: { integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA== } + engines: { node: '>= 14.6' } + hasBin: true + + yargs-parser@20.2.9: + resolution: { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== } + engines: { node: '>=10' } + + yargs@16.2.0: + resolution: { integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== } + engines: { node: '>=10' } + + yocto-queue@0.1.0: + resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } + engines: { node: '>=10' } - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - eslint@9.17.0: - resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: +snapshots: + '@andrewbranch/untar.js@1.0.4': {} + + '@arethetypeswrong/cli@0.18.5': + dependencies: + '@arethetypeswrong/core': 0.18.5 + chalk: 4.1.2 + cli-table3: 0.6.5 + commander: 10.0.1 + marked: 9.1.6 + marked-terminal: 7.3.0(marked@9.1.6) + semver: 7.8.5 + + '@arethetypeswrong/core@0.18.5': + dependencies: + '@andrewbranch/untar.js': 1.0.4 + '@loaderkit/resolve': 1.0.6 + cjs-module-lexer: 1.4.3 + fflate: 0.8.3 + lru-cache: 11.5.2 + semver: 7.8.5 + typescript: 5.6.1-rc + validate-npm-package-name: 5.0.1 + + '@babel/code-frame@8.0.0': + dependencies: + '@babel/helper-validator-identifier': 8.0.4 + js-tokens: 10.0.0 optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + '@babel/helper-string-parser@7.29.7': {} - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + '@babel/helper-validator-identifier@7.29.7': {} - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} - - fdir@6.4.2: - resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: + '@babel/helper-validator-identifier@8.0.4': optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@bcoe/v8-coverage@1.0.2': {} + + '@braidai/lang@1.1.2': {} + + '@changesets/apply-release-plan@8.0.0': + dependencies: + '@changesets/config': 4.0.0 + '@changesets/format': 0.1.2 + '@changesets/git': 4.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + import-meta-resolve: 4.2.0 + jsonc-parser: 3.3.1 + semver: 7.8.5 + + '@changesets/assemble-release-plan@7.0.0': + dependencies: + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + semver: 7.8.5 + + '@changesets/changelog-git@1.0.0': + dependencies: + '@changesets/types': 7.0.0 + + '@changesets/cli@3.0.1': + dependencies: + '@changesets/apply-release-plan': 8.0.0 + '@changesets/assemble-release-plan': 7.0.0 + '@changesets/changelog-git': 1.0.0 + '@changesets/config': 4.0.0 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/git': 4.0.0 + '@changesets/pre': 3.0.0 + '@changesets/read': 1.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@changesets/write': 1.0.1 + '@clack/prompts': 1.7.0 + '@manypkg/get-packages': 3.1.0 + '@pnpm/deps.graph-sequencer': 1100.0.1 + cac: 7.0.0 + import-meta-resolve: 4.2.0 + launch-editor: 2.14.1 + package-manager-detector: 1.8.0 + semver: 7.8.5 + tinyexec: 1.3.0 + + '@changesets/config@4.0.0': + dependencies: + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 + + '@changesets/errors@1.0.0': {} + + '@changesets/format@0.1.2': + dependencies: + package-manager-detector: 1.8.0 + tinyexec: 1.3.0 + + '@changesets/get-dependents-graph@3.0.0': + dependencies: + '@changesets/types': 7.0.0 + semver: 7.8.5 + + '@changesets/git@4.0.0': + dependencies: + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 + tinyexec: 1.3.0 + + '@changesets/parse@1.0.0': + dependencies: + '@changesets/types': 7.0.0 + yaml: 2.9.0 + + '@changesets/pre@3.0.0': + dependencies: + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + + '@changesets/read@1.0.0': + dependencies: + '@changesets/git': 4.0.0 + '@changesets/parse': 1.0.0 + '@changesets/types': 7.0.0 + + '@changesets/should-skip-package@1.0.0': + dependencies: + '@changesets/types': 7.0.0 + + '@changesets/types@7.0.0': {} + + '@changesets/write@1.0.1': + dependencies: + '@changesets/format': 0.1.2 + '@changesets/types': 7.0.0 + human-id: 4.2.1 + + '@clack/core@1.4.3': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@clack/prompts@1.7.0': + dependencies: + '@clack/core': 1.4.3 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 + + '@colors/colors@1.5.0': optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.2.6: - resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.14.0: - resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {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. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.2.1: - resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.0: - resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mocha@11.0.1: - resolution: {integrity: sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-environment-flags@1.0.6: - resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.getownpropertydescriptors@2.1.8: - resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1(supports-color@8.1.1))': + dependencies: + eslint: 10.9.1(supports-color@8.1.1) + eslint-visitor-keys: 3.4.3 - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + '@eslint-community/regexpp@4.12.2': {} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} + '@eslint/config-array@0.23.5(supports-color@8.1.1)': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.0(supports-color@8.1.1) + minimatch: 10.2.6 + transitivePeerDependencies: + - supports-color - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + '@eslint/config-helpers@0.7.0': + dependencies: + '@eslint/core': 1.2.1 - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} + '@eslint/js@10.0.1(eslint@10.9.1(supports-color@8.1.1))': + optionalDependencies: + eslint: 10.9.1(supports-color@8.1.1) - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} + '@eslint/object-schema@3.0.5': {} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 - pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} + '@humanfs/core@0.19.1': {} - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + '@humanwhocodes/module-importer@1.0.1': {} - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} - engines: {node: '>=14'} - hasBin: true + '@humanwhocodes/retry@0.3.1': {} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + '@humanwhocodes/retry@0.4.3': {} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + '@jridgewell/resolve-uri@3.1.2': {} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + '@jridgewell/set-array@1.2.1': {} - reflect.getprototypeof@1.0.9: - resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==} - engines: {node: '>= 0.4'} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.31 - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} - engines: {node: '>=4'} + '@jridgewell/sourcemap-codec@1.5.0': {} - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + '@jridgewell/sourcemap-codec@1.6.0': {} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} + '@loaderkit/resolve@1.0.6': + dependencies: + '@braidai/lang': 1.1.2 - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} - engines: {node: '>=4'} + '@manypkg/find-root@3.1.0': + dependencies: + '@manypkg/tools': 2.1.2 - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + '@manypkg/get-packages@3.1.0': + dependencies: + '@manypkg/find-root': 3.1.0 + '@manypkg/tools': 2.1.2 - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true + '@manypkg/tools@2.1.2': + dependencies: + jju: 1.4.0 + tinyglobby: 0.2.17 + yaml: 2.9.0 - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rollup@4.29.1: - resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - smob@1.5.0: - resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} - engines: {node: '>=10'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - v8flags@3.2.0: - resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} - engines: {node: '>= 0.10'} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.3': {} - - '@babel/core@7.26.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.3': - dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.25.9': - dependencies: - '@babel/types': 7.26.3 - - '@babel/helper-compilation-targets@7.25.9': - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.3 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.4 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - debug: 4.4.0(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - '@babel/helper-member-expression-to-functions@7.25.9': - dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.25.9': - dependencies: - '@babel/types': 7.26.3 - - '@babel/helper-plugin-utils@7.25.9': {} - - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helper-wrap-function@7.25.9': - dependencies: - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.26.0': - dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - - '@babel/node@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/register': 7.25.9(@babel/core@7.26.0) - commander: 6.2.1 - core-js: 3.39.0 - node-environment-flags: 1.0.6 - regenerator-runtime: 0.14.1 - v8flags: 3.2.0 - - '@babel/parser@7.26.3': - dependencies: - '@babel/types': 7.26.3 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - - '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.25.9 - - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - regenerator-transform: 0.15.2 - - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/preset-env@7.26.0(@babel/core@7.26.0)': - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 - esutils: 2.0.3 - - '@babel/register@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - - '@babel/runtime@7.26.0': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - - '@babel/traverse@7.26.4': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - debug: 4.4.0(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.26.3': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': - dependencies: - eslint: 9.17.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.19.1': - dependencies: - '@eslint/object-schema': 2.1.5 - debug: 4.4.0(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/core@0.9.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.0(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/eslintrc@3.2.0': - dependencies: - ajv: 6.12.6 - debug: 4.4.0(supports-color@8.1.1) - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.1': {} - - '@eslint/js@9.17.0': {} - - '@eslint/object-schema@2.1.5': {} - - '@eslint/plugin-kit@0.2.4': - dependencies: - levn: 0.4.1 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.1': {} - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@rollup/plugin-babel@6.0.4(@babel/core@7.26.0)(rollup@4.29.1)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 5.1.4(rollup@4.29.1) - optionalDependencies: - rollup: 4.29.1 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-commonjs@28.0.2(rollup@4.29.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.29.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.4.2(picomatch@4.0.2) - is-reference: 1.2.1 - magic-string: 0.30.17 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.29.1 - - '@rollup/plugin-eslint@9.0.5(rollup@4.29.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.29.1) - eslint: 8.57.1 - optionalDependencies: - rollup: 4.29.1 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-node-resolve@16.0.0(rollup@4.29.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.29.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.29.1 - - '@rollup/plugin-terser@0.4.4(rollup@4.29.1)': - dependencies: - serialize-javascript: 6.0.2 - smob: 1.5.0 - terser: 5.37.0 - optionalDependencies: - rollup: 4.29.1 - - '@rollup/pluginutils@5.1.4(rollup@4.29.1)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.29.1 - - '@rollup/rollup-android-arm-eabi@4.29.1': - optional: true - - '@rollup/rollup-android-arm64@4.29.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.29.1': - optional: true - - '@rollup/rollup-darwin-x64@4.29.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.29.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.29.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.29.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.29.1': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.29.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.29.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.29.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.29.1': - optional: true - - '@types/estree@1.0.6': {} - - '@types/json-schema@7.0.15': {} - - '@types/resolve@1.20.2': {} - - '@ungap/structured-clone@1.2.1': {} - - acorn-jsx@5.3.2(acorn@8.14.0): - dependencies: - acorn: 8.14.0 - - acorn@8.14.0: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-colors@4.1.3: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.3 - is-array-buffer: 3.0.5 - - array.prototype.reduce@1.0.7: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-array-method-boxes-properly: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - is-string: 1.1.1 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.6 - is-array-buffer: 3.0.5 - - assertion-error@2.0.1: {} - - asynckit@0.4.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - axios@1.7.9: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - transitivePeerDependencies: - - supports-color - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browser-stdout@1.3.1: {} - - browserslist@4.24.3: - dependencies: - caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.76 - node-releases: 2.0.19 - update-browserslist-db: 1.1.1(browserslist@4.24.3) - - buffer-from@1.1.2: {} - - call-bind-apply-helpers@1.0.1: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.1 - es-define-property: 1.0.1 - get-intrinsic: 1.2.6 - set-function-length: 1.2.2 - - call-bound@1.0.3: - dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.6 - - callsites@3.1.0: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001690: {} - - chai@5.1.2: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.2 - pathval: 2.0.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - check-error@2.1.1: {} - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-deep@4.0.1: - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@2.20.3: {} - - commander@6.2.1: {} - - commondir@1.0.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - core-js-compat@3.39.0: - dependencies: - browserslist: 4.24.3 - - core-js@3.39.0: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.0(supports-color@8.1.1): - dependencies: - ms: 2.1.3 - optionalDependencies: - supports-color: 8.1.1 - - decamelize@4.0.0: {} - - deep-eql@5.0.2: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - diff@5.2.0: {} - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dotenv@16.4.7: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.5.76: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - es-abstract@1.23.7: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.3 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.2.6 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.0 - math-intrinsics: 1.1.0 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.7 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.3 - safe-regex-test: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - - es-array-method-boxes-properly@1.0.0: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.6 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - escalade@3.2.0: {} - - escape-string-regexp@4.0.0: {} - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-scope@8.2.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.1 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - eslint@9.17.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.17.0 - '@eslint/plugin-kit': 0.2.4 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 - - espree@9.6.1: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - estree-walker@2.0.2: {} - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.18.0: - dependencies: - reusify: 1.0.4 - - fdir@6.4.2(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-cache-dir@2.1.0: - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.2 - keyv: 4.5.4 - rimraf: 3.0.2 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.2 - keyv: 4.5.4 - - flat@5.0.2: {} - - flatted@3.3.2: {} - - follow-redirects@1.15.9: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.2.6: - dependencies: - call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - function-bind: 1.1.2 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.6 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globals@14.0.0: {} - - globals@15.14.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + optional: true - graphemer@1.4.0: {} + '@oxc-project/types@0.147.0': {} - has-bigints@1.1.0: {} + '@pnpm/deps.graph-sequencer@1100.0.1': {} - has-flag@4.0.0: {} + '@publint/pack@0.1.7': + dependencies: + tinyexec: 1.3.0 - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 + '@rolldown/binding-android-arm-eabi@1.2.6': + optional: true - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 + '@rolldown/binding-android-arm64@1.2.6': + optional: true - has-symbols@1.1.0: {} + '@rolldown/binding-darwin-arm64@1.2.6': + optional: true - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 + '@rolldown/binding-darwin-x64@1.2.6': + optional: true - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 + '@rolldown/binding-freebsd-x64@1.2.6': + optional: true - he@1.2.0: {} + '@rolldown/binding-linux-arm-gnueabihf@1.2.6': + optional: true - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 + '@rolldown/binding-linux-arm64-gnu@1.2.6': + optional: true - ignore@5.3.2: {} + '@rolldown/binding-linux-arm64-musl@1.2.6': + optional: true - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + '@rolldown/binding-linux-ppc64-gnu@1.2.6': + optional: true - imurmurhash@0.1.4: {} + '@rolldown/binding-linux-s390x-gnu@1.2.6': + optional: true - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 + '@rolldown/binding-linux-x64-gnu@1.2.6': + optional: true - inherits@2.0.4: {} + '@rolldown/binding-linux-x64-musl@1.2.6': + optional: true - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 + '@rolldown/binding-openharmony-arm64@1.2.6': + optional: true - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.6 + '@rolldown/binding-win32-arm64-msvc@1.2.6': + optional: true - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 + '@rolldown/binding-win32-x64-msvc@1.2.6': + optional: true - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/plugin-typescript@12.3.0(rollup@4.63.1)(tslib@2.8.1)(typescript@6.0.3)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.63.1) + resolve: 1.22.10 + typescript: 6.0.3 + optionalDependencies: + rollup: 4.63.1 + tslib: 2.8.1 + + '@rollup/pluginutils@5.1.4(rollup@4.63.1)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.7 + optionalDependencies: + rollup: 4.63.1 + + '@rollup/rollup-android-arm-eabi@4.63.1': + optional: true - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 + '@rollup/rollup-android-arm64@4.63.1': + optional: true - is-boolean-object@1.2.1: - dependencies: - call-bound: 1.0.3 - has-tostringtag: 1.0.2 + '@rollup/rollup-darwin-arm64@4.63.1': + optional: true - is-callable@1.2.7: {} + '@rollup/rollup-darwin-x64@4.63.1': + optional: true - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 + '@rollup/rollup-freebsd-arm64@4.63.1': + optional: true - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.6 - is-typed-array: 1.1.15 + '@rollup/rollup-freebsd-x64@4.63.1': + optional: true - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.3 - has-tostringtag: 1.0.2 + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': + optional: true - is-extglob@2.1.1: {} + '@rollup/rollup-linux-arm-musleabihf@4.63.1': + optional: true - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.3 + '@rollup/rollup-linux-arm64-gnu@4.63.1': + optional: true - is-fullwidth-code-point@3.0.0: {} + '@rollup/rollup-linux-arm64-musl@4.63.1': + optional: true - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 + '@rollup/rollup-linux-loong64-gnu@4.63.1': + optional: true - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 + '@rollup/rollup-linux-loong64-musl@4.63.1': + optional: true - is-map@2.0.3: {} + '@rollup/rollup-linux-ppc64-gnu@4.63.1': + optional: true - is-module@1.0.0: {} + '@rollup/rollup-linux-ppc64-musl@4.63.1': + optional: true - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.3 - has-tostringtag: 1.0.2 + '@rollup/rollup-linux-riscv64-gnu@4.63.1': + optional: true - is-number@7.0.0: {} + '@rollup/rollup-linux-riscv64-musl@4.63.1': + optional: true - is-path-inside@3.0.3: {} + '@rollup/rollup-linux-s390x-gnu@4.63.1': + optional: true - is-plain-obj@2.1.0: {} + '@rollup/rollup-linux-x64-gnu@4.63.1': + optional: true - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 + '@rollup/rollup-linux-x64-musl@4.63.1': + optional: true - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.6 + '@rollup/rollup-openbsd-x64@4.63.1': + optional: true - is-regex@1.2.1: - dependencies: - call-bound: 1.0.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + '@rollup/rollup-openharmony-arm64@4.63.1': + optional: true - is-set@2.0.3: {} + '@rollup/rollup-win32-arm64-msvc@4.63.1': + optional: true - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.3 + '@rollup/rollup-win32-ia32-msvc@4.63.1': + optional: true - is-string@1.1.1: - dependencies: - call-bound: 1.0.3 - has-tostringtag: 1.0.2 + '@rollup/rollup-win32-x64-gnu@4.63.1': + optional: true - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.3 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 + '@rollup/rollup-win32-x64-msvc@4.63.1': + optional: true - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.18 + '@sindresorhus/is@4.6.0': {} + + '@standard-schema/spec@1.1.0': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.6': {} + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/type-utils': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.68.0 + eslint: 10.9.1(supports-color@8.1.1) + ignore: 7.0.6 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.68.0 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.9.1(supports-color@8.1.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.68.0(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@6.0.3) + '@typescript-eslint/types': 8.68.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.68.0': + dependencies: + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/visitor-keys': 8.68.0 + + '@typescript-eslint/tsconfig-utils@8.68.0(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.9.1(supports-color@8.1.1) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.68.0': {} + + '@typescript-eslint/typescript-estree@8.68.0(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.68.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@6.0.3) + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/visitor-keys': 8.68.0 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(supports-color@8.1.1)) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.9.1(supports-color@8.1.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.68.0': + dependencies: + '@typescript-eslint/types': 8.68.0 + eslint-visitor-keys: 5.0.1 + + '@vitest/coverage-v8@4.1.11(vitest@4.1.11)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.11 + ast-v8-to-istanbul: 1.0.5 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.4 + obug: 2.1.4 + std-env: 4.2.0 + tinyrainbow: 3.1.1 + vitest: 4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.2(terser@5.51.2)(yaml@2.9.0)) + + '@vitest/expect@4.1.11': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + chai: 6.2.2 + tinyrainbow: 3.1.1 + + '@vitest/mocker@4.1.11(vite@8.2.2(terser@5.51.2)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.11 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.2.2(terser@5.51.2)(yaml@2.9.0) + + '@vitest/pretty-format@4.1.11': + dependencies: + tinyrainbow: 3.1.1 + + '@vitest/runner@4.1.11': + dependencies: + '@vitest/utils': 4.1.11 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.11': + dependencies: + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.11': {} + + '@vitest/utils@4.1.11': + dependencies: + '@vitest/pretty-format': 4.1.11 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + any-promise@1.3.0: {} + + assertion-error@2.0.1: {} + + ast-v8-to-istanbul@1.0.5: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 - is-unicode-supported@0.1.0: {} + balanced-match@4.0.4: {} - is-weakmap@2.0.2: {} + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 - is-weakref@1.1.0: - dependencies: - call-bound: 1.0.3 + buffer-from@1.1.2: {} - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.6 + cac@7.0.0: {} - isarray@2.0.5: {} + chai@6.2.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + cjs-module-lexer@1.4.3: {} + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@10.0.1: {} + + commander@2.20.3: {} - isexe@2.0.0: {} + convert-source-map@2.0.0: {} - isobject@3.0.1: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + debug@4.4.0(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 - js-tokens@4.0.0: {} + debug@4.4.3(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 + deep-is@0.1.4: {} - jsesc@3.0.2: {} + detect-libc@2.1.2: {} - jsesc@3.1.0: {} + emoji-regex@8.0.0: {} - json-buffer@3.0.1: {} + emojilib@2.4.0: {} - json-schema-traverse@0.4.1: {} + environment@1.1.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} + es-module-lexer@2.3.2: {} - json5@2.2.3: {} + escalade@3.2.0: {} - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 + escape-string-regexp@4.0.0: {} - kind-of@6.0.3: {} + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + eslint-visitor-keys@3.4.3: {} - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 + eslint-visitor-keys@5.0.1: {} - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 + eslint@10.9.1(supports-color@8.1.1): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1(supports-color@8.1.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.6 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.6 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color - lodash.debounce@4.0.8: {} + espree@11.2.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 5.0.1 - lodash.merge@4.6.2: {} + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 - loupe@3.1.2: {} + estraverse@5.3.0: {} - lru-cache@10.4.3: {} + estree-walker@2.0.2: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + esutils@2.0.3: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + expect-type@1.4.0: {} - make-dir@2.1.0: - dependencies: - pify: 4.0.1 - semver: 5.7.2 + fast-deep-equal@3.1.3: {} - math-intrinsics@1.1.0: {} + fast-json-stable-stringify@2.1.0: {} - mime-db@1.52.0: {} + fast-levenshtein@2.0.6: {} - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 + fast-string-truncated-width@3.0.3: {} - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + fflate@0.8.3: {} + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.4 + keyv: 4.5.4 + + flatted@3.4.4: {} + + fsevents@2.3.3: + optional: true - minipass@7.1.2: {} + function-bind@1.1.2: {} - mocha@11.0.1: - dependencies: - ansi-colors: 4.1.3 - browser-stdout: 1.3.1 - chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) - diff: 5.2.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 10.4.5 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.1.6 - ms: 2.1.3 - serialize-javascript: 6.0.2 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.5.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 - yargs-unparser: 2.0.0 + get-caller-file@2.0.5: {} - ms@2.1.3: {} + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 - natural-compare@1.4.0: {} + globals@16.5.0: {} - node-environment-flags@1.0.6: - dependencies: - object.getownpropertydescriptors: 2.1.8 - semver: 5.7.2 + has-flag@4.0.0: {} - node-releases@2.0.19: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 - normalize-path@3.0.0: {} + highlight.js@10.7.3: {} - object-inspect@1.13.3: {} + html-escaper@2.0.2: {} - object-keys@1.1.1: {} + human-id@4.2.1: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - has-symbols: 1.1.0 - object-keys: 1.1.1 + ignore@5.3.2: {} - object.getownpropertydescriptors@2.1.8: - dependencies: - array.prototype.reduce: 1.0.7 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-object-atoms: 1.0.0 - gopd: 1.2.0 - safe-array-concat: 1.1.3 + ignore@7.0.6: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 + import-meta-resolve@4.2.0: {} - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 + imurmurhash@0.1.4: {} - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 + is-extglob@2.1.1: {} - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 + is-fullwidth-code-point@3.0.0: {} - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 - p-try@2.2.0: {} + isexe@2.0.0: {} - package-json-from-dist@1.0.1: {} + istanbul-lib-coverage@3.2.2: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 - parse-passwd@1.0.0: {} + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - path-exists@3.0.0: {} + jju@1.4.0: {} - path-exists@4.0.0: {} + js-tokens@10.0.0: {} - path-is-absolute@1.0.1: {} + json-buffer@3.0.1: {} - path-key@3.1.1: {} + json-schema-traverse@0.4.1: {} - path-parse@1.0.7: {} + json-stable-stringify-without-jsonify@1.0.1: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 + jsonc-parser@3.3.1: {} - pathval@2.0.0: {} + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 - picocolors@1.1.1: {} + launch-editor@2.14.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.10.0 - picomatch@2.3.1: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 - picomatch@4.0.2: {} + lightningcss-android-arm64@1.33.0: + optional: true - pify@4.0.1: {} + lightningcss-darwin-arm64@1.33.0: + optional: true - pirates@4.0.6: {} + lightningcss-darwin-x64@1.33.0: + optional: true - pkg-dir@3.0.0: - dependencies: - find-up: 3.0.0 + lightningcss-freebsd-x64@1.33.0: + optional: true - possible-typed-array-names@1.0.0: {} + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true - prelude-ls@1.2.1: {} + lightningcss-linux-arm64-gnu@1.33.0: + optional: true - prettier@3.4.2: {} + lightningcss-linux-arm64-musl@1.33.0: + optional: true - proxy-from-env@1.1.0: {} + lightningcss-linux-x64-gnu@1.33.0: + optional: true - punycode@2.3.1: {} + lightningcss-linux-x64-musl@1.33.0: + optional: true - queue-microtask@1.2.3: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + lightningcss-win32-arm64-msvc@1.33.0: + optional: true - reflect.getprototypeof@1.0.9: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - dunder-proto: 1.0.1 - es-abstract: 1.23.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.6 - gopd: 1.2.0 - which-builtin-type: 1.2.1 + lightningcss-win32-x64-msvc@1.33.0: + optional: true - regenerate-unicode-properties@10.2.0: - dependencies: - regenerate: 1.4.2 + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 - regenerate@1.4.2: {} + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 - regenerator-runtime@0.14.1: {} + lru-cache@11.5.2: {} - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.26.0 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 - regexp.prototype.flags@1.5.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + magicast@0.5.4: + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + source-map-js: 1.2.1 - regexpu-core@6.2.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 - regjsgen: 0.8.0 - regjsparser: 0.12.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + make-dir@4.0.0: + dependencies: + semver: 7.8.5 - regjsgen@0.8.0: {} + marked-terminal@7.3.0(marked@9.1.6): + dependencies: + ansi-escapes: 7.3.0 + ansi-regex: 6.1.0 + chalk: 5.6.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 9.1.6 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 - regjsparser@0.12.0: - dependencies: - jsesc: 3.0.2 + marked@9.1.6: {} - require-directory@2.1.1: {} + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 - resolve-from@4.0.0: {} + mri@1.2.0: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.18: {} + + natural-compare@1.4.0: {} + + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + + object-assign@4.1.1: {} + + obug@2.1.4: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-manager-detector@1.8.0: {} + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@4.0.7: {} + + postcss@8.5.26: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.9.6: {} + + publint@0.3.24: + dependencies: + '@publint/pack': 0.1.7 + package-manager-detector: 1.8.0 + picocolors: 1.1.1 + sade: 1.8.1 + + punycode@2.3.1: {} + + require-directory@2.1.1: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + rolldown@1.2.6: + dependencies: + '@oxc-project/types': 0.147.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.6 + '@rolldown/binding-android-arm64': 1.2.6 + '@rolldown/binding-darwin-arm64': 1.2.6 + '@rolldown/binding-darwin-x64': 1.2.6 + '@rolldown/binding-freebsd-x64': 1.2.6 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.6 + '@rolldown/binding-linux-arm64-gnu': 1.2.6 + '@rolldown/binding-linux-arm64-musl': 1.2.6 + '@rolldown/binding-linux-ppc64-gnu': 1.2.6 + '@rolldown/binding-linux-s390x-gnu': 1.2.6 + '@rolldown/binding-linux-x64-gnu': 1.2.6 + '@rolldown/binding-linux-x64-musl': 1.2.6 + '@rolldown/binding-openharmony-arm64': 1.2.6 + '@rolldown/binding-win32-arm64-msvc': 1.2.6 + '@rolldown/binding-win32-x64-msvc': 1.2.6 + + rollup-plugin-dts@6.5.1(rollup@4.63.1)(typescript@6.0.3): + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.6.0 + convert-source-map: 2.0.0 + magic-string: 0.30.21 + rollup: 4.63.1 + typescript: 6.0.3 + optionalDependencies: + '@babel/code-frame': 8.0.0 + + rollup@4.63.1: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.63.1 + '@rollup/rollup-android-arm64': 4.63.1 + '@rollup/rollup-darwin-arm64': 4.63.1 + '@rollup/rollup-darwin-x64': 4.63.1 + '@rollup/rollup-freebsd-arm64': 4.63.1 + '@rollup/rollup-freebsd-x64': 4.63.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.63.1 + '@rollup/rollup-linux-arm-musleabihf': 4.63.1 + '@rollup/rollup-linux-arm64-gnu': 4.63.1 + '@rollup/rollup-linux-arm64-musl': 4.63.1 + '@rollup/rollup-linux-loong64-gnu': 4.63.1 + '@rollup/rollup-linux-loong64-musl': 4.63.1 + '@rollup/rollup-linux-ppc64-gnu': 4.63.1 + '@rollup/rollup-linux-ppc64-musl': 4.63.1 + '@rollup/rollup-linux-riscv64-gnu': 4.63.1 + '@rollup/rollup-linux-riscv64-musl': 4.63.1 + '@rollup/rollup-linux-s390x-gnu': 4.63.1 + '@rollup/rollup-linux-x64-gnu': 4.63.1 + '@rollup/rollup-linux-x64-musl': 4.63.1 + '@rollup/rollup-openbsd-x64': 4.63.1 + '@rollup/rollup-openharmony-arm64': 4.63.1 + '@rollup/rollup-win32-arm64-msvc': 4.63.1 + '@rollup/rollup-win32-ia32-msvc': 4.63.1 + '@rollup/rollup-win32-x64-gnu': 4.63.1 + '@rollup/rollup-win32-x64-msvc': 4.63.1 + fsevents: 2.3.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + semver@7.8.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.10.0: {} + + siginfo@2.0.0: {} + + sisteransi@1.0.5: {} + + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + stackback@0.0.2: {} + + std-env@4.2.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + optional: true - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup@4.29.1: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.29.1 - '@rollup/rollup-android-arm64': 4.29.1 - '@rollup/rollup-darwin-arm64': 4.29.1 - '@rollup/rollup-darwin-x64': 4.29.1 - '@rollup/rollup-freebsd-arm64': 4.29.1 - '@rollup/rollup-freebsd-x64': 4.29.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 - '@rollup/rollup-linux-arm-musleabihf': 4.29.1 - '@rollup/rollup-linux-arm64-gnu': 4.29.1 - '@rollup/rollup-linux-arm64-musl': 4.29.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 - '@rollup/rollup-linux-riscv64-gnu': 4.29.1 - '@rollup/rollup-linux-s390x-gnu': 4.29.1 - '@rollup/rollup-linux-x64-gnu': 4.29.1 - '@rollup/rollup-linux-x64-musl': 4.29.1 - '@rollup/rollup-win32-arm64-msvc': 4.29.1 - '@rollup/rollup-win32-ia32-msvc': 4.29.1 - '@rollup/rollup-win32-x64-msvc': 4.29.1 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.6 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-regex: 1.2.1 - - semver@5.7.2: {} - - semver@6.3.1: {} - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.6 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shallow-clone@3.0.1: - dependencies: - kind-of: 6.0.3 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.3 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.6 - object-inspect: 1.13.3 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.6 - object-inspect: 1.13.3 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.3 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@4.1.0: {} - - smob@1.5.0: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-object-atoms: 1.0.0 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-json-comments@3.1.1: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - terser@5.37.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - text-table@0.2.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.9 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.9 - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.3 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - unicode-canonical-property-names-ecmascript@2.0.1: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 - - unicode-match-property-value-ecmascript@2.2.0: {} - - unicode-property-aliases-ecmascript@2.1.0: {} - - update-browserslist-db@1.1.1(browserslist@4.24.3): - dependencies: - browserslist: 4.24.3 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - v8flags@3.2.0: - dependencies: - homedir-polyfill: 1.0.3 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.1 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.3 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 - is-regex: 1.2.1 - is-weakref: 1.1.0 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.18 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.18: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.3 - for-each: 0.3.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - workerpool@6.5.1: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yargs-parser@20.2.9: {} - - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - - yocto-queue@0.1.0: {} + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + terser@5.51.2: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.18.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + tinybench@2.9.0: {} + + tinyexec@1.3.0: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinyrainbow@3.1.1: {} + + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.68.0(supports-color@8.1.1)(typescript@6.0.3) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) + eslint: 10.9.1(supports-color@8.1.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + typescript@5.6.1-rc: {} + + typescript@6.0.3: {} + + unicode-emoji-modifier-base@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + validate-npm-package-name@5.0.1: {} + + vite@8.2.2(terser@5.51.2)(yaml@2.9.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.26 + rolldown: 1.2.6 + tinyglobby: 0.2.17 + optionalDependencies: + fsevents: 2.3.3 + terser: 5.51.2 + yaml: 2.9.0 + + vitest@4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.2(terser@5.51.2)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(vite@8.2.2(terser@5.51.2)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 + pathe: 2.0.3 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 2.9.0 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 8.2.2(terser@5.51.2)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) + transitivePeerDependencies: + - msw + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + y18n@5.0.8: {} + + yaml@2.9.0: {} + + yargs-parser@20.2.9: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..568f979 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +packages: + - . + +overrides: + flatted: '>=3.4.2' + 'picomatch@>=4.0.0 <4.0.4': '>=4.0.4' + serialize-javascript: '>=7.0.3' diff --git a/rollup.config.js b/rollup.config.js index 1fb9b07..319cd48 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,57 +1,40 @@ -import terser from '@rollup/plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { babel } from '@rollup/plugin-babel'; +import typescript from '@rollup/plugin-typescript'; +import { dts } from 'rollup-plugin-dts'; +import { minify } from 'terser'; -const input = ['src/fleetbase.js']; -const plugins = [ - nodeResolve({ - browser: true, - }), - commonjs(), - babel({ - babelHelpers: 'bundled', - }), - terser(), -]; - -export default [ - { - input, - plugins, - output: [ - { - file: 'dist/fleetbase.min.js', - format: 'umd', - name: '@fleetbase/sdk', - esModule: false, - exports: 'named', - sourcemap: true, - }, - ], - watch: { - exclude: ['node_modules/**'], - include: ['lib/**'], - }, - external: [], - }, - { - input, - plugins, - output: [ - { - dir: 'dist/esm', - format: 'esm', - exports: 'named', - sourcemap: true, - }, - { - dir: 'dist/cjs', - format: 'cjs', - exports: 'named', - sourcemap: true, - }, - ], - external: [], +const minifyBrowserBundle = { + name: 'minify-browser-bundle', + async renderChunk(code, _chunk, outputOptions) { + return minify(code, { + sourceMap: outputOptions.sourcemap ? { asObject: true } : false, + }); }, -]; +}; + +const javascript = { + input: 'src/index.ts', + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + declaration: false, + declarationMap: false, + noEmit: false, + }), + ], + output: [ + { file: 'dist/index.js', format: 'esm', sourcemap: true }, + { file: 'dist/index.cjs', format: 'cjs', exports: 'named', interop: 'auto', sourcemap: true }, + { file: 'dist/fleetbase.min.js', format: 'umd', name: 'FleetbaseSdk', exports: 'named', sourcemap: true, plugins: [minifyBrowserBundle] }, + ], +}; + +const declarations = { + input: '.types/index.d.ts', + plugins: [dts()], + output: [ + { file: 'dist/index.d.ts', format: 'es' }, + { file: 'dist/index.d.cts', format: 'es' }, + ], +}; + +export default [javascript, declarations]; diff --git a/scripts/clean.mjs b/scripts/clean.mjs new file mode 100644 index 0000000..260023e --- /dev/null +++ b/scripts/clean.mjs @@ -0,0 +1,3 @@ +import { rm } from 'node:fs/promises'; + +await Promise.all([rm('dist', { recursive: true, force: true }), rm('.types', { recursive: true, force: true })]); diff --git a/scripts/verify-package.mjs b/scripts/verify-package.mjs new file mode 100644 index 0000000..7e4c291 --- /dev/null +++ b/scripts/verify-package.mjs @@ -0,0 +1,65 @@ +import { execFile } from 'node:child_process'; +import { createRequire } from 'node:module'; +import { readFile } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { promisify } from 'node:util'; + +const execute = promisify(execFile); +const packageJson = JSON.parse(await readFile('package.json', 'utf8')); +const requiredFiles = new Set([ + 'CHANGELOG.md', + 'LICENSE.md', + 'README.md', + 'dist/fleetbase.min.js', + 'dist/fleetbase.min.js.map', + 'dist/index.cjs', + 'dist/index.cjs.map', + 'dist/index.d.cts', + 'dist/index.d.ts', + 'dist/index.js', + 'dist/index.js.map', + 'package.json', +]); + +const { stdout } = await execute('npm', ['pack', '--dry-run', '--json', '--ignore-scripts'], { maxBuffer: 10 * 1024 * 1024 }); +const [pack] = JSON.parse(stdout); +const files = new Set(pack.files.map(({ path }) => path)); + +for (const file of requiredFiles) { + if (!files.has(file)) { + throw new Error(`Packed artifact is missing required file: ${file}`); + } +} + +for (const file of files) { + if (!requiredFiles.has(file) && !file.startsWith('dist/')) { + throw new Error(`Packed artifact contains an unexpected file: ${file}`); + } +} + +if (pack.size > 250_000 || pack.unpackedSize > 1_000_000) { + throw new Error(`Packed artifact exceeds the size budget (${pack.size} packed, ${pack.unpackedSize} unpacked).`); +} + +const esm = await import(new URL(`../${packageJson.module}?verify=${Date.now()}`, import.meta.url)); +const require = createRequire(import.meta.url); +const commonjs = require(fileURLToPath(new URL(`../${packageJson.main}`, import.meta.url))); +const esmKeys = Object.keys(esm).sort(); +const commonjsKeys = Object.keys(commonjs).sort(); + +if (JSON.stringify(esmKeys) !== JSON.stringify(commonjsKeys)) { + throw new Error(`ESM/CommonJS export mismatch:\nESM: ${esmKeys.join(', ')}\nCJS: ${commonjsKeys.join(', ')}`); +} + +if (typeof esm.default !== 'function' || typeof commonjs.default !== 'function') { + throw new Error('Default Fleetbase constructor is missing from an output format.'); +} + +for (const sourceMap of ['dist/index.js.map', 'dist/index.cjs.map', 'dist/fleetbase.min.js.map']) { + const map = JSON.parse(await readFile(sourceMap, 'utf8')); + if (!Array.isArray(map.sources) || map.sources.length === 0 || !Array.isArray(map.sourcesContent)) { + throw new Error(`Source map is incomplete: ${sourceMap}`); + } +} + +console.log(`Verified ${files.size} packed files, ${pack.size} packed bytes, and ${esmKeys.length} parity-matched exports.`); diff --git a/src/adapter.js b/src/adapter.js deleted file mode 100644 index 4bce721..0000000 --- a/src/adapter.js +++ /dev/null @@ -1,17 +0,0 @@ -import { register } from './registry.js'; - -export default class Adapter { - /** - * Creates a configured base adapter for Fleetbase. - * - * @param {Object} config Configuration options for adapter - */ - constructor(config = {}) { - this.version = config.version || 'v1'; - this.host = config.host || null; - this.namespace = config.namespace || null; - this.headers = config.headers || {}; - } -} - -register('adapter', 'Adapter', Adapter); diff --git a/src/adapter.ts b/src/adapter.ts new file mode 100644 index 0000000..f805509 --- /dev/null +++ b/src/adapter.ts @@ -0,0 +1,35 @@ +import type { AdapterConfig, AdapterLike, RequestOptions, ResourceAttributes } from './types.js'; + +export default class Adapter implements AdapterLike { + version: string; + host: string | null; + namespace: string | null; + headers: HeadersInit; + + constructor(config: AdapterConfig = {}) { + this.version = config.version ?? 'v1'; + this.host = config.host ?? null; + this.namespace = config.namespace ?? null; + this.headers = config.headers ?? {}; + } + + get(_path: string, _query: ResourceAttributes = {}, _options: RequestOptions = {}): Promise { + return Promise.reject(new Error('Adapter#get must be implemented.')); + } + + post(_path: string, _data: unknown = {}, _options: RequestOptions = {}): Promise { + return Promise.reject(new Error('Adapter#post must be implemented.')); + } + + put(_path: string, _data: unknown = {}, _options: RequestOptions = {}): Promise { + return Promise.reject(new Error('Adapter#put must be implemented.')); + } + + patch(_path: string, _data: unknown = {}, _options: RequestOptions = {}): Promise { + return Promise.reject(new Error('Adapter#patch must be implemented.')); + } + + delete(_path: string, _options: RequestOptions = {}, _legacyOptions?: RequestOptions): Promise { + return Promise.reject(new Error('Adapter#delete must be implemented.')); + } +} diff --git a/src/adapters.js b/src/adapters.js deleted file mode 100644 index cc5e129..0000000 --- a/src/adapters.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as BrowserAdapter } from './adapters/browser.js'; -export { default as NodeAdapter } from './adapters/node.js'; -export { default as EmberJsAdapter } from './adapters/ember.js'; -export { default as Adapter } from './adapter.js'; diff --git a/src/adapters/browser.js b/src/adapters/browser.js deleted file mode 100644 index d27d2cb..0000000 --- a/src/adapters/browser.js +++ /dev/null @@ -1,229 +0,0 @@ -import Adapter from '../adapter.js'; -import { register } from '../registry.js'; -import { isBlank } from '../utils/index.js'; - -/** - * @class BrowserAdapter - * @extends Adapter - * - * @classdesc - * The BrowserAdapter extends the base Adapter for browser-based environments. - * It leverages the Fetch API to make HTTP requests and handles JSON parsing, headers, - * and error propagation. - * - * @example - * // Example usage: - * const adapter = new BrowserAdapter({ - * publicKey: 'MY_PUBLIC_KEY', - * host: 'https://api.example.com', - * namespace: 'v1' - * }); - * - * adapter.get('users') - * .then(users => console.log(users)) - * .catch(error => console.error(error)); - */ -export default class BrowserAdapter extends Adapter { - /** - * Initializes a BrowserAdapter instance by configuring default headers, - * including Authorization and Content-Type. - * - * @param {Object} config - Configuration object for the adapter. - * @param {string} config.publicKey - A valid public key for authorization. - * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API. - * @param {string} [config.namespace='v1'] - A namespace or version for the API. - */ - constructor(config) { - super(config); - - // Set default headers - this.setHeaders({ - Authorization: `Bearer ${config.publicKey}`, - 'Content-Type': 'application/json', - 'User-Agent': '@fleetbase/sdk;browser', - }); - } - - /** - * Updates the adapter’s request headers. - * - * @param {Object} [headers={}] - An object of header key-value pairs. - * @returns {BrowserAdapter} Returns the current adapter instance for method chaining. - * - * @example - * adapter.setHeaders({ - * 'X-Custom-Header': 'SomeValue' - * }).get('users'); - */ - setHeaders(headers = {}) { - this.headers = { ...this.headers, ...headers }; - return this; - } - - /** - * Parses JSON from a fetch Response object. - * - * @private - * @param {Response} response - The Fetch API response object. - * @returns {Promise<{ statusText: string, status: number, ok: boolean, json: any }>} - * A promise that resolves with an object containing: - * - `statusText`: The status text from the response - * - `status`: The numeric HTTP status - * - `ok`: A boolean indicating if the request was successful (status in the 200–299 range) - * - `json`: The parsed JSON from the response body - * - * @example - * fetch('/api') - * .then(this.parseJSON) - * .then(({ json }) => console.log(json)); - */ - parseJSON(response) { - return new Promise((resolve, reject) => { - response - .json() - .then((json) => { - resolve({ - statusText: response.statusText, - status: response.status, - ok: response.ok, - json, - }); - }) - .catch(() => { - reject(new Error('Oops! Something went wrong when handling your request.')); - }); - }); - } - - /** - * The base method for sending fetch requests. Manages headers, HTTP method, - * and body serialization where necessary. - * - * @private - * @param {string} path - The endpoint path (relative to `this.host/this.namespace`). - * @param {string} [method='GET'] - The HTTP method (GET, POST, PUT, DELETE, PATCH). - * @param {Object} [data={}] - The request payload. Usually includes `body`. - * @param {Object} [options={}] - Additional fetch options (e.g. `mode`, `headers`, or `url` override). - * @returns {Promise} A promise resolving to the parsed JSON data or rejecting with an error. - * - * @example - * this.request('users', 'POST', { body: JSON.stringify({ name: 'John' }) }) - * .then(responseData => console.log(responseData)); - */ - request(path, method = 'GET', data = {}, options = {}) { - return new Promise((resolve, reject) => { - fetch( - options.url || `${this.host}/${this.namespace}/${path}`, // Fallback to constructed URL if options.url is not provided - { - method, - mode: options.mode || 'cors', - headers: new Headers({ - ...(this.headers || {}), - ...(options.headers || {}), - }), - ...data, // Typically { body: JSON.stringify(payload) } - } - ) - .then(this.parseJSON) - .then((response) => { - if (response.ok) { - // If the HTTP status code is 2xx, resolve with JSON data - return resolve(response.json); - } - // Otherwise, reject with error message or fallback to status text - reject(new Error(response.json.errors ? response.json.errors[0] : response.statusText)); - }) - .catch((error) => { - reject(error); - }); - }); - } - - /** - * Issues a GET request to the specified path, optionally with query parameters. - * - * @param {string} path - The endpoint path. - * @param {Object} [query={}] - Query parameters to append to the request URL. - * @param {Object} [options={}] - Additional fetch options. - * @returns {Promise} A promise that resolves with the fetched data or rejects with an error. - * - * @example - * // GET /users?limit=10 - * adapter.get('users', { limit: 10 }) - * .then(data => console.log(data)) - * .catch(err => console.error(err)); - */ - get(path, query = {}, options = {}) { - const urlParams = !isBlank(query) ? new URLSearchParams(query).toString() : ''; - return this.request(`${path}${urlParams ? `?${urlParams}` : ''}`, 'GET', {}, options); - } - - /** - * Issues a POST request with a JSON body. - * - * @param {string} path - The endpoint path. - * @param {Object} [data={}] - The request payload, which will be stringified as JSON. - * @param {Object} [options={}] - Additional fetch options. - * @returns {Promise} A promise that resolves with the server response or rejects with an error. - * - * @example - * adapter.post('users', { name: 'John Doe' }) - * .then(data => console.log(data)) - * .catch(err => console.error(err)); - */ - post(path, data = {}, options = {}) { - return this.request(path, 'POST', { body: JSON.stringify(data) }, options); - } - - /** - * Issues a PUT request with a JSON body, commonly used for full updates. - * - * @param {string} path - The endpoint path. - * @param {Object} [data={}] - The request payload, which will be stringified as JSON. - * @param {Object} [options={}] - Additional fetch options. - * @returns {Promise} A promise that resolves with the server response or rejects with an error. - * - * @example - * adapter.put('users/123', { name: 'Jane Doe' }) - * .then(data => console.log(data)) - * .catch(err => console.error(err)); - */ - put(path, data = {}, options = {}) { - return this.request(path, 'PUT', { body: JSON.stringify(data) }, options); - } - - /** - * Issues a DELETE request. Note that many APIs don't require a body for DELETE. - * - * @param {string} path - The endpoint path. - * @param {Object} [options={}] - Additional fetch options. - * @returns {Promise} A promise that resolves with the server response or rejects with an error. - * - * @example - * adapter.delete('users/123') - * .then(data => console.log(data)) - * .catch(err => console.error(err)); - */ - delete(path, options = {}) { - return this.request(path, 'DELETE', {}, options); - } - - /** - * Issues a PATCH request with a JSON body, commonly used for partial updates. - * - * @param {string} path - The endpoint path. - * @param {Object} [data={}] - The request payload, which will be stringified as JSON. - * @param {Object} [options={}] - Additional fetch options. - * @returns {Promise} A promise that resolves with the server response or rejects with an error. - * - * @example - * adapter.patch('users/123', { email: 'newemail@example.com' }) - * .then(data => console.log(data)) - * .catch(err => console.error(err)); - */ - patch(path, data = {}, options = {}) { - return this.request(path, 'PATCH', { body: JSON.stringify(data) }, options); - } -} - -register('adapter', 'BrowserAdapter', BrowserAdapter); diff --git a/src/adapters/browser.ts b/src/adapters/browser.ts new file mode 100644 index 0000000..2322a70 --- /dev/null +++ b/src/adapters/browser.ts @@ -0,0 +1,69 @@ +import Adapter from '../adapter.js'; +import { requestWithFetch } from './fetch.js'; +import type { AdapterConfig, RequestOptions, ResourceAttributes } from '../types.js'; + +export default class BrowserAdapter extends Adapter { + protected readonly fetchConfig: AdapterConfig; + + constructor(config: AdapterConfig = {}) { + const headers = new Headers(config.headers); + if (config.publicKey) { + headers.set('Authorization', `Bearer ${config.publicKey}`); + } + if (!headers.has('Content-Type')) { + headers.set('Content-Type', 'application/json'); + } + const normalized = { ...config, headers }; + super(normalized); + this.fetchConfig = normalized; + } + + setHeaders(headers: HeadersInit = {}): this { + const merged = new Headers(this.fetchConfig.headers); + new Headers(headers).forEach((value, key) => merged.set(key, value)); + this.fetchConfig.headers = merged; + this.headers = merged; + return this; + } + + async parseJSON(response: Response): Promise<{ statusText: string; status: number; ok: boolean; json: unknown }> { + try { + return { + statusText: response.statusText, + status: response.status, + ok: response.ok, + json: await response.json(), + }; + } catch (cause) { + throw new Error('Oops! Something went wrong when handling your request.', { cause }); + } + } + + request(path: string, method = 'GET', data: unknown = undefined, options: RequestOptions = {}): Promise { + if (data && typeof data === 'object' && 'body' in data) { + const { body, ...requestOptions } = data as { body?: unknown } & RequestOptions; + return requestWithFetch(this.fetchConfig, { path, method, data: body, options: { ...requestOptions, ...options } }); + } + return requestWithFetch(this.fetchConfig, { path, method, data, options }); + } + + override get(path: string, query: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return requestWithFetch(this.fetchConfig, { path, method: 'GET', query, options }); + } + + override post(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request(path, 'POST', data, options); + } + + override put(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request(path, 'PUT', data, options); + } + + override patch(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request(path, 'PATCH', data, options); + } + + override delete(path: string, options: RequestOptions = {}, legacyOptions?: RequestOptions): Promise { + return this.request(path, 'DELETE', undefined, legacyOptions ?? options); + } +} diff --git a/src/adapters/detect.ts b/src/adapters/detect.ts new file mode 100644 index 0000000..2aa9bd1 --- /dev/null +++ b/src/adapters/detect.ts @@ -0,0 +1,10 @@ +import BrowserAdapter from './browser.js'; +import NodeAdapter from './node.js'; +import { isNodeEnvironment } from '../utils.js'; +import type { AdapterConfig, AdapterLike } from '../types.js'; + +export function detectAdapter(config: AdapterConfig = {}): AdapterLike { + return isNodeEnvironment() ? new NodeAdapter(config) : new BrowserAdapter(config); +} + +export default detectAdapter; diff --git a/src/adapters/ember.js b/src/adapters/ember.js deleted file mode 100644 index cefa092..0000000 --- a/src/adapters/ember.js +++ /dev/null @@ -1,6 +0,0 @@ -import Adapter from '../adapter.js'; -import { register } from '../registry.js'; - -export default class EmberJsAdapter extends Adapter {} - -register('adapter', 'EmberJsAdapter', EmberJsAdapter); diff --git a/src/adapters/ember.ts b/src/adapters/ember.ts new file mode 100644 index 0000000..d91fe09 --- /dev/null +++ b/src/adapters/ember.ts @@ -0,0 +1,3 @@ +import BrowserAdapter from './browser.js'; + +export default class EmberJsAdapter extends BrowserAdapter {} diff --git a/src/adapters/fetch.ts b/src/adapters/fetch.ts new file mode 100644 index 0000000..e72319d --- /dev/null +++ b/src/adapters/fetch.ts @@ -0,0 +1,124 @@ +import { FleetbaseError } from '../errors.js'; +import type { AdapterConfig, RequestOptions, ResourceAttributes } from '../types.js'; + +export interface FetchRequest { + path: string; + method: string; + data?: unknown; + query?: ResourceAttributes; + options?: RequestOptions; +} + +export function buildUrl(config: AdapterConfig, path: string, override?: string): string { + if (override) { + return override; + } + + const host = (config.host ?? '').replace(/\/$/, ''); + const namespace = (config.namespace ?? '').replace(/^\/+|\/+$/g, ''); + const cleanPath = path.replace(/^\//, ''); + return [host, namespace, cleanPath].filter(Boolean).join('/'); +} + +export function appendQuery(url: string, query: ResourceAttributes = {}): string { + const entries = Object.entries(query); + if (entries.length === 0) { + return url; + } + + const params = new URLSearchParams(); + for (const [key, rawValue] of entries) { + const values = Array.isArray(rawValue) ? rawValue : [rawValue]; + for (const value of values) { + if (value === null || value === undefined) { + continue; + } + if (value instanceof Date) { + params.append(key, value.toISOString()); + } else if (typeof value === 'object') { + params.append(key, JSON.stringify(value)); + } else { + params.append(key, String(value)); + } + } + } + + const serialized = params.toString(); + if (!serialized) { + return url; + } + return `${url}${url.includes('?') ? '&' : '?'}${serialized}`; +} + +function errorMessage(payload: unknown, fallback: string): string { + if (payload && typeof payload === 'object') { + const body = payload as Record; + if (Array.isArray(body.errors) && typeof body.errors[0] === 'string') { + return body.errors[0]; + } + if (typeof body.error === 'string') { + return body.error; + } + if (typeof body.message === 'string') { + return body.message; + } + } + return typeof payload === 'string' && payload ? payload : fallback; +} + +async function parseResponse(response: Response): Promise { + if (response.status === 204 || response.status === 205) { + return null; + } + + const text = await response.text(); + if (!text) { + return null; + } + + try { + return JSON.parse(text) as unknown; + } catch { + return text; + } +} + +export async function requestWithFetch(config: AdapterConfig, request: FetchRequest): Promise { + const fetchImplementation = config.fetch ?? globalThis.fetch; + if (typeof fetchImplementation !== 'function') { + throw new FleetbaseError('No Fetch API implementation is available in this environment.', { code: 'FETCH_UNAVAILABLE' }); + } + + const options = request.options ?? {}; + const baseUrl = buildUrl(config, request.path, options.url); + const url = appendQuery(baseUrl, request.query); + const headers = new Headers(config.headers); + new Headers(options.headers).forEach((value, key) => headers.set(key, value)); + + const init: RequestInit = { ...options, method: request.method, headers }; + if (request.data !== undefined && request.method !== 'GET' && request.method !== 'HEAD') { + init.body = typeof request.data === 'string' || request.data instanceof FormData || request.data instanceof URLSearchParams ? request.data : JSON.stringify(request.data); + } + delete (init as RequestInit & { url?: string }).url; + + let response: Response; + try { + response = await fetchImplementation(url, init); + } catch (cause) { + throw new FleetbaseError('Unable to reach the Fleetbase API.', { code: 'NETWORK_ERROR', cause }); + } + + const payload = await parseResponse(response); + if (!response.ok) { + const requestId = response.headers.get('x-request-id') ?? undefined; + const body = payload && typeof payload === 'object' ? (payload as Record) : undefined; + throw new FleetbaseError(errorMessage(payload, response.statusText || `HTTP ${response.status}`), { + status: response.status, + code: typeof body?.code === 'string' ? body.code : 'HTTP_ERROR', + response: payload, + ...(requestId ? { requestId } : {}), + }); + } + + return payload; +} diff --git a/src/adapters/node.js b/src/adapters/node.js deleted file mode 100644 index 1e72e4a..0000000 --- a/src/adapters/node.js +++ /dev/null @@ -1,222 +0,0 @@ -import Adapter from '../adapter.js'; -import { register } from '../registry.js'; -import { isArray } from '../utils/array.js'; -import axios from 'axios'; - -/** - * @class NodeAdapter - * @extends Adapter - * - * @classdesc - * The NodeAdapter extends the base Adapter class to facilitate making HTTP requests using Axios in a Node environment. - * It provides convenient methods for all standard HTTP verbs (GET, POST, PUT, DELETE, PATCH) and supports: - * - * - Automatic JSON serialization and deserialization. - * - Base URL and common headers. - * - Interceptors for transforming responses and handling errors. - * - Customizable headers at runtime via `setHeaders`. - */ -export default class NodeAdapter extends Adapter { - /** - * Creates an instance of NodeAdapter. - * - * @param {Object} config - Configuration object - * @param {string} config.publicKey - The public key used for authorization. - * @param {string} [config.host='https://api.example.com'] - The base URL or domain for the API. - * @param {string} [config.namespace='v1'] - The default namespace or version for the API. - * - * @example - * const adapter = new NodeAdapter({ - * publicKey: 'YOUR_PUBLIC_KEY', - * host: 'https://api.yourapp.com', - * namespace: 'v1' - * }); - */ - constructor(config) { - super(config); - - // Create a dedicated Axios instance with base URL and default headers - this.axiosInstance = axios.create({ - baseURL: `${this.host}/${this.namespace}`, - headers: { - Authorization: `Bearer ${config.publicKey}`, - 'Content-Type': 'application/json', - 'User-Agent': '@fleetbase/sdk;node', - }, - }); - - /** - * Sets up Axios interceptors for response success and error handling. - * - * Success: - * - Returns `response.data` by default. - * - * Error: - * - If the server returned a response, checks for `data.errors` or `data.error` and throws an Error accordingly. - * - Otherwise, re-throws the original error to preserve stack trace. - */ - this.axiosInstance.interceptors.response.use( - /** - * Transform successful responses by returning only `response.data`. - * - * @param {import('axios').AxiosResponse} response - The successful Axios response object - * @returns {any} - The `data` property of the response, containing the actual payload - */ - (response) => response.data, - - /** - * Handle error responses, extracting relevant information from the response payload. - * - * @param {import('axios').AxiosError} error - The error object thrown by Axios - * @throws {Error} - An Error instance with a message derived from the server response - */ - (error) => { - if (error.response) { - const { data } = error.response; - - if (isArray(data.errors) && data.errors.length) { - throw new Error(data.errors[0]); - } else if (data.error) { - throw new Error(data.error); - } - } - throw error; - } - ); - } - - /** - * Merges the provided headers with existing default headers. - * - * @param {Object} [headers={}] - Additional headers to add or override. - * @returns {NodeAdapter} - The current instance of NodeAdapter for method chaining. - * - * @example - * adapter.setHeaders({ 'X-Custom-Header': 'my-value' }); - */ - setHeaders(headers = {}) { - this.axiosInstance.defaults.headers.common = { - ...this.axiosInstance.defaults.headers.common, - ...headers, - }; - return this; - } - - /** - * A generic method to make an HTTP request with Axios. - * This method is utilized internally by specialized request methods such as `get`, `post`, etc. - * - * @private - * @param {string} method - HTTP verb (e.g., GET, POST, PUT, DELETE, PATCH). - * @param {string} url - The URL path (relative to `baseURL`). - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request configuration. - * @returns {Promise} - A promise resolving to the response data or rejecting with an Error. - * - * @example - * // Example usage inside another method: - * this.request('GET', '/users', { params: { limit: 50 } }); - */ - request(method, url, options = {}) { - return this.axiosInstance.request({ - method, - url, - ...options, - }); - } - - /** - * Makes a GET request. - * - * @param {string} path - The endpoint path, relative to `baseURL`. - * @param {Object} [query={}] - Query parameters to include in the request URL. - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options. - * @returns {Promise} - A promise that resolves with the response data or rejects with an Error. - * - * @example - * adapter.get('/users', { limit: 25 }).then(data => { - * console.log(data); - * }).catch(err => { - * console.error(err); - * }); - */ - get(path, query = {}, options = {}) { - return this.request('GET', path, { params: query, ...options }); - } - - /** - * Makes a POST request. - * - * @param {string} path - The endpoint path, relative to `baseURL`. - * @param {Object} [data={}] - The request body payload. - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options. - * @returns {Promise} - A promise that resolves with the response data or rejects with an Error. - * - * @example - * adapter.post('/users', { name: 'John Doe' }).then(data => { - * console.log(data); - * }).catch(err => { - * console.error(err); - * }); - */ - post(path, data = {}, options = {}) { - return this.request('POST', path, { data, ...options }); - } - - /** - * Makes a PUT request. - * - * @param {string} path - The endpoint path, relative to `baseURL`. - * @param {Object} [data={}] - The updated data to send in the request body. - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options. - * @returns {Promise} - A promise that resolves with the response data or rejects with an Error. - * - * @example - * adapter.put('/users/123', { name: 'Jane Doe' }).then(data => { - * console.log(data); - * }).catch(err => { - * console.error(err); - * }); - */ - put(path, data = {}, options = {}) { - return this.request('PUT', path, { data, ...options }); - } - - /** - * Makes a DELETE request. - * - * @param {string} path - The endpoint path, relative to `baseURL`. - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options. - * @returns {Promise} - A promise that resolves with the response data or rejects with an Error. - * - * @example - * adapter.delete('/users/123').then(data => { - * console.log(data); - * }).catch(err => { - * console.error(err); - * }); - */ - delete(path, options = {}) { - return this.request('DELETE', path, options); - } - - /** - * Makes a PATCH request. - * - * @param {string} path - The endpoint path, relative to `baseURL`. - * @param {Object} [data={}] - Partial data to update on the server. - * @param {import('axios').AxiosRequestConfig} [options={}] - Additional Axios request options. - * @returns {Promise} - A promise that resolves with the response data or rejects with an Error. - * - * @example - * adapter.patch('/users/123', { email: 'new_email@example.com' }).then(data => { - * console.log(data); - * }).catch(err => { - * console.error(err); - * }); - */ - patch(path, data = {}, options = {}) { - return this.request('PATCH', path, { data, ...options }); - } -} - -register('adapter', 'NodeAdapter', NodeAdapter); diff --git a/src/adapters/node.ts b/src/adapters/node.ts new file mode 100644 index 0000000..4dc7796 --- /dev/null +++ b/src/adapters/node.ts @@ -0,0 +1,34 @@ +import BrowserAdapter from './browser.js'; +import { requestWithFetch } from './fetch.js'; +import type { AdapterConfig, RequestOptions } from '../types.js'; + +export default class NodeAdapter extends BrowserAdapter { + constructor(config: AdapterConfig = {}) { + const headers = new Headers(config.headers); + if (!headers.has('User-Agent')) { + headers.set('User-Agent', '@fleetbase/sdk;node'); + } + super({ ...config, headers }); + } + + override request(method: string, url: string, options: RequestOptions & { data?: unknown } = {}): Promise { + const { data, ...requestOptions } = options; + return requestWithFetch(this.fetchConfig, { path: url, method, data, options: requestOptions }); + } + + override post(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request('POST', path, { ...options, data }); + } + + override put(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request('PUT', path, { ...options, data }); + } + + override patch(path: string, data: unknown = {}, options: RequestOptions = {}): Promise { + return this.request('PATCH', path, { ...options, data }); + } + + override delete(path: string, options: RequestOptions = {}, legacyOptions?: RequestOptions): Promise { + return this.request('DELETE', path, legacyOptions ?? options); + } +} diff --git a/src/collection.ts b/src/collection.ts new file mode 100644 index 0000000..be59ab2 --- /dev/null +++ b/src/collection.ts @@ -0,0 +1,170 @@ +import { get } from './utils.js'; + +function compare(left: unknown, right: unknown): number { + return left === right ? 0 : left == null ? -1 : right == null ? 1 : left < right ? -1 : 1; +} + +export function replace(array: T[], start: number, deleteCount: number, items: T[] = []): void { + array.splice(start, deleteCount, ...items); +} + +export function uniqBy(array: T[], key: keyof T | ((item: T) => unknown) = (item) => item): T[] { + const seen = new Set(); + return array.filter((item) => { + const value = typeof key === 'function' ? key(item) : get(item, String(key)); + if (seen.has(value)) { + return false; + } + seen.add(value); + return true; + }); +} + +export function isCollection(value: unknown): value is Collection { + return value instanceof Collection; +} +export function objectAt(array: T[], index: number): T | undefined { + return array[index]; +} +export function iter(key: keyof T, value?: unknown, hasValue = arguments.length === 2): (item: T) => boolean { + return hasValue ? (item) => item[key] === value : (item) => Boolean(item[key]); +} + +export default class Collection extends Array { + static override get [Symbol.species](): ArrayConstructor { + return Array; + } + + constructor(...items: T[] | [T[]]) { + super(); + Object.setPrototypeOf(this, new.target.prototype); + this.push(...(items.length === 1 && Array.isArray(items[0]) ? items[0] : (items as T[]))); + } + + get notEmpty(): boolean { + return this.length > 0; + } + get empty(): boolean { + return this.length === 0; + } + get first(): T | undefined { + return this[0]; + } + get last(): T | undefined { + return this[this.length - 1]; + } + replace(start: number, deleteCount: number, items: T[] = []): this { + replace(this, start, deleteCount, items); + return this; + } + objectsAt(indexes: number[]): Array { + return indexes.map((index) => this[index]); + } + objectAt(index: number): T | undefined { + return this[index]; + } + findBy(key: K, value?: T[K]): T | undefined { + return this.find(iter(key, value, arguments.length === 2)); + } + findIndexBy(key: K, value?: T[K]): number { + return this.findIndex(iter(key, value, arguments.length === 2)); + } + isEvery(key: K, value?: T[K]): boolean { + return this.every(iter(key, value, arguments.length === 2)); + } + isAny(key: K, value?: T[K]): boolean { + return this.some(iter(key, value, arguments.length === 2)); + } + invoke(methodName: keyof T, ...args: unknown[]): unknown[] { + return this.map((item) => { + const method = item[methodName]; + return typeof method === 'function' ? (method as (...values: unknown[]) => unknown).apply(item, args) : undefined; + }); + } + toArray(): T[] { + return [...this]; + } + compact(): Collection> { + return createCollection>(this.filter((value): value is NonNullable => value != null)); + } + sortBy(...keys: Array): this { + return this.sort((left, right) => { + for (const key of keys) { + const result = compare(left[key], right[key]); + if (result) return result; + } + return 0; + }); + } + uniqBy(key?: keyof T | ((item: T) => unknown)): T[] { + return uniqBy(this, key); + } + without(value: T): T[] | this { + return this.includes(value) ? this.filter((item) => !Object.is(item, value)) : this; + } + clear(): this { + this.splice(0); + return this; + } + insertAt(index: number, item: T): this { + this.splice(index, 0, item); + return this; + } + replaceAt(index: number, item: T): this { + return this.replace(index, 1, [item]); + } + removeAt(start: number, length = 1): this { + this.splice(start, length); + return this; + } + pushObject(item: T): this { + return this.insertAt(this.length, item); + } + pushObjects(items: T[]): this { + return this.replace(this.length, 0, items); + } + popObject(): T | null { + return this.pop() ?? null; + } + shiftObject(): T | null { + return this.shift() ?? null; + } + unshiftObject(item: T): T { + this.unshift(item); + return item; + } + unshiftObjects(items: T[]): this { + return this.replace(0, 0, items); + } + reverseObjects(): this { + super.reverse(); + return this; + } + setObjects(items: T[]): this { + return this.replace(0, this.length, items); + } + removeObject(item: T): this { + for (let index = this.length - 1; index >= 0; index -= 1) { + if (Object.is(this[index], item)) this.splice(index, 1); + } + return this; + } + removeObjects(items: T[]): this { + items.forEach((item) => this.removeObject(item)); + return this; + } + addObject(item: T): this { + if (!this.includes(item)) this.push(item); + return this; + } + addObjects(items: T[]): this { + items.forEach((item) => this.addObject(item)); + return this; + } +} + +export function createCollection(items: T[]): Collection; +export function createCollection(...items: T[]): Collection; +export function createCollection(...items: T[] | [T[]]): Collection { + return new Collection(...items); +} diff --git a/src/errors.ts b/src/errors.ts new file mode 100644 index 0000000..e0a8577 --- /dev/null +++ b/src/errors.ts @@ -0,0 +1,23 @@ +export interface FleetbaseErrorOptions { + status?: number; + code?: string; + response?: unknown; + requestId?: string; + cause?: unknown; +} + +export class FleetbaseError extends Error { + readonly status: number | undefined; + readonly code: string | undefined; + readonly response?: unknown; + readonly requestId: string | undefined; + + constructor(message: string, options: FleetbaseErrorOptions = {}) { + super(message, options.cause === undefined ? undefined : { cause: options.cause }); + this.name = 'FleetbaseError'; + this.status = options.status; + this.code = options.code; + this.response = options.response; + this.requestId = options.requestId; + } +} diff --git a/src/fleetbase.js b/src/fleetbase.js deleted file mode 100644 index 8e2f89b..0000000 --- a/src/fleetbase.js +++ /dev/null @@ -1,138 +0,0 @@ -import Store from './store.js'; -import Resource, { isResource } from './resource.js'; -import { Contact, Driver, Entity, Order, Payload, Place, TrackingStatus, Vehicle, Vendor, Waypoint, Zone, ServiceArea, ServiceRate, ServiceQuote, Organization, Fleet } from './resources.js'; -import { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter } from './adapters.js'; -import { isNodeEnvironment, detectAdapter, isLatitude, isLongitude, Point, GoogleAddress, StoreActions } from './utils/index.js'; -import Collection, { createCollection } from './utils/collection.js'; -import { pluralize, singularize, classify, dasherize, camelize } from './utils/string.js'; -import { extendStoreActions, createStoreActions } from './utils/store-actions.js'; -import { orderActions } from './resources/order.js'; -import { driverActions } from './resources/driver.js'; -import { organizationActions } from './resources/organization.js'; -import Resolver, { lookup, resolve, resolveResource } from './resolver.js'; -import { register, createResource, createStore } from './registry.js'; - -/** - * // instance - * const fleetbase = new Fleetbase(); - * - * const contact = fleetbase.contacts.create({ - * name: 'Ron', - * phone: '+65 9999 8888' - * }); - * - * constact.update({ name: 'Hollywood Ron' }); - * - * // export - * import { Contact } from '@fleetbase/sdk'; - * - * const contact = new Contact({ - * name: 'Ron', - * phone: '+65 9999 8888' - * }); - * - * contact.save(); - */ -export default class Fleetbase { - /** - * Builds an instance of the Fleetbase SDK - * - * @param {String} publicKey The public key issued - * @param {Object} config The version of resource to access - * @param {Boolean} debug Debug mode for SDK - * @return {Fleetbase} Instance - */ - constructor(publicKey, config = {}, debug = false) { - this.version = config.version ?? 'v1'; - this.options = { - version: this.version, - host: config.host ?? 'https://api.fleetbase.io', - namespace: config.namespace ?? this.version, - debug, - publicKey, - }; - - if (typeof publicKey !== 'string' || publicKey.length === 0) { - throw new Error('⚠️ Invalid public key given to Fleetbase SDK'); - } - - if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) { - throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!'); - } - - this.adapter = config.adapter || detectAdapter(this.options); - - this.orders = new Store('order', this.adapter).extendActions(orderActions); - this.entities = new Store('entity', this.adapter); - this.places = new Store('place', this.adapter); - this.drivers = new Store('driver', this.adapter).extendActions(driverActions); - this.vehicles = new Store('vehicle', this.adapter); - this.vendors = new Store('vendor', this.adapter); - this.contacts = new Store('contact', this.adapter); - this.serviceAreas = new Store('service-area', this.adapter); - this.zones = new Store('zone', this.adapter); - this.fleets = new Store('fleet', this.adapter); - this.organizations = new Store('organization', this.adapter).extendActions(organizationActions); - } - - static newInstance() { - return new Fleetbase(...arguments); - } - - setAdapter(adapter) { - this.adapter = adapter; - } - - getAdapter() { - return this.adapter; - } -} - -export { - Store, - Resource, - Contact, - Driver, - Entity, - Order, - Payload, - Place, - TrackingStatus, - Vehicle, - Vendor, - Waypoint, - Zone, - ServiceArea, - ServiceRate, - ServiceQuote, - Organization, - Fleet, - BrowserAdapter, - NodeAdapter, - EmberJsAdapter, - Adapter, - detectAdapter, - isNodeEnvironment, - isLatitude, - isLongitude, - Point, - isResource, - GoogleAddress, - Collection, - createCollection, - StoreActions, - extendStoreActions, - createStoreActions, - pluralize, - singularize, - classify, - dasherize, - camelize, - lookup, - register, - createResource, - Resolver, - resolve, - resolveResource, - createStore, -}; diff --git a/src/fleetbase.ts b/src/fleetbase.ts new file mode 100644 index 0000000..8e94fe2 --- /dev/null +++ b/src/fleetbase.ts @@ -0,0 +1,109 @@ +import { detectAdapter } from './adapters/detect.js'; +import Store from './store.js'; +import { driverActions, orderActions, organizationActions, serviceQuoteActions } from './resources.js'; +import type { Contact, Driver, Entity, Fleet, Order, Organization, Place, ServiceArea, ServiceQuote, Vehicle, Vendor, Zone } from './resources.js'; +import { isNodeEnvironment } from './utils.js'; +import type { AdapterLike, FleetbaseConfig, Identifier, RequestOptions, ResourceAttributes } from './types.js'; + +export type OrderStore = Store & { + getDistanceAndTime(id: Identifier, params?: ResourceAttributes, options?: RequestOptions): Promise; + dispatch(id: Identifier, params?: ResourceAttributes, options?: RequestOptions): Promise; + start(id: Identifier, params?: ResourceAttributes, options?: RequestOptions): Promise; +}; + +export type DriverStore = Store & { + login(identity: string, password?: string | null, attributes?: ResourceAttributes): Promise; + verifyCode(identity: string, code: string, attributes?: ResourceAttributes): Promise; + retrieve(id: Identifier): Promise; +}; + +export type OrganizationStore = Store & { + current(params?: ResourceAttributes, options?: RequestOptions): Promise; +}; + +export type ServiceQuoteStore = Store & { + fromPreliminary(params?: ResourceAttributes): Promise; + fromPayload(payload: unknown, params?: ResourceAttributes): Promise; +}; + +export default class Fleetbase { + version: string; + options: FleetbaseConfig & { debug: boolean; publicKey: string }; + adapter: AdapterLike; + orders: OrderStore; + entities: Store; + places: Store; + drivers: DriverStore; + vehicles: Store; + vendors: Store; + contacts: Store; + serviceAreas: Store; + serviceQuotes: ServiceQuoteStore; + zones: Store; + fleets: Store; + organizations: OrganizationStore; + + constructor(publicKey: string, config: FleetbaseConfig = {}, debug = false) { + if (typeof publicKey !== 'string' || publicKey.length === 0) { + throw new Error('⚠️ Invalid public key given to Fleetbase SDK'); + } + if (!isNodeEnvironment() && publicKey.toLowerCase().startsWith('$')) { + throw new Error('Secret key provided. You must use a public key with Fleetbase Javascript SDK!'); + } + + this.version = config.version ?? 'v1'; + this.options = { + ...config, + version: this.version, + host: config.host ?? 'https://api.fleetbase.io', + namespace: config.namespace ?? this.version, + debug, + publicKey, + }; + this.adapter = config.adapter ?? detectAdapter(this.options); + this.orders = new Store('order', this.adapter).extendActions(orderActions) as OrderStore; + this.entities = new Store('entity', this.adapter); + this.places = new Store('place', this.adapter); + this.drivers = new Store('driver', this.adapter).extendActions(driverActions) as DriverStore; + this.vehicles = new Store('vehicle', this.adapter); + this.vendors = new Store('vendor', this.adapter); + this.contacts = new Store('contact', this.adapter); + this.serviceAreas = new Store('service-area', this.adapter); + this.serviceQuotes = new Store('service-quote', this.adapter).extendActions(serviceQuoteActions) as ServiceQuoteStore; + this.zones = new Store('zone', this.adapter); + this.fleets = new Store('fleet', this.adapter); + this.organizations = new Store('organization', this.adapter).extendActions(organizationActions) as OrganizationStore; + } + + static newInstance(...params: ConstructorParameters): Fleetbase { + return new Fleetbase(...params); + } + + setAdapter(adapter: AdapterLike): void { + this.adapter = adapter; + for (const store of this.stores()) { + store.adapter = adapter; + } + } + + getAdapter(): AdapterLike { + return this.adapter; + } + + private stores(): Store[] { + return [ + this.orders, + this.entities, + this.places, + this.drivers, + this.vehicles, + this.vendors, + this.contacts, + this.serviceAreas, + this.serviceQuotes, + this.zones, + this.fleets, + this.organizations, + ]; + } +} diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 4a6e6fc..0000000 --- a/src/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './fleetbase.js'; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..877ff5c --- /dev/null +++ b/src/index.ts @@ -0,0 +1,48 @@ +import Adapter from './adapter.js'; +import BrowserAdapter from './adapters/browser.js'; +import EmberJsAdapter from './adapters/ember.js'; +import NodeAdapter from './adapters/node.js'; +import Fleetbase from './fleetbase.js'; +import Resource from './resource.js'; +import Store from './store.js'; +import { register } from './registry.js'; + +register('adapter', 'Adapter', Adapter); +register('adapter', 'BrowserAdapter', BrowserAdapter); +register('adapter', 'NodeAdapter', NodeAdapter); +register('adapter', 'EmberJsAdapter', EmberJsAdapter); + +export default Fleetbase; +export { Fleetbase, Adapter, BrowserAdapter, EmberJsAdapter, NodeAdapter, Resource, Store }; +export { detectAdapter } from './adapters/detect.js'; +export { default as Collection, createCollection, isCollection, iter, objectAt, replace, uniqBy } from './collection.js'; +export { FleetbaseError } from './errors.js'; +export { create, createAdapter, createResource, createStore, register, registry } from './registry.js'; +export { default as Resolver, lookup, resolve, resolveAdapter, resolveResource } from './resolver.js'; +export * from './resources.js'; +export { createStore as createStoreInstance, afterFetch } from './store.js'; +export { default as StoreActions, createStoreActions, extendStoreActions, isStoreActions } from './store-actions.js'; +export { camelize, capitalize, classify, dasherize, demodulize, foreignKey, humanize, normify, pluralize, singularize, tableize, underscore } from './string.js'; +export { + createGoogleAddress, + extend, + get, + getProperties, + GoogleAddress, + invoke, + isArray, + isBlank, + isCallable, + isEmail, + isEmpty, + isLatitude, + isLongitude, + isNodeEnvironment, + isPhone, + Point, + set, + setProperties, + uuid, +} from './utils.js'; +export { isResource } from './resource.js'; +export type * from './types.js'; diff --git a/src/registry.js b/src/registry.js deleted file mode 100644 index 7ae07a9..0000000 --- a/src/registry.js +++ /dev/null @@ -1,40 +0,0 @@ -import { pluralize, singularize } from './utils/string.js'; - -export const registry = { - resources: {}, - adapters: {}, - storse: {}, - actions: {}, -}; - -export function register(type, className, cls) { - const key = pluralize(type); - if (!registry[key]) { - registry[key] = {}; - } - registry[key][className] = cls; -} - -export function create(type, className, ...params) { - const key = pluralize(type); - if (!registry[key]) { - throw new Error(`Unknown type: ${singularize(type)}`); - } - if (!registry[key][className]) { - throw new Error(`No ${singularize(type)} named '${className}' registered.`); - } - const ResourceClass = registry[key][className]; - return new ResourceClass(...params); -} - -export function createStore() { - return create('store', 'Store', ...arguments); -} - -export function createAdapter() { - return create('adapter', 'Adapter', ...arguments); -} - -export function createResource() { - return create('resource', 'Resource', ...arguments); -} diff --git a/src/registry.ts b/src/registry.ts new file mode 100644 index 0000000..8dcf7ce --- /dev/null +++ b/src/registry.ts @@ -0,0 +1,39 @@ +import { pluralize, singularize } from './string.js'; +import type { Constructor } from './types.js'; + +export const registry: Record>> = { + resources: {}, + adapters: {}, + stores: {}, + actions: {}, +}; + +export function register(type: string, className: string, constructor: Constructor): void { + const key = pluralize(type); + registry[key] ??= {}; + registry[key][className] = constructor; +} + +export function create(type: string, className: string, ...params: unknown[]): T { + const key = pluralize(type); + const bucket = registry[key]; + if (!bucket) { + throw new Error(`Unknown type: ${singularize(type)}`); + } + const Constructor = bucket[className]; + if (!Constructor) { + throw new Error(`No ${singularize(type)} named '${className}' registered.`); + } + const Factory = Constructor as unknown as new (...args: unknown[]) => unknown; + return new Factory(...params) as T; +} + +export function createStore(...params: unknown[]): T { + return create('store', 'Store', ...params); +} +export function createAdapter(...params: unknown[]): T { + return create('adapter', 'Adapter', ...params); +} +export function createResource(...params: unknown[]): T { + return create('resource', 'Resource', ...params); +} diff --git a/src/resolver.js b/src/resolver.js deleted file mode 100644 index b1e9b58..0000000 --- a/src/resolver.js +++ /dev/null @@ -1,29 +0,0 @@ -import { create } from './registry.js'; -import { classify } from './utils/string.js'; - -export default class Resolver { - constructor() { - return this.lookup(...arguments); - } - - lookup(type, className, ...params) { - return create(type, className, ...params); - } -} - -export function lookup(type, className, ...params) { - return create(type, classify(className), ...params); -} - -// alias for lookup -export function resolve(type, className, ...params) { - return create(type, classify(className), ...params); -} - -export function resolveResource(className, ...params) { - return lookup('resource', classify(className), ...params); -} - -export function resolveAdapter(className, ...params) { - return lookup('adapter', classify(className), ...params); -} diff --git a/src/resolver.ts b/src/resolver.ts new file mode 100644 index 0000000..3eaca90 --- /dev/null +++ b/src/resolver.ts @@ -0,0 +1,25 @@ +import { create } from './registry.js'; +import { classify } from './string.js'; + +export default class Resolver { + constructor(type: string, className: string, ...params: unknown[]) { + return create(type, className, ...params); + } + + lookup(type: string, className: string, ...params: unknown[]): T { + return create(type, className, ...params); + } +} + +export function lookup(type: string, className: string, ...params: unknown[]): T { + return create(type, classify(className), ...params); +} +export function resolve(type: string, className: string, ...params: unknown[]): T { + return lookup(type, className, ...params); +} +export function resolveResource(className: string, ...params: unknown[]): T { + return lookup('resource', className, ...params); +} +export function resolveAdapter(className: string, ...params: unknown[]): T { + return lookup('adapter', className, ...params); +} diff --git a/src/resource.js b/src/resource.js deleted file mode 100644 index 363fca3..0000000 --- a/src/resource.js +++ /dev/null @@ -1,519 +0,0 @@ -// import Store from './store.js'; -import { isEmpty } from './utils/index.js'; -import { isArray } from './utils/array.js'; -import { set, get } from './utils/object.js'; -import { register, createStore } from './registry.js'; - -export function isResource(target) { - return target instanceof Resource; -} - -export default class Resource { - /** - * The base resource for all resources - - * @return {[type]} [description] - */ - constructor(attributes = {}, adapter, resource, options = {}) { - this.attributes = attributes; - this.dirtyAttributes = {}; - this.changes = {}; - this.isLoading = false; - this.isSaving = false; - this.isDestroying = false; - this.isReloading = false; - this.resource = resource; - this.options = options; - this.version = options.version || 'v1'; - this.setAdapter(adapter); - } - - /** - * Set a new adapter to the resource instance, this will update the Store instance - * - * @param {Adapter} adapter - * @return {Resource} this - */ - setAdapter(adapter) { - this.adapter = adapter; - this.store = createStore(this.resource, adapter, { - onAfterFetch: this.syncAttributes.bind(this), - actions: this.options?.actions, - }); - - return this; - } - - /** - * Getter for id attribute - * - * @var {String} - */ - get id() { - return this.getAttribute('id'); - } - - /** - * Creates a new resource on the server - * - * @param {Object} payload [description] - * @return {[type]} [description] - */ - create(attributes = {}) { - const data = this.mergeAttributes(attributes); - this.setFlags(['isLoading', 'isSaving']); - - return this.store.create(data).then((response) => { - this.setFlags(['isLoading', 'isSaving'], false); - - return response; - }); - } - - /** - * Creates a new resource on the server - * - * @param {Object} payload [description] - * @return {[type]} [description] - */ - update(attributes = {}) { - this.setFlags(['isLoading', 'isSaving']); - - return this.store.update(this.attributes.id, attributes).then((response) => { - this.setFlags(['isLoading', 'isSaving'], false); - - return response; - }); - } - - /** - * Deletes the resource instance on the server - * - * @return {[type]} [description] - */ - destroy() { - this.setFlags(['isLoading', 'isDestroying']); - - return this.store.destroy(this.attributes.id).then((response) => { - this.setFlags(['isLoading', 'isDestroying'], false); - - return response; - }); - } - - /** - * Reloads the resource from the server. - * - * @return {[type]} [description] - */ - reload() { - this.setFlags(['isLoading', 'isReloading']); - - return this.store.findRecord(this.attributes.id).then((response) => { - this.reset(); - - return response; - }); - } - - /** - * Sets flag properties. - * - * @return this - */ - setFlags(flags = [], state = true) { - const validFlags = ['isLoading', 'isSaving', 'isReloading', 'isDestroying']; - - for (let i = 0; i < flags.length; i++) { - const flag = flags[i]; - - if (typeof flag !== 'string' || !validFlags.includes(flag)) { - throw new Error(`${flag} is not a valid flag!`); - } - - this[flag] = state; - } - - return this; - } - - /** - * Resets tracked properties - * - * @return this - */ - reset() { - this.dirtyAttributes = {}; - this.changes = {}; - this.isLoading = false; - this.isSaving = false; - this.isReloading = false; - - return this; - } - - /** - * Emptys resource. - * - * @return this - */ - empty() { - this.reset(); - this.attribues = {}; - - return this; - } - - /** - * Saves the resource instance on the server - * - * @return {[type]} [description] - */ - save(options = {}) { - const attributes = this.getAttributes(); - - if (isEmpty(this.id)) { - return this.create(attributes); - } - - if (options.onlyDirty === true) { - return this.savedirty(); - } - - return this.update(attributes); - } - - /** - * Saves only dirtied attributes. - * - * @return {[type]} [description] - */ - saveDirty() { - const dirtyAttributeKeys = Object.keys(this.dirtyAttributes); - const dirtyAttributes = {}; - - for (let i = 0; i < dirtyAttributeKeys.length; i++) { - const key = dirtyAttributeKeys[i]; - dirtyAttributes[key] = this.getAttribute(key); - } - - return this.update(dirtyAttributes); - } - - /** - * Returns the resource meta if exists. - * - * @return {Object} - */ - get meta() { - return this.getAttribute('meta', {}); - } - - /** - * Returns the date instance resource was created. - * - * @return {Date} - */ - get createdAt() { - return this.isAttributeFilled('created_at') ? new Date(this.getAttribute('created_at')) : null; - } - - /** - * Returns the date instance resource was created. - * - * @return {Date} - */ - get updatedAt() { - return this.isAttributeFilled('updated_at') ? new Date(this.getAttribute('updated_at')) : null; - } - - /** - * Checks if resource is loaded from the server. - * - * @return {Boolean} - */ - get isLoaded() { - return this.hasAttributes(['created_at', 'id']); - } - - /** - * Checks if resource ihas no attributes - * - * @return {Boolean} - */ - get isEmpty() { - return Object.values(this?.attributes).length === 0; - } - - /** - * Checks if resource is not saved to server. - * - * @return {Boolean} - */ - get isNew() { - return !this.id; - } - - /** - * Checks if resource is not saved to server. - * - * @return {Boolean} - */ - get isSaved() { - return !this.isNew && this.isLoaded; - } - - /** - * Checks if resource is deleted on server. - * - * @return {Boolean} - */ - get isDeleted() { - return this.hasAttributes(['deleted', 'time']); - } - - /** - * Iterates over each attribute value and property executing a user supplied callback. - * - * @return {Object} - */ - eachAttribute(callback) { - if (typeof callback !== 'function') { - return this; - } - - Object.keys(this?.attributes ?? {}).forEach((property) => { - const value = this.getAttribute(property); - callback.call(this, value, property); - }); - - return this; - } - - /** - * Gets all changes - * - * @return {Object} - */ - changes() { - return this.changes; - } - - /** - * Gets all dirty attributes. - * - * @return {Object} - */ - getDirtyAttributes() { - return this.dirtyAttributes; - } - - /** - * Checks if property is dirty. - * - * @param {String} property [description] - * @return {Boolean} - */ - isDirty(property) { - return property in this.dirtyAttributes; - } - - /** - * Checks if any properties is dirty. - * - * @return {Boolean} - */ - hasDirtyAttributes() { - return Object.keys(this?.dirtyAttributes ?? {}).length > 0; - } - - /** - * Updates a instance property without tracking changes or dirtying attribute. - * - * @param {String} property [description] - * @param {mixed} value [description] - */ - mutate(property, value) { - this.attributes[property] = value; - } - - /** - * Set an instance property locally - * - * @param {String} property [description] - * @param {mixed} value [description] - */ - setAttribute(property, value = null) { - if (value === null && typeof property === 'object') { - return this.setAttributes(property); - } - - const previousValue = this?.attributes[property] ?? null; - - // use object setter - set(this.attributes, property, value); - set(this.dirtyAttributes, property, previousValue); - - // track changes - if (!isArray(this?.changes[property])) { - this.changes[property] = []; - } - - this.changes[property].push({ - property, - previousValue, - value, - changedAt: new Date(), - }); - - return this; - } - - /** - * Set multiple instance properties locally - * - * @param {Object} properties [description] - */ - setAttributes(attributes = {}) { - for (let property in attributes) { - this.setAttribute(property, attributes[property]); - } - - return this; - } - - /** - * Get an attribute - * - * @param {String} attribute The attribute key to get - * @param {mixed} defaultValue The default value if no attribute value - */ - getAttribute(attribute, defaultValue = null) { - const value = get(this?.attributes ?? {}, attribute); - - if (value === undefined) { - return defaultValue; - } - - return value; - } - - /** - * Checks if attribute exists. - * - * @param {String} property [description] - * @return {Boolean} - */ - hasAttribute(property) { - if (isArray(property)) { - const properties = property; - const attributeKeys = Object.keys(this.attributes ?? {}); - - return properties.every((prop) => attributeKeys.includes(prop)); - } - - if (!this?.attributes) { - return false; - } - - return property in this.attributes; - } - - /** - * Alias for checking if has multiple attributes. - * - * @param {Array} properties - * @return {Boolean} - */ - hasAttributes(properties = []) { - return this.hasAttribute(properties); - } - - /** - * Returns true if attribute has value. - * - * @param {Array} properties - * @return {Boolean} - */ - isAttributeFilled(property) { - if (isArray(property)) { - return this.hasAttribute(property) && property.every((prop) => !isEmpty(this.getAttribute(prop))); - } - - return this.hasAttribute(property) && !isEmpty(this.getAttribute(property)); - } - - /** - * Get multiple attributes. - * - * @param {Array} properties [description] - * @param {[type]} value [description] - */ - getAttributes(properties) { - const attributes = {}; - - if (properties === null || properties === undefined) { - return this.getAttributes(Object.keys(this.attributes)); - } - - if (typeof properties === 'string') { - return this.getAttribute([...arguments]); - } - - if (!isArray(properties)) { - throw new Error('No attribute properties provided!'); - } - - for (const element of properties) { - const property = element; - - if (typeof property !== 'string') { - continue; - } - - let value = this.getAttribute(property); - - if (typeof value?.attributes === 'object' && !isArray(value?.attributes)) { - value = value.attributes; - } - - attributes[property] = value; - } - - return attributes; - } - - /** - * Serialize resource to a POJO - * - * @returns {Object} - */ - serialize() { - return this.getAttributes(); - } - - /** - * Merge and return attributes on the resource instance. - * - * @param {[type]} property [description] - * @param {[type]} value [description] - */ - mergeAttributes(attributes = {}) { - const modelAttributes = this?.attributes ?? {}; - this.attributes = { ...modelAttributes, ...attributes }; - - return this.attributes; - } - - /** - * Merge and return attributes on the resource instance. - * - * @param {[type]} property [description] - * @param {[type]} value [description] - */ - syncAttributes(json = {}) { - this.attributes = json; - } -} - -register('resource', 'Resource', Resource); diff --git a/src/resource.ts b/src/resource.ts new file mode 100644 index 0000000..e422fdb --- /dev/null +++ b/src/resource.ts @@ -0,0 +1,265 @@ +import { register } from './registry.js'; +import Store from './store.js'; +import { get, isEmpty, isResourceLike, set } from './utils.js'; +import type { AdapterLike, Identifier, ResourceAttributes, ResourceOptions } from './types.js'; + +export interface ResourceChange { + property: string; + previousValue: unknown; + value: unknown; + changedAt: Date; +} + +export interface SaveOptions { + onlyDirty?: boolean; +} + +type ResourceFlag = 'isLoading' | 'isSaving' | 'isReloading' | 'isDestroying'; + +export function isResource(target: unknown): target is Resource { + return target instanceof Resource; +} + +export default class Resource { + attributes: TAttributes; + dirtyAttributes: ResourceAttributes = {}; + changes: Record = {}; + isLoading = false; + isSaving = false; + isDestroying = false; + isReloading = false; + resource: string; + options: ResourceOptions; + version: string; + adapter!: AdapterLike; + store!: Store>; + + constructor(attributes = {} as TAttributes, adapter?: AdapterLike | null, resource = 'resource', options: ResourceOptions = {}) { + this.attributes = attributes; + this.resource = resource; + this.options = options; + this.version = options.version ?? 'v1'; + this.setAdapter(adapter); + } + + setAdapter(adapter?: AdapterLike | null): this { + this.store = new Store>(this.resource, adapter, { + onAfterFetch: (json) => this.syncAttributes(json), + ...(this.options.actions ? { actions: this.options.actions } : {}), + }); + this.adapter = this.store.adapter; + return this; + } + + get id(): unknown { + return this.getAttribute('id'); + } + + async create(attributes: ResourceAttributes = {}): Promise { + this.setFlags(['isLoading', 'isSaving']); + try { + return await this.store.create(this.mergeAttributes(attributes)); + } finally { + this.setFlags(['isLoading', 'isSaving'], false); + } + } + + async update(attributes: ResourceAttributes = {}): Promise { + this.setFlags(['isLoading', 'isSaving']); + try { + return await this.store.update(this.attributes.id as Identifier, attributes); + } finally { + this.setFlags(['isLoading', 'isSaving'], false); + } + } + + async destroy(): Promise { + this.setFlags(['isLoading', 'isDestroying']); + try { + return await this.store.destroy(this.attributes.id as Identifier); + } finally { + this.setFlags(['isLoading', 'isDestroying'], false); + } + } + + async reload(): Promise { + this.setFlags(['isLoading', 'isReloading']); + try { + return await this.store.findRecord(this.attributes.id as Identifier); + } finally { + this.setFlags(['isLoading', 'isReloading'], false); + } + } + + setFlags(flags: ResourceFlag[] = [], state = true): this { + const validFlags: ResourceFlag[] = ['isLoading', 'isSaving', 'isReloading', 'isDestroying']; + for (const flag of flags) { + if (!validFlags.includes(flag)) { + throw new Error(`${String(flag)} is not a valid flag!`); + } + this[flag] = state; + } + return this; + } + + reset(): this { + this.dirtyAttributes = {}; + this.changes = {}; + this.setFlags(['isLoading', 'isSaving', 'isReloading', 'isDestroying'], false); + return this; + } + + empty(): this { + this.reset(); + this.attributes = {} as TAttributes; + return this; + } + + save(options: SaveOptions = {}): Promise { + if (isEmpty(this.id)) { + return this.create(this.getAttributes() as ResourceAttributes); + } + return options.onlyDirty === true ? this.saveDirty() : this.update(this.getAttributes() as ResourceAttributes); + } + + saveDirty(): Promise { + return this.update(this.getAttributes(Object.keys(this.dirtyAttributes)) as ResourceAttributes); + } + + get meta(): unknown { + return this.getAttribute('meta', {}); + } + + get createdAt(): Date | null { + const value = this.getAttribute('created_at'); + return this.isAttributeFilled('created_at') ? new Date(String(value)) : null; + } + + get updatedAt(): Date | null { + const value = this.getAttribute('updated_at'); + return this.isAttributeFilled('updated_at') ? new Date(String(value)) : null; + } + + get isLoaded(): boolean { + return this.hasAttributes(['created_at', 'id']); + } + get isEmpty(): boolean { + return Object.keys(this.attributes).length === 0; + } + get isNew(): boolean { + return !this.id; + } + get isSaved(): boolean { + return !this.isNew && this.isLoaded; + } + get isDeleted(): boolean { + return this.hasAttributes(['deleted', 'time']); + } + + eachAttribute(callback?: (this: this, value: unknown, property: string) => void): this { + if (typeof callback !== 'function') { + return this; + } + for (const property of Object.keys(this.attributes)) { + callback.call(this, this.getAttribute(property), property); + } + return this; + } + + getDirtyAttributes(): ResourceAttributes { + return this.dirtyAttributes; + } + isDirty(property: string): boolean { + return property in this.dirtyAttributes; + } + hasDirtyAttributes(): boolean { + return Object.keys(this.dirtyAttributes).length > 0; + } + + mutate(property: string, value: unknown): void { + set(this.attributes, property, value); + } + + setAttribute(property: string | ResourceAttributes, value: unknown = null): this { + if (typeof property === 'object') { + return this.setAttributes(property); + } + const name = property; + const previousValue = this.getAttribute(name); + set(this.attributes, name, value); + if (!(name in this.dirtyAttributes)) { + set(this.dirtyAttributes, name, previousValue); + } + this.changes[name] ??= []; + this.changes[name].push({ property: name, previousValue, value, changedAt: new Date() }); + return this; + } + + setAttributes(attributes: ResourceAttributes = {}): this { + for (const [property, value] of Object.entries(attributes)) { + this.setAttribute(property, value); + } + return this; + } + + getAttribute(attribute: string, defaultValue: unknown = null): unknown { + return get(this.attributes, attribute) ?? defaultValue; + } + + hasAttribute(property: string | string[]): boolean { + if (Array.isArray(property)) { + return property.every((name) => name in this.attributes); + } + return property in this.attributes; + } + + hasAttributes(properties: string[] = []): boolean { + return this.hasAttribute(properties); + } + + isAttributeFilled(property: string | string[]): boolean { + if (Array.isArray(property)) { + return this.hasAttribute(property) && property.every((name) => !isEmpty(this.getAttribute(name))); + } + return this.hasAttribute(property) && !isEmpty(this.getAttribute(property)); + } + + getAttributes(properties?: string[] | string): unknown { + if (typeof properties === 'string') { + return this.getAttribute(properties); + } + const names = properties ?? Object.keys(this.attributes); + return Object.fromEntries( + names + .filter((name) => typeof name === 'string') + .map((name) => { + const value = this.getAttribute(name); + return [name, isResourceLike(value) ? value.attributes : value]; + }) + ); + } + + serialize(): ResourceAttributes { + return this.getAttributes() as ResourceAttributes; + } + + mergeAttributes(attributes: ResourceAttributes = {}): TAttributes { + this.attributes = { ...this.attributes, ...attributes }; + return this.attributes; + } + + syncAttributes(json: unknown = {}): void { + if (json && typeof json === 'object' && !Array.isArray(json)) { + this.attributes = json as TAttributes; + } + } +} + +register('resource', 'Resource', Resource); + +Object.defineProperty(Resource.prototype, 'changes', { + configurable: true, + value(this: Resource): Record { + return this.changes; + }, +}); diff --git a/src/resources.js b/src/resources.js deleted file mode 100644 index 714e3d5..0000000 --- a/src/resources.js +++ /dev/null @@ -1,16 +0,0 @@ -export { default as Order } from './resources/order.js'; -export { default as Payload } from './resources/payload.js'; -export { default as Entity } from './resources/entity.js'; -export { default as Place } from './resources/place.js'; -export { default as Waypoint } from './resources/waypoint.js'; -export { default as TrackingStatus } from './resources/tracking-status.js'; -export { default as Vehicle } from './resources/vehicle.js'; -export { default as Driver } from './resources/driver.js'; -export { default as Vendor } from './resources/vendor.js'; -export { default as Organization } from './resources/organization.js'; -export { default as Contact } from './resources/contact.js'; -export { default as Zone } from './resources/zone.js'; -export { default as ServiceArea } from './resources/service-area.js'; -export { default as ServiceRate } from './resources/service-rate.js'; -export { default as ServiceQuote } from './resources/service-quote.js'; -export { default as Fleet } from './resources/fleet.js'; diff --git a/src/resources.ts b/src/resources.ts new file mode 100644 index 0000000..b5fe0a7 --- /dev/null +++ b/src/resources.ts @@ -0,0 +1,416 @@ +import Resource, { isResource } from './resource.js'; +import { register } from './registry.js'; +import type Store from './store.js'; +import StoreActions from './store-actions.js'; +import { createCollection } from './collection.js'; +import { isPhone, Point } from './utils.js'; +import type { AdapterLike, Identifier, RequestOptions, ResourceAttributes, ResourceOptions } from './types.js'; + +type ActionStore = Store & Record; + +function callAction(store: Store, name: string, ...args: unknown[]): Promise { + const candidate = (store as ActionStore)[name]; + if (typeof candidate !== 'function') { + throw new Error(`Store action '${name}' is not available.`); + } + return Promise.resolve((candidate as (...values: unknown[]) => unknown).apply(store, args)); +} + +function resourceId(value: unknown): unknown { + return isResource(value) ? value.id : value; +} + +export class Contact extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'contact', options); + } +} + +export class Entity extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'entity', options); + } +} + +export class Fleet extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'fleet', options); + } +} + +export class Vendor extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'vendor', options); + } +} + +export class Vehicle extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'vehicle', options); + } +} + +export class Zone extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'zone', options); + } +} + +export class ServiceArea extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'service-area', options); + } +} + +export class ServiceRate extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'service-rate', options); + } +} + +export class TrackingStatus extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'tracking-status', options); + } +} + +export class Place extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}, resource = 'place') { + super(attributes, adapter, resource, options); + } + + static fromGoogleAddress(googleAddress: { getAttribute(name: string): unknown; get(name: string): unknown }, adapter?: AdapterLike | null, options: ResourceOptions = {}): Place { + const coordinates = googleAddress.getAttribute('coordinates'); + const latitude = Array.isArray(coordinates) ? Number(coordinates[0]) : 0; + const longitude = Array.isArray(coordinates) ? Number(coordinates[1]) : 0; + return new Place( + { + name: null, + address: googleAddress.getAttribute('address'), + location: new Point(latitude, longitude), + street1: googleAddress.getAttribute('address'), + street2: null, + city: googleAddress.getAttribute('city'), + province: googleAddress.getAttribute('stateLong'), + postal_code: googleAddress.getAttribute('postalCode'), + neighborhood: googleAddress.get('neighborhood'), + district: googleAddress.getAttribute('county'), + building: googleAddress.get('building'), + country: googleAddress.getAttribute('countryShort'), + phone: null, + security_access_code: null, + }, + adapter, + options + ); + } + + get latitude(): number { + return this.location.coordinates[1]; + } + get longitude(): number { + return this.location.coordinates[0]; + } + get coordinates(): [number, number] { + return [this.latitude, this.longitude]; + } + + protected get location(): Point { + const value = this.getAttribute('location'); + if (value instanceof Point) { + return value; + } + if (value && typeof value === 'object' && 'coordinates' in value) { + const coordinates = (value as { coordinates?: unknown }).coordinates; + if (Array.isArray(coordinates)) { + return Point.fromGeoJson({ coordinates: [Number(coordinates[0]), Number(coordinates[1])] }); + } + } + return new Point(); + } + + setOwner(owner: Resource | string): this { + const id = resourceId(owner); + if (typeof id === 'string') { + this.setAttribute('owner', id); + } + return this; + } +} + +export class Waypoint extends Place { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, options, 'waypoint'); + } +} + +export class Payload extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'payload', options); + } + + attach(_entity: Entity): void { + void _entity; + } + + get entities(): ReturnType> { + const values = this.getAttribute('entities', []); + return createCollection((Array.isArray(values) ? values : []).map((value) => new Entity(value as ResourceAttributes, this.adapter))); + } + + get dropoff(): Place | null { + const value = this.getAttribute('dropoff'); + return value && typeof value === 'object' ? new Place(value as ResourceAttributes, this.adapter) : null; + } + + get pickup(): Place | null { + const value = this.getAttribute('pickup'); + return value && typeof value === 'object' ? new Place(value as ResourceAttributes, this.adapter) : null; + } + + get waypoints(): ReturnType> { + const values = this.getAttribute('waypoints', []); + return createCollection((Array.isArray(values) ? values : []).map((value) => new Waypoint(value as ResourceAttributes, this.adapter))); + } +} + +export const organizationActions = new StoreActions({ + current(this: Store, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.get(`${this.namespace}/current`, params, options); + }, +}); + +export class Organization extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'organization', { actions: organizationActions, ...options }); + } +} + +function serializeOrganizations(response: unknown, adapter: AdapterLike): Organization | Organization[] { + return Array.isArray(response) ? response.map((attributes) => new Organization(attributes as ResourceAttributes, adapter)) : new Organization(response as ResourceAttributes, adapter); +} + +export const driverActions = new StoreActions({ + login(this: Store, identity: string, password: string | null = null, attributes: ResourceAttributes = {}) { + if (isPhone(identity)) { + return this.adapter.post('drivers/login-with-sms', { phone: identity }); + } + if (!password) { + throw new Error('Login requires password!'); + } + return this.adapter.post('drivers/login', { identity, password, ...attributes }).then((response) => this.afterFetch(response)); + }, + verifyCode(this: Store, identity: string, code: string, attributes: ResourceAttributes = {}) { + return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then((response) => this.afterFetch(response)); + }, + track(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`drivers/${String(id)}/track`, params, options).then((response) => this.afterFetch(response)); + }, + listOrganizations(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.get(`drivers/${String(id)}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter)); + }, + switchOrganization(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`drivers/${String(id)}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter)); + }, + currentOrganization(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.get(`drivers/${String(id)}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter)); + }, + retrieve(this: Store, id: Identifier) { + return this.findRecord(id); + }, + syncDevice(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`drivers/${String(id)}/register-device`, params, options); + }, +}); + +export class Driver extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'driver', { actions: driverActions, ...options }); + } + get token(): unknown { + return this.getAttribute('token'); + } + get isOnline(): boolean { + return this.getAttribute('online') === true; + } + get latitude(): number { + return this.location.coordinates[1]; + } + get longitude(): number { + return this.location.coordinates[0]; + } + get coordinates(): [number, number] { + return [this.latitude, this.longitude]; + } + private get location(): Point { + const value = this.getAttribute('location'); + return value instanceof Point ? value : new Point(); + } + track(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'track', this.id, params, options); + } + syncDevice(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'syncDevice', this.id, params, options); + } + listOrganizations(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'listOrganizations', this.id, params, options); + } + switchOrganization(organizationId: Identifier, options: RequestOptions = {}): Promise { + return callAction(this.store, 'switchOrganization', this.id, { next: organizationId }, options); + } + currentOrganization(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'currentOrganization', this.id, params, options); + } +} + +export const orderActions = new StoreActions({ + getDistanceAndTime(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.get(`${this.namespace}/${String(id)}/distance-and-time`, params, options); + }, + getNextActivity(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.get(`${this.namespace}/${String(id)}/next-activity`, params, options); + }, + dispatch(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`${this.namespace}/${String(id)}/dispatch`, params, options).then((response) => this.afterFetch(response)); + }, + start(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`${this.namespace}/${String(id)}/start`, params, options).then((response) => this.afterFetch(response)); + }, + updateActivity(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`${this.namespace}/${String(id)}/update-activity`, params, options).then((response) => this.afterFetch(response)); + }, + setDestination(this: Store, id: Identifier, destination: unknown, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`${this.namespace}/${String(id)}/set-destination/${String(resourceId(destination))}`, params, options).then((response) => this.afterFetch(response)); + }, + captureQrCode(this: Store, id: Identifier, subject: unknown = null, params: ResourceAttributes = {}, options: RequestOptions = {}) { + const subjectId = resourceId(subject); + return this.adapter.post(`${this.namespace}/${String(id)}/capture-qr${subjectId ? `/${String(subjectId)}` : ''}`, params, options); + }, + captureSignature(this: Store, id: Identifier, subject: unknown = null, params: ResourceAttributes = {}, options: RequestOptions = {}) { + const subjectId = resourceId(subject); + return this.adapter.post(`${this.namespace}/${String(id)}/capture-signature${subjectId ? `/${String(subjectId)}` : ''}`, params, options); + }, + complete(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.post(`${this.namespace}/${String(id)}/complete`, params, options).then((response) => this.afterFetch(response)); + }, + cancel(this: Store, id: Identifier, params: ResourceAttributes = {}, options: RequestOptions = {}) { + return this.adapter.delete(`${this.namespace}/${String(id)}/cancel`, params as RequestOptions, options).then((response) => this.afterFetch(response)); + }, +}); + +export class Order extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'order', { actions: orderActions, ...options }); + } + getDistanceAndTime(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'getDistanceAndTime', this.id, params, options); + } + dispatch(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'dispatch', this.id, params, options); + } + start(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'start', this.id, params, options); + } + setDestination(destination: unknown, params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'setDestination', this.id, destination, params, options); + } + captureQrCode(subject: unknown = null, params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'captureQrCode', this.id, subject, params, options); + } + captureSignature(subject: unknown = null, params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'captureSignature', this.id, subject, params, options); + } + getNextActivity(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'getNextActivity', this.id, params, options); + } + updateActivity(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'updateActivity', this.id, params, options); + } + cancel(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'cancel', this.id, params, options); + } + complete(params: ResourceAttributes = {}, options: RequestOptions = {}): Promise { + return callAction(this.store, 'complete', this.id, params, options); + } + get isDispatched(): boolean { + return this.getAttribute('dispatched_at') !== null; + } + get isNotDispatched(): boolean { + return this.getAttribute('dispatched_at') === null; + } + get isStarted(): boolean { + return this.getAttribute('started_at') !== null; + } + get isNotStarted(): boolean { + return this.getAttribute('started_at') === null; + } + get isCompleted(): boolean { + return this.getAttribute('status') === 'completed'; + } + get isCanceled(): boolean { + return this.getAttribute('status') === 'canceled'; + } + get isEnroute(): boolean { + return ['driver_enroute', 'enroute'].includes(String(this.getAttribute('status'))); + } + get isInProgress(): boolean { + return this.isStarted && !this.isCanceled && !this.isCompleted; + } + get scheduledAt(): Date | null { + return this.dateAttribute('scheduled_at'); + } + get startedAt(): Date | null { + return this.dateAttribute('started_at'); + } + get dispatchedAt(): Date | null { + return this.dateAttribute('dispatched_at'); + } + get status(): unknown { + return this.getAttribute('status'); + } + private dateAttribute(name: string): Date | null { + return this.isAttributeFilled(name) ? new Date(String(this.getAttribute(name))) : null; + } +} + +export const serviceQuoteActions = new StoreActions({ + fromPayload(this: Store, payload: unknown, params: ResourceAttributes = {}) { + return this.adapter.get(this.namespace, { payload: resourceId(payload), ...params }).then((response) => this.afterFetch(response)); + }, + fromPreliminary(this: Store, params: ResourceAttributes = {}) { + return this.adapter.get(`${this.namespace}/preliminary`, params).then((response) => this.afterFetch(response)); + }, +}); + +export class ServiceQuote extends Resource { + constructor(attributes: ResourceAttributes = {}, adapter?: AdapterLike | null, options: ResourceOptions = {}) { + super(attributes, adapter, 'service-quote', { actions: serviceQuoteActions, ...options }); + } + fromPreliminary(params: ResourceAttributes = {}): Promise { + return callAction(this.store, 'fromPreliminary', params); + } + fromPayload(payload: Payload | Identifier, params: ResourceAttributes = {}): Promise { + return callAction(this.store, 'fromPayload', payload, params); + } +} + +for (const [name, constructor] of Object.entries({ + Contact, + Driver, + Entity, + Fleet, + Order, + Organization, + Payload, + Place, + ServiceArea, + ServiceQuote, + ServiceRate, + TrackingStatus, + Vehicle, + Vendor, + Waypoint, + Zone, +})) { + register('resource', name, constructor); +} diff --git a/src/resources/contact.js b/src/resources/contact.js deleted file mode 100644 index be74f0d..0000000 --- a/src/resources/contact.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Contact extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'contact', options); - } -} - -register('resource', 'Contact', Contact); diff --git a/src/resources/driver.js b/src/resources/driver.js deleted file mode 100644 index 4263911..0000000 --- a/src/resources/driver.js +++ /dev/null @@ -1,124 +0,0 @@ -import Resource from '../resource.js'; -import Organization from './organization.js'; -import { register } from '../registry.js'; -import { StoreActions, isPhone, Point } from '../utils/index.js'; -import { isArray } from '../utils/array.js'; - -export const serializeOrganizations = (response, adapter) => { - if (isArray(response)) { - return response.map((organizationJson) => { - return new Organization(organizationJson, adapter); - }); - } - - return new Organization(response, adapter); -}; - -export const driverActions = new StoreActions({ - // const { error } = await fleetbase.drivers.login('+1 111-1111'); - login: function (identity, password = null, attributes = {}) { - // handle phone number authentication - if (isPhone(identity)) { - return this.adapter.post('drivers/login-with-sms', { phone: identity }); - } - - if (!password) { - throw new Error('Login requires password!'); - } - - return this.adapter.post('drivers/login', { identity, password, ...attributes }).then(this.afterFetch.bind(this)); - }, - - verifyCode: function (identity, code, attributes = {}) { - return this.adapter.post('drivers/verify-code', { identity, code, ...attributes }).then(this.afterFetch.bind(this)); - }, - - track: function (id, params = {}, options = {}) { - return this.adapter.post(`drivers/${id}/track`, params, options).then(this.afterFetch.bind(this)); - }, - - listOrganizations: function (id, params = {}, options = {}) { - return this.adapter.get(`drivers/${id}/organizations`, params, options).then((response) => serializeOrganizations(response, this.adapter)); - }, - - switchOrganization: function (id, params = {}, options = {}) { - return this.adapter.post(`drivers/${id}/switch-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter)); - }, - - currentOrganization: function (id, params = {}, options = {}) { - return this.adapter.get(`drivers/${id}/current-organization`, params, options).then((response) => serializeOrganizations(response, this.adapter)); - }, - - retrieve: function (id) { - return this.findRecord(id); - }, - - syncDevice(id, params = {}, options = {}) { - return this.adapter.post(`drivers/${id}/register-device`, params, options); - }, -}); - -export default class Driver extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'driver', { actions: driverActions, ...options }); - } - - get token() { - return this.getAttribute('token'); - } - - get isOnline() { - return this.getAttribute('online') === true; - } - - /** - * The latitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get latitude() { - return this.getAttribute('location', new Point())?.coordinates[1]; - } - - /** - * The longitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get longitude() { - return this.getAttribute('location', new Point())?.coordinates[0]; - } - - /** - * Array coordinate pair for Place location. - * - * @var {Array} - */ - get coordinates() { - const { latitude, longitude } = this; - - return [latitude, longitude]; - } - - track(params = {}, options = {}) { - return this.store.track(this.id, params, options); - } - - syncDevice(params = {}, options = {}) { - return this.store.syncDevice(this.id, params, options); - } - - listOrganizations(params = {}, options = {}) { - return this.store.listOrganizations(this.id, params, options); - } - - switchOrganization(organizationId, options = {}) { - return this.store.switchOrganization(this.id, { next: organizationId }, options); - } - - currentOrganization(params = {}, options = {}) { - return this.store.currentOrganization(this.id, params, options); - } -} - -register('resource', 'Driver', Driver); diff --git a/src/resources/entity.js b/src/resources/entity.js deleted file mode 100644 index 6217baa..0000000 --- a/src/resources/entity.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Entity extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'entity', options); - } -} - -register('resource', 'Entity', Entity); diff --git a/src/resources/fleet.js b/src/resources/fleet.js deleted file mode 100644 index 8e59168..0000000 --- a/src/resources/fleet.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Fleet extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'fleet', options); - } -} - -register('resource', 'Fleet', Fleet); diff --git a/src/resources/index.js b/src/resources/index.js deleted file mode 100644 index 5cec568..0000000 --- a/src/resources/index.js +++ /dev/null @@ -1,15 +0,0 @@ -export { default as Order } from './order.js'; -export { default as Payload } from './payload.js'; -export { default as Entity } from './entity.js'; -export { default as Place } from './place.js'; -export { default as Waypoint } from './waypoint.js'; -export { default as TrackingStatus } from './tracking-status.js'; -export { default as Vehicle } from './vehicle.js'; -export { default as Driver } from './driver.js'; -export { default as Vendor } from './vendor.js'; -export { default as Organization } from './organization.js'; -export { default as Contact } from './contact.js'; -export { default as Zone } from './zone.js'; -export { default as ServiceArea } from './service-area.js'; -export { default as ServiceRate } from './service-rate.js'; -export { default as ServiceQuote } from './service-quote.js'; diff --git a/src/resources/order.js b/src/resources/order.js deleted file mode 100644 index 24ff19f..0000000 --- a/src/resources/order.js +++ /dev/null @@ -1,153 +0,0 @@ -import Resource, { isResource } from '../resource.js'; -import { register } from '../registry.js'; -import StoreActions from '../utils/store-actions.js'; - -export const orderActions = new StoreActions({ - getDistanceAndTime: function (id, params = {}, options = {}) { - return this.adapter.get(`${this.namespace}/${id}/distance-and-time`, params, options); - }, - - getNextActivity: function (id, params = {}, options = {}) { - return this.adapter.get(`${this.namespace}/${id}/next-activity`, params, options); - }, - - dispatch: function (id, params = {}, options = {}) { - return this.adapter.post(`${this.namespace}/${id}/dispatch`, params, options).then(this.afterFetch.bind(this)); - }, - - start: function (id, params = {}, options = {}) { - return this.adapter.post(`${this.namespace}/${id}/start`, params, options).then(this.afterFetch.bind(this)); - }, - - updateActivity: function (id, params = {}, options = {}) { - return this.adapter.post(`${this.namespace}/${id}/update-activity`, params, options).then(this.afterFetch.bind(this)); - }, - - setDestination: function (id, destinationId, params = {}, options = {}) { - if (isResource(destinationId)) { - destinationId = destinationId.id; - } - - return this.adapter.post(`${this.namespace}/${id}/set-destination/${destinationId}`, params, options).then(this.afterFetch.bind(this)); - }, - - captureQrCode: function (id, subjectId = null, params = {}, options = {}) { - if (isResource(subjectId)) { - subjectId = subjectId.id; - } - - return this.adapter.post(`${this.namespace}/${id}/capture-qr${!subjectId ? '' : '/' + subjectId}`, params, options); - }, - - captureSignature: function (id, subjectId = null, params = {}, options = {}) { - if (isResource(subjectId)) { - subjectId = subjectId.id; - } - - return this.adapter.post(`${this.namespace}/${id}/capture-signature${!subjectId ? '' : '/' + subjectId}`, params, options); - }, - - complete: function (id, params = {}, options = {}) { - return this.adapter.post(`${this.namespace}/${id}/complete`, params, options).then(this.afterFetch.bind(this)); - }, - - cancel: function (id, params = {}, options = {}) { - return this.adapter.delete(`${this.namespace}/${id}/cancel`, params, options).then(this.afterFetch.bind(this)); - }, -}); - -export default class Order extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'order', { actions: orderActions, ...options }); - } - - getDistanceAndTime(params = {}, options = {}) { - return this.store.getDistanceAndTime(this.id, params, options); - } - - dispatch(params = {}, options = {}) { - return this.store.dispatch(this.id, params, options); - } - - start(params = {}, options = {}) { - return this.store.start(this.id, params, options); - } - - setDestination(destinationId, params = {}, options = {}) { - return this.store.setDestination(this.id, destinationId, params, options); - } - - captureQrCode(subjectId = null, params = {}, options = {}) { - return this.store.captureQrCode(this.id, subjectId, params, options); - } - - captureSignature(subjectId = null, params = {}, options = {}) { - return this.store.captureSignature(this.id, subjectId, params, options); - } - - getNextActivity(params = {}, options = {}) { - return this.store.getNextActivity(this.id, params, options); - } - - updateActivity(params = {}, options = {}) { - return this.store.updateActivity(this.id, params, options); - } - - cancel(params = {}, options = {}) { - return this.store.cancel(this.id, params, options); - } - - complete(params = {}, options = {}) { - return this.store.complete(this.id, params, options); - } - - get isDispatched() { - return this.getAttribute('dispatched_at') !== null; - } - - get isNotDispatched() { - return this.getAttribute('dispatched_at') == null; - } - - get isStarted() { - return this.getAttribute('started_at') !== null; - } - - get isNotStarted() { - return this.getAttribute('started_at') == null; - } - - get isCompleted() { - return this.getAttribute('status') == 'completed'; - } - - get isCanceled() { - return this.getAttribute('status') == 'canceled'; - } - - get isEnroute() { - return this.getAttribute('status') == 'driver_enroute' || this.getAttribute('status') === 'enroute'; - } - - get isInProgress() { - return this.isStarted && !this.isCanceled && !this.isCompleted; - } - - get scheduledAt() { - return this.isAttributeFilled('scheduled_at') ? new Date(this.getAttribute('scheduled_at')) : null; - } - - get startedAt() { - return this.isAttributeFilled('started_at') ? new Date(this.getAttribute('started_at')) : null; - } - - get dispatchedAt() { - return this.isAttributeFilled('dispatched_at') ? new Date(this.getAttribute('dispatched_at')) : null; - } - - get status() { - return this.getAttribute('status'); - } -} - -register('resource', 'Order', Order); diff --git a/src/resources/organization.js b/src/resources/organization.js deleted file mode 100644 index f7183e1..0000000 --- a/src/resources/organization.js +++ /dev/null @@ -1,17 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; -import { StoreActions } from '../utils/index.js'; - -export const organizationActions = new StoreActions({ - current: function (params = {}, options = {}) { - return this.adapter.get(`${this.namespace}/current`, params, options); - }, -}); - -export default class Organization extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'organization', { actions: organizationActions, ...options }); - } -} - -register('resource', 'Organization', Organization); diff --git a/src/resources/payload.js b/src/resources/payload.js deleted file mode 100644 index 635363c..0000000 --- a/src/resources/payload.js +++ /dev/null @@ -1,60 +0,0 @@ -import Resource from '../resource.js'; -import { createCollection } from '../utils/collection.js'; -import { resolveResource } from '../resolver.js'; -import { register } from '../registry.js'; - -export default class Payload extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'payload', options); - } - - /** - * Attaches an entity to an existing payload and returns - * the payload with the entity attached - * - * @param {Entity} Entity entity [description] - * @return {Payload} [description] - */ - // eslint-disable-next-line no-unused-vars - attach(entity) { - // perform op return payload - } - - /** - * Returns all of the entities attached to this payload - * - * @return {Collection} [description] - */ - get entities() { - return createCollection(this.entities.map((data) => resolveResource('Entity', data, this.adapter))); - } - - /** - * Returns the dropoff for this payload - * - * @return {Place|null} [description] - */ - get dropoff() { - return this.dropoff ? resolveResource('Place', this.dropoff, this.adapter) : null; - } - - /** - * Returns the pickup for this payload - * - * @return {Place|null} [description] - */ - get pickup() { - return this.pickup ? resolveResource('Place', this.pickup, this.adapter) : null; - } - - /** - * Returns all the waypoints for this payload - * - * @return {Collection} [description] - */ - get waypoints() { - return createCollection(this.waypoints.map((data) => resolveResource('Waypoint', data, this.adapter))); - } -} - -register('resource', 'Payload', Payload); diff --git a/src/resources/place.js b/src/resources/place.js deleted file mode 100644 index c3f0722..0000000 --- a/src/resources/place.js +++ /dev/null @@ -1,80 +0,0 @@ -import Resource, { isResource } from '../resource.js'; -import { register } from '../registry.js'; -import { Point } from '../utils/index.js'; - -export default class Place extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'place', options); - } - - static fromGoogleAddress(googleAddress, adapter, options = {}) { - const [latitude, longitude] = googleAddress.getAttribute('coordinates'); - const attributes = { - name: null, - address: googleAddress.getAttribute('address'), - location: new Point(latitude, longitude), - street1: googleAddress.getAttribute('address'), - street2: null, - city: googleAddress.getAttribute('city'), - province: googleAddress.getAttribute('stateLong'), - postal_code: googleAddress.getAttribute('postalCode'), - neighborhood: googleAddress.get('neighborhood'), - district: googleAddress.getAttribute('county'), - building: googleAddress.get('building'), - country: googleAddress.getAttribute('countryShort'), - phone: null, - security_access_code: null, - }; - - return new Place(attributes, adapter, options); - } - - /** - * The latitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get latitude() { - return this.getAttribute('location', new Point())?.coordinates[1]; - } - - /** - * The longitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get longitude() { - return this.getAttribute('location', new Point())?.coordinates[0]; - } - - /** - * Array coordinate pair for Place location. - * - * @var {Array} - */ - get coordinates() { - const { latitude, longitude } = this; - - return [latitude, longitude]; - } - - /** - * Set the owner of the place. - * - * @param {Object|String} owner - * @return {Place} - */ - setOwner(owner) { - if (isResource(owner)) { - this.setAttribute('owner', owner.id); - } - - if (typeof owner === 'string') { - this.setAttribute('owner', owner); - } - - return this; - } -} - -register('resource', 'Place', Place); diff --git a/src/resources/service-area.js b/src/resources/service-area.js deleted file mode 100644 index ba5617e..0000000 --- a/src/resources/service-area.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class ServiceArea extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'service-area', options); - } -} - -register('resource', 'ServiceArea', ServiceArea); diff --git a/src/resources/service-quote.js b/src/resources/service-quote.js deleted file mode 100644 index 882b6d8..0000000 --- a/src/resources/service-quote.js +++ /dev/null @@ -1,14 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class ServiceQuote extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'service-quote', options); - } - - fromPreliminary() {} - - fromPayload() {} -} - -register('resource', 'ServiceQuote', ServiceQuote); diff --git a/src/resources/service-rate.js b/src/resources/service-rate.js deleted file mode 100644 index 01d1811..0000000 --- a/src/resources/service-rate.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class ServiceRate extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'service-rate', options); - } -} - -register('resource', 'ServiceRate', ServiceRate); diff --git a/src/resources/tracking-status.js b/src/resources/tracking-status.js deleted file mode 100644 index 75baedc..0000000 --- a/src/resources/tracking-status.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class TrackingStatus extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'tracking-status', options); - } -} - -register('resource', 'TrackingStatus', TrackingStatus); diff --git a/src/resources/vehicle.js b/src/resources/vehicle.js deleted file mode 100644 index 1e6c047..0000000 --- a/src/resources/vehicle.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Vehicle extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'vehicle', options); - } -} - -register('resource', 'Vehicle', Vehicle); diff --git a/src/resources/vendor.js b/src/resources/vendor.js deleted file mode 100644 index 9fb2da0..0000000 --- a/src/resources/vendor.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Vendor extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'vendor', options); - } -} - -register('resource', 'Vendor', Vendor); diff --git a/src/resources/waypoint.js b/src/resources/waypoint.js deleted file mode 100644 index 3848a80..0000000 --- a/src/resources/waypoint.js +++ /dev/null @@ -1,10 +0,0 @@ -import Place from './place.js'; -import { register } from '../registry.js'; - -export default class Waypoint extends Place { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'waypoint', options); - } -} - -register('resource', 'Waypoint', Waypoint); diff --git a/src/resources/zone.js b/src/resources/zone.js deleted file mode 100644 index 77151c9..0000000 --- a/src/resources/zone.js +++ /dev/null @@ -1,10 +0,0 @@ -import Resource from '../resource.js'; -import { register } from '../registry.js'; - -export default class Zone extends Resource { - constructor(attributes = {}, adapter, options = {}) { - super(attributes, adapter, 'zone', options); - } -} - -register('resource', 'Zone', Zone); diff --git a/src/store-actions.ts b/src/store-actions.ts new file mode 100644 index 0000000..0dc9c53 --- /dev/null +++ b/src/store-actions.ts @@ -0,0 +1,46 @@ +import { set } from './utils.js'; +import type { StoreActionsLike } from './types.js'; +import { register } from './registry.js'; + +export type StoreActionMap = Record; + +export function isStoreActions(value: unknown): value is StoreActions { + return value instanceof StoreActions; +} + +export function createStoreActions(name: string, ...params: ConstructorParameters): StoreActions { + const actions = new StoreActions(...params); + register('action', name, StoreActions); + return actions; +} + +export default class StoreActions { + actions: StoreActionMap; + bind: object | null; + + constructor(actions: StoreActionMap = {}, bind: object | null = null) { + this.actions = actions; + this.bind = bind; + } + + extend(binding: object | null = null): this { + const target = binding ?? this.bind; + if (!target) { + return this; + } + for (const [name, value] of Object.entries(this.actions)) { + set(target, name, typeof value === 'function' ? value.bind(target) : value); + } + return this; + } +} + +export function extendStoreActions(store: object, actions: StoreActionsLike | StoreActionsLike[] = []): object { + const list = Array.isArray(actions) ? actions : [actions]; + for (const action of list) { + if (isStoreActions(action)) { + action.extend(store); + } + } + return store; +} diff --git a/src/store.js b/src/store.js deleted file mode 100644 index 1c67809..0000000 --- a/src/store.js +++ /dev/null @@ -1,148 +0,0 @@ -import { lookup } from './resolver.js'; -import { isResource } from './resource.js'; -import { createCollection } from './utils/collection.js'; -import { detectAdapter } from './utils/detect-adapter.js'; -import { isArray } from './utils/array.js'; -import { classify, pluralize } from './utils/string.js'; -import { extendStoreActions } from './utils/store-actions.js'; -import { register } from './registry.js'; - -export function createStore() { - return new Store(...arguments); -} - -export function afterFetch(store, json) { - if (typeof store.options.onAfterFetch === 'function') { - store.options.onAfterFetch(json); - } - - if (isArray(json)) { - const serialized = []; - - for (const element of json) { - serialized.push(store.afterFetch(element)); - } - - return createCollection(...serialized); - } - - const resourceInstance = store.serialize(json); - return store.deposit(resourceInstance); -} - -export default class Store { - constructor(resource, adapter, options = {}) { - this.resource = resource; - this.adapter = adapter || detectAdapter(); - this.namespace = pluralize(resource); - this.storage = createCollection(); - this.options = options; - this.extendActions(options.actions); - } - - extendActions(actions = []) { - return extendStoreActions(this, actions); - } - - deposit(resourceInstance) { - // this.storage[this.namespace].pushObject(resourceInstance); - return resourceInstance; - } - - serialize(json) { - return lookup('resource', classify(this.resource), json, this.adapter); - } - - afterFetch(json) { - return afterFetch(this, json); - } - - /** - * Creates a new record via POST - * - * @param {Object} attributes - The attributes to create the record with - * @param {Object} options - Adapter options (headers, etc.) - * @returns {Promise} - */ - async create(attributes = {}, options = {}) { - const response = await this.adapter.post(`${this.namespace}`, attributes, options); - return this.afterFetch(response); - } - - /** - * Updates an existing record via PUT - * - * @param {string|number} id - ID of the record to update - * @param {Object} attributes - The attributes to update - * @param {Object} options - Adapter options (headers, etc.) - * @returns {Promise} - */ - async update(id, attributes = {}, options = {}) { - const response = await this.adapter.put(`${this.namespace}/${id}`, attributes, options); - return this.afterFetch(response); - } - - /** - * Finds a single record by ID - * - * @param {string|number} id - ID of the record to fetch - * @param {Object} options - Adapter options - * @returns {Promise} - */ - async findRecord(id, options = {}) { - const response = await this.adapter.get(`${this.namespace}/${id}`, {}, options); - return this.afterFetch(response); - } - - /** - * Fetches all records from the resource - * - * @param {Object} options - Adapter options - * @returns {Promise} - */ - async findAll(options = {}) { - const response = await this.adapter.get(`${this.namespace}`, {}, options); - return this.afterFetch(response); - } - - /** - * Queries the resource using the given query params - * - * @param {Object} query - Query parameters - * @param {Object} options - Adapter options - * @returns {Promise} - */ - async query(query = {}, options = {}) { - const response = await this.adapter.get(`${this.namespace}`, query, options); - return this.afterFetch(response); - } - - /** - * Queries the resource, but returns a single record - * - * @param {Object} query - Query parameters (with `query.single = true`) - * @param {Object} options - Adapter options - * @returns {Promise} - */ - async queryRecord(query = {}, options = {}) { - query.single = true; - - const response = await this.adapter.get(`${this.namespace}`, query, options); - return this.afterFetch(response); - } - - /** - * Deletes/destroys a record by ID - * - * @param {any} record - Resource or ID - * @param {Object} options - Adapter options - * @returns {Promise} - */ - async destroy(record, options = {}) { - const id = isResource(record) ? record.getAttribute('id') : record; - const response = await this.adapter.delete(`${this.namespace}/${id}`, {}, options); - return this.afterFetch(response); - } -} - -register('store', 'Store', Store); diff --git a/src/store.ts b/src/store.ts new file mode 100644 index 0000000..7115eb6 --- /dev/null +++ b/src/store.ts @@ -0,0 +1,92 @@ +import { createCollection } from './collection.js'; +import type Collection from './collection.js'; +import { detectAdapter } from './adapters/detect.js'; +import { lookup } from './resolver.js'; +import { register } from './registry.js'; +import { classify, pluralize } from './string.js'; +import { extendStoreActions } from './store-actions.js'; +import { isResourceLike } from './utils.js'; +import type { AdapterLike, Identifier, ResourceAttributes, ResourceOptions, StoreActionsLike } from './types.js'; + +export interface StoreOptions extends ResourceOptions { + actions?: StoreActionsLike | StoreActionsLike[]; +} + +export function afterFetch(store: Store, json: unknown): unknown { + store.options.onAfterFetch?.(json); + if (Array.isArray(json)) { + return createCollection(json.map((item) => store.afterFetch(item))); + } + return store.deposit(store.serialize(json)); +} + +export default class Store { + [action: string]: unknown; + + resource: string; + adapter: AdapterLike; + namespace: string; + storage: Collection; + options: StoreOptions; + + constructor(resource: string, adapter?: AdapterLike | null, options: StoreOptions = {}) { + this.resource = resource; + this.adapter = adapter ?? detectAdapter(); + this.namespace = pluralize(resource); + this.storage = createCollection(); + this.options = options; + this.extendActions(options.actions); + } + + extendActions(actions: StoreActionsLike | StoreActionsLike[] = []): this { + extendStoreActions(this, actions); + return this; + } + + deposit(resourceInstance: T): T { + return resourceInstance; + } + + serialize(json: unknown): T { + return lookup('resource', classify(this.resource), json, this.adapter); + } + + afterFetch(json: unknown): T | Collection { + return afterFetch(this, json) as T | Collection; + } + + async create(attributes: ResourceAttributes = {}, options = {}): Promise { + return this.afterFetch(await this.adapter.post(this.namespace, attributes, options)) as T; + } + + async update(id: Identifier, attributes: ResourceAttributes = {}, options = {}): Promise { + return this.afterFetch(await this.adapter.put(`${this.namespace}/${String(id)}`, attributes, options)) as T; + } + + async findRecord(id: Identifier, options = {}): Promise { + return this.afterFetch(await this.adapter.get(`${this.namespace}/${String(id)}`, {}, options)) as T; + } + + async findAll(options = {}): Promise> { + return this.afterFetch(await this.adapter.get(this.namespace, {}, options)); + } + + async query(query: ResourceAttributes = {}, options = {}): Promise> { + return this.afterFetch(await this.adapter.get(this.namespace, query, options)); + } + + async queryRecord(query: ResourceAttributes = {}, options = {}): Promise { + return this.afterFetch(await this.adapter.get(this.namespace, { ...query, single: true }, options)) as T; + } + + async destroy(record: Identifier | { id?: unknown; getAttribute(name: string): unknown }, options = {}): Promise { + const id = isResourceLike(record) && typeof record.getAttribute === 'function' ? record.getAttribute('id') : record; + return this.afterFetch(await this.adapter.delete(`${this.namespace}/${String(id)}`, {}, options)) as T; + } +} + +export function createStore(...params: ConstructorParameters>): Store { + return new Store(...params); +} + +register('store', 'Store', Store); diff --git a/src/string.ts b/src/string.ts new file mode 100644 index 0000000..fbbfee5 --- /dev/null +++ b/src/string.ts @@ -0,0 +1,206 @@ +type Rule = readonly [RegExp, string]; +type StringResult = FleetbaseString | string; + +const UNCOUNTABLE = new Set(['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news']); +const PLURAL_RULES: Rule[] = [ + [/(m)an$/gi, '$1en'], + [/(pe)rson$/gi, '$1ople'], + [/(child)$/gi, '$1ren'], + [/^(ox)$/gi, '$1en'], + [/(ax|test)is$/gi, '$1es'], + [/(octop|vir)us$/gi, '$1i'], + [/(alias|status)$/gi, '$1es'], + [/(bu)s$/gi, '$1ses'], + [/(buffal|tomat|potat)o$/gi, '$1oes'], + [/([ti])um$/gi, '$1a'], + [/sis$/gi, 'ses'], + [/(?:([^f])fe|([lr])f)$/gi, '$1$2ves'], + [/(hive)$/gi, '$1s'], + [/([^aeiouy]|qu)y$/gi, '$1ies'], + [/(x|ch|ss|sh)$/gi, '$1es'], + [/(matr|vert|ind)ix|ex$/gi, '$1ices'], + [/([m|l])ouse$/gi, '$1ice'], + [/(quiz)$/gi, '$1zes'], + [/s$/gi, 's'], + [/$/gi, 's'], +]; +const SINGULAR_RULES: Rule[] = [ + [/(status)$/gi, '$1'], + [/(m)en$/gi, '$1an'], + [/(pe)ople$/gi, '$1rson'], + [/(child)ren$/gi, '$1'], + [/([ti])a$/gi, '$1um'], + [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/gi, '$1$2sis'], + [/(hive)s$/gi, '$1'], + [/(tive)s$/gi, '$1'], + [/(curve)s$/gi, '$1'], + [/([lr])ves$/gi, '$1f'], + [/([^fo])ves$/gi, '$1fe'], + [/([^aeiouy]|qu)ies$/gi, '$1y'], + [/(s)eries$/gi, '$1eries'], + [/(m)ovies$/gi, '$1ovie'], + [/(x|ch|ss|sh)es$/gi, '$1'], + [/([m|l])ice$/gi, '$1ouse'], + [/(bus)es$/gi, '$1'], + [/(o)es$/gi, '$1'], + [/(shoe)s$/gi, '$1'], + [/(cris|ax|test)es$/gi, '$1is'], + [/(octop|vir)i$/gi, '$1us'], + [/(alias|status)es$/gi, '$1'], + [/^(ox)en/gi, '$1'], + [/(vert|ind)ices$/gi, '$1ex'], + [/(matr)ices$/gi, '$1ix'], + [/(quiz)zes$/gi, '$1'], + [/s$/gi, ''], +]; +const NON_TITLE_CASED = new Set(['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for']); + +export default class FleetbaseString { + str: string; + chain: boolean; + + constructor(value: unknown = '', chain = true) { + this.str = value == null ? '' : String(value); + this.chain = chain; + } + + get(): string { + return this.str; + } + + private result(value: string): StringResult { + this.str = value; + return this.chain ? this : value; + } + + private rules(value: string, rules: Rule[], override?: string | null): StringResult { + let result = override ?? value; + if (!override && !UNCOUNTABLE.has(value.toLowerCase())) { + const rule = rules.find(([pattern]) => pattern.test(value)); + if (rule) { + result = value.replace(rule[0], rule[1]); + } + } + return this.result(result); + } + + pluralize(value = this.str, override: string | null = null): StringResult { + return this.rules(value, PLURAL_RULES, override); + } + + singularize(value = this.str, override: string | null = null): StringResult { + return this.rules(value, SINGULAR_RULES, override); + } + + camelize(value = this.str, lowFirstLetter = false): StringResult { + const result = value + .split('/') + .map((segment) => + segment + .split('_') + .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`) + .join('') + ) + .join('::'); + return this.result(lowFirstLetter ? `${result.charAt(0).toLowerCase()}${result.slice(1)}` : result); + } + + underscore(value = this.str): StringResult { + return this.result( + value + .split('::') + .map((part) => part.replace(/([A-Z])/g, '_$1').replace(/^_/, '')) + .join('/') + .toLowerCase() + ); + } + + humanize(value = this.str, lowFirstLetter = false): StringResult { + const result = value + .toLowerCase() + .replace(/(_ids|_id)$/g, '') + .replace(/_/g, ' '); + return this.result(lowFirstLetter ? result : `${result.charAt(0).toUpperCase()}${result.slice(1)}`); + } + + capitalize(value = this.str): StringResult { + const lower = value.toLowerCase(); + return this.result(`${lower.charAt(0).toUpperCase()}${lower.slice(1)}`); + } + + dasherize(value = this.str): StringResult { + return this.result(value.replace(/[ _]/g, '-').toLowerCase()); + } + + normify(value = this.str, allFirstUpper = false): StringResult { + const normalized = allFirstUpper ? underscore(camelize(value)) : value.toLowerCase(); + const words = normalized + .replace(/_/g, ' ') + .split(' ') + .map((word) => + word + .split('-') + .map((part) => (NON_TITLE_CASED.has(part.toLowerCase()) ? part : capitalize(part))) + .join('-') + ); + const result = words.join(' '); + return this.result(`${result.charAt(0).toUpperCase()}${result.slice(1)}`); + } + + demodulize(value = this.str): StringResult { + return this.result(value.split('::').at(-1)!); + } + + tableize(value = this.str): StringResult { + return this.result(pluralize(underscore(value))); + } + + classify(value = this.str): StringResult { + const normalized = String(value) + .trim() + .replace(/[\s_-]+/g, '_'); + return this.result(camelize(singularize(normalized))); + } + + foreignKey(value = this.str, dropIdUnderscore = false): StringResult { + return this.result(`${underscore(demodulize(value))}${dropIdUnderscore ? '' : '_'}id`); + } + + ordinalize(value = this.str): StringResult { + const result = value + .split(' ') + .map((part) => { + if (!/^\d+$/.test(part)) { + return part; + } + const number = Number(part); + const finalTwo = number % 100; + const suffix = finalTwo >= 11 && finalTwo <= 13 ? 'th' : number % 10 === 1 ? 'st' : number % 10 === 2 ? 'nd' : number % 10 === 3 ? 'rd' : 'th'; + return `${part}${suffix}`; + }) + .join(' '); + return this.result(result); + } + + static invoke(method: keyof FleetbaseString, ...args: unknown[]): string | null { + const instance = new FleetbaseString('', false); + const candidate = instance[method]; + if (typeof candidate !== 'function') { + return null; + } + return String((candidate as (...values: unknown[]) => unknown).apply(instance, args)); + } +} + +export const pluralize = (value: string, override?: string | null): string => String(new FleetbaseString('', false).pluralize(value, override)); +export const singularize = (value: string, override?: string | null): string => String(new FleetbaseString('', false).singularize(value, override)); +export const humanize = (value: string, lowFirstLetter?: boolean): string => String(new FleetbaseString('', false).humanize(value, lowFirstLetter)); +export const underscore = (value: string): string => String(new FleetbaseString('', false).underscore(value)); +export const camelize = (value: string, lowFirstLetter?: boolean): string => String(new FleetbaseString('', false).camelize(value, lowFirstLetter)); +export const capitalize = (value: string): string => String(new FleetbaseString('', false).capitalize(value)); +export const dasherize = (value: string): string => String(new FleetbaseString('', false).dasherize(value)); +export const normify = (value: string, allFirstUpper?: boolean): string => String(new FleetbaseString('', false).normify(value, allFirstUpper)); +export const demodulize = (value: string): string => String(new FleetbaseString('', false).demodulize(value)); +export const tableize = (value: string): string => String(new FleetbaseString('', false).tableize(value)); +export const classify = (value: string): string => String(new FleetbaseString('', false).classify(value)); +export const foreignKey = (value: string, dropIdUnderscore?: boolean): string => String(new FleetbaseString('', false).foreignKey(value, dropIdUnderscore)); diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..8acdb04 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,44 @@ +export type ResourceAttributes = Record; +export type Identifier = string | number; + +export type Constructor = new (...args: Args) => T; + +export interface RequestOptions extends Omit { + headers?: HeadersInit; + url?: string; +} + +export interface AdapterConfig { + version?: string; + host?: string; + namespace?: string; + headers?: HeadersInit; + publicKey?: string; + fetch?: typeof globalThis.fetch; +} + +/** @deprecated Use AdapterConfig. Retained as a descriptive compatibility alias. */ +export type AdapterOptions = AdapterConfig; + +export interface AdapterLike { + get(path: string, query?: ResourceAttributes, options?: RequestOptions): Promise; + post(path: string, data?: unknown, options?: RequestOptions): Promise; + put(path: string, data?: unknown, options?: RequestOptions): Promise; + patch(path: string, data?: unknown, options?: RequestOptions): Promise; + delete(path: string, options?: RequestOptions, legacyOptions?: RequestOptions): Promise; +} + +export interface FleetbaseConfig extends AdapterConfig { + adapter?: AdapterLike; + customerToken?: string; +} + +export interface ResourceOptions { + version?: string; + actions?: StoreActionsLike | StoreActionsLike[]; + onAfterFetch?: (json: unknown) => void; +} + +export interface StoreActionsLike { + extend(binding?: object): unknown; +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..5e225da --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,250 @@ +import type { ResourceAttributes } from './types.js'; + +export const isArray = Array.isArray; + +export function isEmpty(value: unknown): boolean { + if (value === null || value === undefined) { + return true; + } + if (typeof value !== 'function' && typeof (value as { length?: unknown }).length === 'number') { + return (value as { length: number }).length === 0; + } + if (typeof (value as { size?: unknown }).size === 'number') { + return (value as { size: number }).size === 0; + } + return false; +} + +export function isBlank(value: unknown): boolean { + return isEmpty(value) || (typeof value === 'string' && !/\S/.test(value)); +} + +export function isLatitude(value: unknown): boolean { + return typeof value !== 'symbol' && Number.isFinite(Number(value)) && Math.abs(Number(value)) <= 90; +} + +export function isLongitude(value: unknown): boolean { + return typeof value !== 'symbol' && Number.isFinite(Number(value)) && Math.abs(Number(value)) <= 180; +} + +export function isPhone(value = ''): boolean { + return /^[+]?\s*[0-9()./-][\s0-9()./-]*$/.test(value); +} + +export function isEmail(value = ''): boolean { + return /^\S+@\S+\.\S+$/.test(value); +} + +export function isNodeEnvironment(): boolean { + const runtime = globalThis as typeof globalThis & { process?: { release?: { name?: string } } }; + return runtime.process?.release?.name === 'node' && !(typeof navigator !== 'undefined' && navigator.product === 'ReactNative'); +} + +export function uuid(): string { + if (typeof globalThis.crypto?.randomUUID === 'function') { + return globalThis.crypto.randomUUID(); + } + const segment = (): string => + Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .slice(1); + return `${segment()}${segment()}-${segment()}-4${segment().slice(1)}-a${segment().slice(1)}-${segment()}${segment()}${segment()}`; +} + +export function get(target: unknown, path: string | string[]): unknown { + const parts = Array.isArray(path) ? path : path.split('.'); + let current = target; + for (let index = 0; index < parts.length; index += 1) { + const part = parts[index]; + if (!part || current === null || current === undefined) { + return null; + } + if (typeof current === 'function') { + current = (current as () => unknown)(); + } + if (isResourceLike(current) && part !== 'attributes') { + current = current.attributes; + } + if (current === null || (typeof current !== 'object' && typeof current !== 'function') || !(part in current)) { + return null; + } + current = (current as Record)[part]; + } + return typeof current === 'function' ? (current as () => unknown)() : current; +} + +export function set(target: object, path: string, value: unknown): unknown { + const parts = path.split('.').filter(Boolean); + if (parts.some((part) => part === '__proto__' || part === 'prototype' || part === 'constructor')) { + throw new TypeError('Unsafe object path.'); + } + let current = target as Record; + for (const part of parts.slice(0, -1)) { + if (!current[part] || typeof current[part] !== 'object') { + current[part] = {}; + } + current = current[part] as Record; + } + const final = parts.at(-1); + if (final) { + current[final] = value; + } + return value; +} + +export function getProperties(target: unknown, properties: string[] = []): ResourceAttributes { + return Object.fromEntries(properties.map((property) => [property, get(target, property)])); +} + +export function setProperties(target: object, properties: ResourceAttributes = {}): object { + for (const [property, value] of Object.entries(properties)) { + set(target, property, value); + } + return target; +} + +export function extend(target: T, ...sources: object[]): T { + Object.assign(target, ...sources); + return target; +} + +export function isCallable(target: object, property: string): boolean { + return typeof (target as Record)[property] === 'function'; +} + +export function invoke(target: object, method: string): ((...args: unknown[]) => unknown) | undefined { + const candidate = (target as Record)[method]; + return typeof candidate === 'function' ? (candidate.bind(target) as (...args: unknown[]) => unknown) : undefined; +} + +export function isResourceLike(value: unknown): value is { attributes: ResourceAttributes; id?: unknown; getAttribute?: (name: string) => unknown } { + return Boolean(value && typeof value === 'object' && 'attributes' in value && typeof (value as { attributes?: unknown }).attributes === 'object'); +} + +export class Point { + type = 'Point' as const; + coordinates: [number, number]; + + constructor(latitude = 0, longitude = 0) { + this.coordinates = [longitude, latitude]; + } + + get latitude(): number { + return this.coordinates[1]; + } + get longitude(): number { + return this.coordinates[0]; + } + lat(): number { + return this.latitude; + } + lng(): number { + return this.longitude; + } + static fromGeoJson(json: { coordinates: [number, number] }): Point { + return new Point(json.coordinates[1], json.coordinates[0]); + } + serialize(): { type: 'Point'; coordinates: [number, number] } { + return { type: this.type, coordinates: [...this.coordinates] }; + } + toJson(): { type: 'Point'; coordinates: [number, number] } { + return this.serialize(); + } + toString(): string { + return `(${this.latitude}, ${this.longitude})`; + } +} + +interface GoogleAddressComponent { + long_name: string; + short_name: string; + types: string[]; +} + +interface GooglePlace { + address_components?: GoogleAddressComponent[]; + geometry?: { location?: Record }; +} + +export class GoogleAddress { + place: GooglePlace; + geometry: GooglePlace['geometry']; + components: Record; + attributes: ResourceAttributes; + + constructor(place: GooglePlace) { + this.place = place; + this.geometry = place.geometry; + this.components = this.parseComponents(); + this.attributes = this.parseProperties(); + } + + parse(): void { + this.components = this.parseComponents(); + this.attributes = this.parseProperties(); + } + + parseComponents(): Record { + const result: Record = {}; + for (const component of this.place.address_components ?? []) { + for (const type of component.types) { + result[type] = component; + } + } + return result; + } + + parseProperties(): ResourceAttributes { + const streetNumber = this.get('street_number'); + const streetName = this.get('route'); + return { + streetNumber, + streetName, + address: [streetNumber, streetName].filter(Boolean).join(' '), + coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0], + city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']), + county: this.get('administrative_area_level_2'), + stateShort: this.get('administrative_area_level_1', true), + stateLong: this.get('administrative_area_level_1'), + countryShort: this.get('country', true), + country: this.get('country', true), + countryLong: this.get('country'), + postalCode: this.get('postal_code'), + }; + } + + all(): ResourceAttributes { + return this.attributes; + } + or(keys: Array = []): string | null { + for (const key of keys) { + const [name, short] = Array.isArray(key) ? key : [key, false]; + if (this.has(name)) { + return this.get(name, short); + } + } + return null; + } + has(key: string): boolean { + return key in this.components; + } + get(key: string, short = false): string | null { + const component = this.components[key]; + return component ? (short ? component.short_name : component.long_name) : null; + } + setAttributes(attributes: ResourceAttributes = {}): this { + Object.assign(this.attributes, attributes); + return this; + } + setAttribute(key: string, value: unknown): this { + this.attributes[key] = value; + return this; + } + getAttribute(key: string): unknown { + return this.attributes[key] ?? null; + } +} + +export function createGoogleAddress(place: GooglePlace): GoogleAddress { + return new GoogleAddress(place); +} diff --git a/src/utils/array.js b/src/utils/array.js deleted file mode 100644 index 5264699..0000000 --- a/src/utils/array.js +++ /dev/null @@ -1,3 +0,0 @@ -const { isArray } = Array; - -export { isArray }; diff --git a/src/utils/collection.js b/src/utils/collection.js deleted file mode 100644 index 9b7fa74..0000000 --- a/src/utils/collection.js +++ /dev/null @@ -1,386 +0,0 @@ -/* eslint no-undef: "off" */ -import { isArray } from './array.js'; - -/** - * Collection - * Extended array inspired by Ember's NativeArray - **/ -const CHUNK_SIZE = 60000; - -// To avoid overflowing the stack, we splice up to CHUNK_SIZE items at a time. -// See https://code.google.com/p/chromium/issues/detail?id=56588 for more details. -export function replace(array, start, deleteCount, items = []) { - if (isArray(array)) { - if (items.length <= CHUNK_SIZE) { - array.splice(start, deleteCount, ...items); - } else { - array.splice(start, deleteCount); - - for (let i = 0; i < items.length; i += CHUNK_SIZE) { - let chunk = items.slice(i, i + CHUNK_SIZE); - array.splice(start + i, 0, ...chunk); - } - } - } else if (isCollection(array)) { - array.replace(start, deleteCount, items); - } -} - -export function identityFunction(item) { - return item; -} - -export function uniqBy(array, key = identityFunction) { - let ret = []; - let seen = new Set(); - let getter = typeof key === 'function' ? key : (item) => get(item, key); - - array.forEach(function (item) { - let val = getter(item); - if (!seen.has(val)) { - seen.add(val); - ret.push(item); - } - }); - - return ret; -} - -export function isCollection(mixed) { - return mixed instanceof Collection; -} - -export function objectAt(array, index) { - if (isArray(array)) { - return array[index]; - } else if (isCollection(array)) { - return array.objectAt(index); - } - - return null; -} - -export function iter(key, value) { - let valueProvided = arguments.length === 2; - return valueProvided - ? function (item) { - return value === item[key]; - } - : function (item) { - return Boolean(item[key]); - }; -} - -export function findIndex(array, predicate, startAt = 0) { - let len = array.length; - for (let index = startAt; index < len; index++) { - let item = objectAt(array, index); - if (predicate(item, index, array)) { - return index; - } - } - return -1; -} - -export function find(array, callback, target) { - let predicate = callback.bind(target); - let index = findIndex(array, predicate, 0); - return index === -1 ? undefined : objectAt(array, index); -} - -export function any(array, callback, target) { - let predicate = callback.bind(target); - return findIndex(array, predicate, 0) !== -1; -} - -export function every(array, callback, target) { - let cb = callback.bind(target); - let predicate = function (item, index, array) { - return !cb(item, index, array); - }; - return findIndex(array, predicate, 0) === -1; -} - -export function indexOf(array, val, startAt = 0, withNaNCheck) { - let len = array.length; - - if (startAt < 0) { - startAt += len; - } - - // SameValueZero comparison (NaN !== NaN) - let predicate = - withNaNCheck && val !== val - ? function (item) { - return item !== item; - } - : function (item) { - return item === val; - }; - return findIndex(array, predicate, startAt); -} - -export function removeAt(array, index, len = 1) { - replace(array, index, len, []); - return array; -} - -export function insertAt(array, index, item) { - replace(array, index, 0, [item]); - return item; -} - -export function createCollection() { - return new Collection(...arguments); -} - -export default class Collection extends Array { - constructor() { - if (isArray(arguments[0])) { - super(...arguments[0]); - } else { - super(...arguments); - } - } - - get notEmpty() { - return this.length > 0; - } - - get empty() { - return this.length === 0; - } - - get first() { - return objectAt(this, 0); - } - - get last() { - return objectAt(this, this.length - 1); - } - - replace(start, deleteCount, items = []) { - replace(this, start, deleteCount, items); - - return this; - } - - objectsAt(indexes) { - return indexes.map((idx) => objectAt(this, idx)); - } - - objectAt(index) { - return objectAt(this, index); - } - - indexOf(object, startAt) { - return indexOf(this, object, startAt, false); - } - - lastIndexOf(object, startAt) { - let len = this.length; - - if (startAt === undefined || startAt >= len) { - startAt = len - 1; - } - - if (startAt < 0) { - startAt += len; - } - - for (let idx = startAt; idx >= 0; idx--) { - if (objectAt(this, idx) === object) { - return idx; - } - } - - return -1; - } - - includes(object, startAt) { - return indexOf(this, object, startAt, true) !== -1; - } - - findBy() { - return find(this, iter(...arguments)); - } - - findIndexBy() { - return findIndex(this, iter(...arguments)); - } - - isEvery() { - return every(this, iter(...arguments)); - } - - isAny() { - return any(this, iter(...arguments)); - } - - invoke(methodName, ...args) { - let ret = []; - - this.forEach((item) => ret.push(item[methodName]?.(...args))); - - return ret; - } - - toArray() { - return this.map((item) => item); - } - - compact() { - return this.filter((value) => value != null); - } - - sortBy() { - let sortKeys = arguments; - - return this.sort((a, b) => { - for (const element of sortKeys) { - let key = element; - let propA = a[key]; - let propB = b[key]; - // return 1 or -1 else continue to the next sortKey - let compareValue = compare(propA, propB); - - if (compareValue) { - return compareValue; - } - } - return 0; - }); - } - - uniqBy(key) { - return uniqBy(this, key); - } - - without(value) { - if (!this.includes(value)) { - return this; // nothing to do - } - - // SameValueZero comparison (NaN !== NaN) - let predicate = value === value ? (item) => item !== value : (item) => item === item; - return this.filter(predicate); - } - - clear() { - let len = this.length; - if (len === 0) { - return this; - } - - this.replace(0, len, []); - return this; - } - - insertAt(idx, object) { - insertAt(this, idx, object); - return this; - } - - replaceAt(idx, object) { - return this.replace(idx, 1, [object]); - } - - removeAt(start, len) { - return removeAt(this, start, len); - } - - pushObject(obj) { - return this.insertAt(this.length, obj); - } - - pushObjects(objects) { - this.replace(this.length, 0, objects); - return this; - } - - popObject() { - let len = this.length; - if (len === 0) { - return null; - } - - let ret = objectAt(this, len - 1); - this.removeAt(len - 1, 1); - return ret; - } - - shiftObject() { - if (this.length === 0) { - return null; - } - - let ret = objectAt(this, 0); - this.removeAt(0); - return ret; - } - - unshiftObject(obj) { - return insertAt(this, 0, obj); - } - - unshiftObjects(objects) { - this.replace(0, 0, objects); - return this; - } - - reverseObjects() { - let len = this.length; - if (len === 0) { - return this; - } - - let objects = this.toArray().reverse(); - this.replace(0, len, objects); - return this; - } - - setObjects(objects) { - if (objects.length === 0) { - return this.clear(); - } - - let len = this.length; - this.replace(0, len, objects); - return this; - } - - removeObject(obj) { - let loc = this.length || 0; - while (--loc >= 0) { - let curObject = objectAt(this, loc); - - if (curObject === obj) { - this.removeAt(loc); - } - } - return this; - } - - removeObjects(objects) { - for (let i = objects.length - 1; i >= 0; i--) { - this.removeObject(objects[i]); - } - - return this; - } - - addObject(obj) { - let included = this.includes(obj); - - if (!included) { - this.pushObject(obj); - } - - return this; - } - - addObjects(objects) { - objects.forEach((obj) => this.addObject(obj)); - return this; - } -} diff --git a/src/utils/detect-adapter.js b/src/utils/detect-adapter.js deleted file mode 100644 index 0789a87..0000000 --- a/src/utils/detect-adapter.js +++ /dev/null @@ -1,12 +0,0 @@ -import { lookup } from '../resolver.js'; -import isNodeEnvironment from './is-node-environment.js'; - -export function detectAdapter(options = {}) { - if (isNodeEnvironment()) { - return lookup('adapter', 'NodeAdapter', options); - } - - return lookup('adapter', 'BrowserAdapter', options); -} - -export default detectAdapter; diff --git a/src/utils/google-address.js b/src/utils/google-address.js deleted file mode 100644 index a95282f..0000000 --- a/src/utils/google-address.js +++ /dev/null @@ -1,107 +0,0 @@ -import { isArray } from './array.js'; - -export default class GoogleAddress { - constructor(place) { - this.place = place; - this.geometry = place?.geometry; - this.components = this.parseComponents(); - this.attributes = this.parseProperties(); - } - - parse() { - this.parseComponents(); - this.parseProperties(); - } - - parseComponents() { - const components = (this.place?.address_components || []).reduce(function (acc, data) { - data.types.forEach(function (type) { - acc[type] = data; - }); - return acc; - }, {}); - - return components; - } - - parseProperties() { - const attributes = { - streetNumber: this.get('street_number'), - streetName: this.get('route'), - coordinates: this.geometry?.location ? Object.values(this.geometry.location) : [0, 0], - city: this.or(['locality', 'sublocality', 'sublocality_level_1', 'neighborhood', 'administrative_area_level_3', 'administrative_area_level_2']), - county: this.get('administrative_area_level_2'), - stateShort: this.get('administrative_area_level_1', true), - stateLong: this.get('administrative_area_level_1'), - countryShort: this.get('country', true), - country: this.get('country', true), - countryLong: this.get('country'), - postalCode: this.get('postal_code'), - }; - - attributes.address = [attributes.streetNumber, attributes.streetName].filter(Boolean).join(' '); - - return attributes; - } - - all() { - return this.attributes; - } - - or(keys = []) { - for (const element of keys) { - const key = element; - - if (isArray(key)) { - const pkey = key[0]; - const short = key[1]; - - if (this.has(pkey)) { - return this.get(pkey, short); - } - - continue; - } - - if (this.has(key)) { - return this.get(key); - } - } - - return null; - } - - has(key) { - return key in this.components; - } - - get(key, short = false) { - if (!(key in this.components)) { - return null; - } - - return short ? this.components[key].short_name : this.components[key].long_name; - } - - setAttributes(attributes = {}) { - this.attributes = { ...this.attributes, ...attributes }; - - return this; - } - - setAttribute(key, value) { - this.attributes[key] = value; - - return this; - } - - getAttribute(key) { - return this.attributes[key] || null; - } -} - -export function createGoogleAddress() { - return new GoogleAddress(...arguments); -} - -export { GoogleAddress }; diff --git a/src/utils/index.js b/src/utils/index.js deleted file mode 100644 index cc3463a..0000000 --- a/src/utils/index.js +++ /dev/null @@ -1,14 +0,0 @@ -export { default as Collection } from './collection.js'; -export { default as isBlank } from './is-blank.js'; -export { default as isEmpty } from './is-empty.js'; -export { default as isLatitude } from './is-latitude.js'; -export { default as isLongitude } from './is-longitude.js'; -export { default as isPhone } from './is-phone.js'; -export { default as isEmail } from './is-email.js'; -export { default as isNodeEnvironment } from './is-node-environment.js'; -export { default as detectAdapter } from './detect-adapter.js'; -export { default as uuid } from './uuid.js'; -export { default as GoogleAddress } from './google-address.js'; -export { default as Point } from './point.js'; -export { default as StoreActions } from './store-actions.js'; -export { isArray } from './array.js'; diff --git a/src/utils/is-blank.js b/src/utils/is-blank.js deleted file mode 100644 index 27b5949..0000000 --- a/src/utils/is-blank.js +++ /dev/null @@ -1,7 +0,0 @@ -import isEmpty from './is-empty.js'; - -export function isBlank(obj) { - return isEmpty(obj) || (typeof obj === 'string' && /\S/.test(obj) === false); -} - -export default isBlank; diff --git a/src/utils/is-email.js b/src/utils/is-email.js deleted file mode 100644 index 5e8c80e..0000000 --- a/src/utils/is-email.js +++ /dev/null @@ -1,5 +0,0 @@ -export function isEmail(email = '') { - return /\S+@\S+\.\S+/.test(email); -} - -export default isEmail; diff --git a/src/utils/is-empty.js b/src/utils/is-empty.js deleted file mode 100644 index 5d719cb..0000000 --- a/src/utils/is-empty.js +++ /dev/null @@ -1,34 +0,0 @@ -export function isEmpty(obj) { - const none = obj === null || obj === undefined; - if (none) { - return none; - } - - if (typeof obj.size === 'number') { - return !obj.size; - } - - const objectType = typeof obj; - - if (objectType === 'object') { - const { size } = obj; - if (typeof size === 'number') { - return !size; - } - } - - if (typeof obj.length === 'number' && objectType !== 'function') { - return !obj.length; - } - - if (objectType === 'object') { - const { length } = obj; - if (typeof length === 'number') { - return !length; - } - } - - return false; -} - -export default isEmpty; diff --git a/src/utils/is-latitude.js b/src/utils/is-latitude.js deleted file mode 100644 index b426dfe..0000000 --- a/src/utils/is-latitude.js +++ /dev/null @@ -1,5 +0,0 @@ -export function isLatitude(coordinate) { - return isFinite(coordinate) && Math.abs(coordinate) <= 90; -} - -export default isLatitude; diff --git a/src/utils/is-longitude.js b/src/utils/is-longitude.js deleted file mode 100644 index b754776..0000000 --- a/src/utils/is-longitude.js +++ /dev/null @@ -1,5 +0,0 @@ -export function isLongitude(coordinate) { - return isFinite(coordinate) && Math.abs(coordinate) <= 180 && Math.abs(coordinate) >= 90; -} - -export default isLongitude; diff --git a/src/utils/is-node-environment.js b/src/utils/is-node-environment.js deleted file mode 100644 index 5e44dd1..0000000 --- a/src/utils/is-node-environment.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative. - * - * @returns boolean - */ -export function isNodeEnvironment() { - return ( - typeof process !== 'undefined' && - (typeof process?.env === 'object' || process.release?.name?.search(/node|io.js/) !== -1) && - (typeof window === 'undefined' || window?.navigator?.product === 'ReactNative') - ); -} - -export default isNodeEnvironment; diff --git a/src/utils/is-phone.js b/src/utils/is-phone.js deleted file mode 100644 index ee354ad..0000000 --- a/src/utils/is-phone.js +++ /dev/null @@ -1,5 +0,0 @@ -export function isPhone(phone = '') { - return /^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g.test(phone); -} - -export default isPhone; diff --git a/src/utils/object.js b/src/utils/object.js deleted file mode 100644 index 1a2a31e..0000000 --- a/src/utils/object.js +++ /dev/null @@ -1,134 +0,0 @@ -/* eslint no-undef: "off" */ -import isEmpty from './is-empty.js'; - -export function isResource(mixed) { - return typeof mixed === 'object' && !isEmpty(mixed?.attributes) && typeof mixed?.attributes === 'object'; -} - -export function isCallable(object, property) { - return typeof object[property] === 'function'; -} - -export function getResolved(func, path) { - const resolved = func(); - return Array.isArray(resolved) || typeof resolved === 'object' ? get(resolved, path) : null; -} - -export function invoke(object, method) { - if (typeof object[method] === 'function') { - return object[method].bind(object); - } -} - -export function get(object, path) { - let current = object; - - const type = typeof object; - const isObject = type === 'object'; - const isFunction = type === 'function'; - const isArray = Array.isArray(object); - - const pathType = typeof path; - const pathIsString = pathType === 'string'; - const pathIsDotted = pathIsString && path.includes('.'); - const pathArray = pathIsDotted ? path.split('.') : [path]; - - if (isArray || isObject) { - for (let i = 0; i < pathArray.length; i++) { - if (current && current[pathArray[i]] === undefined) { - return null; - } else if (current) { - current = current[pathArray[i]]; - - // if is resource then return get on its attributes - if (isResource(current) && pathArray[i + 1] !== undefined) { - const newPath = pathArray.slice(i + 1).join('.'); - - return get(current.attributes, newPath); - } - - // resolve functions and continue - if (typeof current === 'function') { - const newPath = pathArray.slice(i + 1).join('.'); - return getResolved(current, newPath); - } - } - } - return current; - } - - if (isFunction) { - return getResolved(object, path); - } -} - -export function getProperties(object, properties = []) { - const selected = {}; - let propertyNames = arguments; - let i = 1; - - if (arguments.length === 2 && Array.isArray(properties)) { - i = 0; - propertyNames = arguments[1]; - } - - for (; i < propertyNames.length; i++) { - selected[propertyNames[i]] = get(object, propertyNames[i]); - } - - return selected; -} - -export function set(object, path, value) { - let current = object; - const type = typeof object; - const isObject = type === 'object'; - const isFunction = type === 'function'; - const isArray = Array.isArray(object); - - // if is function - if (isFunction) { - // throw error should be object or array or object like - } - - const pathType = typeof path; - const pathIsString = pathType === 'string'; - const pathIsDotted = pathIsString && path.includes('.'); - const pathArray = pathIsDotted ? path.split('.') : [path]; - const iterations = pathArray.length; - - if (isArray || isObject) { - for (let i = 0; i < iterations - 1; i++) { - if (!current[pathArray[i]]) { - current[pathArray[i]] = {}; - } - current = current[pathArray[i]]; - } - - current[pathArray[iterations - 1]] = value; - } - - return value; -} - -export function setProperties(object, properties = {}) { - for (const property in properties) { - set(object, property, properties[property]); - } - - return object; -} - -export function extend(target, classes = []) { - if (arguments.length > 1) { - classes = arguments; - } - for (const element of classes) { - for (const property in element) { - if (Object.prototype.hasOwnProperty.call(element, property)) { - target[property] = element[property]; - } - } - } - return target; -} diff --git a/src/utils/point.js b/src/utils/point.js deleted file mode 100644 index 4b0d73e..0000000 --- a/src/utils/point.js +++ /dev/null @@ -1,45 +0,0 @@ -export default class Point { - constructor(latitude = 0, longitude = 0) { - this.type = 'Point'; - this.coordinates = [longitude, latitude]; - } - - get latitude() { - return this.coordinates[1]; - } - - get longitude() { - return this.coordinates[0]; - } - - lat() { - return this.latitude; - } - - lng() { - return this.longitude; - } - - static fromGeoJson(json) { - const [longitude, latitude] = json.coordinates; - - return new Point(latitude, longitude); - } - - serialize() { - return { - type: 'Point', - coorindates: [this.lat(), this.lng()], - }; - } - - toJson() { - return this.serialize(); - } - - toString() { - return `(${this.latitude}, ${this.longitude})`; - } -} - -export { Point }; diff --git a/src/utils/store-actions.js b/src/utils/store-actions.js deleted file mode 100644 index aadd4d6..0000000 --- a/src/utils/store-actions.js +++ /dev/null @@ -1,60 +0,0 @@ -import { set } from './object.js'; -import { isArray } from './array.js'; -import { register } from '../registry.js'; - -export function isStoreActions(target) { - return target instanceof StoreActions; -} - -export function extendStoreActions(store, actions = []) { - store.actions = isArray(actions) ? actions : [actions]; - - if (isArray(actions)) { - for (const element of actions) { - store.extendActions(element); - } - return; - } - - if (isStoreActions(actions)) { - actions.extend(store); - } - - return store; -} - -export function createStoreActions(name, ...params) { - const actions = new StoreActions(...params); - register('action', name, actions); - return actions; -} - -export default class StoreActions { - constructor(actions = {}, bind = null) { - this.actions = actions; - this.bind = bind; - } - - extend(bindTo = null) { - const binding = bindTo || this.bind; - - if (!binding) { - return this; - } - - if (this?.actions && typeof this.actions === 'object') { - for (let action in this.actions) { - const fn = this.actions[action]; - - if (typeof fn !== 'function') { - set(binding, action, fn); - continue; - } - - set(binding, action, fn.bind(binding)); - } - } - - return this; - } -} diff --git a/src/utils/string.js b/src/utils/string.js deleted file mode 100644 index ce3a44f..0000000 --- a/src/utils/string.js +++ /dev/null @@ -1,538 +0,0 @@ -/** - * Javascript String - * - * instance - * new String('hello_world').humanize().get() => "Hello world" - * - * instance - * const string = new String(); - * string.humanize('hello_world').get() => "Hello world" - * - * no chain - * new String('hello_world', false).humanize() => "Hello world" - * - * static - * String.invoke('humanize', 'hello_world') => "Hello world" - * - * exports {} - * humanize('hello_world') => "Hello world" - */ -export default class String { - constructor(string, chain = true) { - this.str = string; - this.chain = chain; - } - - uncountableWords = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'moose', 'deer', 'news']; - - pluralRules = [ - [new RegExp('(m)an$', 'gi'), '$1en'], - [new RegExp('(pe)rson$', 'gi'), '$1ople'], - [new RegExp('(child)$', 'gi'), '$1ren'], - [new RegExp('^(ox)$', 'gi'), '$1en'], - [new RegExp('(ax|test)is$', 'gi'), '$1es'], - [new RegExp('(octop|vir)us$', 'gi'), '$1i'], - [new RegExp('(alias|status)$', 'gi'), '$1es'], - [new RegExp('(bu)s$', 'gi'), '$1ses'], - [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'], - [new RegExp('([ti])um$', 'gi'), '$1a'], - [new RegExp('sis$', 'gi'), 'ses'], - [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'), '$1$2ves'], - [new RegExp('(hive)$', 'gi'), '$1s'], - [new RegExp('([^aeiouy]|qu)y$', 'gi'), '$1ies'], - [new RegExp('(x|ch|ss|sh)$', 'gi'), '$1es'], - [new RegExp('(matr|vert|ind)ix|ex$', 'gi'), '$1ices'], - [new RegExp('([m|l])ouse$', 'gi'), '$1ice'], - [new RegExp('(quiz)$', 'gi'), '$1zes'], - [new RegExp('s$', 'gi'), 's'], - [new RegExp('$', 'gi'), 's'], - ]; - - singularRules = [ - [new RegExp('(m)en$', 'gi'), '$1an'], - [new RegExp('(pe)ople$', 'gi'), '$1rson'], - [new RegExp('(child)ren$', 'gi'), '$1'], - [new RegExp('([ti])a$', 'gi'), '$1um'], - [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$', 'gi'), '$1$2sis'], - [new RegExp('(hive)s$', 'gi'), '$1'], - [new RegExp('(tive)s$', 'gi'), '$1'], - [new RegExp('(curve)s$', 'gi'), '$1'], - [new RegExp('([lr])ves$', 'gi'), '$1f'], - [new RegExp('([^fo])ves$', 'gi'), '$1fe'], - [new RegExp('([^aeiouy]|qu)ies$', 'gi'), '$1y'], - [new RegExp('(s)eries$', 'gi'), '$1eries'], - [new RegExp('(m)ovies$', 'gi'), '$1ovie'], - [new RegExp('(x|ch|ss|sh)es$', 'gi'), '$1'], - [new RegExp('([m|l])ice$', 'gi'), '$1ouse'], - [new RegExp('(bus)es$', 'gi'), '$1'], - [new RegExp('(o)es$', 'gi'), '$1'], - [new RegExp('(shoe)s$', 'gi'), '$1'], - [new RegExp('(cris|ax|test)es$', 'gi'), '$1is'], - [new RegExp('(octop|vir)i$', 'gi'), '$1us'], - [new RegExp('(alias|status)es$', 'gi'), '$1'], - [new RegExp('^(ox)en', 'gi'), '$1'], - [new RegExp('(vert|ind)ices$', 'gi'), '$1ex'], - [new RegExp('(matr)ices$', 'gi'), '$1ix'], - [new RegExp('(quiz)zes$', 'gi'), '$1'], - [new RegExp('s$', 'gi'), ''], - ]; - - nonTitlecasedWords = ['and', 'or', 'nor', 'a', 'an', 'the', 'so', 'but', 'to', 'of', 'at', 'by', 'from', 'into', 'on', 'onto', 'off', 'out', 'in', 'over', 'with', 'for']; - - idSuffix = new RegExp('(_ids|_id)$', 'g'); - underbar = new RegExp('_', 'g'); - spaceOrUnderbar = new RegExp('[ _]', 'g'); - uppercase = new RegExp('([A-Z])', 'g'); - underbarPrefix = new RegExp('^_'); - - get() { - return this.str; - } - - applyRules(str, rules, skip, override) { - if (override) { - str = override; - } else { - var ignore = skip.indexOf(str.toLowerCase()) > -1; - if (!ignore) { - for (var x = 0; x < rules.length; x++) { - if (str.match(rules[x][0])) { - str = str.replace(rules[x][0], rules[x][1]); - break; - } - } - } - } - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.pluralize('person') -> 'people' - String.pluralize('octopus') -> 'octopi' - String.pluralize('Hat') -> 'Hats' - String.pluralize('person', 'guys') -> 'guys' - */ - pluralize(str, plural = null) { - str = str || this.str; - - return this.applyRules(str, this.pluralRules, this.uncountableWords, plural); - } - - /* - String.singularize('person') -> 'person' - String.singularize('octopi') -> 'octopus' - String.singularize('hats') -> 'hat' - String.singularize('guys', 'person') -> 'person' - */ - singularize(str, singular) { - str = str || this.str; - - return this.applyRules(str, this.singularRules, this.uncountableWords, singular); - } - - /* - String.camelize('message_properties') -> 'MessageProperties' - String.camelize('message_properties', true) -> 'messageProperties' - */ - camelize(str, lowFirstLetter) { - str = str || this.str; - - let str_path = str.split('/'); - for (var i = 0; i < str_path.length; i++) { - let str_arr = str_path[i].split('_'); - let initX = lowFirstLetter && i + 1 === str_path.length ? 1 : 0; - - for (let x = initX; x < str_arr.length; x++) { - str_arr[x] = str_arr[x].charAt(0).toUpperCase() + str_arr[x].substring(1); - } - str_path[i] = str_arr.join(''); - } - str = str_path.join('::'); - - // fix - if (lowFirstLetter === true) { - let first = str.charAt(0).toLowerCase(); - let last = str.slice(1); - str = first + last; - } - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.underscore('MessageProperties') -> 'message_properties' - String.underscore('messageProperties') -> 'message_properties' - */ - underscore(str) { - str = str || this.str; - - var str_path = str.split('::'); - for (var i = 0; i < str_path.length; i++) { - str_path[i] = str_path[i].replace(this.uppercase, '_$1'); - str_path[i] = str_path[i].replace(this.underbarPrefix, ''); - } - str = str_path.join('/').toLowerCase(); - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.humanize('message_properties') -> 'Message properties' - String.humanize('message_properties') -> 'message properties' - */ - humanize(str, lowFirstLetter) { - str = str || this.str; - - str = str.toLowerCase(); - str = str.replace(this.idSuffix, ''); - str = str.replace(this.underbar, ' '); - if (!lowFirstLetter) { - str = this.capitalize(str); - } - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.capitalize('message_properties') -> 'Message_properties' - String.capitalize('message properties') -> 'Message properties' - */ - capitalize(str) { - str = str || this.str; - - str = str.toLowerCase(); - str = str.substring(0, 1).toUpperCase() + str.substring(1); - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.dasherize('message_properties') -> 'message-properties' - String.dasherize('message properties') -> 'message-properties' - */ - dasherize(str) { - str = str || this.str; - - str = str.replace(this.spaceOrUnderbar, '-'); - str = str.toLowerCase(); - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.normify('message_properties') -> 'Message Properties' - String.normify('message properties') -> 'Message Properties' - Inflactor.normify('Message_propertyId', true) -> 'Message Properties Id' - */ - normify(str, allFirstUpper) { - str = str || this.str; - - //var str = str.toLowerCase(); - if (allFirstUpper === true) { - str = this.camelize(str); - str = this.underscore(str); - } else { - str = str.toLowerCase(); - } - - str = str.replace(this.underbar, ' '); - var str_arr = str.split(' '); - for (var x = 0; x < str_arr.length; x++) { - var d = str_arr[x].split('-'); - for (var i = 0; i < d.length; i++) { - if (this.nonTitlecasedWords.indexOf(d[i].toLowerCase()) < 0) { - d[i] = this.capitalize(d[i]); - } - } - str_arr[x] = d.join('-'); - } - str = str_arr.join(' '); - str = str.substring(0, 1).toUpperCase() + str.substring(1); - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.demodulize('Message::Bus::Properties') -> 'Properties' - */ - demodulize(str) { - str = str || this.str; - - var str_arr = str.split('::'); - str = str_arr[str_arr.length - 1]; - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.tableize('MessageBusProperty') -> 'message_bus_properties' - */ - tableize(str) { - str = str || this.str; - - // Temporarily disable chaining so that singularize and camelize return strings. - const originalChain = this.chain; - this.chain = false; - - str = this.pluralize(this.underscore(str)); - - // Restore the original chaining setting. - this.chain = originalChain; - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.classify('message_bus_properties') -> 'MessageBusProperty' - */ - classify(str) { - // Use the provided string or fallback to the instance's string. - str = str || this.str; - // Ensure we're working with a string and remove any extra whitespace. - str = `${str}`.trim(); - - // Normalize the input: - // Replace one or more spaces, dashes, or underscores with a single underscore. - // This handles cases like "service-area", "service area", "service_area", etc. - str = str.replace(/[\s\-_]+/g, '_'); - - // Temporarily disable chaining so that singularize and camelize return strings. - const originalChain = this.chain; - this.chain = false; - - // First, singularize the underscored string. - str = this.singularize(str); - - // Next, camelize the result. - // Passing false for the lowFirstLetter parameter ensures the first letter is capitalized. - str = this.camelize(str, false); - - // Restore the original chaining setting. - this.chain = originalChain; - - // Update the instance's string. - this.str = str; - - // Return the instance if chaining is enabled, or the string otherwise. - return this.chain ? this : str; - } - - /* - String.foreignKey('MessageBusProperty') -> 'message_bus_property_id' - String.foreignKey('MessageBusProperty', true) -> 'message_bus_propertyid' - */ - foreignKey(str, dropIdUbar = false) { - str = str || this.str; - - str = this.underscore(this.demodulize(str)) + (dropIdUbar ? '' : '_') + 'id'; - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /* - String.ordinalize('the 1 pitch') -> 'the 1st pitch' - */ - ordinalize(str) { - str = str || this.str; - - var str_arr = str.split(' '); - for (var x = 0; x < str_arr.length; x++) { - var i = parseInt(str_arr[x]); - if (isNaN(i)) { - var ltd = str_arr[x].substring(str_arr[x].length - 2); - var ld = str_arr[x].substring(str_arr[x].length - 1); - var suf = 'th'; - if (ltd != '11' && ltd != '12' && ltd != '13') { - if (ld === '1') { - suf = 'st'; - } else if (ld === '2') { - suf = 'nd'; - } else if (ld === '3') { - suf = 'rd'; - } - } - str_arr[x] += suf; - } - } - str = str_arr.join(' '); - - // set str - this.str = str; - - if (this.chain === true) { - return this; - } - - // return result - return str; - } - - /** - * @method invoke - **/ - static invoke() { - const argz = Object.values(arguments); - const instance = new String(null, false); - const method = arguments[0]; - argz.shift(); - - if (typeof instance[method] === 'function') { - return instance[method](...argz); - } - - return null; - } -} - -export const pluralize = function () { - const argz = ['pluralize', ...arguments]; - - return String.invoke(...argz); -}; - -export const singularize = function () { - const argz = ['singularize', ...arguments]; - - return String.invoke(...argz); -}; - -export const humanize = function () { - const argz = ['humanize', ...arguments]; - - return String.invoke(...argz); -}; - -export const underscore = function () { - const argz = ['underscore', ...arguments]; - - return String.invoke(...argz); -}; - -export const camelize = function () { - const argz = ['camelize', ...arguments]; - - return String.invoke(...argz); -}; - -export const capitalize = function () { - const argz = ['capitalize', ...arguments]; - - return String.invoke(...argz); -}; - -export const dasherize = function () { - const argz = ['dasherize', ...arguments]; - - return String.invoke(...argz); -}; - -export const normify = function () { - const argz = ['normify', ...arguments]; - - return String.invoke(...argz); -}; - -export const demodulize = function () { - const argz = ['demodulize', ...arguments]; - - return String.invoke(...argz); -}; - -export const tableize = function () { - const argz = ['tableize', ...arguments]; - - return String.invoke(...argz); -}; - -export const classify = function () { - const argz = ['classify', ...arguments]; - - return String.invoke(...argz); -}; - -export const foreignKey = function () { - const argz = ['foreignKey', ...arguments]; - - return String.invoke(...argz); -}; diff --git a/src/utils/uuid.js b/src/utils/uuid.js deleted file mode 100644 index 6f26723..0000000 --- a/src/utils/uuid.js +++ /dev/null @@ -1,7 +0,0 @@ -export const uuid = () => { - const S4 = () => (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); - - return `${S4() + S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`; -}; - -export default uuid; diff --git a/tests/core.test.ts b/tests/core.test.ts new file mode 100644 index 0000000..e814b25 --- /dev/null +++ b/tests/core.test.ts @@ -0,0 +1,640 @@ +import Fleetbase, { + Adapter, + BrowserAdapter, + Collection, + Contact, + create, + createAdapter, + createCollection, + createGoogleAddress, + createResource, + createStore, + createStoreActions, + createStoreInstance, + Driver, + EmberJsAdapter, + Entity, + Fleet, + FleetbaseError, + GoogleAddress, + isResource, + isCollection, + objectAt, + NodeAdapter, + Order, + Organization, + Payload, + Place, + Point, + register, + replace, + resolve, + resolveAdapter, + resolveResource, + Resource, + ServiceArea, + ServiceQuote, + ServiceRate, + Store, + StoreActions, + TrackingStatus, + uniqBy, + Vehicle, + Vendor, + Waypoint, + Zone, +} from '../src/index.js'; +import Resolver from '../src/resolver.js'; +import { detectAdapter } from '../src/adapters/detect.js'; +import { appendQuery, buildUrl, requestWithFetch } from '../src/adapters/fetch.js'; +import FleetbaseString, { camelize, capitalize, classify, dasherize, demodulize, foreignKey, humanize, normify, pluralize, singularize, tableize, underscore } from '../src/string.js'; +import { extend, get, getProperties, invoke, isBlank, isCallable, isEmail, isEmpty, isLatitude, isLongitude, isNodeEnvironment, isPhone, set, setProperties, uuid } from '../src/utils.js'; +import type { AdapterLike, RequestOptions, ResourceAttributes } from '../src/types.js'; +import * as sdkExports from '../src/index.js'; +import contract from '../contracts/v1.2.13.json' with { type: 'json' }; + +class RecordingAdapter implements AdapterLike { + calls: Array<[string, string, unknown, RequestOptions | undefined]> = []; + response: unknown = { id: 'place_1', created_at: '2026-01-01T00:00:00.000Z' }; + failure: Error | null = null; + + private send(method: string, path: string, data: unknown, options?: RequestOptions): Promise { + this.calls.push([method, path, data, options]); + return this.failure ? Promise.reject(this.failure) : Promise.resolve(this.response); + } + + get(path: string, query: ResourceAttributes = {}, options?: RequestOptions): Promise { + return this.send('GET', path, query, options); + } + post(path: string, data: unknown = {}, options?: RequestOptions): Promise { + return this.send('POST', path, data, options); + } + put(path: string, data: unknown = {}, options?: RequestOptions): Promise { + return this.send('PUT', path, data, options); + } + patch(path: string, data: unknown = {}, options?: RequestOptions): Promise { + return this.send('PATCH', path, data, options); + } + delete(path: string, options?: RequestOptions, legacyOptions?: RequestOptions): Promise { + return this.send('DELETE', path, {}, legacyOptions ?? options); + } +} + +describe('utility compatibility', () => { + it('handles empty and blank values', () => { + expect(isEmpty(null)).toBe(true); + expect(isEmpty(undefined)).toBe(true); + expect(isEmpty('')).toBe(true); + expect(isEmpty([])).toBe(true); + expect(isEmpty(new Set())).toBe(true); + expect(isEmpty(() => undefined)).toBe(false); + expect(isEmpty({})).toBe(false); + expect(isBlank(' ')).toBe(true); + expect(isBlank('x')).toBe(false); + }); + + it('validates coordinates and identities', () => { + expect(isLatitude(90)).toBe(true); + expect(isLatitude(-91)).toBe(false); + expect(isLatitude(Symbol('x'))).toBe(false); + expect(isLongitude(180)).toBe(true); + expect(isLongitude(-181)).toBe(false); + expect(isLongitude(Symbol('x'))).toBe(false); + expect(isPhone('+1 (202) 555-0100')).toBe(true); + expect(isPhone('hello')).toBe(false); + expect(isEmail('sdk@fleetbase.io')).toBe(true); + expect(isEmail('sdk')).toBe(false); + expect(isNodeEnvironment()).toBe(true); + }); + + it('gets, sets, invokes, and extends nested values safely', () => { + const target: ResourceAttributes = { nested: { value: 1 }, callable: () => 'ok' }; + expect(get(target, 'nested.value')).toBe(1); + expect(get(target, ['callable'])).toBe('ok'); + expect(get(target, 'missing.value')).toBeNull(); + expect(set(target, 'nested.next', 2)).toBe(2); + expect(() => set(target, '__proto__.polluted', true)).toThrow(TypeError); + expect(getProperties(target, ['nested.value'])).toEqual({ 'nested.value': 1 }); + expect(setProperties(target, { 'nested.third': 3 })).toBe(target); + expect(extend(target, { extra: true })).toMatchObject({ extra: true }); + expect(isCallable(target, 'callable')).toBe(true); + expect(isCallable(target, 'missing')).toBe(false); + expect(invoke(target, 'callable')?.()).toBe('ok'); + expect(invoke(target, 'missing')).toBeUndefined(); + }); + + it('creates standards-compatible points, addresses, and UUIDs', () => { + const point = new Point(1, 2); + expect(point.latitude).toBe(1); + expect(point.longitude).toBe(2); + expect(point.lat()).toBe(1); + expect(point.lng()).toBe(2); + expect(point.serialize()).toEqual({ type: 'Point', coordinates: [2, 1] }); + expect(point.toJson()).toEqual(point.serialize()); + expect(point.toString()).toBe('(1, 2)'); + expect(Point.fromGeoJson({ coordinates: [4, 3] }).coordinates).toEqual([4, 3]); + expect(uuid()).toMatch(/^[0-9a-f-]{36}$/i); + + const place = { + address_components: [ + { long_name: '400', short_name: '400', types: ['street_number'] }, + { long_name: 'Broad Street', short_name: 'Broad St', types: ['route'] }, + { long_name: 'Seattle', short_name: 'Seattle', types: ['locality'] }, + { long_name: 'Washington', short_name: 'WA', types: ['administrative_area_level_1'] }, + { long_name: 'United States', short_name: 'US', types: ['country'] }, + ], + geometry: { location: { lat: 47.6, lng: -122.3 } }, + }; + const address = createGoogleAddress(place); + expect(address).toBeInstanceOf(GoogleAddress); + expect(address.get('country', true)).toBe('US'); + expect(address.get('missing')).toBeNull(); + expect(address.has('locality')).toBe(true); + expect(address.or(['missing', ['country', true]])).toBe('US'); + expect(address.all()).toMatchObject({ address: '400 Broad Street', city: 'Seattle' }); + expect(address.setAttribute('custom', 1).getAttribute('custom')).toBe(1); + expect(address.setAttributes({ another: 2 }).getAttribute('another')).toBe(2); + address.parse(); + }); +}); + +describe('string and collection compatibility', () => { + it('supports chaining and exported string transformations', () => { + expect((new FleetbaseString('Hello World').dasherize() as FleetbaseString).get()).toBe('hello-world'); + expect(new FleetbaseString(null).get()).toBe(''); + expect(pluralize('entity')).toBe('entities'); + expect(pluralize('fish')).toBe('fish'); + expect(pluralize('person')).toBe('people'); + expect(singularize('entities')).toBe('entity'); + expect(humanize('driver_id')).toBe('Driver'); + expect(humanize('driver_id', true)).toBe('driver'); + expect(underscore('Fleetbase::ServiceQuote')).toBe('fleetbase/service_quote'); + expect(camelize('service_quote')).toBe('ServiceQuote'); + expect(camelize('service_quote', true)).toBe('serviceQuote'); + expect(capitalize('fLEETBASE')).toBe('Fleetbase'); + expect(dasherize('Fleet Base')).toBe('fleet-base'); + expect(normify('service_quote')).toBe('Service Quote'); + expect(normify('ServiceQuote', true)).toBe('Service Quote'); + expect(demodulize('Fleetbase::Order')).toBe('Order'); + expect(tableize('ServiceQuote')).toBe('service_quotes'); + expect(classify('service-quotes')).toBe('ServiceQuote'); + expect(foreignKey('Fleetbase::Order')).toBe('order_id'); + expect(foreignKey('Order', true)).toBe('orderid'); + expect((new FleetbaseString('1 2 3 4 11 12 13 21 word').ordinalize() as FleetbaseString).get()).toBe('1st 2nd 3rd 4th 11th 12th 13th 21st word'); + expect(FleetbaseString.invoke('dasherize', 'Hello World')).toBe('hello-world'); + expect(FleetbaseString.invoke('missing' as keyof FleetbaseString, 'x')).toBeNull(); + }); + + it('implements the legacy collection helpers', () => { + const collection = createCollection([ + { id: 2, active: false }, + { id: 1, active: true }, + { id: 1, active: true }, + ]); + expect(collection).toBeInstanceOf(Collection); + expect(collection.notEmpty).toBe(true); + expect(collection.empty).toBe(false); + expect(collection.first?.id).toBe(2); + expect(collection.last?.id).toBe(1); + expect(collection.objectAt(1)?.id).toBe(1); + expect(collection.objectsAt([0, 9])).toEqual([collection[0], undefined]); + expect(collection.findBy('id', 1)?.id).toBe(1); + expect(collection.findIndexBy('active')).toBe(1); + expect(collection.isAny('active')).toBe(true); + expect(collection.isEvery('id')).toBe(true); + expect(collection.invoke('id')).toEqual([2, 1, 1].map(() => undefined)); + expect(createCollection([{ run: () => 'ok' }]).invoke('run')).toEqual(['ok']); + expect(collection.toArray()).not.toBe(collection); + expect(collection.compact()).toHaveLength(3); + expect(collection.sortBy('id').first?.id).toBe(1); + expect(collection.uniqBy('id')).toHaveLength(2); + expect(collection.without(collection[0]!)).toHaveLength(2); + expect(collection.without({ id: 9, active: false })).toBe(collection); + collection.insertAt(0, { id: 3, active: false }).replaceAt(0, { id: 4, active: true }).removeAt(0); + collection.pushObject({ id: 5, active: true }).pushObjects([{ id: 6, active: true }]); + expect(collection.popObject()?.id).toBe(6); + expect(collection.shiftObject()).not.toBeNull(); + expect(collection.unshiftObject({ id: 7, active: true }).id).toBe(7); + collection.unshiftObjects([{ id: 8, active: true }]).reverseObjects(); + const duplicate = collection[0]!; + collection.push(duplicate); + collection.removeObject(duplicate).removeObjects([]).addObject(duplicate).addObjects([duplicate]); + expect(collection.includes(duplicate)).toBe(true); + collection.setObjects([{ id: 9, active: true }]); + expect(collection).toHaveLength(1); + expect(collection.clear().empty).toBe(true); + expect(collection.popObject()).toBeNull(); + expect(collection.shiftObject()).toBeNull(); + }); +}); + +describe('fetch adapters', () => { + it('constructs URLs and serializes query values', () => { + expect(buildUrl({ host: 'https://api.test/', namespace: '/v1/' }, '/orders')).toBe('https://api.test/v1/orders'); + expect(buildUrl({}, 'orders', 'https://override.test')).toBe('https://override.test'); + const url = appendQuery('https://api.test/orders?first=1', { ids: [1, 2], at: new Date('2026-01-01T00:00:00.000Z'), filter: { active: true }, skip: null }); + expect(url).toContain('ids=1'); + expect(url).toContain('ids=2'); + expect(url).toContain('filter=%7B%22active%22%3Atrue%7D'); + expect(appendQuery('x', {})).toBe('x'); + expect(appendQuery('x', { skip: undefined })).toBe('x'); + }); + + it('handles successful, empty, text, HTTP, and network responses', async () => { + const make = (response: Response) => ({ host: 'https://api.test', namespace: 'v1', fetch: vi.fn().mockResolvedValue(response) }); + await expect(requestWithFetch(make(new Response(JSON.stringify({ ok: true }), { status: 200 })), { path: 'orders', method: 'POST', data: { a: 1 } })).resolves.toEqual({ ok: true }); + await expect(requestWithFetch(make(new Response(null, { status: 204 })), { path: 'orders', method: 'DELETE' })).resolves.toBeNull(); + await expect(requestWithFetch(make(new Response('plain', { status: 200 })), { path: 'orders', method: 'GET' })).resolves.toBe('plain'); + await expect( + requestWithFetch(make(new Response(JSON.stringify({ errors: ['bad'] }), { status: 422, headers: { 'x-request-id': 'req_1' } })), { path: 'orders', method: 'GET' }) + ).rejects.toMatchObject({ message: 'bad', status: 422, requestId: 'req_1' }); + await expect(requestWithFetch({ fetch: vi.fn().mockRejectedValue(new Error('offline')) }, { path: 'orders', method: 'GET' })).rejects.toMatchObject({ code: 'NETWORK_ERROR' }); + const savedFetch = globalThis.fetch; + vi.stubGlobal('fetch', undefined); + await expect(requestWithFetch({}, { path: 'orders', method: 'GET' })).rejects.toMatchObject({ code: 'FETCH_UNAVAILABLE' }); + vi.stubGlobal('fetch', savedFetch); + }); + + it('supports browser, node, ember, and abstract adapters', async () => { + const fetchMock = vi.fn().mockImplementation(() => Promise.resolve(new Response('{}', { status: 200 }))); + const browser = new BrowserAdapter({ host: 'https://api.test', namespace: 'v1', publicKey: 'pk', fetch: fetchMock }); + browser.setHeaders({ 'X-Test': 'yes' }); + await browser.get('orders', { page: 1 }); + await browser.post('orders', { id: 1 }); + await browser.put('orders/1', { id: 1 }); + await browser.patch('orders/1', { id: 1 }); + await browser.delete('orders/1'); + await expect(browser.parseJSON(new Response('{"ok":true}'))).resolves.toMatchObject({ ok: true, json: { ok: true } }); + await expect(browser.parseJSON(new Response('not-json'))).rejects.toThrow('Something went wrong'); + await browser.request('orders', 'POST', { body: JSON.stringify({ id: 1 }), headers: { 'X-Legacy': 'yes' } }); + expect(fetchMock).toHaveBeenCalledTimes(6); + expect(new EmberJsAdapter({ fetch: fetchMock })).toBeInstanceOf(BrowserAdapter); + const node = new NodeAdapter({ fetch: fetchMock }); + await node.get('orders'); + await node.post('orders', {}); + await node.put('orders/1', {}); + await node.patch('orders/1', {}); + await node.delete('orders/1'); + const abstract = new Adapter(); + await expect(abstract.get('x')).rejects.toThrow('implemented'); + await expect(abstract.post('x')).rejects.toThrow('implemented'); + await expect(abstract.put('x')).rejects.toThrow('implemented'); + await expect(abstract.patch('x')).rejects.toThrow('implemented'); + await expect(abstract.delete('x')).rejects.toThrow('implemented'); + }); +}); + +describe('resources, stores, and SDK compatibility', () => { + it('registers and resolves all public resource classes', () => { + const classes = [Contact, Driver, Entity, Fleet, Order, Organization, Payload, Place, ServiceArea, ServiceQuote, ServiceRate, TrackingStatus, Vehicle, Vendor, Waypoint, Zone]; + for (const Constructor of classes) { + const instance = resolveResource(Constructor.name, {}); + expect(instance).toBeInstanceOf(Constructor); + expect(isResource(instance)).toBe(true); + } + expect(createResource({}, new RecordingAdapter(), 'resource')).toBeInstanceOf(Resource); + expect(resolveAdapter('BrowserAdapter', { fetch: vi.fn() })).toBeInstanceOf(BrowserAdapter); + expect(() => resolveResource('Missing')).toThrow("No resource named 'Missing'"); + expect(() => createResource('missing')).not.toThrow(); + class CustomResource extends Resource {} + register('resource', 'CustomResource', CustomResource); + expect(resolveResource('CustomResource')).toBeInstanceOf(CustomResource); + }); + + it('tracks, serializes, saves, reloads, and destroys resources safely', async () => { + const adapter = new RecordingAdapter(); + const resource = new Place({ name: 'Before', nested: { value: 1 } }, adapter); + expect(resource.isNew).toBe(true); + expect(resource.isEmpty).toBe(false); + expect(resource.getAttribute('missing', 'fallback')).toBe('fallback'); + expect(resource.hasAttribute('name')).toBe(true); + expect(resource.hasAttributes(['name', 'nested'])).toBe(true); + expect(resource.isAttributeFilled('name')).toBe(true); + resource.setAttribute('name', 'After').setAttributes({ phone: '1' }); + expect(resource.isDirty('name')).toBe(true); + expect(resource.hasDirtyAttributes()).toBe(true); + expect(resource.changes.name).toHaveLength(1); + const legacyChanges = Object.getOwnPropertyDescriptor(Resource.prototype, 'changes')?.value as (this: Resource) => Record; + expect(legacyChanges.call(resource)).toBe(resource.changes); + resource.mutate('nested.value', 2); + expect(resource.getAttribute('nested.value')).toBe(2); + expect(resource.getDirtyAttributes()).toMatchObject({ name: 'Before' }); + expect(resource.getAttributes('name')).toBe('After'); + expect(resource.serialize()).toMatchObject({ name: 'After' }); + expect(resource.mergeAttributes({ city: 'Seattle' })).toMatchObject({ city: 'Seattle' }); + let iterated = 0; + resource.eachAttribute(() => { + iterated += 1; + }); + expect(iterated).toBeGreaterThan(0); + expect(resource.eachAttribute()).toBe(resource); + await resource.save(); + expect(resource.id).toBe('place_1'); + await resource.save(); + resource.setAttribute('name', 'Dirty'); + await resource.save({ onlyDirty: true }); + await resource.reload(); + await resource.destroy(); + expect(resource.isLoading).toBe(false); + expect(resource.isDestroying).toBe(false); + resource.empty(); + expect(resource.isEmpty).toBe(true); + expect(() => resource.setFlags(['bad' as 'isLoading'])).toThrow('not a valid flag'); + + adapter.failure = new Error('failed'); + await expect(resource.create()).rejects.toThrow('failed'); + expect(resource.isSaving).toBe(false); + }); + + it('serializes store responses and forwards CRUD options', async () => { + const adapter = new RecordingAdapter(); + const store = new Store('place', adapter); + expect(await store.create({ name: 'x' })).toBeInstanceOf(Place); + expect(await store.update('place_1', { name: 'y' })).toBeInstanceOf(Place); + expect(await store.findRecord('place_1')).toBeInstanceOf(Place); + adapter.response = [{ id: 'place_1' }, { id: 'place_2' }]; + expect(await store.findAll()).toBeInstanceOf(Collection); + expect(await store.query({ page: 1 })).toHaveLength(2); + adapter.response = { id: 'place_1' }; + await store.queryRecord({ active: true }); + await store.destroy('place_1', { headers: { 'X-Test': 'yes' } }); + await store.destroy(new Place({ id: 'place_1' }, adapter)); + expect(adapter.calls.at(-1)?.[1]).toBe('places/place_1'); + }); + + it('extends store actions and exercises specialized resource actions', async () => { + const adapter = new RecordingAdapter(); + const actions = new StoreActions({ + custom(this: Store, value: string) { + return `${this.namespace}:${value}`; + }, + value: 1, + }); + const store = new Store('place', adapter, { actions }); + expect((store.custom as (value: string) => string)('x')).toBe('places:x'); + expect(store.value).toBe(1); + expect(actions.extend()).toBe(actions); + + const order = new Order({ id: 'order_1', status: 'driver_enroute', started_at: '2026-01-01', dispatched_at: '2026-01-01', scheduled_at: '2026-01-01' }, adapter); + expect(order.isDispatched).toBe(true); + expect(order.isNotDispatched).toBe(false); + expect(order.isStarted).toBe(true); + expect(order.isNotStarted).toBe(false); + expect(order.isEnroute).toBe(true); + expect(order.isInProgress).toBe(true); + expect(order.scheduledAt).toBeInstanceOf(Date); + expect(order.startedAt).toBeInstanceOf(Date); + expect(order.dispatchedAt).toBeInstanceOf(Date); + await order.getDistanceAndTime(); + await order.dispatch(); + await order.start(); + await order.setDestination(new Place({ id: 'place_1' }, adapter)); + await order.captureQrCode(); + await order.captureSignature('entity_1'); + await order.getNextActivity(); + await order.updateActivity(); + await order.cancel(); + await order.complete(); + + const driver = new Driver({ id: 'driver_1', online: true, token: 'token', location: new Point(1, 2) }, adapter); + expect(driver.isOnline).toBe(true); + expect(driver.token).toBe('token'); + expect(driver.coordinates).toEqual([1, 2]); + await driver.track(); + await driver.syncDevice(); + adapter.response = [{ id: 'org_1' }]; + await driver.listOrganizations(); + adapter.response = { id: 'org_1' }; + await driver.switchOrganization('org_1'); + await driver.currentOrganization(); + + const quote = new ServiceQuote({ id: 'quote_1' }, adapter); + await quote.fromPreliminary({ pickup: 'place_1' }); + await quote.fromPayload(new Payload({ id: 'payload_1' }, adapter)); + }); + + it('constructs the SDK, validates keys, and propagates adapter changes', () => { + const adapter = new RecordingAdapter(); + expect(() => new Fleetbase('')).toThrow('Invalid public key'); + const sdk = new Fleetbase('pk_test', { adapter, host: 'https://api.test' }, true); + expect(sdk).toBeInstanceOf(Fleetbase); + expect(Fleetbase.newInstance('pk_test', { adapter })).toBeInstanceOf(Fleetbase); + expect(sdk.places).toBeInstanceOf(Store); + expect(sdk.serviceQuotes).toBeInstanceOf(Store); + expect(sdk.getAdapter()).toBe(adapter); + const replacement = new RecordingAdapter(); + expect(sdk.setAdapter(replacement)).toBeUndefined(); + expect(sdk.orders.adapter).toBe(replacement); + const error = new FleetbaseError('bad', { status: 400, code: 'BAD', requestId: 'req', response: {}, cause: new Error('cause') }); + expect(error).toBeInstanceOf(Error); + expect(error).toMatchObject({ name: 'FleetbaseError', status: 400, code: 'BAD', requestId: 'req' }); + }); +}); + +describe('published v1 compatibility snapshot', () => { + it('preserves every published root export', () => { + for (const name of contract.exports) { + expect(name in sdkExports, `missing export ${name}`).toBe(true); + } + }); + + it('preserves client stores and prototype methods', () => { + const client = new Fleetbase('pk_test', { adapter: new RecordingAdapter() }); + for (const store of contract.stores) { + expect(client[store as keyof Fleetbase], `missing store ${store}`).toBeInstanceOf(Store); + } + for (const [className, methods] of Object.entries(contract.prototypeMethods)) { + const Constructor = className === 'Fleetbase' ? Fleetbase : sdkExports[className as keyof typeof sdkExports]; + expect(typeof Constructor).toBe('function'); + const prototype = (Constructor as { prototype: object }).prototype; + for (const method of methods) { + expect(method in prototype, `${className}.${method} is missing`).toBe(true); + } + } + }); +}); + +describe('edge and failure contracts', () => { + it('covers collection functional and comparison edges', () => { + expect(isCollection(createCollection())).toBe(true); + expect(isCollection([])).toBe(false); + expect(objectAt([1, 2], 1)).toBe(2); + const raw = [1, 2]; + replace(raw, 0, 1, [3]); + expect(raw).toEqual([3, 2]); + expect(uniqBy([1, 1, 2])).toEqual([1, 2]); + expect(uniqBy([{ id: 1 }, { id: 1 }], (item) => item.id)).toHaveLength(1); + const values = createCollection([{ value: null }, { value: 1 }, { value: undefined }, { value: 1 }]); + expect(values.sortBy('value').map((item) => item.value)).toEqual([undefined, null, 1, 1]); + expect(values.findBy('value', 9)).toBeUndefined(); + expect(values.findIndexBy('value', 9)).toBe(-1); + expect(values.isEvery('value', 1)).toBe(false); + expect(values.isAny('value', 9)).toBe(false); + expect(createCollection([null, 1, undefined]).compact()).toEqual([1]); + expect(new Collection(1, 2)).toEqual([1, 2]); + expect( + createCollection([{ value: 2 }, { value: 1 }]) + .sortBy('value') + .map((item) => item.value) + ).toEqual([1, 2]); + expect( + createCollection([{ value: 1 }, { value: 2 }]) + .sortBy('value') + .map((item) => item.value) + ).toEqual([1, 2]); + const removable = createCollection([1, 2]); + removable.removeObjects([1]); + expect(removable).toEqual([2]); + }); + + it('covers registry and resolver aliases and failures', () => { + expect(createStore('place', new RecordingAdapter())).toBeInstanceOf(Store); + expect(createStoreInstance('place', new RecordingAdapter())).toBeInstanceOf(Store); + expect(createAdapter()).toBeInstanceOf(Adapter); + expect(resolve('resource', 'place', {})).toBeInstanceOf(Place); + expect(new Resolver('resource', 'Place', {})).toBeInstanceOf(Place); + const resolver = Object.create(Resolver.prototype) as Resolver; + expect(resolver.lookup('resource', 'Place', {})).toBeInstanceOf(Place); + expect(() => create('unknown-type', 'Missing')).toThrow('Unknown type'); + expect(createStoreActions('custom', { run: () => true })).toBeInstanceOf(StoreActions); + const extended = new Store('place', new RecordingAdapter()); + expect(extended.extendActions([new StoreActions({ one: 1 }), { extend: () => undefined }])).toBe(extended); + }); + + it('covers resource state variants and all rejected operations', async () => { + const adapter = new RecordingAdapter(); + const nested = new Place({ id: 'nested' }, adapter); + const resource = new Resource({ id: 'resource_1', created_at: '2026-01-01', updated_at: '2026-01-02', deleted: true, time: 1, meta: { page: 1 }, nested }, adapter); + expect(resource.meta).toEqual({ page: 1 }); + expect(resource.createdAt).toBeInstanceOf(Date); + expect(resource.updatedAt).toBeInstanceOf(Date); + expect(resource.isLoaded).toBe(true); + expect(resource.isSaved).toBe(true); + expect(resource.isDeleted).toBe(true); + expect(resource.isAttributeFilled(['id', 'created_at'])).toBe(true); + expect(resource.serialize().nested).toEqual({ id: 'nested' }); + resource.setAttribute({ name: 'object form' }); + resource.setAttribute('name', 'again'); + expect(resource.dirtyAttributes.name).toBeNull(); + resource.syncAttributes([]); + expect(resource.id).toBe('resource_1'); + expect(resource.reset()).toBe(resource); + expect(new Resource().createdAt).toBeNull(); + expect(new Resource().updatedAt).toBeNull(); + expect(new Resource().isDeleted).toBe(false); + + adapter.failure = new Error('failed'); + const failing = new Resource({ id: 'resource_1' }, adapter); + await expect(failing.update()).rejects.toThrow('failed'); + expect(failing.isSaving).toBe(false); + await expect(failing.reload()).rejects.toThrow('failed'); + expect(failing.isReloading).toBe(false); + await expect(failing.destroy()).rejects.toThrow('failed'); + expect(failing.isDestroying).toBe(false); + }); + + it('covers specialized resource representations and branches', async () => { + const adapter = new RecordingAdapter(); + const google = createGoogleAddress({ geometry: { location: { lat: 1, lng: 2 } } }); + const googlePlace = Place.fromGoogleAddress(google, adapter); + expect(googlePlace).toBeInstanceOf(Place); + expect(Place.fromGoogleAddress({ getAttribute: () => null, get: () => null }, adapter).coordinates).toEqual([0, 0]); + expect(new Place({ location: { coordinates: [2, 1] } }, adapter).coordinates).toEqual([1, 2]); + expect(new Place({}, adapter).coordinates).toEqual([0, 0]); + expect(new Place({}, adapter).setOwner(new Contact({ id: 'contact_1' }, adapter)).getAttribute('owner')).toBe('contact_1'); + expect(new Place({}, adapter).setOwner('contact_2').getAttribute('owner')).toBe('contact_2'); + + const payload = new Payload({ entities: [{ id: 'entity_1' }], dropoff: { id: 'place_2' }, pickup: { id: 'place_1' }, waypoints: [{ id: 'waypoint_1' }] }, adapter); + payload.attach(new Entity({}, adapter)); + expect(payload.entities[0]).toBeInstanceOf(Entity); + expect(payload.dropoff).toBeInstanceOf(Place); + expect(payload.pickup).toBeInstanceOf(Place); + expect(payload.waypoints[0]).toBeInstanceOf(Waypoint); + const emptyPayload = new Payload({}, adapter); + expect(emptyPayload.entities).toHaveLength(0); + expect(emptyPayload.dropoff).toBeNull(); + expect(emptyPayload.pickup).toBeNull(); + expect(emptyPayload.waypoints).toHaveLength(0); + expect(new Payload({ entities: 'invalid', waypoints: 'invalid' }, adapter).entities).toHaveLength(0); + expect(new Payload({ entities: 'invalid', waypoints: 'invalid' }, adapter).waypoints).toHaveLength(0); + expect(new Place({ location: { coordinates: 'invalid' } }, adapter).coordinates).toEqual([0, 0]); + expect(new Place({}, adapter).setOwner(new Resource({ id: 1 }, adapter)).getAttribute('owner')).toBeNull(); + + const organization = new Organization({}, adapter); + await (organization.store.current as (params?: ResourceAttributes, options?: RequestOptions) => Promise)(); + const driverStore = new Store('driver', adapter, { actions: new Driver({}, adapter).options.actions! }); + await (driverStore.login as (identity: string, password?: string | null) => Promise)('+1 202 555 0100'); + expect(() => (driverStore.login as (identity: string, password?: string | null) => Promise)('driver@example.com')).toThrow('requires password'); + await (driverStore.login as (identity: string, password?: string | null, attributes?: ResourceAttributes) => Promise)('driver@example.com', 'secret', { device: 'ios' }); + await (driverStore.verifyCode as (identity: string, code: string) => Promise)('+1', '1234'); + await (driverStore.retrieve as (id: string) => Promise)('driver_1'); + expect(new Driver({}, adapter).coordinates).toEqual([0, 0]); + + const completed = new Order({ status: 'completed' }, adapter); + expect(completed.isCompleted).toBe(true); + expect(completed.isCanceled).toBe(false); + expect(completed.isInProgress).toBe(false); + expect(completed.status).toBe('completed'); + expect(completed.scheduledAt).toBeNull(); + const canceled = new Order({ status: 'canceled' }, adapter); + expect(canceled.isCanceled).toBe(true); + await canceled.setDestination('place_1'); + await canceled.captureQrCode(new Entity({ id: 'entity_1' }, adapter)); + await canceled.captureSignature(); + const quote = new ServiceQuote({}, adapter); + await quote.fromPayload('payload_1'); + delete (quote.store as Store & Record).fromPayload; + expect(() => quote.fromPayload('payload_1')).toThrow('not available'); + }); + + it('covers environment selection and browser secret protection', () => { + const originalProcess = (globalThis as typeof globalThis & { process?: unknown }).process; + vi.stubGlobal('process', undefined); + vi.stubGlobal('navigator', { product: 'ReactNative' }); + expect(isNodeEnvironment()).toBe(false); + expect(detectAdapter({ fetch: vi.fn() })).toBeInstanceOf(BrowserAdapter); + expect(() => new Fleetbase('$secret', { adapter: new RecordingAdapter() })).toThrow('Secret key'); + vi.stubGlobal('process', originalProcess); + vi.unstubAllGlobals(); + expect(detectAdapter({ fetch: vi.fn() })).toBeInstanceOf(NodeAdapter); + expect(new Fleetbase('pk_test', { fetch: vi.fn() }).getAdapter()).toBeInstanceOf(NodeAdapter); + }); + + it('covers fetch body and error envelope variants', async () => { + const responseConfig = (body: BodyInit | null, init: ResponseInit = {}) => ({ fetch: vi.fn().mockResolvedValue(new Response(body, init)) }); + await expect(requestWithFetch(responseConfig('', { status: 200 }), { path: 'x', method: 'GET' })).resolves.toBeNull(); + await expect(requestWithFetch(responseConfig(null, { status: 205 }), { path: 'x', method: 'GET' })).resolves.toBeNull(); + await expect(requestWithFetch(responseConfig(JSON.stringify({ error: 'error value' }), { status: 400 }), { path: 'x', method: 'GET' })).rejects.toThrow('error value'); + await expect(requestWithFetch(responseConfig(JSON.stringify({ message: 'message value' }), { status: 400 }), { path: 'x', method: 'GET' })).rejects.toThrow('message value'); + await expect(requestWithFetch(responseConfig(JSON.stringify({ message: 1, code: 'SPECIFIC' }), { status: 400 }), { path: 'x', method: 'GET' })).rejects.toMatchObject({ + code: 'SPECIFIC', + }); + await expect(requestWithFetch(responseConfig('string error', { status: 400 }), { path: 'x', method: 'GET' })).rejects.toThrow('string error'); + await expect(requestWithFetch(responseConfig('', { status: 400, statusText: 'Bad Request' }), { path: 'x', method: 'GET' })).rejects.toThrow('Bad Request'); + await requestWithFetch(responseConfig('{}'), { path: 'x', method: 'POST', data: 'raw' }); + await requestWithFetch(responseConfig('{}'), { path: 'x', method: 'POST', data: new URLSearchParams({ a: '1' }) }); + await requestWithFetch(responseConfig('{}'), { path: 'x', method: 'POST', data: new FormData() }); + await requestWithFetch(responseConfig('{}'), { path: 'x', method: 'GET', options: { headers: { 'X-Test': 'yes' } } }); + const presetBrowser = new BrowserAdapter({ headers: { 'Content-Type': 'text/plain' }, fetch: vi.fn() }); + expect(new Headers(presetBrowser.headers).get('Content-Type')).toBe('text/plain'); + const presetNode = new NodeAdapter({ headers: { 'User-Agent': 'custom' }, fetch: vi.fn() }); + expect(new Headers(presetNode.headers).get('User-Agent')).toBe('custom'); + }); + + it('covers UUID fallback and sparse address data', () => { + const originalCrypto = globalThis.crypto; + vi.stubGlobal('crypto', {}); + expect(uuid()).toMatch(/^[0-9a-f-]{36}$/i); + vi.stubGlobal('crypto', originalCrypto); + const empty = new GoogleAddress({}); + expect(empty.or()).toBeNull(); + expect(empty.all()).toMatchObject({ coordinates: [0, 0] }); + expect(get({ value: null }, 'value.next')).toBeNull(); + expect(get({ value: 1 }, 'value.next')).toBeNull(); + expect(get({ value: () => ({ next: 1 }) }, 'value.next')).toBe(1); + expect(get(new Place({ name: 'x' }), 'name')).toBe('x'); + expect(set({}, '', 1)).toBe(1); + expect(set({ value: 0 }, 'value.next', 1)).toBe(1); + expect(normify('war_and_peace')).toBe('War and Peace'); + }); +}); diff --git a/tests/place.test.js b/tests/place.test.js deleted file mode 100644 index e03080c..0000000 --- a/tests/place.test.js +++ /dev/null @@ -1,112 +0,0 @@ -import { assert } from 'chai'; -import Fleetbase from '../src/fleetbase.js'; -import Resource from '../src/resource.js'; -import Place from '../src/resources/place.js'; - -const fleetbase = new Fleetbase(process.env.FLEETBASE_KEY, { host: process.env.FLEETBASE_HOST }); -const adapter = fleetbase.getAdapter(); - -// create an instance of the fleetbase sdk -describe('fleetbase.places', () => { - const context = { id: null }; - - describe('#create()', () => { - it('Should create a Place resource', async () => { - const place = await fleetbase.places.create({ - name: 'Warehouse', - street1: '23 Serangoon Central Nex', - country: 'Singapore', - }); - - context.id = place.id; - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - }); - - it('Should have an id', () => { - assert.isString(context.id); - assert.include(context.id, 'place', `id: ${context.id}`); - }); - }); - - describe('#update()', () => { - it('Should update the Place resource instance', async () => { - const { id } = context; - const place = await fleetbase.places.update(id, { - street2: '#5-22', - }); - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - assert.equal(place.getAttribute('street2'), '#5-22'); - }); - }); - - describe('#delete()', () => { - it('Should delete the Place resource instance', async () => { - const { id } = context; - const place = await fleetbase.places.destroy(id); - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - assert.isTrue(place.getAttribute('deleted')); - }); - }); -}); - -// create a place instance without fleetbase sdk -describe('Place', async () => { - const context = { - place: new Place( - { - name: 'Warehouse', - street1: '23 Serangoon Central Nex', - country: 'Singapore', - }, - adapter - ), - }; - - describe('#create()', () => { - it('Should create a Place resource', async () => { - const { place } = context; - - await place.save(); - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - }); - - it('Should have an id', () => { - assert.isString(context.place.id); - assert.include(context.place.id, 'place', `id: ${context.place.id}`); - }); - }); - - describe('#update()', () => { - it('Should update the Place resource instance', async () => { - const { place } = context; - - await place.update({ - street2: '#5-22', - }); - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - assert.equal(place.getAttribute('street2'), '#5-22'); - }); - }); - - describe('#delete()', () => { - it('Should delete the Place resource instance', async () => { - const { place } = context; - - await place.destroy(); - - assert.instanceOf(place, Place); - assert.instanceOf(place, Resource); - assert.isTrue(place.getAttribute('deleted')); - }); - }); -}); diff --git a/tests/sdk.test.js b/tests/sdk.test.js deleted file mode 100644 index 1692f05..0000000 --- a/tests/sdk.test.js +++ /dev/null @@ -1,80 +0,0 @@ -import { assert } from 'chai'; -import Fleetbase from '../src/fleetbase.js'; -import Store from '../src/store.js'; -import Resource, { isResource } from '../src/resource.js'; -import Place from '../src/resources/place.js'; -import { resolveResource } from '../src/resolver.js'; - -// create an instance of the fleetbase sdk -describe('Create a Fleetbase SDK instance', () => { - const fleetbase = new Fleetbase(process.env.FLEETBASE_KEY, { host: process.env.FLEETBASE_HOST }); - - it('should be an instance of Fleetbase', () => { - assert.instanceOf(fleetbase, Fleetbase); - }); - - describe('#places', () => { - it('should have places store instance', () => { - assert.instanceOf(fleetbase.places, Store); - }); - it('should be able to create() a place', async () => { - const place = await fleetbase.places.create({ - name: 'Warehouse', - street1: '23 Serangoon Central Nex', - country: 'Singapore', - }); - - assert.instanceOf(place, Place); - }); - }); -}); - -// create a place instance without fleetbase sdk -describe('Create a Place instance without SDK', () => { - const place = new Place({ - name: 'Warehouse', - street1: '23 Serangoon Central Nex', - country: 'Singapore', - }); - - it('should be an instance of Place', () => { - assert.instanceOf(place, Place); - }); - - it('should be an instance of Resource', () => { - assert.instanceOf(place, Resource); - }); - - it('should be an instance of Resource via isResource function', () => { - assert.equal(isResource(place), true); - }); - - it('should be able to get street1 attribute', () => { - assert.equal(place.getAttribute('street1'), '23 Serangoon Central Nex'); - }); -}); - -// resolve a place instance using the resolver and registry -describe('Create a Place using the Resolver', () => { - const place = resolveResource('Place', { - name: 'Warehouse', - street1: '23 Serangoon Central Nex', - country: 'Singapore', - }); - - it('should be an instance of Place', () => { - assert.instanceOf(place, Place); - }); - - it('should be an instance of Resource', () => { - assert.instanceOf(place, Resource); - }); - - it('should be an instance of Resource via isResource function', () => { - assert.equal(isResource(place), true); - }); - - it('should be able to get street1 attribute', () => { - assert.equal(place.getAttribute('street1'), '23 Serangoon Central Nex'); - }); -}); diff --git a/tests/string.test.js b/tests/string.test.js deleted file mode 100644 index e924fc8..0000000 --- a/tests/string.test.js +++ /dev/null @@ -1,39 +0,0 @@ -import { assert } from 'chai'; -import String, { pluralize, dasherize } from '../src/utils/string.js'; - -describe('Create a new String() instance', () => { - it('should be an instance of String', () => { - const s = new String('Hello World'); - assert.instanceOf(s, String); - }); - - describe('#methods', () => { - describe('dasherize()', () => { - const dasherized = new String('Hello World').dasherize().get(); - - it('string should be dasherized', () => assert.equal(dasherized, 'hello-world')); - }); - - describe('pluralize()', () => { - const pluralized = new String('entity').pluralize().get(); - - it('string should be pluralized', () => assert.equal(pluralized, 'entities')); - }); - }); -}); - -describe('pluralize() function', () => { - it('should pluralize a string', () => { - const pluralized = pluralize('entity'); - - assert.equal(pluralized, 'entities'); - }); -}); - -describe('dasherize() function', () => { - it('should dasherize a string', () => { - const dasherized = dasherize('Hello World'); - - assert.equal(dasherized, 'hello-world'); - }); -}); diff --git a/tsconfig.json b/tsconfig.json index 9198700..d58fe0a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,22 @@ { "compilerOptions": { - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "module": "commonjs" /* Specify what module code is generated. */, - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - "strict": false /* Enable all strict type-checking options. */, - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "useUnknownInCatchVariables": true, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true, + "verbatimModuleSyntax": true, + "isolatedModules": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "types": ["vitest/globals"] + }, + "include": ["src/**/*.ts", "tests/**/*.ts", "vitest.config.ts"], + "exclude": ["dist", "coverage", "fixtures"] } diff --git a/tsconfig.types.json b/tsconfig.types.json new file mode 100644 index 0000000..88304f3 --- /dev/null +++ b/tsconfig.types.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": ".types", + "rootDir": "src", + "types": [] + }, + "include": ["src/**/*.ts"], + "exclude": ["tests", "dist", "coverage", "fixtures"] +} diff --git a/types/adapter.d.ts b/types/adapter.d.ts deleted file mode 100644 index 0b6f46e..0000000 --- a/types/adapter.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default Adapter; -declare class Adapter { - /** - * Creates a configured base adapter for Fleetbase. - * - * @param {Object} config Configuration options for adapter - */ - constructor(config?: any); - version: any; - host: any; - namespace: any; - headers: any; -} diff --git a/types/adapters.d.ts b/types/adapters.d.ts deleted file mode 100644 index 70fe8f2..0000000 --- a/types/adapters.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import BrowserAdapter from './adapters/browser'; -import NodeAdapter from './adapters/node'; -import EmberJsAdapter from './adapters/ember'; -import Adapter from './adapter'; -export { BrowserAdapter, NodeAdapter, EmberJsAdapter, Adapter }; diff --git a/types/adapters/browser.d.ts b/types/adapters/browser.d.ts deleted file mode 100644 index e3a9155..0000000 --- a/types/adapters/browser.d.ts +++ /dev/null @@ -1,84 +0,0 @@ -export default BrowserAdapter; -declare class BrowserAdapter extends Adapter { - /** - * Setup browser adapter. - * @param {Object} config - */ - constructor(config: any); - /** - * Updates the adapter headers. - * - * @param {Object} headers - */ - setHeaders(headers?: any): this; - /** - * Parses the JSON returned by a network request - * - * @param {Object} response A response from a network request - * @return {Object} The parsed JSON, status from the response - * - * @return {Promise} - */ - parseJSON(response: any): any; - /** - * The base request method - * - * @param {String} path - * @param {String} method - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - request(path: string, method?: string, data?: any, options?: any): Promise; - /** - * Makes a GET request with fetch - * - * @param {String} path - * @param {Object} query - * @param {Object} options - * - * @return {Promise} - */ - get(path: string, query?: any, options?: any): Promise; - /** - * Makes a POST request with fetch - * - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - post(path: string, data?: any, options?: any): Promise; - /** - * Makes a PUT request with fetch - * - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - put(path: string, data?: any, options?: any): Promise; - /** - * Makes a DELETE request with fetch - * - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - delete(path: string, options?: any): Promise; - /** - * Makes a PATCH request with fetch - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - patch(path: string, data?: any, options?: any): Promise; -} -import Adapter from '../adapter'; diff --git a/types/adapters/ember.d.ts b/types/adapters/ember.d.ts deleted file mode 100644 index fce9619..0000000 --- a/types/adapters/ember.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default EmberJsAdapter; -declare class EmberJsAdapter extends Adapter {} -import Adapter from '../adapter'; diff --git a/types/adapters/node.d.ts b/types/adapters/node.d.ts deleted file mode 100644 index 4e96154..0000000 --- a/types/adapters/node.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -export default NodeAdapter; -declare class NodeAdapter extends Adapter { - axios: import('axios').AxiosInstance; - /** - * Updates the adapter headers. - * - * @param {Object} headers - */ - setHeaders(headers?: any): this; - /** - * Tranform the response, and return the response data from axios. - * - * @param {AxiosResponse} response - * @returns {Object} - */ - transform(response: AxiosResponse): any; - /** - * Handles an erroneous request. - * - * @param {AxiosResponse} response - * @returns {Object} - */ - handleError(error: any): any; - /** - * Makes a GET request with axios - * - * @param {String} path - * @param {Object} query - * @param {Object} options - * - * @return {Promise} - */ - get(path: string, query?: any, options?: any): Promise; - /** - * Makes a POST request with axios - * - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - post(path: string, data?: any, options?: any): Promise; - /** - * Makes a PUT request with axios - * - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - put(path: string, data?: any, options?: any): Promise; - /** - * Makes a DELETE request with axios - * - * @param {String} path - * @param {Object} query - * @param {Object} options - * - * @return {Promise} - */ - delete(path: string, options?: any): Promise; - /** - * Makes a PATCH request with axios - * @param {String} path - * @param {Object} data - * @param {Object} options - * - * @return {Promise} - */ - patch(path: string, data?: any, options?: any): Promise; -} -import Adapter from '../adapter'; diff --git a/types/fleetbase.d.ts b/types/fleetbase.d.ts deleted file mode 100644 index 278f0b3..0000000 --- a/types/fleetbase.d.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * // instance - * const fleetbase = new Fleetbase(); - * - * const contact = fleetbase.contacts.create({ - * name: 'Ron', - * phone: '+65 9999 8888' - * }); - * - * constact.update({ name: 'Hollywood Ron' }); - * - * // export - * import { Contact } from '@fleetbase/sdk'; - * - * const contact = new Contact({ - * name: 'Ron', - * phone: '+65 9999 8888' - * }); - * - * contact.save(); - */ -export default class Fleetbase { - static newInstance(...args: any[]): Fleetbase; - /** - * Builds an instance of the Fleetbase SDK - * - * @param {String} publicKey The public key issued - * @param {Object} config The version of resource to access - * @param {Boolean} debug Debug mode for SDK - * @return {Fleetbase} Instance - */ - constructor(publicKey: string, config?: any, debug?: boolean); - version: any; - options: { - version: any; - host: any; - namespace: any; - debug: boolean; - publicKey: string; - }; - adapter: any; - orders: any; - entities: Store; - places: Store; - drivers: any; - vehicles: Store; - vendors: Store; - contacts: Store; - organizations: any; - setAdapter(adapter: any): void; - getAdapter(): any; -} -import Store from './store'; -import Resource from './resource'; -import { Contact } from './resources'; -import { Driver } from './resources'; -import { Entity } from './resources'; -import { Order } from './resources'; -import { Payload } from './resources'; -import { Place } from './resources'; -import { TrackingStatus } from './resources'; -import { Vehicle } from './resources'; -import { Vendor } from './resources'; -import { Waypoint } from './resources'; -import { Zone } from './resources'; -import { ServiceArea } from './resources'; -import { ServiceRate } from './resources'; -import { ServiceQuote } from './resources'; -import { Organization } from './resources'; -import { BrowserAdapter } from './adapters'; -import { NodeAdapter } from './adapters'; -import { EmberJsAdapter } from './adapters'; -import { Adapter } from './adapters'; -import { isNodeEnvironment } from './utils'; -import { isLatitude } from './utils'; -import { isLongitude } from './utils'; -import { Point } from './utils'; -import { isResource } from './utils'; -import { GoogleAddress } from './utils'; -import { Collection } from './utils'; -import { StoreActions } from './utils'; -import { extendStoreActions } from './store'; -import { pluralize } from './utils/string'; -import { singularize } from './utils/string'; -import { classify } from './utils/string'; -import { dasherize } from './utils/string'; -import { camelize } from './utils/string'; -export { - Store, - Resource, - Contact, - Driver, - Entity, - Order, - Payload, - Place, - TrackingStatus, - Vehicle, - Vendor, - Waypoint, - Zone, - ServiceArea, - ServiceRate, - ServiceQuote, - Organization, - BrowserAdapter, - NodeAdapter, - EmberJsAdapter, - Adapter, - isNodeEnvironment, - isLatitude, - isLongitude, - Point, - isResource, - GoogleAddress, - Collection, - StoreActions, - extendStoreActions, - pluralize, - singularize, - classify, - dasherize, - camelize, -}; diff --git a/types/resolver.d.ts b/types/resolver.d.ts deleted file mode 100644 index a30dac1..0000000 --- a/types/resolver.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -export class Resolver { - constructor(...args: any[]); - resources: { - Contact: typeof Contact; - Driver: typeof Driver; - Entity: typeof Entity; - Order: typeof Order; - Payload: typeof Payload; - Place: typeof Place; - TrackingStatus: typeof TrackingStatus; - Vehicle: typeof Vehicle; - Vendor: typeof Vendor; - Waypoint: typeof Waypoint; - Zone: typeof Zone; - ServiceArea: typeof ServiceArea; - ServiceRate: typeof ServiceRate; - ServiceQuote: typeof ServiceQuote; - }; - adapters: { - BrowserAdapter: typeof BrowserAdapter; - NodeAdapter: typeof NodeAdapter; - EmberJsAdapter: typeof EmberJsAdapter; - }; - lookup(type: any, className: any, ...args: any[]): any; -} -export function lookup(...args: any[]): Resolver; -import { Contact } from './resources'; -import { Driver } from './resources'; -import { Entity } from './resources'; -import { Order } from './resources'; -import { Payload } from './resources'; -import { Place } from './resources'; -import { TrackingStatus } from './resources'; -import { Vehicle } from './resources'; -import { Vendor } from './resources'; -import { Waypoint } from './resources'; -import { Zone } from './resources'; -import { ServiceArea } from './resources'; -import { ServiceRate } from './resources'; -import { ServiceQuote } from './resources'; -import { BrowserAdapter } from './adapters'; -import { NodeAdapter } from './adapters'; -import { EmberJsAdapter } from './adapters'; diff --git a/types/resource.d.ts b/types/resource.d.ts deleted file mode 100644 index 9a060e7..0000000 --- a/types/resource.d.ts +++ /dev/null @@ -1,245 +0,0 @@ -export default Resource; -declare class Resource { - /** - * The base resource for all resources - - * @return {[type]} [description] - */ - constructor(attributes: {}, adapter: any, resource: any, options?: {}); - attributes: {}; - dirtyAttributes: {}; - /** - * Gets all changes - * - * @return {Object} - */ - changes(): any; - isLoading: boolean; - isSaving: boolean; - isDestroying: boolean; - isReloading: boolean; - resource: any; - options: {}; - version: any; - /** - * Set a new adapter to the resource instance, this will update the Store instance - * - * @param {Adapter} adapter - * @return {Resource} this - */ - setAdapter(adapter: Adapter): Resource; - adapter: Adapter; - store: Store; - /** - * Getter for id attribute - * - * @var {String} - */ - get id(): any; - /** - * Creates a new resource on the server - * - * @param {Object} payload [description] - * @return {[type]} [description] - */ - create(attributes?: {}): [type]; - /** - * Creates a new resource on the server - * - * @param {Object} payload [description] - * @return {[type]} [description] - */ - update(attributes?: {}): [type]; - /** - * Deletes the resource instance on the server - * - * @return {[type]} [description] - */ - destroy(): [type]; - /** - * Reloads the resource from the server. - * - * @return {[type]} [description] - */ - reload(): [type]; - /** - * Sets flag properties. - * - * @return this - */ - setFlags(flags?: any[], state?: boolean): this; - /** - * Resets tracked properties - * - * @return this - */ - reset(): this; - /** - * Emptys resource. - * - * @return this - */ - empty(): this; - attribues: {}; - /** - * Saves the resource instance on the server - * - * @return {[type]} [description] - */ - save(options?: {}): [type]; - /** - * Saves only dirtied attributes. - * - * @return {[type]} [description] - */ - saveDirty(): [type]; - /** - * Returns the resource meta if exists. - * - * @return {Object} - */ - get meta(): any; - /** - * Returns the date instance resource was created. - * - * @return {Date} - */ - get createdAt(): Date; - /** - * Returns the date instance resource was created. - * - * @return {Date} - */ - get updatedAt(): Date; - /** - * Checks if resource is loaded from the server. - * - * @return {Boolean} - */ - get isLoaded(): boolean; - /** - * Checks if resource ihas no attributes - * - * @return {Boolean} - */ - get isEmpty(): boolean; - /** - * Checks if resource is not saved to server. - * - * @return {Boolean} - */ - get isNew(): boolean; - /** - * Checks if resource is not saved to server. - * - * @return {Boolean} - */ - get isSaved(): boolean; - /** - * Checks if resource is deleted on server. - * - * @return {Boolean} - */ - get isDeleted(): boolean; - /** - * Iterates over each attribute value and property executing a user supplied callback. - * - * @return {Object} - */ - eachAttribute(callback: any): any; - /** - * Gets all dirty attributes. - * - * @return {Object} - */ - getDirtyAttributes(): any; - /** - * Checks if property is dirty. - * - * @param {String} property [description] - * @return {Boolean} - */ - isDirty(property: string): boolean; - /** - * Checks if any properties is dirty. - * - * @return {Boolean} - */ - hasDirtyAttributes(): boolean; - /** - * Updates a instance property without tracking changes or dirtying attribute. - * - * @param {String} property [description] - * @param {mixed} value [description] - */ - mutate(property: string, value: mixed): void; - /** - * Set an instance property locally - * - * @param {String} property [description] - * @param {mixed} value [description] - */ - setAttribute(property: string, value?: mixed): this; - /** - * Set multiple instance properties locally - * - * @param {Object} properties [description] - */ - setAttributes(attributes?: {}): this; - /** - * Get an attribute - * - * @param {String} attribute The attribute key to get - * @param {mixed} defaultValue The default value if no attribute value - */ - getAttribute(attribute: string, defaultValue?: mixed): any; - /** - * Checks if attribute exists. - * - * @param {String} property [description] - * @return {Boolean} - */ - hasAttribute(property: string): boolean; - /** - * Alias for checking if has multiple attributes. - * - * @param {Array} properties - * @return {Boolean} - */ - hasAttributes(properties?: any[]): boolean; - /** - * Returns true if attribute has value. - * - * @param {Array} properties - * @return {Boolean} - */ - isAttributeFilled(property: any): boolean; - /** - * Get multiple attributes. - * - * @param {Array} properties [description] - * @param {[type]} value [description] - */ - getAttributes(properties: any[], ...args: any[]): any; - /** - * Serialize resource to a POJO - * - * @returns {Object} - */ - serialize(): any; - /** - * Merge and return attributes on the resource instance. - * - * @param {[type]} property [description] - * @param {[type]} value [description] - */ - mergeAttributes(attributes?: {}): {}; - /** - * Merge and return attributes on the resource instance. - * - * @param {[type]} property [description] - * @param {[type]} value [description] - */ - syncAttributes(json?: {}): void; -} -import Store from './store'; diff --git a/types/resources.d.ts b/types/resources.d.ts deleted file mode 100644 index be303de..0000000 --- a/types/resources.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Order from './resources/order'; -import Payload from './resources/payload'; -import Entity from './resources/entity'; -import Place from './resources/place'; -import Waypoint from './resources/waypoint'; -import TrackingStatus from './resources/tracking-status'; -import Vehicle from './resources/vehicle'; -import Organization from './resources/organization'; -import Driver from './resources/driver'; -import Vendor from './resources/vendor'; -import Contact from './resources/contact'; -import Zone from './resources/zone'; -import ServiceArea from './resources/service-area'; -import ServiceRate from './resources/service-rate'; -import ServiceQuote from './resources/service-quote'; -export { Order, Payload, Entity, Place, Waypoint, TrackingStatus, Vehicle, Organization, Driver, Vendor, Contact, Zone, ServiceArea, ServiceRate, ServiceQuote }; diff --git a/types/resources/contact.d.ts b/types/resources/contact.d.ts deleted file mode 100644 index a5278a0..0000000 --- a/types/resources/contact.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default Contact; -declare class Contact extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/driver.d.ts b/types/resources/driver.d.ts deleted file mode 100644 index 298336c..0000000 --- a/types/resources/driver.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export default Driver; -declare class Driver extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); - get token(): any; - get isOnline(): boolean; - /** - * The latitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get latitude(): any; - /** - * The longitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get longitude(): any; - /** - * Array coordinate pair for Place location. - * - * @var {Array} - */ - get coordinates(): any[]; - track(params?: {}, options?: {}): any; - syncDevice(params?: {}, options?: {}): any; -} -export const driverActions: StoreActions; -import Resource from '../resource'; -import { StoreActions } from '../utils'; diff --git a/types/resources/entity.d.ts b/types/resources/entity.d.ts deleted file mode 100644 index 52b5224..0000000 --- a/types/resources/entity.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default Entity; -declare class Entity extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/order.d.ts b/types/resources/order.d.ts deleted file mode 100644 index 1a824f6..0000000 --- a/types/resources/order.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export default Order; -declare class Order extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); - getDistanceAndTime(params?: {}, options?: {}): any; - dispatch(params?: {}, options?: {}): any; - start(params?: {}, options?: {}): any; - setDestination(destinationId: any, params?: {}, options?: {}): any; - captureQrCode(subjectId?: any, params?: {}, options?: {}): any; - captureSignature(subjectId?: any, params?: {}, options?: {}): any; - getNextActivity(params?: {}, options?: {}): any; - updateActivity(params?: {}, options?: {}): any; - cancel(params?: {}, options?: {}): any; - complete(params?: {}, options?: {}): any; - get isDispatched(): boolean; - get isNotDispatched(): boolean; - get isStarted(): boolean; - get isNotStarted(): boolean; - get isCompleted(): boolean; - get isCanceled(): boolean; - get isEnroute(): boolean; - get isInProgress(): boolean; - get scheduledAt(): Date; - get startedAt(): Date; - get dispatchedAt(): Date; - get status(): any; -} -export const orderActions: StoreActions; -import Resource from '../resource'; -import { StoreActions } from '../utils'; diff --git a/types/resources/organization.d.ts b/types/resources/organization.d.ts deleted file mode 100644 index fdf3dc7..0000000 --- a/types/resources/organization.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default Organization; -declare class Organization extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -export const organizationActions: any; -import Resource from '../resource'; diff --git a/types/resources/payload.d.ts b/types/resources/payload.d.ts deleted file mode 100644 index a764bf6..0000000 --- a/types/resources/payload.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -export default Payload; -declare class Payload extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); - /** - * Attaches an entity to an existing payload and returns - * the payload with the entity attached - * - * @param {[type]} Entity entity [description] - * @return {[type]} [description] - */ - attach(entity: any): [type]; - /** - * Returns all of the entities attached to this payload - * - * @return {[type]} [description] - */ - get entities(): [type]; - /** - * Returns the dropoff for this payload - * - * @return {[type]} [description] - */ - get dropoff(): [type]; - /** - * Returns the pickup for this payload - * - * @return {[type]} [description] - */ - get pickup(): [type]; - /** - * Returns all the waypoints for this payload - * - * @return {[type]} [description] - */ - get waypoints(): [type]; -} -import Resource from '../resource'; diff --git a/types/resources/place.d.ts b/types/resources/place.d.ts deleted file mode 100644 index 02798ff..0000000 --- a/types/resources/place.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -export default Place; -declare class Place extends Resource { - static fromGoogleAddress(googleAddress: any, adapter: any, options?: {}): Place; - constructor(attributes: {}, adapter: any, options?: {}); - /** - * The latitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get latitude(): any; - /** - * The longitude coordinate for the 'Place' location. - * - * @var {Integer} - */ - get longitude(): any; - /** - * Array coordinate pair for Place location. - * - * @var {Array} - */ - get coordinates(): any[]; - /** - * Set the owner of the place. - * - * @param {Object|String} owner - * @return {Place} - */ - setOwner(owner: any | string): Place; -} -import Resource from '../resource'; diff --git a/types/resources/service-area.d.ts b/types/resources/service-area.d.ts deleted file mode 100644 index 8eb3af9..0000000 --- a/types/resources/service-area.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default ServiceArea; -declare class ServiceArea extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/service-quote.d.ts b/types/resources/service-quote.d.ts deleted file mode 100644 index 182bd4c..0000000 --- a/types/resources/service-quote.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default ServiceQuote; -declare class ServiceQuote extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); - fromPreliminary(): void; - fromPayload(): void; -} -import Resource from '../resource'; diff --git a/types/resources/service-rate.d.ts b/types/resources/service-rate.d.ts deleted file mode 100644 index fd7b532..0000000 --- a/types/resources/service-rate.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default ServiceRate; -declare class ServiceRate extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/tracking-status.d.ts b/types/resources/tracking-status.d.ts deleted file mode 100644 index d4d1238..0000000 --- a/types/resources/tracking-status.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default TrackingStatus; -declare class TrackingStatus extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/vehicle.d.ts b/types/resources/vehicle.d.ts deleted file mode 100644 index 87aebed..0000000 --- a/types/resources/vehicle.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default Vehicle; -declare class Vehicle extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/vendor.d.ts b/types/resources/vendor.d.ts deleted file mode 100644 index cb70de4..0000000 --- a/types/resources/vendor.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default Vendor; -declare class Vendor extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/resources/waypoint.d.ts b/types/resources/waypoint.d.ts deleted file mode 100644 index 5ea4b5f..0000000 --- a/types/resources/waypoint.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default Waypoint; -declare class Waypoint extends Place {} -import Place from './place'; diff --git a/types/resources/zone.d.ts b/types/resources/zone.d.ts deleted file mode 100644 index 8c73f25..0000000 --- a/types/resources/zone.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default Zone; -declare class Zone extends Resource { - constructor(attributes: {}, adapter: any, options?: {}); -} -import Resource from '../resource'; diff --git a/types/store.d.ts b/types/store.d.ts deleted file mode 100644 index df81c59..0000000 --- a/types/store.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export default Store; -declare class Store { - constructor(resource: any, adapter: any, options?: {}); - resource: any; - adapter: any; - namespace: any; - storage: Collection; - options: {}; - extendActions(actions?: any[]): any; - deposit(resourceInstance: any): any; - serialize(json: any): import('./resolver').Resolver; - afterFetch(json: any): any; - create(attributes?: {}, options?: {}): Promise; - update(id: any, attributes?: {}, options?: {}): Promise; - findRecord(id: any, options?: {}): Promise; - findAll(options?: {}): Promise; - query(query?: {}, options?: {}): Promise; - queryRecord(query?: {}, options?: {}): Promise; - destroy(record: any, options?: {}): Promise; -} -export function afterFetch(store: any, json: any): any; -export function extendStoreActions(store: any, actions?: any[]): any; -import { Collection } from './utils'; diff --git a/types/utils/array.d.ts b/types/utils/array.d.ts deleted file mode 100644 index 94d3789..0000000 --- a/types/utils/array.d.ts +++ /dev/null @@ -1 +0,0 @@ -export const isArray: (arg: any) => arg is any[]; diff --git a/types/utils/collection.d.ts b/types/utils/collection.d.ts deleted file mode 100644 index 226c0e5..0000000 --- a/types/utils/collection.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -export default Collection; -declare class Collection extends Array { - constructor(...items: any[]); - get notEmpty(): boolean; - get empty(): boolean; - get first(): any; - get last(): any; - replace(start: any, deleteCount: any, items?: any[]): this; - objectsAt(indexes: any): any; - objectAt(index: any): any; - indexOf(object: any, startAt: any): number; - lastIndexOf(object: any, startAt: any): any; - includes(object: any, startAt: any): boolean; - findBy(...args: any[]): any; - findIndexBy(...args: any[]): number; - isEvery(...args: any[]): boolean; - isAny(...args: any[]): boolean; - invoke(methodName: any, ...args: any[]): any[]; - toArray(): any[]; - compact(): any[]; - sortBy(...args: any[]): this; - uniqBy(key: any): any[]; - without(value: any): any[] | this; - clear(): this; - insertAt(idx: any, object: any): this; - replaceAt(idx: any, object: any): this; - removeAt(start: any, len: any): any; - pushObject(obj: any): this; - pushObjects(objects: any): this; - popObject(): any; - shiftObject(): any; - unshiftObject(obj: any): any; - unshiftObjects(objects: any): this; - reverseObjects(): this; - setObjects(objects: any): this; - removeObject(obj: any): this; - removeObjects(objects: any): this; - addObject(obj: any): this; - addObjects(objects: any): this; -} -export function replace(array: any, start: any, deleteCount: any, items?: any[]): void; -export function uniqBy(array: any, key?: (item: any) => any): any[]; -export function isCollection(mixed: any): boolean; -export function objectAt(array: any, index: any): any; -export function iter(key: any, value: any, ...args: any[]): (item: any) => boolean; -export function findIndex(array: any, predicate: any, startAt?: number): number; -export function find(array: any, callback: any, target: any): any; -export function any(array: any, callback: any, target: any): boolean; -export function every(array: any, callback: any, target: any): boolean; -export function indexOf(array: any, val: any, startAt: number, withNaNCheck: any): number; -export function removeAt(array: any, index: any, len?: number): any; -export function insertAt(array: any, index: any, item: any): any; diff --git a/types/utils/detect-adapter.d.ts b/types/utils/detect-adapter.d.ts deleted file mode 100644 index 697ba87..0000000 --- a/types/utils/detect-adapter.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default detectAdapter; -declare function detectAdapter(options?: {}): import('../resolver').Resolver; diff --git a/types/utils/google-address.d.ts b/types/utils/google-address.d.ts deleted file mode 100644 index fde1f45..0000000 --- a/types/utils/google-address.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -export default GoogleAddress; -declare class GoogleAddress { - constructor(place: any); - place: any; - geometry: any; - components: any; - attributes: { - streetNumber: any; - streetName: any; - coordinates: any[]; - city: any; - county: any; - stateShort: any; - stateLong: any; - countryShort: any; - country: any; - countryLong: any; - postalCode: any; - }; - parse(): void; - parseComponents(): any; - parseProperties(): { - streetNumber: any; - streetName: any; - coordinates: any[]; - city: any; - county: any; - stateShort: any; - stateLong: any; - countryShort: any; - country: any; - countryLong: any; - postalCode: any; - }; - all(): { - streetNumber: any; - streetName: any; - coordinates: any[]; - city: any; - county: any; - stateShort: any; - stateLong: any; - countryShort: any; - country: any; - countryLong: any; - postalCode: any; - }; - or(keys?: any[]): any; - has(key: any): boolean; - get(key: any, short?: boolean): any; - setAttributes(attributes?: {}): this; - setAttribute(key: any, value: any): this; - getAttribute(key: any): any; -} diff --git a/types/utils/index.d.ts b/types/utils/index.d.ts deleted file mode 100644 index 9f008c1..0000000 --- a/types/utils/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Collection from './collection'; -import isNodeEnvironment from './is-node-environment'; -import detectAdapter from './detect-adapter'; -import isBlank from './is-blank'; -import isEmpty from './is-empty'; -import isLatitude from './is-latitude'; -import isLongitude from './is-longitude'; -import isResource from './is-resource'; -import isPhone from './is-phone'; -import isEmail from './is-email'; -import uuid from './uuid'; -import GoogleAddress from './google-address'; -import StoreActions from './store-actions'; -import Point from './point'; -export { Collection, isNodeEnvironment, detectAdapter, isBlank, isEmpty, isLatitude, isLongitude, isResource, isPhone, isEmail, uuid, GoogleAddress, StoreActions, Point }; diff --git a/types/utils/is-blank.d.ts b/types/utils/is-blank.d.ts deleted file mode 100644 index 1f850c4..0000000 --- a/types/utils/is-blank.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default isBlank; -declare function isBlank(obj: any): boolean; diff --git a/types/utils/is-email.d.ts b/types/utils/is-email.d.ts deleted file mode 100644 index 871067f..0000000 --- a/types/utils/is-email.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default isEmail; -declare function isEmail(email?: string): boolean; diff --git a/types/utils/is-empty.d.ts b/types/utils/is-empty.d.ts deleted file mode 100644 index 611ade3..0000000 --- a/types/utils/is-empty.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default isEmpty; -declare function isEmpty(obj: any): boolean; diff --git a/types/utils/is-latitude.d.ts b/types/utils/is-latitude.d.ts deleted file mode 100644 index 0f537fa..0000000 --- a/types/utils/is-latitude.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function isLatitude(coordinate: any): boolean; diff --git a/types/utils/is-longitude.d.ts b/types/utils/is-longitude.d.ts deleted file mode 100644 index 680d8c2..0000000 --- a/types/utils/is-longitude.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function isLongitude(coordinate: any): boolean; diff --git a/types/utils/is-node-environment.d.ts b/types/utils/is-node-environment.d.ts deleted file mode 100644 index 0f98896..0000000 --- a/types/utils/is-node-environment.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default isNodeEnvironment; -/** - * Determines if environment SDK is initialized in is Node, additionally checks pass if environment is ReactNative. - * - * @returns boolean - */ -declare function isNodeEnvironment(): boolean; diff --git a/types/utils/is-phone.d.ts b/types/utils/is-phone.d.ts deleted file mode 100644 index 2daa6d5..0000000 --- a/types/utils/is-phone.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default isPhone; -declare function isPhone(phone?: string): boolean; diff --git a/types/utils/is-resource.d.ts b/types/utils/is-resource.d.ts deleted file mode 100644 index dec9eaf..0000000 --- a/types/utils/is-resource.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function isResource(record: any): boolean; diff --git a/types/utils/object.d.ts b/types/utils/object.d.ts deleted file mode 100644 index 56ce6e3..0000000 --- a/types/utils/object.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function set(object: any, path: any, value: any): any; -export function get(object: any, path: any): any; -export function getProperties(object: any, properties?: any[], ...args: any[]): {}; -export function setProperties(object: any, properties?: {}): any; -export function extend(target: any, classes?: any[], ...args: any[]): any; -export function isCallable(object: any, property: any): boolean; -export function invoke(object: any, method: any): any; diff --git a/types/utils/point.d.ts b/types/utils/point.d.ts deleted file mode 100644 index 222c2c1..0000000 --- a/types/utils/point.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export default class Point { - static fromGeoJson(json: any): Point; - constructor(latitude?: number, longitude?: number); - type: string; - coordinates: number[]; - get latitude(): number; - get longitude(): number; - lat(): number; - lng(): number; - serialize(): { - type: string; - coorindates: number[]; - }; - toJson(): { - type: string; - coorindates: number[]; - }; - toString(): string; -} diff --git a/types/utils/store-actions.d.ts b/types/utils/store-actions.d.ts deleted file mode 100644 index 09ae6a2..0000000 --- a/types/utils/store-actions.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default class StoreActions { - constructor(actions?: {}, bind?: any); - actions: {}; - bind: any; - extend(bindTo?: any): this; -} diff --git a/types/utils/string.d.ts b/types/utils/string.d.ts deleted file mode 100644 index fe07018..0000000 --- a/types/utils/string.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Javascript String - * - * instance - * new String('hello_world').humanize().get() => "Hello world" - * - * instance - * const string = new String(); - * string.humanize('hello_world').get() => "Hello world" - * - * no chain - * new String('hello_world', false).humanize() => "Hello world" - * - * static - * String.invoke('humanize', 'hello_world') => "Hello world" - * - * exports {} - * humanize('hello_world') => "Hello world" - */ -export default class String { - /** - * @method invoke - **/ - static invoke(...args: any[]): any; - constructor(string: any, chain?: boolean); - str: any; - chain: boolean; - uncountableWords: string[]; - pluralRules: (string | RegExp)[][]; - singularRules: (string | RegExp)[][]; - nonTitlecasedWords: string[]; - idSuffix: RegExp; - underbar: RegExp; - spaceOrUnderbar: RegExp; - uppercase: RegExp; - underbarPrefix: RegExp; - get(): any; - applyRules(str: any, rules: any, skip: any, override: any): any; - pluralize(str: any, plural?: any): any; - singularize(str: any, singular: any): any; - camelize(str: any, lowFirstLetter: any): any; - underscore(str: any): any; - humanize(str: any, lowFirstLetter: any): any; - capitalize(str: any): any; - dasherize(str: any): any; - normify(str: any, allFirstUpper: any): any; - demodulize(str: any): any; - tableize(str: any): any; - classify(str: any): any; - foreignKey(str: any, dropIdUbar?: boolean): any; - ordinalize(str: any): any; -} -export function pluralize(...args: any[]): any; -export function singularize(...args: any[]): any; -export function humanize(...args: any[]): any; -export function underscore(...args: any[]): any; -export function camelize(...args: any[]): any; -export function capitalize(...args: any[]): any; -export function dasherize(...args: any[]): any; -export function normify(...args: any[]): any; -export function demodulize(...args: any[]): any; -export function tableize(...args: any[]): any; -export function classify(...args: any[]): any; -export function foreignKey(...args: any[]): any; diff --git a/types/utils/uuid.d.ts b/types/utils/uuid.d.ts deleted file mode 100644 index 63e1124..0000000 --- a/types/utils/uuid.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default uuid; -declare function uuid(): string; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..b077afb --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + environment: 'node', + include: ['tests/**/*.test.ts'], + coverage: { + provider: 'v8', + include: ['src/**/*.ts'], + reporter: ['text', 'json-summary', 'lcov'], + thresholds: { lines: 100, statements: 100, functions: 100, branches: 100 }, + }, + }, +}); From 0130384d6501309e9bba7960a52891a4160212e1 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 20:09:10 +0800 Subject: [PATCH 04/13] ci: use repository CodeQL default setup --- .github/workflows/codeql.yml | 28 ---------------------------- README.md | 1 - 2 files changed, 29 deletions(-) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 622e43c..0000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: CodeQL - -on: - push: - branches: [main, master, dev-v2.0.0] - pull_request: - branches: [main, master, dev-v2.0.0] - schedule: - - cron: '23 3 * * 1' - -concurrency: - group: codeql-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - security-events: write - -jobs: - analyze: - name: Analyze JavaScript and TypeScript - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: github/codeql-action/init@v3 - with: - languages: javascript-typescript - - uses: github/codeql-action/analyze@v3 diff --git a/README.md b/README.md index eba4e1e..ab16ad6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@

CI - CodeQL Coverage npm version Weekly downloads From a390652b7ea173cddf690f21739a37f9ce2a1622 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 20:13:20 +0800 Subject: [PATCH 05/13] fix: harden validation and object path assignment --- src/utils.ts | 8 +++++--- tests/core.test.ts | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 5e225da..b494534 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -32,7 +32,9 @@ export function isPhone(value = ''): boolean { } export function isEmail(value = ''): boolean { - return /^\S+@\S+\.\S+$/.test(value); + const at = value.indexOf('@'); + const dot = value.lastIndexOf('.'); + return !/\s/.test(value) && at > 0 && dot > at + 1 && dot < value.length - 1; } export function isNodeEnvironment(): boolean { @@ -81,13 +83,13 @@ export function set(target: object, path: string, value: unknown): unknown { let current = target as Record; for (const part of parts.slice(0, -1)) { if (!current[part] || typeof current[part] !== 'object') { - current[part] = {}; + Object.defineProperty(current, part, { configurable: true, enumerable: true, value: {}, writable: true }); } current = current[part] as Record; } const final = parts.at(-1); if (final) { - current[final] = value; + Object.defineProperty(current, final, { configurable: true, enumerable: true, value, writable: true }); } return value; } diff --git a/tests/core.test.ts b/tests/core.test.ts index e814b25..18c158c 100644 --- a/tests/core.test.ts +++ b/tests/core.test.ts @@ -104,6 +104,10 @@ describe('utility compatibility', () => { expect(isPhone('hello')).toBe(false); expect(isEmail('sdk@fleetbase.io')).toBe(true); expect(isEmail('sdk')).toBe(false); + expect(isEmail(' sdk@fleetbase.io')).toBe(false); + expect(isEmail('@fleetbase.io')).toBe(false); + expect(isEmail('sdk@.io')).toBe(false); + expect(isEmail('sdk@fleetbase.')).toBe(false); expect(isNodeEnvironment()).toBe(true); }); From 566203d329cbbdf8e25ff29eec657f0c730e45f3 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 20:34:53 +0800 Subject: [PATCH 06/13] test: add exact-package compatibility builds --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++- .gitignore | 5 ++++- README.md | 2 ++ docs/compatibility.md | 18 +++++++++++++++ fixtures/compat/esbuild/package.json | 11 +++++++++ fixtures/compat/esbuild/src/index.js | 4 ++++ fixtures/compat/next/app/layout.js | 7 ++++++ fixtures/compat/next/app/page.js | 13 +++++++++++ fixtures/compat/next/app/sdk-client.js | 9 ++++++++ fixtures/compat/next/package.json | 12 ++++++++++ fixtures/compat/nuxt/app.vue | 9 ++++++++ fixtures/compat/nuxt/package.json | 12 ++++++++++ fixtures/compat/react/index.html | 2 ++ fixtures/compat/react/package.json | 16 +++++++++++++ fixtures/compat/react/src/main.jsx | 6 +++++ fixtures/compat/react/vite.config.js | 4 ++++ fixtures/compat/svelte/index.html | 2 ++ fixtures/compat/svelte/package.json | 15 +++++++++++++ fixtures/compat/svelte/src/App.svelte | 6 +++++ fixtures/compat/svelte/src/main.js | 4 ++++ fixtures/compat/svelte/vite.config.js | 4 ++++ fixtures/compat/vite/index.html | 2 ++ fixtures/compat/vite/package.json | 11 +++++++++ fixtures/compat/vite/src/main.js | 5 +++++ fixtures/compat/vue/index.html | 2 ++ fixtures/compat/vue/package.json | 15 +++++++++++++ fixtures/compat/vue/src/App.vue | 9 ++++++++ fixtures/compat/vue/src/main.js | 4 ++++ fixtures/compat/vue/vite.config.js | 4 ++++ fixtures/compat/webpack/package.json | 12 ++++++++++ fixtures/compat/webpack/src/index.js | 5 +++++ 31 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 docs/compatibility.md create mode 100644 fixtures/compat/esbuild/package.json create mode 100644 fixtures/compat/esbuild/src/index.js create mode 100644 fixtures/compat/next/app/layout.js create mode 100644 fixtures/compat/next/app/page.js create mode 100644 fixtures/compat/next/app/sdk-client.js create mode 100644 fixtures/compat/next/package.json create mode 100644 fixtures/compat/nuxt/app.vue create mode 100644 fixtures/compat/nuxt/package.json create mode 100644 fixtures/compat/react/index.html create mode 100644 fixtures/compat/react/package.json create mode 100644 fixtures/compat/react/src/main.jsx create mode 100644 fixtures/compat/react/vite.config.js create mode 100644 fixtures/compat/svelte/index.html create mode 100644 fixtures/compat/svelte/package.json create mode 100644 fixtures/compat/svelte/src/App.svelte create mode 100644 fixtures/compat/svelte/src/main.js create mode 100644 fixtures/compat/svelte/vite.config.js create mode 100644 fixtures/compat/vite/index.html create mode 100644 fixtures/compat/vite/package.json create mode 100644 fixtures/compat/vite/src/main.js create mode 100644 fixtures/compat/vue/index.html create mode 100644 fixtures/compat/vue/package.json create mode 100644 fixtures/compat/vue/src/App.vue create mode 100644 fixtures/compat/vue/src/main.js create mode 100644 fixtures/compat/vue/vite.config.js create mode 100644 fixtures/compat/webpack/package.json create mode 100644 fixtures/compat/webpack/src/index.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ba8124..bf64291 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -183,6 +183,35 @@ jobs: working-directory: fixtures/types run: npx tsc -p tsconfig.${{ matrix.resolution }}.json + compatibility: + name: Build / ${{ matrix.fixture }} + needs: package + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + fixture: [vite, webpack, esbuild, react, vue, svelte, next, nuxt] + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: npm-package + path: artifacts + - uses: actions/setup-node@v4 + with: + node-version: 22.22.2 + cache: npm + cache-dependency-path: fixtures/compat/${{ matrix.fixture }}/package.json + - name: Install pinned fixture dependencies + working-directory: fixtures/compat/${{ matrix.fixture }} + run: npm install --no-package-lock + - name: Install exact SDK candidate + working-directory: fixtures/compat/${{ matrix.fixture }} + run: npm install --no-package-lock --no-save ../../../artifacts/fleetbase-sdk.tgz + - name: Build production fixture + working-directory: fixtures/compat/${{ matrix.fixture }} + run: npm run build + dependency-review: name: Dependency review if: github.event_name == 'pull_request' @@ -212,7 +241,7 @@ jobs: ci-success: name: CI success if: always() - needs: [quality, test, package, cross-platform, package-manager, type-consumer, dependency-review, security] + needs: [quality, test, package, cross-platform, package-manager, type-consumer, compatibility, dependency-review, security] runs-on: ubuntu-latest steps: - name: Require successful jobs diff --git a/.gitignore b/.gitignore index 5e7389a..5ab6509 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ # compiled output -/dist/ +dist/ /.types/ /.pnpm-store/ /tmp/ +.next/ +.nuxt/ +.output/ # dependencies /bower_components/ diff --git a/README.md b/README.md index ab16ad6..19cc8b8 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,8 @@ The npm package contains: Every release candidate is checked with Publint, Are The Types Wrong, packed-tarball content and size assertions, ESM/CommonJS export parity, strict TypeScript, cross-platform smoke tests, and 100% statement, branch, function, and line coverage. +Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Next.js (client and server), and Nuxt (client and server). See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix and remaining prerelease gates. + ## Development ```sh diff --git a/docs/compatibility.md b/docs/compatibility.md new file mode 100644 index 0000000..bbc36f7 --- /dev/null +++ b/docs/compatibility.md @@ -0,0 +1,18 @@ +# Compatibility policy + +Every supported consumer gate installs the exact tarball produced by the CI package job. Fixtures never import SDK workspace source. + +## Release-blocking coverage + +| Dimension | Verified targets | +| ---------------- | ----------------------------------------------------------------------------- | +| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | +| Modules | native ESM and true CommonJS | +| TypeScript | strict Node16, NodeNext, and bundler resolution | +| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | +| Bundlers | Vite 8, webpack 5, and esbuild | +| Frameworks | React 19, Vue 3, Svelte 5, Next.js 16 client/server, and Nuxt 4 client/server | + +Framework fixtures use Node 22.22.2 because the current Nuxt toolchain requires Node 22.19 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. + +Angular, Ember, Expo/React Native, browser automation, and an edge-runtime fixture remain explicit prerelease gates before the stable v2 support table can be finalized. diff --git a/fixtures/compat/esbuild/package.json b/fixtures/compat/esbuild/package.json new file mode 100644 index 0000000..9a8703c --- /dev/null +++ b/fixtures/compat/esbuild/package.json @@ -0,0 +1,11 @@ +{ + "name": "@fleetbase/sdk-fixture-esbuild", + "private": true, + "type": "module", + "scripts": { + "build": "esbuild src/index.js --bundle --format=esm --platform=browser --outfile=dist/index.js" + }, + "devDependencies": { + "esbuild": "0.28.2" + } +} diff --git a/fixtures/compat/esbuild/src/index.js b/fixtures/compat/esbuild/src/index.js new file mode 100644 index 0000000..62f4b97 --- /dev/null +++ b/fixtures/compat/esbuild/src/index.js @@ -0,0 +1,4 @@ +import Fleetbase, { Point } from '@fleetbase/sdk'; + +export const client = new Fleetbase('fixture_public_key'); +export const point = new Point(1, 2); diff --git a/fixtures/compat/next/app/layout.js b/fixtures/compat/next/app/layout.js new file mode 100644 index 0000000..6b5c051 --- /dev/null +++ b/fixtures/compat/next/app/layout.js @@ -0,0 +1,7 @@ +export default function Layout({ children }) { + return ( + + {children} + + ); +} diff --git a/fixtures/compat/next/app/page.js b/fixtures/compat/next/app/page.js new file mode 100644 index 0000000..ea834af --- /dev/null +++ b/fixtures/compat/next/app/page.js @@ -0,0 +1,13 @@ +import Fleetbase from '@fleetbase/sdk'; +import ClientSdk from './sdk-client'; + +const client = new Fleetbase('fixture_server_key'); + +export default function Page() { + return ( +

+ Fleetbase {client.version} + +
+ ); +} diff --git a/fixtures/compat/next/app/sdk-client.js b/fixtures/compat/next/app/sdk-client.js new file mode 100644 index 0000000..b3b0471 --- /dev/null +++ b/fixtures/compat/next/app/sdk-client.js @@ -0,0 +1,9 @@ +'use client'; + +import Fleetbase from '@fleetbase/sdk'; + +const client = new Fleetbase('fixture_public_key'); + +export default function ClientSdk() { + return client {client.version}; +} diff --git a/fixtures/compat/next/package.json b/fixtures/compat/next/package.json new file mode 100644 index 0000000..48df942 --- /dev/null +++ b/fixtures/compat/next/package.json @@ -0,0 +1,12 @@ +{ + "name": "@fleetbase/sdk-fixture-next", + "private": true, + "scripts": { + "build": "next build" + }, + "dependencies": { + "next": "16.3.3", + "react": "19.2.8", + "react-dom": "19.2.8" + } +} diff --git a/fixtures/compat/nuxt/app.vue b/fixtures/compat/nuxt/app.vue new file mode 100644 index 0000000..e692407 --- /dev/null +++ b/fixtures/compat/nuxt/app.vue @@ -0,0 +1,9 @@ + + + diff --git a/fixtures/compat/nuxt/package.json b/fixtures/compat/nuxt/package.json new file mode 100644 index 0000000..51563d0 --- /dev/null +++ b/fixtures/compat/nuxt/package.json @@ -0,0 +1,12 @@ +{ + "name": "@fleetbase/sdk-fixture-nuxt", + "private": true, + "type": "module", + "scripts": { + "build": "nuxt build" + }, + "dependencies": { + "nuxt": "4.5.2", + "vue": "3.5.42" + } +} diff --git a/fixtures/compat/react/index.html b/fixtures/compat/react/index.html new file mode 100644 index 0000000..f6c532e --- /dev/null +++ b/fixtures/compat/react/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/fixtures/compat/react/package.json b/fixtures/compat/react/package.json new file mode 100644 index 0000000..b1a0977 --- /dev/null +++ b/fixtures/compat/react/package.json @@ -0,0 +1,16 @@ +{ + "name": "@fleetbase/sdk-fixture-react", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + }, + "dependencies": { + "react": "19.2.8", + "react-dom": "19.2.8" + }, + "devDependencies": { + "@vitejs/plugin-react": "6.1.1", + "vite": "8.2.2" + } +} diff --git a/fixtures/compat/react/src/main.jsx b/fixtures/compat/react/src/main.jsx new file mode 100644 index 0000000..bc921c2 --- /dev/null +++ b/fixtures/compat/react/src/main.jsx @@ -0,0 +1,6 @@ +import Fleetbase from '@fleetbase/sdk'; +import React from 'react'; +import { createRoot } from 'react-dom/client'; + +const client = new Fleetbase('fixture_public_key'); +createRoot(document.querySelector('#root')).render(

Fleetbase {client.version}

); diff --git a/fixtures/compat/react/vite.config.js b/fixtures/compat/react/vite.config.js new file mode 100644 index 0000000..f113497 --- /dev/null +++ b/fixtures/compat/react/vite.config.js @@ -0,0 +1,4 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +export default defineConfig({ plugins: [react()] }); diff --git a/fixtures/compat/svelte/index.html b/fixtures/compat/svelte/index.html new file mode 100644 index 0000000..74acba4 --- /dev/null +++ b/fixtures/compat/svelte/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/fixtures/compat/svelte/package.json b/fixtures/compat/svelte/package.json new file mode 100644 index 0000000..2375c35 --- /dev/null +++ b/fixtures/compat/svelte/package.json @@ -0,0 +1,15 @@ +{ + "name": "@fleetbase/sdk-fixture-svelte", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + }, + "dependencies": { + "svelte": "5.57.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "7.3.0", + "vite": "8.2.2" + } +} diff --git a/fixtures/compat/svelte/src/App.svelte b/fixtures/compat/svelte/src/App.svelte new file mode 100644 index 0000000..888a272 --- /dev/null +++ b/fixtures/compat/svelte/src/App.svelte @@ -0,0 +1,6 @@ + + +

Fleetbase {client.version}

diff --git a/fixtures/compat/svelte/src/main.js b/fixtures/compat/svelte/src/main.js new file mode 100644 index 0000000..429bb3d --- /dev/null +++ b/fixtures/compat/svelte/src/main.js @@ -0,0 +1,4 @@ +import { mount } from 'svelte'; +import App from './App.svelte'; + +mount(App, { target: document.querySelector('#app') }); diff --git a/fixtures/compat/svelte/vite.config.js b/fixtures/compat/svelte/vite.config.js new file mode 100644 index 0000000..e2eb742 --- /dev/null +++ b/fixtures/compat/svelte/vite.config.js @@ -0,0 +1,4 @@ +import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { defineConfig } from 'vite'; + +export default defineConfig({ plugins: [svelte()] }); diff --git a/fixtures/compat/vite/index.html b/fixtures/compat/vite/index.html new file mode 100644 index 0000000..74acba4 --- /dev/null +++ b/fixtures/compat/vite/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/fixtures/compat/vite/package.json b/fixtures/compat/vite/package.json new file mode 100644 index 0000000..ebf19b9 --- /dev/null +++ b/fixtures/compat/vite/package.json @@ -0,0 +1,11 @@ +{ + "name": "@fleetbase/sdk-fixture-vite", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + }, + "devDependencies": { + "vite": "8.2.2" + } +} diff --git a/fixtures/compat/vite/src/main.js b/fixtures/compat/vite/src/main.js new file mode 100644 index 0000000..67afa1b --- /dev/null +++ b/fixtures/compat/vite/src/main.js @@ -0,0 +1,5 @@ +import Fleetbase, { Point } from '@fleetbase/sdk'; + +const client = new Fleetbase('fixture_public_key'); +const point = new Point(1, 2); +document.querySelector('#app').textContent = `${client.version}:${point.coordinates.join(',')}`; diff --git a/fixtures/compat/vue/index.html b/fixtures/compat/vue/index.html new file mode 100644 index 0000000..74acba4 --- /dev/null +++ b/fixtures/compat/vue/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/fixtures/compat/vue/package.json b/fixtures/compat/vue/package.json new file mode 100644 index 0000000..22fa36c --- /dev/null +++ b/fixtures/compat/vue/package.json @@ -0,0 +1,15 @@ +{ + "name": "@fleetbase/sdk-fixture-vue", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + }, + "dependencies": { + "vue": "3.5.42" + }, + "devDependencies": { + "@vitejs/plugin-vue": "6.0.8", + "vite": "8.2.2" + } +} diff --git a/fixtures/compat/vue/src/App.vue b/fixtures/compat/vue/src/App.vue new file mode 100644 index 0000000..e692407 --- /dev/null +++ b/fixtures/compat/vue/src/App.vue @@ -0,0 +1,9 @@ + + + diff --git a/fixtures/compat/vue/src/main.js b/fixtures/compat/vue/src/main.js new file mode 100644 index 0000000..684d042 --- /dev/null +++ b/fixtures/compat/vue/src/main.js @@ -0,0 +1,4 @@ +import { createApp } from 'vue'; +import App from './App.vue'; + +createApp(App).mount('#app'); diff --git a/fixtures/compat/vue/vite.config.js b/fixtures/compat/vue/vite.config.js new file mode 100644 index 0000000..8677fd0 --- /dev/null +++ b/fixtures/compat/vue/vite.config.js @@ -0,0 +1,4 @@ +import vue from '@vitejs/plugin-vue'; +import { defineConfig } from 'vite'; + +export default defineConfig({ plugins: [vue()] }); diff --git a/fixtures/compat/webpack/package.json b/fixtures/compat/webpack/package.json new file mode 100644 index 0000000..f0e6a54 --- /dev/null +++ b/fixtures/compat/webpack/package.json @@ -0,0 +1,12 @@ +{ + "name": "@fleetbase/sdk-fixture-webpack", + "private": true, + "type": "module", + "scripts": { + "build": "webpack --mode production" + }, + "devDependencies": { + "webpack": "5.110.2", + "webpack-cli": "7.2.3" + } +} diff --git a/fixtures/compat/webpack/src/index.js b/fixtures/compat/webpack/src/index.js new file mode 100644 index 0000000..472ddac --- /dev/null +++ b/fixtures/compat/webpack/src/index.js @@ -0,0 +1,5 @@ +import Fleetbase, { Point } from '@fleetbase/sdk'; + +const client = new Fleetbase('fixture_public_key'); +const point = new Point(1, 2); +globalThis.sdkFixture = `${client.version}:${point.coordinates.join(',')}`; From 68d9fb0460bef44deaf2b13c4ca53a74186a266f Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 20:47:32 +0800 Subject: [PATCH 07/13] ci: isolate framework fixture dependencies --- .github/workflows/ci.yml | 11 ++++++----- .gitignore | 1 + fixtures/compat/esbuild/pnpm-workspace.yaml | 4 ++++ fixtures/compat/next/pnpm-workspace.yaml | 4 ++++ fixtures/compat/nuxt/pnpm-workspace.yaml | 4 ++++ fixtures/compat/react/pnpm-workspace.yaml | 4 ++++ fixtures/compat/svelte/pnpm-workspace.yaml | 4 ++++ fixtures/compat/vite/pnpm-workspace.yaml | 4 ++++ fixtures/compat/vue/pnpm-workspace.yaml | 4 ++++ fixtures/compat/webpack/pnpm-workspace.yaml | 4 ++++ 10 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 fixtures/compat/esbuild/pnpm-workspace.yaml create mode 100644 fixtures/compat/next/pnpm-workspace.yaml create mode 100644 fixtures/compat/nuxt/pnpm-workspace.yaml create mode 100644 fixtures/compat/react/pnpm-workspace.yaml create mode 100644 fixtures/compat/svelte/pnpm-workspace.yaml create mode 100644 fixtures/compat/vite/pnpm-workspace.yaml create mode 100644 fixtures/compat/vue/pnpm-workspace.yaml create mode 100644 fixtures/compat/webpack/pnpm-workspace.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf64291..923de6b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -200,17 +200,18 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 22.22.2 - cache: npm - cache-dependency-path: fixtures/compat/${{ matrix.fixture }}/package.json + - uses: pnpm/action-setup@v4 + with: + version: 11.24.0 - name: Install pinned fixture dependencies working-directory: fixtures/compat/${{ matrix.fixture }} - run: npm install --no-package-lock + run: pnpm install --no-frozen-lockfile - name: Install exact SDK candidate working-directory: fixtures/compat/${{ matrix.fixture }} - run: npm install --no-package-lock --no-save ../../../artifacts/fleetbase-sdk.tgz + run: pnpm add --save-dev ../../../artifacts/fleetbase-sdk.tgz - name: Build production fixture working-directory: fixtures/compat/${{ matrix.fixture }} - run: npm run build + run: pnpm run build dependency-review: name: Dependency review diff --git a/.gitignore b/.gitignore index 5ab6509..0e41fd4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ dist/ .next/ .nuxt/ .output/ +/fixtures/compat/**/pnpm-lock.yaml # dependencies /bower_components/ diff --git a/fixtures/compat/esbuild/pnpm-workspace.yaml b/fixtures/compat/esbuild/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/esbuild/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/next/pnpm-workspace.yaml b/fixtures/compat/next/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/next/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/nuxt/pnpm-workspace.yaml b/fixtures/compat/nuxt/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/nuxt/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/react/pnpm-workspace.yaml b/fixtures/compat/react/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/react/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/svelte/pnpm-workspace.yaml b/fixtures/compat/svelte/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/svelte/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/vite/pnpm-workspace.yaml b/fixtures/compat/vite/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/vite/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/vue/pnpm-workspace.yaml b/fixtures/compat/vue/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/vue/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/webpack/pnpm-workspace.yaml b/fixtures/compat/webpack/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/webpack/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true From f890ea051a3b7eb43951b7a81a9f773c1c0dc3e6 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 21:49:05 +0800 Subject: [PATCH 08/13] test: add framework and runtime artifact gates --- .github/workflows/ci.yml | 4 +-- .gitignore | 5 +++ README.md | 2 +- docs/compatibility.md | 21 +++++------ fixtures/compat/angular/angular.json | 23 ++++++++++++ fixtures/compat/angular/package.json | 20 +++++++++++ fixtures/compat/angular/pnpm-workspace.yaml | 7 ++++ fixtures/compat/angular/src/index.html | 9 +++++ fixtures/compat/angular/src/main.ts | 16 +++++++++ fixtures/compat/angular/tsconfig.app.json | 5 +++ fixtures/compat/angular/tsconfig.json | 12 +++++++ fixtures/compat/edge/build.mjs | 20 +++++++++++ fixtures/compat/edge/entry.js | 5 +++ fixtures/compat/edge/package.json | 12 +++++++ fixtures/compat/edge/pnpm-workspace.yaml | 4 +++ fixtures/compat/ember/.ember-cli | 4 +++ fixtures/compat/ember/app/app.js | 13 +++++++ .../compat/ember/app/config/environment.js | 3 ++ fixtures/compat/ember/app/router.js | 9 +++++ .../ember/app/templates/application.gjs | 6 ++++ fixtures/compat/ember/babel.config.mjs | 12 +++++++ fixtures/compat/ember/config/environment.js | 12 +++++++ .../ember/config/optional-features.json | 6 ++++ fixtures/compat/ember/config/targets.js | 3 ++ fixtures/compat/ember/ember-cli-build.mjs | 7 ++++ fixtures/compat/ember/index.html | 21 +++++++++++ fixtures/compat/ember/package.json | 36 +++++++++++++++++++ fixtures/compat/ember/pnpm-workspace.yaml | 4 +++ fixtures/compat/ember/vite.config.mjs | 7 ++++ fixtures/compat/expo/app.json | 9 +++++ fixtures/compat/expo/index.js | 4 +++ fixtures/compat/expo/package.json | 16 +++++++++ fixtures/compat/expo/pnpm-workspace.yaml | 4 +++ fixtures/compat/expo/src/App.js | 10 ++++++ 34 files changed, 338 insertions(+), 13 deletions(-) create mode 100644 fixtures/compat/angular/angular.json create mode 100644 fixtures/compat/angular/package.json create mode 100644 fixtures/compat/angular/pnpm-workspace.yaml create mode 100644 fixtures/compat/angular/src/index.html create mode 100644 fixtures/compat/angular/src/main.ts create mode 100644 fixtures/compat/angular/tsconfig.app.json create mode 100644 fixtures/compat/angular/tsconfig.json create mode 100644 fixtures/compat/edge/build.mjs create mode 100644 fixtures/compat/edge/entry.js create mode 100644 fixtures/compat/edge/package.json create mode 100644 fixtures/compat/edge/pnpm-workspace.yaml create mode 100644 fixtures/compat/ember/.ember-cli create mode 100644 fixtures/compat/ember/app/app.js create mode 100644 fixtures/compat/ember/app/config/environment.js create mode 100644 fixtures/compat/ember/app/router.js create mode 100644 fixtures/compat/ember/app/templates/application.gjs create mode 100644 fixtures/compat/ember/babel.config.mjs create mode 100644 fixtures/compat/ember/config/environment.js create mode 100644 fixtures/compat/ember/config/optional-features.json create mode 100644 fixtures/compat/ember/config/targets.js create mode 100644 fixtures/compat/ember/ember-cli-build.mjs create mode 100644 fixtures/compat/ember/index.html create mode 100644 fixtures/compat/ember/package.json create mode 100644 fixtures/compat/ember/pnpm-workspace.yaml create mode 100644 fixtures/compat/ember/vite.config.mjs create mode 100644 fixtures/compat/expo/app.json create mode 100644 fixtures/compat/expo/index.js create mode 100644 fixtures/compat/expo/package.json create mode 100644 fixtures/compat/expo/pnpm-workspace.yaml create mode 100644 fixtures/compat/expo/src/App.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 923de6b..d12828f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -190,7 +190,7 @@ jobs: strategy: fail-fast: false matrix: - fixture: [vite, webpack, esbuild, react, vue, svelte, next, nuxt] + fixture: [vite, webpack, esbuild, react, vue, svelte, angular, ember, next, nuxt, expo, edge] steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 @@ -199,7 +199,7 @@ jobs: path: artifacts - uses: actions/setup-node@v4 with: - node-version: 22.22.2 + node-version: 24.15.0 - uses: pnpm/action-setup@v4 with: version: 11.24.0 diff --git a/.gitignore b/.gitignore index 0e41fd4..4d3d0bc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,11 @@ dist/ .nuxt/ .output/ /fixtures/compat/**/pnpm-lock.yaml +/fixtures/compat/ember/tmp/ +.angular/ +.expo/ +dist-android/ +dist-web/ # dependencies /bower_components/ diff --git a/README.md b/README.md index 19cc8b8..4bf54c0 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ The npm package contains: Every release candidate is checked with Publint, Are The Types Wrong, packed-tarball content and size assertions, ESM/CommonJS export parity, strict TypeScript, cross-platform smoke tests, and 100% statement, branch, function, and line coverage. -Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Next.js (client and server), and Nuxt (client and server). See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix and remaining prerelease gates. +Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Angular, Ember, Next.js (client and server), Nuxt (client and server), Expo web/React Native Android, and an edge-runtime VM. See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix and remaining prerelease gates. ## Development diff --git a/docs/compatibility.md b/docs/compatibility.md index bbc36f7..e493ca7 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -4,15 +4,16 @@ Every supported consumer gate installs the exact tarball produced by the CI pack ## Release-blocking coverage -| Dimension | Verified targets | -| ---------------- | ----------------------------------------------------------------------------- | -| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | -| Modules | native ESM and true CommonJS | -| TypeScript | strict Node16, NodeNext, and bundler resolution | -| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | -| Bundlers | Vite 8, webpack 5, and esbuild | -| Frameworks | React 19, Vue 3, Svelte 5, Next.js 16 client/server, and Nuxt 4 client/server | +| Dimension | Verified targets | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | +| Modules | native ESM and true CommonJS | +| TypeScript | strict Node16, NodeNext, and bundler resolution | +| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | +| Bundlers | Vite 8, webpack 5, esbuild, Angular build, Ember's Embroider/Vite pipeline, and Expo Metro | +| Frameworks | React 19, Vue 3, Svelte 5, Angular 22, Ember 7, Next.js 16 client/server, Nuxt 4 client/server, and Expo 57 web/React Native Android | +| Edge | bundled SDK execution in Edge Runtime VM 5 | -Framework fixtures use Node 22.22.2 because the current Nuxt toolchain requires Node 22.19 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. +Framework fixtures use Node 24.15 because current Angular requires Node 24.15 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. -Angular, Ember, Expo/React Native, browser automation, and an edge-runtime fixture remain explicit prerelease gates before the stable v2 support table can be finalized. +Browser execution automation remains an explicit prerelease gate before the stable v2 support table can be finalized. diff --git a/fixtures/compat/angular/angular.json b/fixtures/compat/angular/angular.json new file mode 100644 index 0000000..c97d39f --- /dev/null +++ b/fixtures/compat/angular/angular.json @@ -0,0 +1,23 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "projects": { + "fixture": { + "projectType": "application", + "root": "", + "sourceRoot": "src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "browser": "src/main.ts", + "index": "src/index.html", + "outputPath": "dist", + "tsConfig": "tsconfig.app.json" + }, + "configurations": { "production": { "outputHashing": "all" } } + } + } + } + } +} diff --git a/fixtures/compat/angular/package.json b/fixtures/compat/angular/package.json new file mode 100644 index 0000000..eb758d4 --- /dev/null +++ b/fixtures/compat/angular/package.json @@ -0,0 +1,20 @@ +{ + "name": "@fleetbase/sdk-fixture-angular", + "private": true, + "scripts": { + "build": "ng build --configuration production" + }, + "dependencies": { + "@angular/common": "22.1.4", + "@angular/compiler": "22.1.4", + "@angular/core": "22.1.4", + "@angular/platform-browser": "22.1.4", + "rxjs": "7.8.2" + }, + "devDependencies": { + "@angular/build": "22.1.6", + "@angular/cli": "22.1.6", + "@angular/compiler-cli": "22.1.4", + "typescript": "6.0.3" + } +} diff --git a/fixtures/compat/angular/pnpm-workspace.yaml b/fixtures/compat/angular/pnpm-workspace.yaml new file mode 100644 index 0000000..c14d8eb --- /dev/null +++ b/fixtures/compat/angular/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +packages: + - . +allowBuilds: + '@parcel/watcher': true + esbuild: true + lmdb: true + msgpackr-extract: true diff --git a/fixtures/compat/angular/src/index.html b/fixtures/compat/angular/src/index.html new file mode 100644 index 0000000..05cb1a6 --- /dev/null +++ b/fixtures/compat/angular/src/index.html @@ -0,0 +1,9 @@ + + + + Fleetbase SDK Angular + + + + + diff --git a/fixtures/compat/angular/src/main.ts b/fixtures/compat/angular/src/main.ts new file mode 100644 index 0000000..084f322 --- /dev/null +++ b/fixtures/compat/angular/src/main.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { bootstrapApplication } from '@angular/platform-browser'; +import Fleetbase from '@fleetbase/sdk'; + +const client = new Fleetbase('fixture_public_key'); + +@Component({ + selector: 'sdk-root', + standalone: true, + template: '

Fleetbase {{ version }}

', +}) +class App { + version = client.version; +} + +void bootstrapApplication(App); diff --git a/fixtures/compat/angular/tsconfig.app.json b/fixtures/compat/angular/tsconfig.app.json new file mode 100644 index 0000000..ebd0828 --- /dev/null +++ b/fixtures/compat/angular/tsconfig.app.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { "outDir": "./out-tsc/app", "types": [] }, + "files": ["src/main.ts"] +} diff --git a/fixtures/compat/angular/tsconfig.json b/fixtures/compat/angular/tsconfig.json new file mode 100644 index 0000000..3798df6 --- /dev/null +++ b/fixtures/compat/angular/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ES2022", + "module": "preserve", + "moduleResolution": "bundler", + "experimentalDecorators": true, + "useDefineForClassFields": false, + "lib": ["ES2022", "DOM"] + }, + "angularCompilerOptions": { "strictTemplates": true } +} diff --git a/fixtures/compat/edge/build.mjs b/fixtures/compat/edge/build.mjs new file mode 100644 index 0000000..791967c --- /dev/null +++ b/fixtures/compat/edge/build.mjs @@ -0,0 +1,20 @@ +import { EdgeVM } from '@edge-runtime/vm'; +import { build } from 'esbuild'; +import { readFile } from 'node:fs/promises'; + +await build({ + bundle: true, + entryPoints: ['entry.js'], + format: 'iife', + globalName: 'SdkFixture', + outfile: 'dist/index.js', + platform: 'browser', +}); + +const vm = new EdgeVM(); +vm.evaluate(await readFile('dist/index.js', 'utf8')); +const result = vm.evaluate('[typeof SdkFixture.client, typeof SdkFixture.adapter.request, SdkFixture.point.coordinates.join(",")].join(":")'); + +if (result !== 'object:function:2,1') { + throw new Error(`Unexpected edge runtime result: ${String(result)}`); +} diff --git a/fixtures/compat/edge/entry.js b/fixtures/compat/edge/entry.js new file mode 100644 index 0000000..a21110c --- /dev/null +++ b/fixtures/compat/edge/entry.js @@ -0,0 +1,5 @@ +import Fleetbase, { BrowserAdapter, Point } from '@fleetbase/sdk'; + +export const client = new Fleetbase('fixture_public_key'); +export const adapter = new BrowserAdapter({ publicKey: 'fixture_public_key' }); +export const point = new Point(1, 2); diff --git a/fixtures/compat/edge/package.json b/fixtures/compat/edge/package.json new file mode 100644 index 0000000..8be2243 --- /dev/null +++ b/fixtures/compat/edge/package.json @@ -0,0 +1,12 @@ +{ + "name": "@fleetbase/sdk-fixture-edge", + "private": true, + "type": "module", + "scripts": { + "build": "node build.mjs" + }, + "devDependencies": { + "@edge-runtime/vm": "5.0.0", + "esbuild": "0.28.2" + } +} diff --git a/fixtures/compat/edge/pnpm-workspace.yaml b/fixtures/compat/edge/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/edge/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/ember/.ember-cli b/fixtures/compat/ember/.ember-cli new file mode 100644 index 0000000..fe1d75f --- /dev/null +++ b/fixtures/compat/ember/.ember-cli @@ -0,0 +1,4 @@ +{ + "componentAuthoringFormat": "strict", + "routeAuthoringFormat": "strict" +} diff --git a/fixtures/compat/ember/app/app.js b/fixtures/compat/ember/app/app.js new file mode 100644 index 0000000..424f4e3 --- /dev/null +++ b/fixtures/compat/ember/app/app.js @@ -0,0 +1,13 @@ +import Application from '@ember/application'; +import compatModules from '@embroider/virtual/compat-modules'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from 'fleetbase-sdk-ember/config/environment'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver.withModules(compatModules); +} + +loadInitializers(App, config.modulePrefix, compatModules); diff --git a/fixtures/compat/ember/app/config/environment.js b/fixtures/compat/ember/app/config/environment.js new file mode 100644 index 0000000..60a6f57 --- /dev/null +++ b/fixtures/compat/ember/app/config/environment.js @@ -0,0 +1,3 @@ +import loadConfigFromMeta from '@embroider/config-meta-loader'; + +export default loadConfigFromMeta('fleetbase-sdk-ember'); diff --git a/fixtures/compat/ember/app/router.js b/fixtures/compat/ember/app/router.js new file mode 100644 index 0000000..8a59326 --- /dev/null +++ b/fixtures/compat/ember/app/router.js @@ -0,0 +1,9 @@ +import EmberRouter from '@embroider/router'; +import config from 'fleetbase-sdk-ember/config/environment'; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () {}); diff --git a/fixtures/compat/ember/app/templates/application.gjs b/fixtures/compat/ember/app/templates/application.gjs new file mode 100644 index 0000000..0ab9078 --- /dev/null +++ b/fixtures/compat/ember/app/templates/application.gjs @@ -0,0 +1,6 @@ +import Fleetbase, { Point } from '@fleetbase/sdk'; + +const client = new Fleetbase('fixture_public_key'); +const point = new Point(1, 2); + + diff --git a/fixtures/compat/ember/babel.config.mjs b/fixtures/compat/ember/babel.config.mjs new file mode 100644 index 0000000..a1172cc --- /dev/null +++ b/fixtures/compat/ember/babel.config.mjs @@ -0,0 +1,12 @@ +import { babelCompatSupport, templateCompatSupport } from '@embroider/compat/babel'; +import { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export default { + plugins: [ + ['babel-plugin-ember-template-compilation', { enableLegacyModules: ['ember-cli-htmlbars'], transforms: [...templateCompatSupport()] }], + ['module:decorator-transforms', { runtime: { import: fileURLToPath(import.meta.resolve('decorator-transforms/runtime-esm')) } }], + ['@babel/plugin-transform-runtime', { absoluteRuntime: dirname(fileURLToPath(import.meta.url)), useESModules: true, regenerator: false }], + ...babelCompatSupport(), + ], +}; diff --git a/fixtures/compat/ember/config/environment.js b/fixtures/compat/ember/config/environment.js new file mode 100644 index 0000000..f1efad0 --- /dev/null +++ b/fixtures/compat/ember/config/environment.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = function (environment) { + return { + modulePrefix: 'fleetbase-sdk-ember', + environment, + rootURL: '/', + locationType: 'history', + EmberENV: { EXTEND_PROTOTYPES: false }, + APP: {}, + }; +}; diff --git a/fixtures/compat/ember/config/optional-features.json b/fixtures/compat/ember/config/optional-features.json new file mode 100644 index 0000000..b710123 --- /dev/null +++ b/fixtures/compat/ember/config/optional-features.json @@ -0,0 +1,6 @@ +{ + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true +} diff --git a/fixtures/compat/ember/config/targets.js b/fixtures/compat/ember/config/targets.js new file mode 100644 index 0000000..acb0ef8 --- /dev/null +++ b/fixtures/compat/ember/config/targets.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = { browsers: ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions'] }; diff --git a/fixtures/compat/ember/ember-cli-build.mjs b/fixtures/compat/ember/ember-cli-build.mjs new file mode 100644 index 0000000..b977ba5 --- /dev/null +++ b/fixtures/compat/ember/ember-cli-build.mjs @@ -0,0 +1,7 @@ +import { compatBuild } from '@embroider/compat'; +import { buildOnce } from '@embroider/vite'; +import EmberApp from 'ember-cli/lib/broccoli/ember-app.js'; + +export default function build(defaults) { + return compatBuild(new EmberApp(defaults, {}), buildOnce); +} diff --git a/fixtures/compat/ember/index.html b/fixtures/compat/ember/index.html new file mode 100644 index 0000000..4d8dafc --- /dev/null +++ b/fixtures/compat/ember/index.html @@ -0,0 +1,21 @@ + + + + + Fleetbase SDK Ember + {{content-for "head"}} + + + {{content-for "head-footer"}} + + + {{content-for "body"}} + + + {{content-for "body-footer"}} + + diff --git a/fixtures/compat/ember/package.json b/fixtures/compat/ember/package.json new file mode 100644 index 0000000..558f2d2 --- /dev/null +++ b/fixtures/compat/ember/package.json @@ -0,0 +1,36 @@ +{ + "name": "fleetbase-sdk-ember", + "private": true, + "exports": { + "./*": "./app/*" + }, + "scripts": { + "build": "vite build" + }, + "devDependencies": { + "@babel/core": "7.29.7", + "@babel/plugin-transform-runtime": "7.29.7", + "@babel/runtime": "7.29.7", + "@embroider/compat": "4.1.22", + "@embroider/config-meta-loader": "1.0.0", + "@embroider/core": "4.6.3", + "@embroider/macros": "1.20.6", + "@embroider/router": "3.0.6", + "@embroider/vite": "1.7.10", + "@rollup/plugin-babel": "7.1.0", + "babel-plugin-ember-template-compilation": "4.0.0", + "decorator-transforms": "2.4.0", + "ember-cli": "7.2.0", + "ember-cli-babel": "8.3.2", + "ember-load-initializers": "3.0.1", + "ember-resolver": "13.2.0", + "ember-source": "7.2.0", + "vite": "7.3.6" + }, + "engines": { + "node": ">=20.19.0" + }, + "ember": { + "edition": "octane" + } +} diff --git a/fixtures/compat/ember/pnpm-workspace.yaml b/fixtures/compat/ember/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/ember/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/ember/vite.config.mjs b/fixtures/compat/ember/vite.config.mjs new file mode 100644 index 0000000..d96c614 --- /dev/null +++ b/fixtures/compat/ember/vite.config.mjs @@ -0,0 +1,7 @@ +import { babel } from '@rollup/plugin-babel'; +import { classicEmberSupport, ember, extensions } from '@embroider/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [classicEmberSupport(), ember(), babel({ babelHelpers: 'runtime', extensions })], +}); diff --git a/fixtures/compat/expo/app.json b/fixtures/compat/expo/app.json new file mode 100644 index 0000000..46c624d --- /dev/null +++ b/fixtures/compat/expo/app.json @@ -0,0 +1,9 @@ +{ + "expo": { + "name": "Fleetbase SDK Expo Fixture", + "slug": "fleetbase-sdk-expo-fixture", + "version": "1.0.0", + "platforms": ["android", "web"], + "web": { "bundler": "metro" } + } +} diff --git a/fixtures/compat/expo/index.js b/fixtures/compat/expo/index.js new file mode 100644 index 0000000..0260dea --- /dev/null +++ b/fixtures/compat/expo/index.js @@ -0,0 +1,4 @@ +import { registerRootComponent } from 'expo'; +import App from './src/App.js'; + +registerRootComponent(App); diff --git a/fixtures/compat/expo/package.json b/fixtures/compat/expo/package.json new file mode 100644 index 0000000..455fae4 --- /dev/null +++ b/fixtures/compat/expo/package.json @@ -0,0 +1,16 @@ +{ + "name": "@fleetbase/sdk-fixture-expo", + "private": true, + "main": "index.js", + "scripts": { + "build": "expo export --platform web --output-dir dist-web && expo export --platform android --output-dir dist-android" + }, + "dependencies": { + "@expo/metro-runtime": "57.0.14", + "expo": "57.0.18", + "react": "19.2.3", + "react-dom": "19.2.3", + "react-native": "0.86.3", + "react-native-web": "0.21.2" + } +} diff --git a/fixtures/compat/expo/pnpm-workspace.yaml b/fixtures/compat/expo/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/compat/expo/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/compat/expo/src/App.js b/fixtures/compat/expo/src/App.js new file mode 100644 index 0000000..b5bb9bf --- /dev/null +++ b/fixtures/compat/expo/src/App.js @@ -0,0 +1,10 @@ +import Fleetbase, { Point } from '@fleetbase/sdk'; +import React from 'react'; +import { Text, View } from 'react-native'; + +const client = new Fleetbase('fixture_public_key'); +const point = new Point(1, 2); + +export default function App() { + return React.createElement(View, null, React.createElement(Text, null, `Fleetbase ${client.version} ${point.coordinates.join(',')}`)); +} From d1825397d7f34b927a114dd74d944a1e889ced05 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 21:55:31 +0800 Subject: [PATCH 09/13] test: execute packed SDK contract in Chromium --- .github/workflows/ci.yml | 31 ++++++++++++++++- .gitignore | 2 ++ README.md | 2 +- docs/compatibility.md | 21 ++++++----- fixtures/browser/index.html | 15 ++++++++ fixtures/browser/package.json | 13 +++++++ fixtures/browser/playwright.config.mjs | 14 ++++++++ fixtures/browser/pnpm-workspace.yaml | 4 +++ fixtures/browser/src/main.js | 46 +++++++++++++++++++++++++ fixtures/browser/tests/browser.spec.mjs | 6 ++++ 10 files changed, 141 insertions(+), 13 deletions(-) create mode 100644 fixtures/browser/index.html create mode 100644 fixtures/browser/package.json create mode 100644 fixtures/browser/playwright.config.mjs create mode 100644 fixtures/browser/pnpm-workspace.yaml create mode 100644 fixtures/browser/src/main.js create mode 100644 fixtures/browser/tests/browser.spec.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d12828f..6da4a57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -213,6 +213,35 @@ jobs: working-directory: fixtures/compat/${{ matrix.fixture }} run: pnpm run build + browser: + name: Browser / Chromium + needs: package + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: npm-package + path: artifacts + - uses: actions/setup-node@v4 + with: + node-version: 24.15.0 + - uses: pnpm/action-setup@v4 + with: + version: 11.24.0 + - name: Install pinned browser dependencies + working-directory: fixtures/browser + run: pnpm install --no-frozen-lockfile + - name: Install exact SDK candidate + working-directory: fixtures/browser + run: pnpm add --save-dev ../../artifacts/fleetbase-sdk.tgz + - name: Install Chromium + working-directory: fixtures/browser + run: pnpm exec playwright install --with-deps chromium + - name: Build and execute browser fixture + working-directory: fixtures/browser + run: pnpm run build && pnpm run test:browser + dependency-review: name: Dependency review if: github.event_name == 'pull_request' @@ -242,7 +271,7 @@ jobs: ci-success: name: CI success if: always() - needs: [quality, test, package, cross-platform, package-manager, type-consumer, compatibility, dependency-review, security] + needs: [quality, test, package, cross-platform, package-manager, type-consumer, compatibility, browser, dependency-review, security] runs-on: ubuntu-latest steps: - name: Require successful jobs diff --git a/.gitignore b/.gitignore index 4d3d0bc..ca5affe 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,13 @@ dist/ .nuxt/ .output/ /fixtures/compat/**/pnpm-lock.yaml +/fixtures/browser/pnpm-lock.yaml /fixtures/compat/ember/tmp/ .angular/ .expo/ dist-android/ dist-web/ +test-results/ # dependencies /bower_components/ diff --git a/README.md b/README.md index 4bf54c0..f2d811c 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ The npm package contains: Every release candidate is checked with Publint, Are The Types Wrong, packed-tarball content and size assertions, ESM/CommonJS export parity, strict TypeScript, cross-platform smoke tests, and 100% statement, branch, function, and line coverage. -Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Angular, Ember, Next.js (client and server), Nuxt (client and server), Expo web/React Native Android, and an edge-runtime VM. See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix and remaining prerelease gates. +Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Angular, Ember, Next.js (client and server), Nuxt (client and server), Expo web/React Native Android, and an edge-runtime VM. A Chromium gate also executes SDK construction, Fetch transport, resource serialization, authorization headers, and browser-only key validation. See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix. ## Development diff --git a/docs/compatibility.md b/docs/compatibility.md index e493ca7..05ca0ce 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -4,16 +4,15 @@ Every supported consumer gate installs the exact tarball produced by the CI pack ## Release-blocking coverage -| Dimension | Verified targets | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | -| Modules | native ESM and true CommonJS | -| TypeScript | strict Node16, NodeNext, and bundler resolution | -| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | -| Bundlers | Vite 8, webpack 5, esbuild, Angular build, Ember's Embroider/Vite pipeline, and Expo Metro | -| Frameworks | React 19, Vue 3, Svelte 5, Angular 22, Ember 7, Next.js 16 client/server, Nuxt 4 client/server, and Expo 57 web/React Native Android | -| Edge | bundled SDK execution in Edge Runtime VM 5 | +| Dimension | Verified targets | +| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | +| Modules | native ESM and true CommonJS | +| TypeScript | strict Node16, NodeNext, and bundler resolution | +| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | +| Bundlers | Vite 8, webpack 5, esbuild, Angular build, Ember's Embroider/Vite pipeline, and Expo Metro | +| Frameworks | React 19, Vue 3, Svelte 5, Angular 22, Ember 7, Next.js 16 client/server, Nuxt 4 client/server, and Expo 57 web/React Native Android | +| Edge | bundled SDK execution in Edge Runtime VM 5 | +| Browser execution | Chromium execution of constructors, exports, Fetch transport, authorization headers, resource serialization, and browser-only key validation | Framework fixtures use Node 24.15 because current Angular requires Node 24.15 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. - -Browser execution automation remains an explicit prerelease gate before the stable v2 support table can be finalized. diff --git a/fixtures/browser/index.html b/fixtures/browser/index.html new file mode 100644 index 0000000..772ce53 --- /dev/null +++ b/fixtures/browser/index.html @@ -0,0 +1,15 @@ + + + + + + Fleetbase SDK Browser Fixture + + +
+

Fleetbase SDK Browser Fixture

+ running +
+ + + diff --git a/fixtures/browser/package.json b/fixtures/browser/package.json new file mode 100644 index 0000000..df09ecb --- /dev/null +++ b/fixtures/browser/package.json @@ -0,0 +1,13 @@ +{ + "name": "@fleetbase/sdk-fixture-browser", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "test:browser": "playwright test" + }, + "devDependencies": { + "@playwright/test": "1.62.1", + "vite": "8.2.2" + } +} diff --git a/fixtures/browser/playwright.config.mjs b/fixtures/browser/playwright.config.mjs new file mode 100644 index 0000000..6955bce --- /dev/null +++ b/fixtures/browser/playwright.config.mjs @@ -0,0 +1,14 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests', + use: { + baseURL: 'http://127.0.0.1:4173', + browserName: 'chromium', + }, + webServer: { + command: 'node_modules/.bin/vite preview --host 127.0.0.1 --port 4173', + reuseExistingServer: !process.env.CI, + url: 'http://127.0.0.1:4173', + }, +}); diff --git a/fixtures/browser/pnpm-workspace.yaml b/fixtures/browser/pnpm-workspace.yaml new file mode 100644 index 0000000..bcffe97 --- /dev/null +++ b/fixtures/browser/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . +allowBuilds: + esbuild: true diff --git a/fixtures/browser/src/main.js b/fixtures/browser/src/main.js new file mode 100644 index 0000000..057eaeb --- /dev/null +++ b/fixtures/browser/src/main.js @@ -0,0 +1,46 @@ +import Fleetbase, { BrowserAdapter, Point } from '@fleetbase/sdk'; + +const status = document.querySelector('[data-testid="sdk-status"]'); + +async function verify() { + const requests = []; + const fetch = async (url, options) => { + requests.push({ url, options }); + return new Response(JSON.stringify({ id: 'order_1', status: 'created' }), { + headers: { 'Content-Type': 'application/json', 'X-Request-Id': 'request_1' }, + status: 200, + }); + }; + const adapter = new BrowserAdapter({ fetch, host: 'https://fixture.invalid', namespace: 'v1', publicKey: 'fixture_public_key' }); + const client = new Fleetbase('fixture_public_key', { adapter }); + const point = new Point(1, 2); + const order = await client.orders.findRecord('order_1'); + + let rejectedSecret = false; + try { + new Fleetbase('$fixture_secret_key'); + } catch { + rejectedSecret = true; + } + + const request = requests[0]; + const authorization = new Headers(request.options.headers).get('Authorization'); + const passed = + client.getAdapter() instanceof BrowserAdapter && + point.coordinates.join(',') === '2,1' && + order.id === 'order_1' && + request.url === 'https://fixture.invalid/v1/orders/order_1' && + authorization === 'Bearer fixture_public_key' && + rejectedSecret; + + if (!passed) { + throw new Error('Browser SDK contract did not match expected behavior.'); + } + + status.textContent = 'passed'; +} + +verify().catch((error) => { + status.textContent = `failed: ${error instanceof Error ? error.message : String(error)}`; + throw error; +}); diff --git a/fixtures/browser/tests/browser.spec.mjs b/fixtures/browser/tests/browser.spec.mjs new file mode 100644 index 0000000..671c10c --- /dev/null +++ b/fixtures/browser/tests/browser.spec.mjs @@ -0,0 +1,6 @@ +import { expect, test } from '@playwright/test'; + +test('executes the packed SDK contract in Chromium', async ({ page }) => { + await page.goto('/'); + await expect(page.getByTestId('sdk-status')).toHaveText('passed'); +}); From b4821c91e2f48b884ae8ad19431cb6f645899434 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 21:59:24 +0800 Subject: [PATCH 10/13] ci: add secret-gated live API smoke --- .github/workflows/integration.yml | 71 +++++++++++++++++++++++++++++++ .gitignore | 1 + README.md | 2 + docs/compatibility.md | 2 + fixtures/integration/package.json | 8 ++++ fixtures/integration/smoke.mjs | 18 ++++++++ 6 files changed, 102 insertions(+) create mode 100644 .github/workflows/integration.yml create mode 100644 fixtures/integration/package.json create mode 100644 fixtures/integration/smoke.mjs diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml new file mode 100644 index 0000000..ffd6877 --- /dev/null +++ b/.github/workflows/integration.yml @@ -0,0 +1,71 @@ +name: Live API integration + +on: + workflow_dispatch: + inputs: + api_host: + description: Fleetbase API origin + required: true + default: https://api.fleetbase.io + type: string + namespace: + description: API namespace + required: true + default: v1 + type: string + schedule: + - cron: '23 5 * * 1' + +concurrency: + group: integration-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + FLEETBASE_PUBLIC_KEY: ${{ secrets.FLEETBASE_PUBLIC_KEY }} + FLEETBASE_API_HOST: ${{ inputs.api_host || vars.FLEETBASE_API_HOST || 'https://api.fleetbase.io' }} + FLEETBASE_API_NAMESPACE: ${{ inputs.namespace || vars.FLEETBASE_API_NAMESPACE || 'v1' }} + +jobs: + smoke: + name: Read-only packed SDK smoke + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Require credentials for manual runs + if: github.event_name == 'workflow_dispatch' && env.FLEETBASE_PUBLIC_KEY == '' + run: | + echo 'The FLEETBASE_PUBLIC_KEY repository secret is required for a manual integration run.' >&2 + exit 1 + - name: Record skipped scheduled run + if: github.event_name == 'schedule' && env.FLEETBASE_PUBLIC_KEY == '' + run: echo 'Live API smoke skipped because FLEETBASE_PUBLIC_KEY is not configured.' >> "$GITHUB_STEP_SUMMARY" + - uses: actions/checkout@v4 + if: env.FLEETBASE_PUBLIC_KEY != '' + - uses: pnpm/action-setup@v4 + if: env.FLEETBASE_PUBLIC_KEY != '' + with: + run_install: false + - uses: actions/setup-node@v4 + if: env.FLEETBASE_PUBLIC_KEY != '' + with: + node-version: 22.13.0 + cache: pnpm + - name: Build immutable SDK candidate + if: env.FLEETBASE_PUBLIC_KEY != '' + run: | + pnpm install --frozen-lockfile + pnpm run build + mkdir -p artifacts + pnpm pack --pack-destination artifacts + mv artifacts/*.tgz artifacts/fleetbase-sdk.tgz + - name: Install exact candidate + if: env.FLEETBASE_PUBLIC_KEY != '' + working-directory: fixtures/integration + run: npm install ../../artifacts/fleetbase-sdk.tgz + - name: Execute read-only live contract + if: env.FLEETBASE_PUBLIC_KEY != '' + working-directory: fixtures/integration + run: npm run smoke diff --git a/.gitignore b/.gitignore index ca5affe..6afbccf 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ dist/ .output/ /fixtures/compat/**/pnpm-lock.yaml /fixtures/browser/pnpm-lock.yaml +/fixtures/integration/package-lock.json /fixtures/compat/ember/tmp/ .angular/ .expo/ diff --git a/README.md b/README.md index f2d811c..e053713 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,8 @@ pnpm run verify Pull-request tests are deterministic and do not need Fleetbase credentials. API behavior is cross-checked against the official [Postman collections](https://github.com/fleetbase/postman), [Core API](https://github.com/fleetbase/core-api), and [Fleet-Ops](https://github.com/fleetbase/fleetops) sources. +Maintainers can also run the secret-gated `Live API integration` workflow. It installs the exact packed SDK candidate and performs a read-only current-organization request using the `FLEETBASE_PUBLIC_KEY` repository secret; scheduled runs skip cleanly until that secret is configured, while manually dispatched runs fail clearly when it is absent. + See the [modernization plan](https://github.com/fleetbase/fleetbase-js/blob/main/MODERNIZATION_PLAN.md) for the v2 compatibility and release program and the [contribution guide](https://github.com/fleetbase/fleetbase-js/blob/main/CONTRIBUTING.md) for the development workflow. ## License diff --git a/docs/compatibility.md b/docs/compatibility.md index 05ca0ce..8d107d6 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -16,3 +16,5 @@ Every supported consumer gate installs the exact tarball produced by the CI pack | Browser execution | Chromium execution of constructors, exports, Fetch transport, authorization headers, resource serialization, and browser-only key validation | Framework fixtures use Node 24.15 because current Angular requires Node 24.15 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. + +The separate secret-gated live integration workflow installs the packed candidate and calls the read-only current-organization endpoint. It requires the `FLEETBASE_PUBLIC_KEY` repository secret for manual runs and never runs API mutations. diff --git a/fixtures/integration/package.json b/fixtures/integration/package.json new file mode 100644 index 0000000..9750cf6 --- /dev/null +++ b/fixtures/integration/package.json @@ -0,0 +1,8 @@ +{ + "name": "@fleetbase/sdk-fixture-integration", + "private": true, + "type": "module", + "scripts": { + "smoke": "node smoke.mjs" + } +} diff --git a/fixtures/integration/smoke.mjs b/fixtures/integration/smoke.mjs new file mode 100644 index 0000000..35f81a5 --- /dev/null +++ b/fixtures/integration/smoke.mjs @@ -0,0 +1,18 @@ +import Fleetbase from '@fleetbase/sdk'; + +const publicKey = process.env.FLEETBASE_PUBLIC_KEY; +const host = process.env.FLEETBASE_API_HOST ?? 'https://api.fleetbase.io'; +const namespace = process.env.FLEETBASE_API_NAMESPACE ?? 'v1'; + +if (!publicKey) { + throw new Error('FLEETBASE_PUBLIC_KEY is required.'); +} + +const client = new Fleetbase(publicKey, { host, namespace }); +const organization = await client.organizations.current({}, { signal: AbortSignal.timeout(15_000) }); + +if (!organization || typeof organization !== 'object' || !('id' in organization) || !organization.id) { + throw new Error('The current organization endpoint returned an unexpected response.'); +} + +console.log(`Live SDK smoke passed for namespace ${namespace}.`); From ee74c5829ffe05023f7591641a757ae5df1be5ea Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 22:09:08 +0800 Subject: [PATCH 11/13] ci: harden trusted release publication --- .github/workflows/release.yml | 98 ++++++++++++++++++++++++++++++----- .gitignore | 1 + CONTRIBUTING.md | 2 + docs/main-branch-migration.md | 1 + docs/releasing.md | 42 +++++++++++++++ package.json | 1 + scripts/publish.mjs | 73 ++++++++++++++++++++++++++ scripts/verify-published.mjs | 85 ++++++++++++++++++++++++++++++ 8 files changed, 290 insertions(+), 13 deletions(-) create mode 100644 docs/releasing.md create mode 100644 scripts/publish.mjs create mode 100644 scripts/verify-published.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e91d759..61cebda 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,15 +10,71 @@ concurrency: cancel-in-progress: false permissions: - contents: write - id-token: write - pull-requests: write + contents: read jobs: - release: - name: Version or publish + select-mode: + name: Select release mode + if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest + timeout-minutes: 10 + outputs: + mode: ${{ steps.select-mode.outputs.mode }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Select version, publish, or no-op + id: select-mode + uses: changesets/action/select-mode@v2 + + version: + name: Create or update release PR + if: needs.select-mode.outputs.mode == 'version' + needs: select-mode + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Create reviewed version pull request + uses: changesets/action/version@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: pnpm run version-packages + commit-message: 'chore: release packages' + pr-title: 'chore: release packages' + + publish: + name: Publish reviewed version + if: needs.select-mode.outputs.mode == 'publish' + needs: select-mode + runs-on: ubuntu-latest + timeout-minutes: 20 environment: npm + permissions: + contents: write + id-token: write steps: - uses: actions/checkout@v4 with: @@ -33,13 +89,29 @@ jobs: registry-url: https://registry.npmjs.org - run: pnpm install --frozen-lockfile - run: pnpm run verify - - name: Create release PR or publish reviewed version - uses: changesets/action@v1 - with: - publish: pnpm run release - version: pnpm run version-packages - commit: 'chore: release packages' - title: 'chore: release packages' + - name: Publish immutable candidate with provenance + run: pnpm run publish:ci env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_CONFIG_PROVENANCE: true + - name: Verify exact registry artifact + run: node scripts/verify-published.mjs + - name: Upload immutable release evidence + uses: actions/upload-artifact@v4 + with: + name: npm-release-${{ github.sha }} + path: | + artifacts/*.tgz + artifacts/SHA256SUMS + if-no-files-found: error + retention-days: 90 + - name: Create GitHub release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + version=$(node -p "require('./package.json').version") + tag="v${version}" + if gh release view "$tag" >/dev/null 2>&1; then + echo "GitHub release $tag already exists." + else + gh release create "$tag" artifacts/*.tgz artifacts/SHA256SUMS --generate-notes --target "$GITHUB_SHA" --title "$tag" + fi diff --git a/.gitignore b/.gitignore index 6afbccf..9492486 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ node_modules/ /.sass-cache /connect.lock /coverage/ +/artifacts/ /libpeerconnection.log /npm-debug.log* /testem.log diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3e2946..2923d43 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,6 +17,8 @@ Thank you for improving the Fleetbase JavaScript SDK. Pull-request tests must not depend on production Fleetbase credentials or mutable remote data. Use an injected adapter or Fetch implementation for deterministic tests. +Maintainers should follow the [release guide](./docs/releasing.md). Registry publication is restricted to the protected GitHub Actions workflow; local release validation uses `node scripts/publish.mjs --dry-run`. + ## Compatibility Existing default and named exports, constructors, stores, resources, adapter signatures, and return shapes are compatibility contracts. Call out any proposed public API change in the pull request and include runtime and type-level evidence. diff --git a/docs/main-branch-migration.md b/docs/main-branch-migration.md index ecd5677..caefa90 100644 --- a/docs/main-branch-migration.md +++ b/docs/main-branch-migration.md @@ -8,6 +8,7 @@ This is an owner-operated release step. PR #33 prepares repository files for `ma - Branch protection for `main` is configured with the `CI success` and CodeQL checks required. - The protected `npm` environment exists and permits only reviewed release runs. - npm trusted publishing is configured for `.github/workflows/release.yml` on `main`. +- GitHub Actions is allowed to create the Changesets release pull request. - Open pull requests and external automation have been inventoried for hard-coded `master` references. ## Owner procedure diff --git a/docs/releasing.md b/docs/releasing.md new file mode 100644 index 0000000..50d5380 --- /dev/null +++ b/docs/releasing.md @@ -0,0 +1,42 @@ +# Releasing the Fleetbase SDK + +Releases are owner-operated through `.github/workflows/release.yml`. Do not run a real registry publish from a developer machine. + +## Repository prerequisites + +- The default branch is `main` and its required CI and CodeQL checks are green. +- The protected `npm` GitHub environment requires maintainer review. +- npm trusted publishing authorizes `fleetbase/fleetbase-js`, workflow `release.yml`, branch `main`, and environment `npm`. +- GitHub Actions is allowed to create release pull requests. + +The workflow grants write permissions only to the job that needs them. Version pull requests receive repository and pull-request write access without an npm identity token. The publish job receives the npm identity token only after the protected environment gate. + +## Automated flow + +1. Changesets selects one of three modes: create/update a version pull request, publish an already reviewed version, or do nothing. +2. The publish job reruns the complete repository verification suite. +3. `scripts/publish.mjs` packs once, writes `artifacts/SHA256SUMS`, and publishes that exact tarball with npm provenance. +4. `scripts/verify-published.mjs` waits for registry propagation, downloads the registry tarball, compares its SHA-256 digest byte-for-byte, installs from the clean registry, and executes both ESM and CommonJS consumers. +5. GitHub retains the tarball and checksum as workflow evidence for 90 days and attaches them to the `v` release. + +If a publish job must be rerun after npm accepted the package, it continues only when the registry tarball is byte-identical to the newly packed artifact. It refuses to proceed when an existing version has different bytes. + +Prerelease versions such as `2.0.0-next.0` use the npm `next` dist-tag. Stable versions use `latest`. + +## Local validation + +Run the complete package gate, followed by the non-publishing release dry run: + +```sh +pnpm run verify +node scripts/publish.mjs --dry-run +``` + +Delete the generated ignored `artifacts/` directory after inspection. A real invocation of `scripts/publish.mjs` refuses to run outside GitHub Actions. + +## Failure and rollback + +- Before npm accepts the tarball, fix the release branch or release pull request and rerun the workflow. +- If post-publish registry verification fails, preserve the workflow artifacts and investigate before changing dist-tags. +- Never overwrite or silently replace a published version. Release a corrected version and deprecate the defective version when appropriate. +- npm unpublish and dist-tag changes are explicit owner actions outside this workflow. diff --git a/package.json b/package.json index bafb42d..5494c2a 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "changeset": "changeset", "version-packages": "changeset version", "release": "changeset publish", + "publish:ci": "node scripts/publish.mjs", "prepublishOnly": "pnpm run verify" }, "devDependencies": { diff --git a/scripts/publish.mjs b/scripts/publish.mjs new file mode 100644 index 0000000..8f9c617 --- /dev/null +++ b/scripts/publish.mjs @@ -0,0 +1,73 @@ +import { createHash } from 'node:crypto'; +import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { spawnSync } from 'node:child_process'; + +const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const artifacts = join(root, 'artifacts'); +const dryRun = process.argv.includes('--dry-run'); + +if (!dryRun && (process.env.CI !== 'true' || process.env.GITHUB_ACTIONS !== 'true')) { + throw new Error('Registry publication is restricted to GitHub Actions. Use --dry-run to validate locally.'); +} + +await mkdir(artifacts, { recursive: true }); +const existing = await readdir(artifacts); +if (existing.length > 0) { + throw new Error('The artifacts directory must be empty before publication.'); +} + +function run(command, args, options = {}) { + const result = spawnSync(command, args, { cwd: root, encoding: 'utf8', stdio: options.capture ? 'pipe' : 'inherit' }); + if (result.status !== 0) { + throw new Error(`${command} ${args.join(' ')} failed with exit code ${String(result.status)}.`); + } + return result.stdout; +} + +const packed = JSON.parse(run('npm', ['pack', '--pack-destination', artifacts, '--json'], { capture: true })); +const filename = packed[0]?.filename; +if (typeof filename !== 'string') { + throw new Error('npm pack did not report a release tarball.'); +} + +const tarball = join(artifacts, filename); +const packageJson = JSON.parse(await readFile(join(root, 'package.json'), 'utf8')); +const tag = String(packageJson.version).includes('-') ? 'next' : 'latest'; +const checksum = createHash('sha256') + .update(await readFile(tarball)) + .digest('hex'); +await writeFile(join(artifacts, 'SHA256SUMS'), `${checksum} ${filename}\n`); + +let alreadyPublished = false; +if (!dryRun) { + const registry = new URL(process.env.npm_config_registry ?? 'https://registry.npmjs.org/'); + const metadataUrl = new URL(`${encodeURIComponent(packageJson.name)}/${packageJson.version}`, registry); + const metadataResponse = await fetch(metadataUrl, { signal: AbortSignal.timeout(10_000) }); + if (metadataResponse.ok) { + const metadata = await metadataResponse.json(); + const remoteTarball = metadata?.dist?.tarball; + if (typeof remoteTarball !== 'string') { + throw new Error('Existing registry metadata did not include a tarball URL.'); + } + const remoteResponse = await fetch(remoteTarball, { signal: AbortSignal.timeout(30_000) }); + if (!remoteResponse.ok) { + throw new Error(`Existing registry tarball returned HTTP ${remoteResponse.status}.`); + } + const remoteHash = createHash('sha256') + .update(Buffer.from(await remoteResponse.arrayBuffer())) + .digest('hex'); + if (remoteHash !== checksum) { + throw new Error('The package version already exists with a different tarball checksum.'); + } + alreadyPublished = true; + } else if (metadataResponse.status !== 404) { + throw new Error(`Registry metadata check returned HTTP ${metadataResponse.status}.`); + } +} + +if (!alreadyPublished) { + run('npm', ['publish', tarball, '--access', 'public', '--provenance', '--tag', tag, ...(dryRun ? ['--dry-run'] : [])]); +} +console.log(`${dryRun ? 'Validated' : alreadyPublished ? 'Confirmed existing' : 'Published'} ${packageJson.name}@${packageJson.version} from ${filename} with dist-tag ${tag}.`); diff --git a/scripts/verify-published.mjs b/scripts/verify-published.mjs new file mode 100644 index 0000000..3fda04a --- /dev/null +++ b/scripts/verify-published.mjs @@ -0,0 +1,85 @@ +import { createHash } from 'node:crypto'; +import { mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { basename, dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { spawnSync } from 'node:child_process'; + +const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const artifacts = join(root, 'artifacts'); +const packageJson = JSON.parse(await readFile(join(root, 'package.json'), 'utf8')); +const tarballName = (await readdir(artifacts)).find((name) => name.endsWith('.tgz')); + +if (!tarballName) { + throw new Error('The locally published tarball is missing.'); +} + +const tarball = join(artifacts, tarballName); +const expectedHash = createHash('sha256') + .update(await readFile(tarball)) + .digest('hex'); +const registry = new URL(process.env.npm_config_registry ?? 'https://registry.npmjs.org/'); +const metadataUrl = new URL(`${encodeURIComponent(packageJson.name)}/${packageJson.version}`, registry); + +async function registryMetadata() { + let lastError; + for (let attempt = 1; attempt <= 6; attempt += 1) { + try { + const response = await fetch(metadataUrl, { signal: AbortSignal.timeout(10_000) }); + if (response.ok) { + return response.json(); + } + lastError = new Error(`Registry metadata returned HTTP ${response.status}.`); + } catch (error) { + lastError = error; + } + if (attempt < 6) { + await new Promise((resolveDelay) => setTimeout(resolveDelay, 10_000)); + } + } + throw new Error('The published version did not become available from the registry.', { cause: lastError }); +} + +const metadata = await registryMetadata(); +const remoteTarball = metadata?.dist?.tarball; +if (typeof remoteTarball !== 'string') { + throw new Error('Registry metadata did not include a tarball URL.'); +} + +const response = await fetch(remoteTarball, { signal: AbortSignal.timeout(30_000) }); +if (!response.ok) { + throw new Error(`Registry tarball returned HTTP ${response.status}.`); +} +const publishedHash = createHash('sha256') + .update(Buffer.from(await response.arrayBuffer())) + .digest('hex'); +if (publishedHash !== expectedHash) { + throw new Error(`Registry tarball checksum does not match ${basename(tarball)}.`); +} + +const consumer = await mkdtemp(join(tmpdir(), 'fleetbase-sdk-release-')); +try { + await writeFile(join(consumer, 'package.json'), JSON.stringify({ name: 'fleetbase-sdk-release-check', private: true, type: 'module' })); + const install = spawnSync('npm', ['install', `${packageJson.name}@${packageJson.version}`, '--ignore-scripts', '--no-package-lock', '--registry', registry.href], { + cwd: consumer, + encoding: 'utf8', + stdio: 'inherit', + }); + if (install.status !== 0) { + throw new Error(`Clean registry installation failed with exit code ${String(install.status)}.`); + } + + for (const args of [ + ['--input-type=module', '-e', `import Fleetbase from '${packageJson.name}'; if (typeof Fleetbase !== 'function') process.exit(1)`], + ['-e', `if (typeof require('${packageJson.name}').default !== 'function') process.exit(1)`], + ]) { + const runtime = spawnSync(process.execPath, args, { cwd: consumer, stdio: 'inherit' }); + if (runtime.status !== 0) { + throw new Error(`Post-publish runtime verification failed with exit code ${String(runtime.status)}.`); + } + } +} finally { + await rm(consumer, { recursive: true, force: true }); +} + +console.log(`Verified registry checksum and clean ESM/CommonJS installation for ${packageJson.name}@${packageJson.version}.`); From 7ff081eaa2006b9a2f956ee0798d222ca0ec7637 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 22:27:31 +0800 Subject: [PATCH 12/13] test: add cross-browser and mutation quality gates --- .github/workflows/ci.yml | 10 +- .github/workflows/mutation.yml | 38 + .gitignore | 2 + CONTRIBUTING.md | 2 + MODERNIZATION_PLAN.md | 20 +- README.md | 2 +- docs/compatibility.md | 20 +- docs/testing.md | 13 + eslint.config.js | 2 +- fixtures/browser/playwright.config.mjs | 6 +- fixtures/browser/tests/browser.spec.mjs | 2 +- package.json | 3 + pnpm-lock.yaml | 1284 ++++++++++++++++++++++- src/collection.ts | 2 +- stryker.config.mjs | 31 + 15 files changed, 1404 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/mutation.yml create mode 100644 docs/testing.md create mode 100644 stryker.config.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6da4a57..685e815 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [main, master, dev-v2.0.0] + branches: [main, master] pull_request: - branches: [main, master, dev-v2.0.0] + branches: [main, master] workflow_dispatch: concurrency: @@ -214,7 +214,7 @@ jobs: run: pnpm run build browser: - name: Browser / Chromium + name: Browser / Playwright engines needs: package runs-on: ubuntu-latest steps: @@ -235,9 +235,9 @@ jobs: - name: Install exact SDK candidate working-directory: fixtures/browser run: pnpm add --save-dev ../../artifacts/fleetbase-sdk.tgz - - name: Install Chromium + - name: Install browser engines working-directory: fixtures/browser - run: pnpm exec playwright install --with-deps chromium + run: pnpm exec playwright install --with-deps chromium firefox webkit - name: Build and execute browser fixture working-directory: fixtures/browser run: pnpm run build && pnpm run test:browser diff --git a/.github/workflows/mutation.yml b/.github/workflows/mutation.yml new file mode 100644 index 0000000..918b3e2 --- /dev/null +++ b/.github/workflows/mutation.yml @@ -0,0 +1,38 @@ +name: Mutation quality + +on: + workflow_dispatch: + schedule: + - cron: '41 4 * * 0' + +concurrency: + group: mutation-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + mutation: + name: Stryker / core behavior + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + run_install: false + - uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run test:mutation + - name: Upload mutation report + if: always() + uses: actions/upload-artifact@v4 + with: + name: mutation-report-${{ github.sha }} + path: reports/mutation + if-no-files-found: warn + retention-days: 30 diff --git a/.gitignore b/.gitignore index 9492486..c51f753 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,8 @@ node_modules/ /connect.lock /coverage/ /artifacts/ +/reports/mutation/ +/.stryker-tmp/ /libpeerconnection.log /npm-debug.log* /testem.log diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2923d43..d6c18a7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,6 +15,8 @@ Thank you for improving the Fleetbase JavaScript SDK. 4. Run `pnpm run verify` before opening a pull request. 5. Add a Changeset for user-visible package changes with `pnpm changeset`. +The scheduled mutation workflow runs `pnpm run test:mutation` against the core resource, store, collection, registry, resolver, and Fetch transport boundary. It enforces the reviewed baseline described in the [testing policy](./docs/testing.md). Run it locally when changing those behaviors. + Pull-request tests must not depend on production Fleetbase credentials or mutable remote data. Use an injected adapter or Fetch implementation for deterministic tests. Maintainers should follow the [release guide](./docs/releasing.md). Registry publication is restricted to the protected GitHub Actions workflow; local release validation uses `node scripts/publish.mjs --dry-run`. diff --git a/MODERNIZATION_PLAN.md b/MODERNIZATION_PLAN.md index c5d080d..484e38f 100644 --- a/MODERNIZATION_PLAN.md +++ b/MODERNIZATION_PLAN.md @@ -308,18 +308,18 @@ Every PR description must include: public API effect, compatibility evidence, te ## Release approval checklist -- [ ] v1.2.13 and v1.2.14 candidate contracts are captured and reviewed. -- [ ] All maintained source is at 100% lines/statements/functions/branches. -- [ ] Mutation-testing results for core modules are reviewed. -- [ ] ESM, CommonJS, and TypeScript consumers pass from the packed tarball. -- [ ] Required runtime/framework/bundler/package-manager matrix is green. -- [ ] Publint and Are The Types Wrong report no release-blocking defects. -- [ ] Package content and size budgets pass; no secrets or internal-only files are present. -- [ ] API report contains no unapproved changes. +- [x] v1.2.13 and v1.2.14 candidate contracts are captured and reviewed. +- [x] All maintained source is at 100% lines/statements/functions/branches. +- [x] Mutation-testing results for core modules are reviewed. +- [x] ESM, CommonJS, and TypeScript consumers pass from the packed tarball. +- [x] Required runtime/framework/bundler/package-manager matrix is green. +- [x] Publint and Are The Types Wrong report no release-blocking defects. +- [x] Package content and size budgets pass; no secrets or internal-only files are present. +- [x] API report contains no unapproved changes. - [ ] Full CI passes on the release commit with frozen dependencies. -- [ ] Release workflow dry run proves one immutable artifact is used throughout. +- [x] Release workflow dry run proves one immutable artifact is used throughout. - [ ] npm trusted publishing, protected environment, and provenance are configured. -- [ ] Migration guide, changelog, support policy, deprecations, and rollback steps are published. +- [x] Migration guide, changelog, support policy, deprecations, and rollback steps are published. - [ ] First-party Fleetbase consumers pass against the release candidate. - [ ] Post-publish verification and provenance checks pass before `latest` promotion. diff --git a/README.md b/README.md index e053713..0186cc6 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ The npm package contains: Every release candidate is checked with Publint, Are The Types Wrong, packed-tarball content and size assertions, ESM/CommonJS export parity, strict TypeScript, cross-platform smoke tests, and 100% statement, branch, function, and line coverage. -Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Angular, Ember, Next.js (client and server), Nuxt (client and server), Expo web/React Native Android, and an edge-runtime VM. A Chromium gate also executes SDK construction, Fetch transport, resource serialization, authorization headers, and browser-only key validation. See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix. +Production-build fixtures verify the exact candidate tarball with Vite, webpack, esbuild, React, Vue, Svelte, Angular, Ember, Next.js (client and server), Nuxt (client and server), Expo web/React Native Android, and an edge-runtime VM. Chromium, Firefox, and WebKit gates also execute SDK construction, Fetch transport, resource serialization, authorization headers, and browser-only key validation. See the [compatibility policy](./docs/compatibility.md) for the release-blocking matrix. ## Development diff --git a/docs/compatibility.md b/docs/compatibility.md index 8d107d6..b6ad8d8 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -4,16 +4,16 @@ Every supported consumer gate installs the exact tarball produced by the CI pack ## Release-blocking coverage -| Dimension | Verified targets | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | -| Modules | native ESM and true CommonJS | -| TypeScript | strict Node16, NodeNext, and bundler resolution | -| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | -| Bundlers | Vite 8, webpack 5, esbuild, Angular build, Ember's Embroider/Vite pipeline, and Expo Metro | -| Frameworks | React 19, Vue 3, Svelte 5, Angular 22, Ember 7, Next.js 16 client/server, Nuxt 4 client/server, and Expo 57 web/React Native Android | -| Edge | bundled SDK execution in Edge Runtime VM 5 | -| Browser execution | Chromium execution of constructors, exports, Fetch transport, authorization headers, resource serialization, and browser-only key validation | +| Dimension | Verified targets | +| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Node.js | 22.13 minimum and current 24; Linux, macOS, and Windows | +| Modules | native ESM and true CommonJS | +| TypeScript | strict Node16, NodeNext, and bundler resolution | +| Package managers | npm, pnpm 11, Yarn 4, and Bun 1 | +| Bundlers | Vite 8, webpack 5, esbuild, Angular build, Ember's Embroider/Vite pipeline, and Expo Metro | +| Frameworks | React 19, Vue 3, Svelte 5, Angular 22, Ember 7, Next.js 16 client/server, Nuxt 4 client/server, and Expo 57 web/React Native Android | +| Edge | bundled SDK execution in Edge Runtime VM 5 | +| Browser execution | Chromium, Firefox, and WebKit execution of constructors, exports, Fetch transport, authorization headers, resource serialization, and browser-only key validation | Framework fixtures use Node 24.15 because current Angular requires Node 24.15 or newer. This does not change the SDK's separately tested Node 22.13 runtime floor. diff --git a/docs/testing.md b/docs/testing.md new file mode 100644 index 0000000..5ef36c3 --- /dev/null +++ b/docs/testing.md @@ -0,0 +1,13 @@ +# Testing policy + +The release-blocking Vitest suite exercises the complete maintained source boundary and enforces 100% statements, branches, functions, and lines. Tests assert successful behavior, compatibility behavior, and failure paths; generated declarations and build output do not count toward source coverage. + +## Mutation quality + +The scheduled Stryker workflow is an additional assertion-quality signal. Its explicit boundary is the SDK's core adapter, Fetch transport, collection, registry, resolver, resource, store-action, and store behavior. Platform wrappers are covered by exact-package runtime fixtures, while the legacy inflection tables and declarative resource catalog are covered by contract tests and are not used to inflate or dilute the core mutation score. + +The initial all-source baseline generated 1,761 mutants: 1,183 killed, 562 survived, 3 timed out, and 13 had no coverage. Survivor review found that legacy string literals and regular-expression alternatives in the inflection tables, plus declarative resource names and action paths, accounted for most survivors. Core survivors were concentrated in conditional alternatives, returned object shapes, and Fetch option composition. + +The reviewed core baseline generated 634 mutants: 480 killed, 143 survived, 3 timed out, and 8 had no coverage, for a 76.18% mutation score. The largest remaining groups are conditional alternatives in the Fetch transport and resource state paths; the complete per-mutant report is retained by CI. + +The core boundary has a release floor of 76%. This is a ratchet, not a target: changes must not lower the score, equivalent mutants must be explained in review, and broadly disabling mutators is not allowed. Scheduled reports retain per-mutant evidence for 30 days so the floor can be raised as stronger assertions are added. diff --git a/eslint.config.js b/eslint.config.js index ebd0e51..5f942f5 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -3,7 +3,7 @@ import globals from 'globals'; import tseslint from 'typescript-eslint'; export default tseslint.config( - { ignores: ['coverage/**', 'dist/**', '.types/**', 'fixtures/**'] }, + { ignores: ['coverage/**', 'dist/**', '.types/**', '.stryker-tmp/**', 'reports/**', 'fixtures/**'] }, eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked.map((config) => ({ ...config, diff --git a/fixtures/browser/playwright.config.mjs b/fixtures/browser/playwright.config.mjs index 6955bce..c95bf52 100644 --- a/fixtures/browser/playwright.config.mjs +++ b/fixtures/browser/playwright.config.mjs @@ -1,10 +1,14 @@ import { defineConfig } from '@playwright/test'; export default defineConfig({ + projects: [ + { name: 'chromium', use: { browserName: 'chromium' } }, + { name: 'firefox', use: { browserName: 'firefox' } }, + { name: 'webkit', use: { browserName: 'webkit' } }, + ], testDir: './tests', use: { baseURL: 'http://127.0.0.1:4173', - browserName: 'chromium', }, webServer: { command: 'node_modules/.bin/vite preview --host 127.0.0.1 --port 4173', diff --git a/fixtures/browser/tests/browser.spec.mjs b/fixtures/browser/tests/browser.spec.mjs index 671c10c..f04ab9a 100644 --- a/fixtures/browser/tests/browser.spec.mjs +++ b/fixtures/browser/tests/browser.spec.mjs @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; -test('executes the packed SDK contract in Chromium', async ({ page }) => { +test('executes the packed SDK contract in a supported browser', async ({ page }) => { await page.goto('/'); await expect(page.getByTestId('sdk-status')).toHaveText('passed'); }); diff --git a/package.json b/package.json index 5494c2a..ee79d2b 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit", "test": "vitest run", "test:coverage": "vitest run --coverage", + "test:mutation": "stryker run", "package:check": "publint && attw --pack . && node scripts/verify-package.mjs", "verify": "pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm run test:coverage && pnpm run build && pnpm run package:check", "changeset": "changeset", @@ -77,6 +78,8 @@ "@changesets/cli": "^3.0.1", "@eslint/js": "^10.0.0", "@rollup/plugin-typescript": "^12.3.0", + "@stryker-mutator/core": "10.0.0", + "@stryker-mutator/vitest-runner": "10.0.0", "@vitest/coverage-v8": "^4.1.11", "eslint": "^10.0.0", "globals": "^16.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1103cd4..9370509 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,12 @@ importers: '@rollup/plugin-typescript': specifier: ^12.3.0 version: 12.3.0(rollup@4.63.1)(tslib@2.8.1)(typescript@6.0.3) + '@stryker-mutator/core': + specifier: 10.0.0 + version: 10.0.0 + '@stryker-mutator/vitest-runner': + specifier: 10.0.0 + version: 10.0.0(@stryker-mutator/core@10.0.0)(vitest@4.1.11) '@vitest/coverage-v8': specifier: ^4.1.11 version: 4.1.11(vitest@4.1.11) @@ -78,10 +84,78 @@ packages: resolution: { integrity: sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw== } engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/compat-data@8.0.0': + resolution: { integrity: sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/core@8.0.1': + resolution: { integrity: sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/generator@8.0.0': + resolution: { integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-annotate-as-pure@8.0.0': + resolution: { integrity: sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-compilation-targets@8.0.0': + resolution: { integrity: sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-create-class-features-plugin@8.0.1': + resolution: { integrity: sha512-++t3ZktzlLmASAxIlxeXQK9Z2YwUafYGYcvGBFevqOqt16HozVHStUoQvWD09fzAZOb/uJGpUTBuGK41AJAuOA== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/helper-globals@8.0.0': + resolution: { integrity: sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-member-expression-to-functions@8.0.0': + resolution: { integrity: sha512-xkXrMbtk87Gk7+oKBVmBc6EORg/Qwx++AHESldmHkpvG8wgccdhJJFwrzqlF382Fk8wfXhJHWE/g/43QvEGNPQ== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-module-imports@8.0.0': + resolution: { integrity: sha512-NZ7mSS93o4ndX4KrbD7W8Sf3QT8Qe24PrnFyUcuOPDzK6faqDFKjY9RG7he7+I7FdiQ4llpnosFqzrXa+Vy3Ew== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-module-transforms@8.0.1': + resolution: { integrity: sha512-UgAhl1kqiW5ciE0yCXqqvnb4H2n3IELJ7lIIQRezwDPilPEZX5i+Rvbja9MFTkwUn2biEiSMeV31aUzR4Lwakw== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/helper-optimise-call-expression@8.0.0': + resolution: { integrity: sha512-3W6satvtPuCUkUx63S2jMoW9EQNYkADgs1HTfufmL7gCmAulHMKupA/12WNz4A0GMMFn/YnWWwqOT9IZrJHQjg== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helper-plugin-utils@8.0.1': + resolution: { integrity: sha512-3PKFgjTyPlhFhorfP+SjKQxLViIL++zWjFOO4hGriYU+Bsm983DxEM1JmDRJVWXV0O9npu+xXRqz7Pbd3mh70g== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/helper-replace-supers@8.0.1': + resolution: { integrity: sha512-B1SZADIcy3tmH8CmWvj4SHi/oAPom4UL3uknTc2QRNsPVLFk/sPnZvQL/8kj7Y5omvjMqie0vklvs6XM4OLW5Q== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@8.0.0': + resolution: { integrity: sha512-xmCA9kP3IhySsqhzwIdWGlDN/1A4cCKNBO/uwZx/3YzmDoMePwno2Q5/Bq0q+tYaKbeF940YiKV/kaW8Mzvpjw== } + engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/helper-string-parser@7.29.7': resolution: { integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== } engines: { node: '>=6.9.0' } + '@babel/helper-string-parser@8.0.0': + resolution: { integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg== } + engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/helper-validator-identifier@7.29.7': resolution: { integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== } engines: { node: '>=6.9.0' } @@ -90,15 +164,124 @@ packages: resolution: { integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg== } engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/helper-validator-option@8.0.0': + resolution: { integrity: sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/helpers@8.0.0': + resolution: { integrity: sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg== } + engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/parser@7.29.8': resolution: { integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA== } engines: { node: '>=6.0.0' } hasBin: true + '@babel/parser@8.0.4': + resolution: { integrity: sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g== } + engines: { node: ^22.18.0 || >=24.11.0 } + hasBin: true + + '@babel/plugin-proposal-decorators@8.0.2': + resolution: { integrity: sha512-+C6O6KKXU7BBq1GNaIkFJxrALUVGRcr+WeWm4OcuRl3h+l/CmNfcTLMrT2Lm3uvGBimBH/8pEBRrXJFLoO67Gg== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-syntax-decorators@8.0.1': + resolution: { integrity: sha512-NI+0S/6MvR6GlcQFwjDZ+WIc2qvG6TXN534lYs9llNldwW4b7Dh6KTtk030FA0xWdYGs4t1lWo+OEWN8wGB+Nw== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-syntax-jsx@8.0.1': + resolution: { integrity: sha512-n0jtCOxEovhU7METqSQjcZO9pX53nu9uNIjMS+hEt+Nt9jA7oOZoBIgbCxhhASmF6T6rPDGge5UAvh6Z4eFz/g== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-syntax-typescript@8.0.3': + resolution: { integrity: sha512-jmTPwps7oSQSZaV1SxkQ3C12UWyufGysGc5OzDpZzvPAIX4mO7dJT3hoqkWVrSImvkcMiknir1iLN1SNV/CZzg== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-destructuring@8.0.1': + resolution: { integrity: sha512-RtR8uLDl0QcCmqMNIkM8gmDeYZ3rS0ZH+sa+I6sfc09yFoqfp9AEPgBstq9KyfVb0lFCVSRFfJXCI70FIl5ccw== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-explicit-resource-management@8.0.1': + resolution: { integrity: sha512-VzDIYwBlLCpV6mJfloRdJm8HmYnMqs7O+bGha8yfg2kP7jAdxeCw6yZBVBeaKKQUThtSU52iy+3lB7DhYsbOBA== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-modules-commonjs@8.0.1': + resolution: { integrity: sha512-PMuzulWrrzFNmY3lXSk/tV9NRb7y0eZZLJY4UEo2TKszroxvUZHAPPi+T9FDyrQhod+TQA+t+8/QYaaMpiEuhA== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-react-display-name@8.0.1': + resolution: { integrity: sha512-soLishXlkyu6jcICPyO3HEP7A3GCzKEnn7XfvYrImuWEOwFAz93qShmWSYPf5ww0ZkO4By0zsN2bVIDF54fSdA== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-react-jsx-development@8.0.1': + resolution: { integrity: sha512-Hb+HUZpV9KFHjm+F+P3aLDMi8QXU9l3ROCQv20z18Me2sGyW5nNNR5YTevNlgHvCpFek3BnAwhDGq/BRndXViw== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-react-jsx@8.0.1': + resolution: { integrity: sha512-NgkoF7Uq+30TmOPDdNUimT0Nta02uVjqJRFNlVWKrbOCu/CkzfHa4aMnIs0lMpkMmZmWA1e42Va+F04i/pY1zw== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-react-pure-annotations@8.0.1': + resolution: { integrity: sha512-7/8UwU8hoPBurXa9tUiTTC8aACTRy5tCqLUtqikHp2eGiWoEB57AduOdbQ71OOMTEvawKrGhv3WfzkDpI+/oSg== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/plugin-transform-typescript@8.0.1': + resolution: { integrity: sha512-0Svqp3413Eg0GElldykF/T7SNsxQO5YVGD70fZyAdZTnX8WRgcopmbiU7GTa5xY5ZnJcEpNbfns8/GjX+/1yeA== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/preset-react@8.0.1': + resolution: { integrity: sha512-jrFuPp/pTddFZbtmWhdLNAYc6UMcpboeUPnw0BBrm4nOmcAko/1TRcFi1PzWCeOFRU+VaSiKmat87W1HvR7mIg== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/preset-typescript@8.0.1': + resolution: { integrity: sha512-qrPhQIN1NLrPmzgazF9XKQqXrOcp/WJly+K+6ReFonn24FZqRJO7clxOJo6Ni75L+2vAqI3cHVU2OJLBxoPp5A== } + engines: { node: ^22.18.0 || >=24.11.0 } + peerDependencies: + '@babel/core': ^8.0.0 + + '@babel/template@8.0.0': + resolution: { integrity: sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ== } + engines: { node: ^22.18.0 || >=24.11.0 } + + '@babel/traverse@8.0.4': + resolution: { integrity: sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg== } + engines: { node: ^22.18.0 || >=24.11.0 } + '@babel/types@7.29.8': resolution: { integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== } engines: { node: '>=6.9.0' } + '@babel/types@8.0.4': + resolution: { integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g== } + engines: { node: ^22.18.0 || >=24.11.0 } + '@bcoe/v8-coverage@1.0.2': resolution: { integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== } engines: { node: '>=18' } @@ -238,6 +421,143 @@ packages: resolution: { integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== } engines: { node: '>=18.18' } + '@inquirer/ansi@2.0.7': + resolution: { integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + + '@inquirer/checkbox@5.2.3': + resolution: { integrity: sha512-XEYX2WA8SBkLPczL6/yXPHLPCvDoptmh9v56Cy05BSV1Smk1vWy19bTC4qJBuIffw7+6l4CcaYYzGqG60RfW1g== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.3.0': + resolution: { integrity: sha512-pZHXJImFtERmSNMBHcjwuz8Ck5vEFEYNUZnwbb8aJpjHv/TwGuFErNxF2Hp8+V+pNJs2EYPMlyWscvFEqO9jOQ== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@12.0.1': + resolution: { integrity: sha512-JMD5Jy/ScL5TZE18m83Nw25HjqGFLoWXwnEkW7IdwwAhZpB9Bus55/WU7zn3UqR1MOCjjTQOIYpiD4vjWA3LPw== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.3.1': + resolution: { integrity: sha512-y43COoyVUjPWIobn2Qep/uI1drPS78aaZZZ9kVi94Tyu/GuW2N8d8Q4rifJXGAXCEAXCPTTMjD8gC1HyvM5ukA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.1.3': + resolution: { integrity: sha512-3NQJiXNJ/aj9wiAsr7pECdp5Qe9J0X9YUJCKsaFXS+ddOxfL6J4AIl3w3T4Gq3kK0WsQY5GMoDokK5X94m6lHw== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@3.0.4': + resolution: { integrity: sha512-tZbbaK2ovq6vlrRBNQvjrypmrED/p5x2ncIHQ79cD55tei3dD96v5glMMA+6tiq7K104i/25DVYKWVPJuV6ptA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.8': + resolution: { integrity: sha512-tApbon79GM9ry56ja/Ud3SY2CL4TQsao9fIwDQbgTeNY55025GdMzQ2+UdegV/lx51VNGUB59M0v0nMpybYY4Q== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + + '@inquirer/input@5.1.4': + resolution: { integrity: sha512-3xQkQrOvgOzpSN2ciTVdRDlg1FWMCA8l+0KfB6SNlILoTCGzJTzO/gc0Rwjcb3usuGyKdaGtI6OiyMdeMeLWkg== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.2.1': + resolution: { integrity: sha512-5KaqwZNLRpUuWcoCrYghPP9TMaXL5v2Sk4xqePM7RCVegcJStoXdWibio60YIC1bec+z1fCyb67N6XPJIkZtGA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.2.0': + resolution: { integrity: sha512-CvVcW09emkBESEOW+4R8CjLNkP3fB3XrjeL8CDvfpjgrJN+V9oerXmJAXXM3l+4xqYPD5Yaujzy/Ph0PLOdDuA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.7.0': + resolution: { integrity: sha512-yQwBMYvpJ6jqrXtKiOwRD5XezjJoyt3VQvIyjsr5Arqb519nfIohOQymWVJ8/vEgg8xtZerrCsqlSaqt/LPC9A== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.3.3': + resolution: { integrity: sha512-Mu7WrtmDLaXBDEyrRLS70SZgX9ZSm4Up1w0ZxiH8C1OOp9oaVCn2k8q3QGgmlnhsKYUhuaU3zFWhAP6wxkVIMA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.3.1': + resolution: { integrity: sha512-0VWOvsHWI0rPj6CG70MoP4oXNCB6adcyN8bVFZXnh11eLDdPIK2f2XCmva78acPPDfJisfab7qNakwBh7hdBXw== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.2.3': + resolution: { integrity: sha512-KuRTodDa6xBXX2noIpjuitpX/QT7Sfav7dIZ/OfUY54Hxg95nrGoshSzxx6Ey7qqLbImKdiGkSDt7KjPXjQgmA== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@4.1.0': + resolution: { integrity: sha512-FMiJpuHUG3Dk0ex+UIXkre7i+i4OcwHWk9YdcVtZHFwb/r2rnrU2ipTCNAB7A+QOP0ryzIcqOfy76fRyyvOEAw== } + engines: { node: '>=23.5.0 || ^22.13.0 || ^20.17.0' } + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + resolution: { integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== } + '@jridgewell/gen-mapping@0.3.8': resolution: { integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== } engines: { node: '>=6.0.0' } @@ -560,13 +880,43 @@ packages: cpu: [x64] os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: { integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== } + '@sindresorhus/is@4.6.0': resolution: { integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== } engines: { node: '>=10' } + '@sindresorhus/merge-streams@4.0.0': + resolution: { integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== } + engines: { node: '>=18' } + '@standard-schema/spec@1.1.0': resolution: { integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== } + '@stryker-mutator/api@10.0.0': + resolution: { integrity: sha512-ZtAJ0ZT3MVRCWJTBE2h90XB/6E+4lifHYtcTyNG6nU2nLekPgTo4gD5esjX6Okxo1b/JB4jJzyxYB54fwKAoJw== } + engines: { node: '>=22.0.0' } + + '@stryker-mutator/core@10.0.0': + resolution: { integrity: sha512-ZvMsRyaXQQ5e6Thcid9pkuODv6Fn9E3nrBQJUap+hcJuGJ4unm26afo3m6YKSjn8kinyxJ/3TXf0cTWRDaTxVw== } + engines: { node: '>=22.0.0' } + hasBin: true + + '@stryker-mutator/instrumenter@10.0.0': + resolution: { integrity: sha512-B7Wmn1KlEWyFeOz6D6oGvQGRfi5Xw3VemG6dEKvFQp4qLvxD9Mf4kcZghfxffgnYwXd3bFgqXsJ+ZGlhdfIOrQ== } + engines: { node: '>=22.0.0' } + + '@stryker-mutator/util@10.0.0': + resolution: { integrity: sha512-LzOpHiJaCp2ABQgnPMlrQQcsK43bd5Vo/2FGL78aN62yDoeRQ+4j3tzeuXxK5OAHdC3fUz6TDoy4IsoAuLAd3w== } + + '@stryker-mutator/vitest-runner@10.0.0': + resolution: { integrity: sha512-SHK2/vfvRUpiz7jXPnQMBnr6zLdm69DK03Mo5mPhaZWcRSygrKUqYsPqWsXsK+5ySHzlMTfCyFK5NQ/X9sJFFw== } + engines: { node: '>=22.0.0' } + peerDependencies: + '@stryker-mutator/core': 10.0.0 + vitest: '>=2.0.0' + '@types/chai@5.2.3': resolution: { integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== } @@ -582,6 +932,12 @@ packages: '@types/estree@1.0.9': resolution: { integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== } + '@types/gensync@1.0.5': + resolution: { integrity: sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg== } + + '@types/jsesc@2.5.1': + resolution: { integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw== } + '@types/json-schema@7.0.15': resolution: { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } @@ -695,6 +1051,13 @@ packages: ajv@6.15.0: resolution: { integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== } + ajv@8.20.0: + resolution: { integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== } + + angular-html-parser@10.11.0: + resolution: { integrity: sha512-3vERzJ65UFDr3C7uozLJwsNcQS3FS784dSh583oDgDTTZMgXe3/pdyXgKndxiP5R2lvYRfW6gSl145Hnyf2OFA== } + engines: { node: '>= 14' } + ansi-escapes@7.3.0: resolution: { integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== } engines: { node: '>=18' } @@ -725,10 +1088,20 @@ packages: resolution: { integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== } engines: { node: 18 || 20 || >=22 } + baseline-browser-mapping@2.11.20: + resolution: { integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw== } + engines: { node: '>=6.0.0' } + hasBin: true + brace-expansion@5.0.9: resolution: { integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg== } engines: { node: 20 || >=22 } + browserslist@4.28.8: + resolution: { integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA== } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + buffer-from@1.1.2: resolution: { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } @@ -736,6 +1109,17 @@ packages: resolution: { integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ== } engines: { node: '>=20.19.0' } + call-bind-apply-helpers@1.0.2: + resolution: { integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== } + engines: { node: '>= 0.4' } + + call-bound@1.0.4: + resolution: { integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== } + engines: { node: '>= 0.4' } + + caniuse-lite@1.0.30001810: + resolution: { integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg== } + chai@6.2.2: resolution: { integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== } engines: { node: '>=18' } @@ -752,6 +1136,9 @@ packages: resolution: { integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== } engines: { node: '>=10' } + chardet@2.2.0: + resolution: { integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA== } + cjs-module-lexer@1.4.3: resolution: { integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== } @@ -764,6 +1151,10 @@ packages: resolution: { integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== } engines: { node: 10.* || >= 12.* } + cli-width@4.1.0: + resolution: { integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== } + engines: { node: '>= 12' } + cliui@7.0.4: resolution: { integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== } @@ -778,6 +1169,10 @@ packages: resolution: { integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== } engines: { node: '>=14' } + commander@14.0.3: + resolution: { integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== } + engines: { node: '>=20' } + commander@2.20.3: resolution: { integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== } @@ -809,23 +1204,55 @@ packages: deep-is@0.1.4: resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } + des.js@1.1.0: + resolution: { integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== } + detect-libc@2.1.2: resolution: { integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== } engines: { node: '>=8' } + diff-match-patch@1.0.5: + resolution: { integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== } + + dunder-proto@1.0.1: + resolution: { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: '>= 0.4' } + + electron-to-chromium@1.5.416: + resolution: { integrity: sha512-K6bvB2BjnNrugtIih6ewlbBI9DXa976jIdiIlRLHhBoEI9a4JaQjjHyF+A1IQI543aQYR4LnmOrT/K5fZj0aPA== } + + emoji-regex@10.6.0: + resolution: { integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== } + emoji-regex@8.0.0: resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } emojilib@2.4.0: resolution: { integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== } + empathic@2.0.1: + resolution: { integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q== } + engines: { node: '>=14' } + environment@1.1.0: resolution: { integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== } engines: { node: '>=18' } + es-define-property@1.0.1: + resolution: { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } + engines: { node: '>= 0.4' } + + es-errors@1.3.0: + resolution: { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: '>= 0.4' } + es-module-lexer@2.3.2: resolution: { integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== } + es-object-atoms@1.1.2: + resolution: { integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== } + engines: { node: '>= 0.4' } + escalade@3.2.0: resolution: { integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== } engines: { node: '>=6' } @@ -882,6 +1309,10 @@ packages: resolution: { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } engines: { node: '>=0.10.0' } + execa@9.6.1: + resolution: { integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== } + engines: { node: ^18.19.0 || >=20.5.0 } + expect-type@1.4.0: resolution: { integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA== } engines: { node: '>=12.0.0' } @@ -901,6 +1332,9 @@ packages: fast-string-width@3.0.2: resolution: { integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== } + fast-uri@3.1.6: + resolution: { integrity: sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q== } + fast-wrap-ansi@0.2.2: resolution: { integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q== } @@ -916,6 +1350,10 @@ packages: fflate@0.8.3: resolution: { integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA== } + figures@6.1.0: + resolution: { integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== } + engines: { node: '>=18' } + file-entry-cache@8.0.0: resolution: { integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== } engines: { node: '>=16.0.0' } @@ -939,10 +1377,26 @@ packages: function-bind@1.1.2: resolution: { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } + gensync@1.0.0-beta.2: + resolution: { integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== } + engines: { node: '>=6.9.0' } + get-caller-file@2.0.5: resolution: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } engines: { node: 6.* || 8.* || >= 10.* } + get-intrinsic@1.3.0: + resolution: { integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== } + engines: { node: '>= 0.4' } + + get-proto@1.0.1: + resolution: { integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== } + engines: { node: '>= 0.4' } + + get-stream@9.0.1: + resolution: { integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== } + engines: { node: '>=18' } + glob-parent@6.0.2: resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } engines: { node: '>=10.13.0' } @@ -951,10 +1405,18 @@ packages: resolution: { integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== } engines: { node: '>=18' } + gopd@1.2.0: + resolution: { integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== } + engines: { node: '>= 0.4' } + has-flag@4.0.0: resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } engines: { node: '>=8' } + has-symbols@1.1.0: + resolution: { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } + engines: { node: '>= 0.4' } + hasown@2.0.2: resolution: { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } engines: { node: '>= 0.4' } @@ -969,6 +1431,14 @@ packages: resolution: { integrity: sha512-zPGsiS+dWoTZtZ4AtpA9Y+BdSFSNWvnouNlWNoUFyAM6xHOHmdCvqO3k8AIbdamCOv4gUFUVNPf6rJFfc4UiJw== } hasBin: true + human-signals@8.0.1: + resolution: { integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== } + engines: { node: '>=18.18.0' } + + iconv-lite@0.7.3: + resolution: { integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ== } + engines: { node: '>=0.10.0' } + ignore@5.3.2: resolution: { integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== } engines: { node: '>= 4' } @@ -984,6 +1454,9 @@ packages: resolution: { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== } engines: { node: '>=0.8.19' } + inherits@2.0.4: + resolution: { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + is-core-module@2.16.1: resolution: { integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== } engines: { node: '>= 0.4' } @@ -1000,6 +1473,18 @@ packages: resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } engines: { node: '>=0.10.0' } + is-plain-obj@4.1.0: + resolution: { integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== } + engines: { node: '>=12' } + + is-stream@4.0.1: + resolution: { integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== } + engines: { node: '>=18' } + + is-unicode-supported@2.1.0: + resolution: { integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== } + engines: { node: '>=18' } + isexe@2.0.0: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } @@ -1018,18 +1503,37 @@ packages: jju@1.4.0: resolution: { integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== } + js-md4@0.3.2: + resolution: { integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA== } + js-tokens@10.0.0: resolution: { integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q== } + jsesc@3.1.0: + resolution: { integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== } + engines: { node: '>=6' } + hasBin: true + json-buffer@3.0.1: resolution: { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } + json-rpc-2.0@1.8.0: + resolution: { integrity: sha512-4nw+XlJbk5XokA7BtqHGu+0PEiUPfAkRzXXd1Cgjy1c3F2UI/3Gy7yr76wyJEv3X1F1SRGGF8xPAPPhelBiGmA== } + json-schema-traverse@0.4.1: resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } + json-schema-traverse@1.0.0: + resolution: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } + json-stable-stringify-without-jsonify@1.0.1: resolution: { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } + json5@2.2.3: + resolution: { integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== } + engines: { node: '>=6' } + hasBin: true + jsonc-parser@3.3.1: resolution: { integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== } @@ -1121,6 +1625,9 @@ packages: resolution: { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } engines: { node: '>=10' } + lodash.groupby@4.6.0: + resolution: { integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== } + lru-cache@11.5.2: resolution: { integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g== } engines: { node: 20 || >=22 } @@ -1146,6 +1653,13 @@ packages: engines: { node: '>= 16' } hasBin: true + math-intrinsics@1.1.0: + resolution: { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: '>= 0.4' } + + minimalistic-assert@1.0.1: + resolution: { integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== } + minimatch@10.2.6: resolution: { integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== } engines: { node: 18 || 20 || >=22 } @@ -1157,6 +1671,23 @@ packages: ms@2.1.3: resolution: { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } + mutation-server-protocol@0.4.1: + resolution: { integrity: sha512-SBGK0j8hLDne7bktgThKI8kGvGTx3rY3LAeQTmOKZ5bVnL/7TorLMvcVF7dIPJCu5RNUWhkkuF53kurygYVt3g== } + engines: { node: '>=18' } + + mutation-testing-elements@3.8.4: + resolution: { integrity: sha512-5CF1SNa7at5ZH33vEr+21wNebTSrtNIVvnzaUlxortHajOrIPaSLczIWvg6sI/fsExekQ7jookwf2cHftkckqQ== } + + mutation-testing-metrics@3.8.4: + resolution: { integrity: sha512-DZcmndJBH6nrNs3tpiB3OcMVq9KkG2cHCpJSnDxSxPwi9qrafRmoec40xjhkbzOoX1n7/4UkDqg5tIj4A6nvCw== } + + mutation-testing-report-schema@3.8.4: + resolution: { integrity: sha512-s4G71R6Lt/PpZ0cqeglIcgyBdzLM8E+SeCHZAPg1wkSsPtRBa4XfPzAozYKdiJk/TLbNEEb7En9t0/bveuPuxA== } + + mute-stream@3.0.0: + resolution: { integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== } + engines: { node: ^20.17.0 || >=22.9.0 } + mz@2.7.0: resolution: { integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== } @@ -1172,10 +1703,22 @@ packages: resolution: { integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== } engines: { node: '>=18' } + node-releases@2.0.54: + resolution: { integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ== } + engines: { node: '>=18' } + + npm-run-path@6.0.0: + resolution: { integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== } + engines: { node: '>=18' } + object-assign@4.1.1: resolution: { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== } engines: { node: '>=0.10.0' } + object-inspect@1.13.4: + resolution: { integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== } + engines: { node: '>= 0.4' } + obug@2.1.4: resolution: { integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA== } engines: { node: '>=12.20.0' } @@ -1195,6 +1738,10 @@ packages: package-manager-detector@1.8.0: resolution: { integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A== } + parse-ms@4.0.0: + resolution: { integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== } + engines: { node: '>=18' } + parse5-htmlparser2-tree-adapter@6.0.1: resolution: { integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== } @@ -1212,6 +1759,10 @@ packages: resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } engines: { node: '>=8' } + path-key@4.0.0: + resolution: { integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== } + engines: { node: '>=12' } + path-parse@1.0.7: resolution: { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } @@ -1238,6 +1789,14 @@ packages: engines: { node: '>=14' } hasBin: true + pretty-ms@9.3.1: + resolution: { integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA== } + engines: { node: '>=18' } + + progress@2.0.3: + resolution: { integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== } + engines: { node: '>=0.4.0' } + publint@0.3.24: resolution: { integrity: sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw== } engines: { node: '>=18' } @@ -1247,10 +1806,18 @@ packages: resolution: { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== } engines: { node: '>=6' } + qs@6.15.1: + resolution: { integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== } + engines: { node: '>=0.6' } + require-directory@2.1.1: resolution: { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== } engines: { node: '>=0.10.0' } + require-from-string@2.0.2: + resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } + engines: { node: '>=0.10.0' } + resolve@1.22.10: resolution: { integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== } engines: { node: '>= 0.4' } @@ -1277,10 +1844,16 @@ packages: engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true + rxjs@7.8.2: + resolution: { integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== } + sade@1.8.1: resolution: { integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== } engines: { node: '>=6' } + safer-buffer@2.1.2: + resolution: { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } + semver@7.8.5: resolution: { integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== } engines: { node: '>=10' } @@ -1298,9 +1871,29 @@ packages: resolution: { integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA== } engines: { node: '>= 0.4' } + side-channel-list@1.0.1: + resolution: { integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== } + engines: { node: '>= 0.4' } + + side-channel-map@1.0.1: + resolution: { integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== } + engines: { node: '>= 0.4' } + + side-channel-weakmap@1.0.2: + resolution: { integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== } + engines: { node: '>= 0.4' } + + side-channel@1.1.1: + resolution: { integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== } + engines: { node: '>= 0.4' } + siginfo@2.0.0: resolution: { integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== } + signal-exit@4.1.0: + resolution: { integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== } + engines: { node: '>=14' } + sisteransi@1.0.5: resolution: { integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== } @@ -1319,6 +1912,10 @@ packages: resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } engines: { node: '>=0.10.0' } + source-map@0.7.6: + resolution: { integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== } + engines: { node: '>= 12' } + stackback@0.0.2: resolution: { integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== } @@ -1333,6 +1930,10 @@ packages: resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } engines: { node: '>=8' } + strip-final-newline@4.0.0: + resolution: { integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== } + engines: { node: '>=18' } + supports-color@7.2.0: resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } engines: { node: '>=8' } @@ -1376,6 +1977,10 @@ packages: resolution: { integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw== } engines: { node: '>=14.0.0' } + tree-kill@1.2.2: + resolution: { integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== } + hasBin: true + ts-api-utils@2.5.0: resolution: { integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== } engines: { node: '>=18.12' } @@ -1385,10 +1990,22 @@ packages: tslib@2.8.1: resolution: { integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== } + tunnel@0.0.6: + resolution: { integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== } + engines: { node: '>=0.6.11 <=0.7.0 || >=0.7.3' } + type-check@0.4.0: resolution: { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } engines: { node: '>= 0.8.0' } + typed-inject@5.0.0: + resolution: { integrity: sha512-0Ql2ORqBORLMdAW89TQKZsb1PQkFGImFfVmncXWe7a+AA3+7dh7Se9exxZowH4kbnlvKEFkMxUYdHUpjYWFJaA== } + engines: { node: '>=18' } + + typed-rest-client@2.3.1: + resolution: { integrity: sha512-k4kX5Up6qA68D0Cby2AK+6+vM5k3qTxe+/3FqhnHRExjY5cfbOnzjQZbP/LXleF8hVoDvDqxlgk9KK83HoBZlQ== } + engines: { node: '>= 16.0.0' } + typescript-eslint@8.68.0: resolution: { integrity: sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } @@ -1406,10 +2023,23 @@ packages: engines: { node: '>=14.17' } hasBin: true + underscore@1.13.8: + resolution: { integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== } + unicode-emoji-modifier-base@1.0.0: resolution: { integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== } engines: { node: '>=4' } + unicorn-magic@0.3.0: + resolution: { integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== } + engines: { node: '>=18' } + + update-browserslist-db@1.3.2: + resolution: { integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw== } + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } @@ -1501,6 +2131,9 @@ packages: jsdom: optional: true + weapon-regex@2.0.4: + resolution: { integrity: sha512-ubuhY5Lo4phWcMsJqe8j62m9uhsuo/VpfK5XsSgYGRGDSt10hwVwOBTriPRd0dac+KYbGNXOrfXjM6xCp2NUKg== } + which@2.0.2: resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } engines: { node: '>= 8' } @@ -1540,6 +2173,13 @@ packages: resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } engines: { node: '>=10' } + yoctocolors@2.2.0: + resolution: { integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg== } + engines: { node: '>=18' } + + zod@4.5.4: + resolution: { integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA== } + snapshots: '@andrewbranch/untar.js@1.0.4': {} @@ -1568,24 +2208,239 @@ snapshots: dependencies: '@babel/helper-validator-identifier': 8.0.4 js-tokens: 10.0.0 - optional: true + + '@babel/compat-data@8.0.0': {} + + '@babel/core@8.0.1': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/generator': 8.0.0 + '@babel/helper-compilation-targets': 8.0.0 + '@babel/helpers': 8.0.0 + '@babel/parser': 8.0.4 + '@babel/template': 8.0.0 + '@babel/traverse': 8.0.4 + '@babel/types': 8.0.4 + '@types/gensync': 1.0.5 + convert-source-map: 2.0.0 + empathic: 2.0.1 + gensync: 1.0.0-beta.2 + import-meta-resolve: 4.2.0 + json5: 2.2.3 + obug: 2.1.4 + semver: 7.8.5 + + '@babel/generator@8.0.0': + dependencies: + '@babel/parser': 8.0.4 + '@babel/types': 8.0.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@8.0.0': + dependencies: + '@babel/types': 8.0.4 + + '@babel/helper-compilation-targets@8.0.0': + dependencies: + '@babel/compat-data': 8.0.0 + '@babel/helper-validator-option': 8.0.0 + browserslist: 4.28.8 + lru-cache: 11.5.2 + semver: 7.8.5 + + '@babel/helper-create-class-features-plugin@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-member-expression-to-functions': 8.0.0 + '@babel/helper-optimise-call-expression': 8.0.0 + '@babel/helper-replace-supers': 8.0.1(@babel/core@8.0.1) + '@babel/helper-skip-transparent-expression-wrappers': 8.0.0 + '@babel/traverse': 8.0.4 + semver: 7.8.5 + + '@babel/helper-globals@8.0.0': {} + + '@babel/helper-member-expression-to-functions@8.0.0': + dependencies: + '@babel/traverse': 8.0.4 + '@babel/types': 8.0.4 + + '@babel/helper-module-imports@8.0.0': + dependencies: + '@babel/traverse': 8.0.4 + '@babel/types': 8.0.4 + + '@babel/helper-module-transforms@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-module-imports': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 + '@babel/traverse': 8.0.4 + + '@babel/helper-optimise-call-expression@8.0.0': + dependencies: + '@babel/types': 8.0.4 + + '@babel/helper-plugin-utils@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + + '@babel/helper-replace-supers@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-member-expression-to-functions': 8.0.0 + '@babel/helper-optimise-call-expression': 8.0.0 + '@babel/traverse': 8.0.4 + + '@babel/helper-skip-transparent-expression-wrappers@8.0.0': + dependencies: + '@babel/traverse': 8.0.4 + '@babel/types': 8.0.4 '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-string-parser@8.0.0': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@8.0.4': - optional: true + '@babel/helper-validator-identifier@8.0.4': {} + + '@babel/helper-validator-option@8.0.0': {} + + '@babel/helpers@8.0.0': + dependencies: + '@babel/template': 8.0.0 + '@babel/types': 8.0.4 '@babel/parser@7.29.8': dependencies: '@babel/types': 7.29.8 + '@babel/parser@8.0.4': + dependencies: + '@babel/types': 8.0.4 + + '@babel/plugin-proposal-decorators@8.0.2(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-create-class-features-plugin': 8.0.1(@babel/core@8.0.1) + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-syntax-decorators': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-syntax-decorators@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-syntax-jsx@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-syntax-typescript@8.0.3(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-destructuring@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-explicit-resource-management@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-transform-destructuring': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-modules-commonjs@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-module-transforms': 8.0.1(@babel/core@8.0.1) + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-react-display-name@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-react-jsx-development@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/plugin-transform-react-jsx': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-react-jsx@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-module-imports': 8.0.0 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-syntax-jsx': 8.0.1(@babel/core@8.0.1) + '@babel/types': 8.0.4 + + '@babel/plugin-transform-react-pure-annotations@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + + '@babel/plugin-transform-typescript@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-create-class-features-plugin': 8.0.1(@babel/core@8.0.1) + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/helper-skip-transparent-expression-wrappers': 8.0.0 + '@babel/plugin-syntax-typescript': 8.0.3(@babel/core@8.0.1) + + '@babel/preset-react@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/helper-validator-option': 8.0.0 + '@babel/plugin-transform-react-display-name': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-transform-react-jsx': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-transform-react-jsx-development': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-transform-react-pure-annotations': 8.0.1(@babel/core@8.0.1) + + '@babel/preset-typescript@8.0.1(@babel/core@8.0.1)': + dependencies: + '@babel/core': 8.0.1 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.1) + '@babel/helper-validator-option': 8.0.0 + '@babel/plugin-transform-modules-commonjs': 8.0.1(@babel/core@8.0.1) + '@babel/plugin-transform-typescript': 8.0.1(@babel/core@8.0.1) + + '@babel/template@8.0.0': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/parser': 8.0.4 + '@babel/types': 8.0.4 + + '@babel/traverse@8.0.4': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/generator': 8.0.0 + '@babel/helper-globals': 8.0.0 + '@babel/parser': 8.0.4 + '@babel/template': 8.0.0 + '@babel/types': 8.0.4 + obug: 2.1.4 + '@babel/types@7.29.8': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@babel/types@8.0.4': + dependencies: + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 + '@bcoe/v8-coverage@1.0.2': {} '@braidai/lang@1.1.2': {} @@ -1756,6 +2611,102 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/ansi@2.0.7': {} + + '@inquirer/checkbox@5.2.3': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1 + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0 + + '@inquirer/confirm@6.3.0': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/core@12.0.1': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0 + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + + '@inquirer/editor@5.3.1': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/external-editor': 3.0.4 + '@inquirer/type': 4.1.0 + + '@inquirer/expand@5.1.3': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/external-editor@3.0.4': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + + '@inquirer/figures@2.0.8': {} + + '@inquirer/input@5.1.4': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/number@4.2.1': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/password@5.2.0': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/prompts@8.7.0': + dependencies: + '@inquirer/checkbox': 5.2.3 + '@inquirer/confirm': 6.3.0 + '@inquirer/editor': 5.3.1 + '@inquirer/expand': 5.1.3 + '@inquirer/input': 5.1.4 + '@inquirer/number': 4.2.1 + '@inquirer/password': 5.2.0 + '@inquirer/rawlist': 5.3.3 + '@inquirer/search': 4.3.1 + '@inquirer/select': 5.2.3 + + '@inquirer/rawlist@5.3.3': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/type': 4.1.0 + + '@inquirer/search@4.3.1': + dependencies: + '@inquirer/core': 12.0.1 + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0 + + '@inquirer/select@5.2.3': + dependencies: + '@inquirer/ansi': 2.0.7 + '@inquirer/core': 12.0.1 + '@inquirer/figures': 2.0.8 + '@inquirer/type': 4.1.0 + + '@inquirer/type@4.1.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -1959,10 +2910,80 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.63.1': optional: true + '@sec-ant/readable-stream@0.4.1': {} + '@sindresorhus/is@4.6.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@standard-schema/spec@1.1.0': {} + '@stryker-mutator/api@10.0.0': + dependencies: + mutation-testing-metrics: 3.8.4 + mutation-testing-report-schema: 3.8.4 + tslib: 2.8.1 + typed-inject: 5.0.0 + + '@stryker-mutator/core@10.0.0': + dependencies: + '@inquirer/prompts': 8.7.0 + '@stryker-mutator/api': 10.0.0 + '@stryker-mutator/instrumenter': 10.0.0 + '@stryker-mutator/util': 10.0.0 + ajv: 8.20.0 + chalk: 5.6.2 + commander: 14.0.3 + diff-match-patch: 1.0.5 + emoji-regex: 10.6.0 + execa: 9.6.1 + json-rpc-2.0: 1.8.0 + lodash.groupby: 4.6.0 + minimatch: 10.2.6 + mutation-server-protocol: 0.4.1 + mutation-testing-elements: 3.8.4 + mutation-testing-metrics: 3.8.4 + mutation-testing-report-schema: 3.8.4 + npm-run-path: 6.0.0 + progress: 2.0.3 + rxjs: 7.8.2 + semver: 7.8.5 + source-map: 0.7.6 + tree-kill: 1.2.2 + tslib: 2.8.1 + typed-inject: 5.0.0 + typed-rest-client: 2.3.1 + transitivePeerDependencies: + - '@types/node' + + '@stryker-mutator/instrumenter@10.0.0': + dependencies: + '@babel/core': 8.0.1 + '@babel/generator': 8.0.0 + '@babel/parser': 8.0.4 + '@babel/plugin-proposal-decorators': 8.0.2(@babel/core@8.0.1) + '@babel/plugin-transform-explicit-resource-management': 8.0.1(@babel/core@8.0.1) + '@babel/preset-react': 8.0.1(@babel/core@8.0.1) + '@babel/preset-typescript': 8.0.1(@babel/core@8.0.1) + '@babel/traverse': 8.0.4 + '@stryker-mutator/api': 10.0.0 + '@stryker-mutator/util': 10.0.0 + angular-html-parser: 10.11.0 + semver: 7.8.5 + tslib: 2.8.1 + weapon-regex: 2.0.4 + + '@stryker-mutator/util@10.0.0': {} + + '@stryker-mutator/vitest-runner@10.0.0(@stryker-mutator/core@10.0.0)(vitest@4.1.11)': + dependencies: + '@stryker-mutator/api': 10.0.0 + '@stryker-mutator/core': 10.0.0 + '@stryker-mutator/util': 10.0.0 + semver: 7.8.5 + tslib: 2.8.1 + vitest: 4.1.11(@vitest/coverage-v8@4.1.11)(vite@8.2.2(terser@5.51.2)(yaml@2.9.0)) + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -1976,6 +2997,10 @@ snapshots: '@types/estree@1.0.9': {} + '@types/gensync@1.0.5': {} + + '@types/jsesc@2.5.1': {} + '@types/json-schema@7.0.15': {} '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)': @@ -2137,6 +3162,15 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + angular-html-parser@10.11.0: {} + ansi-escapes@7.3.0: dependencies: environment: 1.1.0 @@ -2161,14 +3195,36 @@ snapshots: balanced-match@4.0.4: {} + baseline-browser-mapping@2.11.20: {} + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 + browserslist@4.28.8: + dependencies: + baseline-browser-mapping: 2.11.20 + caniuse-lite: 1.0.30001810 + electron-to-chromium: 1.5.416 + node-releases: 2.0.54 + update-browserslist-db: 1.3.2(browserslist@4.28.8) + buffer-from@1.1.2: {} cac@7.0.0: {} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + caniuse-lite@1.0.30001810: {} + chai@6.2.2: {} chalk@4.1.2: @@ -2180,6 +3236,8 @@ snapshots: char-regex@1.0.2: {} + chardet@2.2.0: {} + cjs-module-lexer@1.4.3: {} cli-highlight@2.1.11: @@ -2197,6 +3255,8 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-width@4.1.0: {} + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -2211,6 +3271,8 @@ snapshots: commander@10.0.1: {} + commander@14.0.3: {} + commander@2.20.3: {} convert-source-map@2.0.0: {} @@ -2235,16 +3297,43 @@ snapshots: deep-is@0.1.4: {} + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + detect-libc@2.1.2: {} + diff-match-patch@1.0.5: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.416: {} + + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} emojilib@2.4.0: {} + empathic@2.0.1: {} + environment@1.1.0: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + es-module-lexer@2.3.2: {} + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -2319,6 +3408,21 @@ snapshots: esutils@2.0.3: {} + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.1 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.2.0 + expect-type@1.4.0: {} fast-deep-equal@3.1.3: {} @@ -2333,6 +3437,8 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 + fast-uri@3.1.6: {} + fast-wrap-ansi@0.2.2: dependencies: fast-string-width: 3.0.2 @@ -2343,6 +3449,10 @@ snapshots: fflate@0.8.3: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -2364,16 +3474,45 @@ snapshots: function-bind@1.1.2: {} + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 globals@16.5.0: {} + gopd@1.2.0: {} + has-flag@4.0.0: {} + has-symbols@1.1.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -2384,6 +3523,12 @@ snapshots: human-id@4.2.1: {} + human-signals@8.0.1: {} + + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} ignore@7.0.6: {} @@ -2392,6 +3537,8 @@ snapshots: imurmurhash@0.1.4: {} + inherits@2.0.4: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -2404,6 +3551,12 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-plain-obj@4.1.0: {} + + is-stream@4.0.1: {} + + is-unicode-supported@2.1.0: {} + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -2421,14 +3574,24 @@ snapshots: jju@1.4.0: {} + js-md4@0.3.2: {} + js-tokens@10.0.0: {} + jsesc@3.1.0: {} + json-buffer@3.0.1: {} + json-rpc-2.0@1.8.0: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + jsonc-parser@3.3.1: {} keyv@4.5.4: @@ -2498,6 +3661,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.groupby@4.6.0: {} + lru-cache@11.5.2: {} magic-string@0.30.21: @@ -2527,6 +3692,10 @@ snapshots: marked@9.1.6: {} + math-intrinsics@1.1.0: {} + + minimalistic-assert@1.0.1: {} + minimatch@10.2.6: dependencies: brace-expansion: 5.0.9 @@ -2535,6 +3704,20 @@ snapshots: ms@2.1.3: {} + mutation-server-protocol@0.4.1: + dependencies: + zod: 4.5.4 + + mutation-testing-elements@3.8.4: {} + + mutation-testing-metrics@3.8.4: + dependencies: + mutation-testing-report-schema: 3.8.4 + + mutation-testing-report-schema@3.8.4: {} + + mute-stream@3.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -2552,8 +3735,17 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-releases@2.0.54: {} + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + object-assign@4.1.1: {} + object-inspect@1.13.4: {} + obug@2.1.4: {} optionator@0.9.4: @@ -2575,6 +3767,8 @@ snapshots: package-manager-detector@1.8.0: {} + parse-ms@4.0.0: {} + parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 @@ -2587,6 +3781,8 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} pathe@2.0.3: {} @@ -2605,6 +3801,12 @@ snapshots: prettier@3.9.6: {} + pretty-ms@9.3.1: + dependencies: + parse-ms: 4.0.0 + + progress@2.0.3: {} + publint@0.3.24: dependencies: '@publint/pack': 0.1.7 @@ -2614,8 +3816,14 @@ snapshots: punycode@2.3.1: {} + qs@6.15.1: + dependencies: + side-channel: 1.1.1 + require-directory@2.1.1: {} + require-from-string@2.0.2: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -2686,10 +3894,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.63.1 fsevents: 2.3.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + sade@1.8.1: dependencies: mri: 1.2.0 + safer-buffer@2.1.2: {} + semver@7.8.5: {} shebang-command@2.0.0: @@ -2700,8 +3914,38 @@ snapshots: shell-quote@1.10.0: {} + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + sisteransi@1.0.5: {} skin-tone@2.0.0: @@ -2717,6 +3961,8 @@ snapshots: source-map@0.6.1: {} + source-map@0.7.6: {} + stackback@0.0.2: {} std-env@4.2.0: {} @@ -2731,6 +3977,8 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-final-newline@4.0.0: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -2773,16 +4021,30 @@ snapshots: tinyrainbow@3.1.1: {} + tree-kill@1.2.2: {} + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: typescript: 6.0.3 tslib@2.8.1: {} + tunnel@0.0.6: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + typed-inject@5.0.0: {} + + typed-rest-client@2.3.1: + dependencies: + des.js: 1.1.0 + js-md4: 0.3.2 + qs: 6.15.1 + tunnel: 0.0.6 + underscore: 1.13.8 + typescript-eslint@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3): dependencies: '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3))(eslint@10.9.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3) @@ -2798,8 +4060,18 @@ snapshots: typescript@6.0.3: {} + underscore@1.13.8: {} + unicode-emoji-modifier-base@1.0.0: {} + unicorn-magic@0.3.0: {} + + update-browserslist-db@1.3.2(browserslist@4.28.8): + dependencies: + browserslist: 4.28.8 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -2845,6 +4117,8 @@ snapshots: transitivePeerDependencies: - msw + weapon-regex@2.0.4: {} + which@2.0.2: dependencies: isexe: 2.0.0 @@ -2879,3 +4153,7 @@ snapshots: yargs-parser: 20.2.9 yocto-queue@0.1.0: {} + + yoctocolors@2.2.0: {} + + zod@4.5.4: {} diff --git a/src/collection.ts b/src/collection.ts index be59ab2..c67c7ae 100644 --- a/src/collection.ts +++ b/src/collection.ts @@ -137,7 +137,7 @@ export default class Collection extends Array { return this.replace(0, 0, items); } reverseObjects(): this { - super.reverse(); + Array.prototype.reverse.call(this); return this; } setObjects(items: T[]): this { diff --git a/stryker.config.mjs b/stryker.config.mjs new file mode 100644 index 0000000..aff870a --- /dev/null +++ b/stryker.config.mjs @@ -0,0 +1,31 @@ +/** @type {import('@stryker-mutator/api/core').PartialStrykerOptions} */ +export default { + concurrency: 4, + coverageAnalysis: 'perTest', + ignorePatterns: ['.pnpm-store', 'coverage', 'dist', 'fixtures'], + mutate: [ + 'src/adapter.ts', + 'src/adapters/detect.ts', + 'src/adapters/fetch.ts', + 'src/collection.ts', + 'src/registry.ts', + 'src/resolver.ts', + 'src/resource.ts', + 'src/store-actions.ts', + 'src/store.ts', + ], + plugins: ['@stryker-mutator/vitest-runner'], + reporters: ['clear-text', 'html', 'json'], + tempDirName: '.stryker-tmp', + testRunner: 'vitest', + thresholds: { + break: 76, + high: 85, + low: 76, + }, + timeoutMS: 10_000, + vitest: { + configFile: 'vitest.config.ts', + related: true, + }, +}; From 24c7817d8d8c6902ded33fd7ba417f5b954cf838 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Mon, 31 Aug 2026 22:31:09 +0800 Subject: [PATCH 13/13] docs: record completed CI release gate --- MODERNIZATION_PLAN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODERNIZATION_PLAN.md b/MODERNIZATION_PLAN.md index 484e38f..5f888c2 100644 --- a/MODERNIZATION_PLAN.md +++ b/MODERNIZATION_PLAN.md @@ -316,7 +316,7 @@ Every PR description must include: public API effect, compatibility evidence, te - [x] Publint and Are The Types Wrong report no release-blocking defects. - [x] Package content and size budgets pass; no secrets or internal-only files are present. - [x] API report contains no unapproved changes. -- [ ] Full CI passes on the release commit with frozen dependencies. +- [x] Full CI passes on the release commit with frozen dependencies. - [x] Release workflow dry run proves one immutable artifact is used throughout. - [ ] npm trusted publishing, protected environment, and provenance are configured. - [x] Migration guide, changelog, support policy, deprecations, and rollback steps are published.