diff --git a/.all-contributorsrc b/.all-contributorsrc index 9c506560..042f4e3e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -66,6 +66,15 @@ "contributions": [ "projectManagement" ] + }, + { + "login": "sfaria27", + "name": "Shane", + "avatar_url": "https://avatars.githubusercontent.com/u/81697281?v=4", + "profile": "https://github.com/sfaria27", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..6b06e31c --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build +dist +vite.config.ts +.eslintrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..571b0c3d --- /dev/null +++ b/.eslintrc @@ -0,0 +1,49 @@ +{ + "root": true, + "env": { + "browser": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:vue/vue3-recommended", + "plugin:prettier/recommended" + ], + "parser": "vue-eslint-parser", + "plugins": [ "@typescript-eslint" ], + "parserOptions": { + "parser": "@typescript-eslint/parser", + "sourceType": "module", + "ecmaVersion": "latest", + "project": ["./tsconfig.json"], + "extraFileExtensions": [ ".vue" ] + }, + "rules": { + // https://eslint.org/docs/rules/ + "no-fallthrough": "off", // https://github.com/ionic-team/eslint-config/issues/7 + "no-constant-condition": "off", + "no-unused-vars": "off", + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/no-this-alias": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": [ + "error", { "allowArgumentsExplicitlyTypedAsAny": true }], + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/array-type": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-optional-chain": "error", + + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ] + } +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 828a44a2..62ec8360 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,22 +1,62 @@ version: 2 updates: - package-ecosystem: "npm" - directory: "/" + directory: "/vue3" + schedule: + interval: "weekly" + commit-message: + prefix: "npm" + labels: + - "chore" + groups: + minor: + patterns: + - "*" + update-types: + - "minor" + - "patch" + + - package-ecosystem: "npm" + directory: "/vue2" + schedule: + interval: "weekly" + commit-message: + prefix: "npm" + labels: + - "chore" + groups: + minor: + patterns: + - "*" + update-types: + - "minor" + - "patch" + + - package-ecosystem: "npm" + directory: "/example/vue3" schedule: interval: "weekly" commit-message: prefix: "npm" labels: - "chore" + groups: + all: + patterns: + - "*" - package-ecosystem: "npm" - directory: "/example" + directory: "/example/vue2" schedule: interval: "weekly" commit-message: prefix: "npm" labels: - "chore" + groups: + all: + patterns: + - "*" - package-ecosystem: "github-actions" directory: "/" @@ -26,3 +66,7 @@ updates: prefix: "gh-action" labels: - "chore" + groups: + all: + patterns: + - "*" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 41baae90..c267b2fb 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -14,8 +14,8 @@ concurrency: cancel-in-progress: true jobs: - analyze: - name: Analyze + vue2: + name: Analyze Vue 2 runs-on: ubuntu-22.04 permissions: actions: read @@ -33,17 +33,41 @@ jobs: with: languages: javascript - - uses: dart-lang/setup-dart@v1.4 - - uses: actions/setup-node@v3 with: node-version: 18 - - name: Install JS dependencies - run: npm ci + - name: Build Vue2 + run: make vue2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + + vue3: + name: Analyze Vue 3 + runs-on: ubuntu-22.04 + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: javascript + + - uses: actions/setup-node@v3 + with: + node-version: 18 - - name: Run Build - run: npm run build + - name: Build Vue3 + run: make vue3 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4ba02b82..a856dfcd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ concurrency: cancel-in-progress: true jobs: - release: + vue3: if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/') environment: Production runs-on: ubuntu-latest @@ -36,11 +36,8 @@ jobs: registry-url: 'https://registry.npmjs.org' scope: '@mytiki' - - name: Install JS dependencies - run: npm ci - - - name: Build Dist - run: npm run build + - name: Build for Vue 3 + run: make vue3 - name: Get version id: version @@ -55,7 +52,7 @@ jobs: uses: actions/configure-pages@v3 - name: Build Docs - run: npx typedoc src/main.ts + run: npx typedoc src/main.ts --skipErrorChecking - name: Upload artifact uses: actions/upload-pages-artifact@v2 @@ -70,3 +67,34 @@ jobs: uses: ncipollo/release-action@v1 with: tag: ${{ steps.version.outputs.current }} + + vue2: + if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/') + environment: Production + runs-on: ubuntu-latest + outputs: + tag: ${{ steps.tag.outputs.version }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: 'https://registry.npmjs.org' + scope: '@mytiki' + + - name: Build for Vue 2 + run: make vue2 + + - name: Get version + id: version + run: echo "current=$(npm pkg get version | tr -d '"')" >> $GITHUB_OUTPUT + + - name: Publish + run: npm publish --access public + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/version.yaml b/.github/workflows/version.yaml index c791f25e..b8151c30 100644 --- a/.github/workflows/version.yaml +++ b/.github/workflows/version.yaml @@ -37,19 +37,17 @@ jobs: token: ${{ github.token }} branch: ${{ steps.getpr.outputs.branch }} - - name: Set JS Version - id: package_version + - name: Set JS Version (vue3) uses: KageKirin/set-node-package-version@v1 with: + file: vue3/package.json version: ${{ steps.semver.outputs.nextStrict }} - - name: Setup Node - uses: actions/setup-node@v3 + - name: Set JS Version (vue2) + uses: KageKirin/set-node-package-version@v1 with: - node-version: 18 - - - name: Install JS dependencies - run: npm ci + file: vue2/package.json + version: ${{ steps.semver.outputs.nextStrict }} - name: Commit Changes continue-on-error: true @@ -58,7 +56,7 @@ jobs: run: | git config --global user.email "action@github.com" git config --global user.name "GH Action" - git add package.json - git add package-lock.json + git add vue2/package.json + git add vue3/package.json git commit -m 'version bump' git push diff --git a/.gitignore b/.gitignore index d86baa84..38e668e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,17 @@ +# Dev garbage .idea/ node_modules/ .vscode/ *.map .DS_Store .sourcemaps + +# Generated outputs dist/ docs + +# Generated build files +/package.json +/package-lock.json +/src/main.ts +/vite.config.ts diff --git a/README.md b/README.md index e85a0097..b1d6624a 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,45 @@ # TIKI Receipt (Capacitor + Vue.js) -[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-) + +[![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors-) + -The TIKI Receipt library adds to your Vue.js + Capacitor **mobile app** a Data Reward program for your users to share their receipts in-exchange for loyalty points. +The TIKI Receipt library adds to your Vue.js + Capacitor **mobile app** a Data Reward program for your users to share their receipts in-exchange for **cash from Tiki inc**. + +![app-screen-highlights](https://cdn.mytiki.com/assets/receipt-screen-highlights.png) -Reward users with points for scanning physical receipts, linking their inbox, or connecting one of [58 supported retailer](https://ereceipts.blinkreceipt.com/account-linking) accounts. All program participation data is zero-party, powered by [TIKI's](https://mytiki.com) data licensing technology, meaning it is data legally owned by an end-user and licensed to yours and other businesses in-exchange for fair-compensation (redeemable loyalty points). Raw receipt data is pooled in a hosted, siloed [HUDI](https://hudi.apache.org) data lake, that you can search, query, and train models against. Opt-in to leverage TIKI's data-buyer network to create compensation and cashback rewards for you and your users. +Reward users with cash for linking their Gmail inbox and connecting one of [58 supported retailer](https://ereceipts.blinkreceipt.com/account-linking) accounts. All program participation data is zero-party, powered by [TIKI's](https://mytiki.com) data licensing technology, meaning it is data legally owned by an end-user and licensed to yours and other businesses in-exchange for fair-compensation. -## Includes -- Single Vue Component (TikiReceipt) to launch a configurable pre-built UI. -- TypeScript Service Class (TikiService) to interact directly with headless functionality or to build a custom UI. -- [TIKI's](https://mytiki.com) data licensing SDK (tiki-sdk-capacitor) to create and utilize immutable zero-party data license records. -- Receipt parsing (OCR and scraping) powered by our partners at [Microblink](https://microblink.com). +Raw receipt data is pooled in a hosted [Iceberg](http://iceberg.apache.org) cleanroom, that you can query, etl, and train models against. Find a sample cleanroom in our [purchase repo](https://github.com/tiki/purchase). -_Microblink is a closed-source, licensed SDK. For new customers, we offer a **free Microblink license**. Schedule a meeting at [mytiki.com](https://mytiki.com) to get your license keys._ +Receipt parsing is handled on-device (secure, privacy-centric, and App Store/Play Store compliant), by the closed-source, licensed SDK [Microblink](https://microblink.com). For new customers, we offer a **free Microblink license**. Schedule a meeting at [mytiki.com](https://mytiki.com) to get a license key. -![app-screen-highlights](https://github.com/tiki/tiki-receipt-capacitor/assets/3769672/f167490e-bac7-4d9c-a0de-71fa4d89cc3e) ## Installation + +#### Required Dependencies +- [@mytiki/capture-receipt-capacitor](https://www.npmjs.com/package/@mytiki/capture-receipt-capacitor) - Receipt parsing library and Capacitor wrapper for Microblink. +- [@mytiki/tiki-sdk-capacitor](https://www.npmjs.com/package/@mytiki/capture-receipt-capacitor) - Tiki's zero-party data licensing library +- [@capacitor/preferences](https://www.npmjs.com/package/@capacitor/preferences) - Persist user state across app sessions. + ```shell -npm i @mytiki/tiki-receipt-capacitor @mytiki/tiki-sdk-capacitor @mytiki/tiki-capture-receipt-capacitor +npm i @mytiki/tiki-sdk-capacitor @mytiki/capture-receipt-capacitor @capacitor/preferences +``` -npx cap sync +#### With Vue >=3.0.0 +```shell +npm i @mytiki/receipt-capacitor +``` + +#### With Vue 2.7.14 +```shell +npm i @mytiki/receipt-capacitor-vue2 ``` Next, if you don't already have a `publishingId` from TIKI, **create a free account** and make a project at [console.mytiki.com](https://console.mytiki.com). -### Android +#### Android Microblink is closed source, and subsequently it's AARs are hosted by Microblink's Maven repository, not Maven Central. You need to add the maven endpoint to your `android/build.gradle` file in your project's android folder. ```groovy @@ -47,168 +60,91 @@ android { } ``` +#### iOS +To build for iOS using Cocoapods, add the Tiki and Microblink PodspecRepos to your `ios/App/Podfile`. Then include the dependencies. + +1. Add the TikiSdk and BlinkReceipt repositories at the top of the Podfile. + +``` +source 'https://github.com/tiki/PodspecRepo.git' +source 'https://github.com/BlinkReceipt/PodSpecRepo.git' +source 'https://cdn.cocoapods.org/' +``` + +2. Add the TikiSdk and BlinkReceipt dependencies in the target pods: + +``` +target do + # ... current pods + + pod 'BlinkReceipt', '~> 1.39' + pod 'BlinkEReceipt', '~> 2.31' + pod 'TikiSdk', '~> 2.1.0' +end +``` + +NOTE: If Cocoapods fails to locate the dependencies automatically, run `pod install --repo-update`. + ## Getting Started 1. Register the plugin with your Vue app +#### With Vue >=3.0.0 + ```ts import { createApp } from "vue"; import App from "@/app.vue"; -import Tiki from "@mytiki/tiki-receipt-capacitor"; +import Tiki from "@mytiki/receipt-capacitor"; createApp(App) - .use(Tiki, {}) + .use(Tiki, { + key: { + publishingId: "YOUR TIKI PUBLISHING ID", + android: "YOUR MICROBLINK ANDROID LICENSE KEY", + ios: "YOUR MICROBLINK IOS LICENSE KEY", + product: "YOUR MICROBLINK PRODUCT INTELLIGENCE KEY", + }, + callback: (_total: number): number | undefined => undefined, + }) .mount("#app"); ``` -_This registers the Vue Component as `TikiReceipt` and provides Typescript service `TikiService` as an injectable object name `Tiki`._ +#### With Vue 2.7.14 -2. If you're going to use the pre-built UI, add the stylesheet to your main stylesheet (e.g. `main.css`) -```css -@import "@mytiki/tiki-receipt-capacitor/dist/tiki-receipt-capacitor.css"; +```ts +import Vue from "vue"; +import App from "./app.vue"; + +import Tiki from "@mytiki/receipt-capacitor-vue2"; + +Vue.use(Tiki, { + key: { + publishingId: "YOUR TIKI PUBLISHING ID", + android: "YOUR MICROBLINK ANDROID LICENSE KEY", + ios: "YOUR MICROBLINK IOS LICENSE KEY", + product: "YOUR MICROBLINK PRODUCT INTELLIGENCE KEY", + }, + callback: (_total: number): number | undefined => undefined, +}); + +new Vue({ render: (h) => h(App) }).$mount("#app"); ``` -### Configuration -You use the options property of the plugin registration to configure the library for your specific use case. +_This registers the Vue Component as `TikiReceipt` and provides the service `TikiService` as an injectable object name `Tiki`._ -[Config interface reference β†’](https://tiki-receipt-capacitor.mytiki.com/interfaces/Config.html) +2. Add the stylesheet for the component to your primary stylesheet (e.g. `main.css`) -```ts -createApp(App) - .use(Tiki, { - //.. your app's configuration - }) -``` +#### With Vue >=3.0.0 -| Field | Description | -|-------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| key | License keys required for use of the library | -| key.publishingId | The publishing ID for your application | -| key.scanKey | Your application's BlinkReceipt License Key | -| key.intelKey | Your applications' Product Intelligence Key | -| program | The description and legal terms of the user's participation in the Data Reward Program. | -| program.image | The image src (300x86) to help explain the program and grab the user's attention. | -| program.description | A short description explaining the program. | -| program.terms | The legal terms and conditions of the program in Markdown format. You can use the `example/src/assets/terms.md` as a vetted template. | -| program.learn | The learn page content in Markdown format. Shown when a user clicks the ? button. You can use the `example/src/assets/learn-mored.md` as a template/starting point. | -| program.bullets | An array (maximum 3) of bullet points explaining how a user's data will be used (true) or not used (false). | -| program.bullet.text | The individual bullet's text to display | -| program.bullet.isUsed | True if this bullet describes how the user's data will be used, False if it's a use case explicitly disallowed | -| program.usecases | An array of all approved data [Usecases](https://tiki-sdk-capacitor.mytiki.com/classes/Usecase.html). These should all fall under one or more of the more user friendly bullets. | -| program.destinations | An optional array of approved data processors (e.g. 'mytiki.com') | -| program.tags | An optional array of metadata [Tags](https://tiki-sdk-capacitor.mytiki.com/classes/Tag.html) describing the data assets that make up the program. | -| reward | An array of Reward offers available to Program participants. | -| reward.image | The image src (300x86) to help explain the offer and grab the user's attention. | -| reward.description | A short description explaining the reward offer. | -| reward.issuer | The issuer function to calculate if a user's action fulfills the offer criteria. Called once per every ReceiptEvent. | -| theme | UI style settings and overrides. | -| theme.fontFamily | The font family to use. Defaults to `"Space Grotesk", sans-serif` | -| theme.primaryTextColor | The primary text color to use. Defaults to `rgb(28 0 0)`. | -| theme.secondaryTextColor | The secondary text color to use. Defaults to `rgb(28 0 0 / 60%)`. | -| theme.accentColor | The accent color to use. Defaults to `rgb(0 178 114)`. | -| theme.primaryBackgroundColor | The primary background color to use. Defaults to `rgb(255 255 255)`. | -| theme.secondaryBackgroundColor | The secondary background color to use. Defaults to `rgb(246 246 246)`. | -| theme.redeem | A function to execute when a user presses the Redeem Points button. | - -Example (`example/src/main.ts`) -```ts -import "./assets/main.css"; - -import { createApp } from "vue"; -import App from "@/app.vue"; +```css +@import "@mytiki/receipt-capacitor/dist/receipt-capacitor.css"; +``` -import Program from "@/assets/program.png"; -import LinkReward from "@/assets/link-reward.png"; -import ScanReward from "@/assets/scan-reward.png"; -import MoreReward from "@/assets/more-reward.png"; -import LearnMore from "@/assets/learn-more.md?raw"; -import Terms from "@/assets/terms.md?raw"; - -import Tiki, { - CommonTags, - CommonUsecases, - Tag, - Usecase, - ReceiptEvent, -} from "@mytiki/tiki-receipt-capacitor"; -import type { Receipt, ReceiptAccount } from "@mytiki/tiki-receipt-capacitor"; +#### With Vue 2.7.14 -createApp(App) - .use(Tiki, { - key: { - publishingId: "be19730a-00d5-45f5-b18e-2e19eb25f311", - scanKey: - "sRwAAAAoY29tLm15dGlraS5zZGsuY2FwdHVyZS5yZWNlaXB0LmNhcGFjaXRvcgY6SQlVDCCrMOCc/jLI1A3BmOhqNvtZLzShMcb3/OLQLiqgWjuHuFiqGfg4fnAiPtRcc5uRJ6bCBRkg8EsKabMQkEsMOuVjvEOejVD497WkMgobMbk/X+bdfhPPGdcAHWn5Vnz86SmGdHX5xs6RgYe5jmJCSLiPmB7cjWmxY5ihkCG12Q==", - intelKey: - "wSNX3mu+YGc/2I1DDd0NmrYHS6zS1BQt2geMUH7DDowER43JGeJRUErOHVwU2tz6xHDXia8BuvXQI3j37I0uYw==", - }, - program: { - image: Program, - description: - "You can now trade YOUR data for cash! Just scan a receipt or link an account.", - terms: Terms, - learn: LearnMore, - bullets: [ - { text: "Creepy targeted ads", isUsed: false }, - { text: "Spot purchasing trends", isUsed: true }, - { text: "Create aggregate insights", isUsed: true }, - ], - usecases: [ - Usecase.common(CommonUsecases.DISTRIBUTION), - Usecase.common(CommonUsecases.ANALYTICS), - Usecase.common(CommonUsecases.AI_TRAINING), - Usecase.common(CommonUsecases.ATTRIBUTION), - ], - destinations: ["mytiki.com"], - tags: [ - Tag.common(CommonTags.USER_ID), - Tag.common(CommonTags.PURCHASE_HISTORY), - ], - }, - theme: { - accentColor: "#783F10", - }, - rewards: [ - { - image: ScanReward, - description: - "Earn 10 points for every receipt you scan or in your linked accounts.", - issuer: ( - event: ReceiptEvent, - details: { receipt?: Receipt; account?: ReceiptAccount }, - ): number | undefined => { - if (event == ReceiptEvent.SCAN) return 10; - }, - }, - { - image: LinkReward, - description: - "Earn 100 points for every account you link. We only check it for receipts.", - issuer: ( - event: ReceiptEvent, - details: { receipt?: Receipt; account?: ReceiptAccount }, - ): number | undefined => { - if (event == ReceiptEvent.LINK) return 100; - else if (event == ReceiptEvent.UNLINK) return -100; - }, - }, - { - image: MoreReward, - description: - "Check back for special offers and more ways to earn cash for your data.", - issuer: ( - event: ReceiptEvent, - details: { receipt?: Receipt; account?: ReceiptAccount }, - ): number | undefined => { - return undefined; - }, - }, - ], - redeem: (total: number): number | undefined => - total > 0 ? total : undefined, - }) - .mount("#app"); +```css +@import "@mytiki/receipt-capacitor-vue2/dist/receipt-capacitor.css"; ``` #### Android @@ -232,26 +168,44 @@ For IMAP email account linking, the authorization UI uses the material bottom sh ### Initialization To initialize just inject the `TikiService` and pass in your systems unique identifier for the user. If you use emails (you shouldn't 😝), we recommend hashing it first. -[Initialize function reference β†’](https://tiki-receipt-capacitor.mytiki.com/classes/TikiService.html#initialize) +[Initialize function reference β†’](https://receipt-capacitor.mytiki.com/classes/TikiService.html#initialize) + +#### With Vue >=3.0.0 ```vue +``` + +#### With Vue 2.7.14 + +```vue + ``` -_We recommend initializing as early as possible in your application, you'll want to initialize the library. We scrape accounts (which can take a few seconds) and load the user's history in the background. If you initialize early, by the time the user launches the UI, all of their receipt data will be up-to-date. No worries if not, the UI will just update as data comes in._ +_We recommend initializing as early as possible in your application. We scrape accounts (which can take a few seconds) in the background. If you initialize early, by the time the user launches the UI, all of their receipt data will be up-to-date. No worries if not, the UI will just update as data comes in._ ### Open UI -Add the `TikiReceipt` component to your template and a boolean ref +Add the `TikiReceipt` component to your template and a boolean Ref (e.g. present). Now just set `present.value = true` to open the UI. + +#### With Vue >=3.0.0 ```vue + + +``` ### Logout -When a user logs out of your application, you'll want to delete any in-mem history, reward balances, and cached account credentials. +When a user logs out of your application, you'll want to unlink connected accounts, delete cached credentials, and other user state +data. + +#### With Vue >=3.0.0 ```ts import { inject, ref } from "vue"; -import { type TikiService } from "@mytiki/tiki-receipt-capacitor"; +import { type TikiService } from "@mytiki/receipt-capacitor"; + const tiki: TikiService | undefined = inject("Tiki"); await tiki?.logout(); ``` -_Don't worry, license records are backed up to TIKI's immutable, hosted storage for free. After the user logs back in, call `.initialize` and the library will rebuild their history and reward balance for you._ +#### With Vue 2.7.14 -## Example - -While this README is helpful, it's always easier to just see it in action. In `/example` there is simple demo app. On launch, it generates a new random user id, with a single button called start. - -_Note, if you press start before the initialization is complete, a warning will hit your console logs._ +```ts +import { inject, ref } from "vue"; +import { type TikiService } from "@mytiki/receipt-capacitor-vue2"; -- See `example/README.md` on how to build and run the example -- Check out `example/src/main.ts` to view an example configuration of the library. -- In `example/src/app.vue` you'll find Vue template showcasing initialization, logout, and using a button to open the pre-built UI. -- In `example/src/assets/*` there are samples for program and reward images plus markdown template files for legal terms and the learn more page. Feel free to copy, use, and modify any of these assets. +const tiki: TikiService | undefined = inject("Tiki"); +await tiki?.logout(); +``` -## More Docs and Links +_Don't worry, license records and rewards issued are backed up to TIKI's immutable, hosted storage for free. After the user logs back in, call `.initialize` and the library will rebuild their balance for you._ -#### @mytiki/tiki-receipt-capacitor -[πŸ€– NPM](https://www.npmjs.com/package/@mytiki/tiki-receipt-capacitor) -[πŸ“š TSDoc](https://tiki-receipt-capacitor.mytiki.com) +### [Reference Docs β‡’](https://receipt-capacitor.mytiki.com) -#### @mytiki/tiki-sdk-capacitor -[πŸ€– NPM](https://www.npmjs.com/package/@mytiki/tiki-sdk-capacitor) -[πŸ‘€ Source](https://github.com/tiki/tiki-sdk-capacitor) -[πŸ“š TSDoc](https://tiki-sdk-capacitor.mytiki.com) +## Example -#### @mytiki/tiki-sdk-capacitor -[πŸ€– NPM](https://www.npmjs.com/package/@mytiki/tiki-capture-receipt-capacitor) -[πŸ‘€ Source](https://github.com/tiki/tiki-capture-receipt-capacitor) -[πŸ“š TSDoc](https://tiki-capture-receipt-capacitor.mytiki.com) +While this README is helpful, it's always easier to just see it in action. In `/example` there is simple demo app. On launch, it generates a new random user id, with a button called start. -#### Other TIKI Links -[🍍 Website](https://mytiki.com) -[🍍 Console](https://console.mytiki.com) -[πŸ‘Ύ Discord](https://discord.gg/tiki) -[πŸ€– Main GitHub](https://github.com/tiki) +_Note, if you press start before the initialization is complete, a warning will hit your console logs._ -#### Microblink -[🌐 Website](https://microblink.com) -[πŸ‘½ BlinkReceipt - Android](https://microblink.com) -[🍎 BlinkReceipt - iOS](https://microblink.com) +- Check out `example/src/main.ts` to view an example configuration of the library. +- In `example/src/app.vue` you'll find Vue template showcasing initialization, logout, and using a button to open the pre-built UI. +- To run the example app call `make vue[2,3]-example-[ios,android].` e.g. `make vue3-example-android` ## Open Issues You can find active issues here in GitHub under [Issues](https://github.com/tiki/tiki-receipt-capacitor/issues). If you run into a bug or have a question, just create a new Issue or reach out to a team member on πŸ‘Ύ [Discord](https://discord.gg/tiki). -### Key open issues to take note of: -1. iOS is not functional (yet) β€” our team is still working through a handful of critical bugs/issues. Estimated by: 8/23. -2. OAuth is not yet functional (required for Outlook), optional for Gmail. -3. Not every retailer account is fully tested (yet), there may still be issues with specific implementations. -4. There are a handful of smaller UX-polish related bugs, such as scrolling on the history screen does not yet work. Next release scheduled for 8/25. +### Next Release: [0.4.2](https://github.com/tiki/apps/issues/11) # Contributing @@ -330,11 +283,17 @@ You can find active issues here in GitHub under [Issues](https://github.com/tiki - Please use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) if you intend to add code to this project. ## Project Structure -- `/src`: The primary Service and Component src files +- `/src`: The primary library source files - `/service`: The implementation of TikiService - `/components`: The implementation of TikiReceipt - `/assets`: The bundled UI assets (images, icons, stylesheets) + - `/config`: The configuration interface(s) + - `/utils`: Reusable helper functions - `/example`: A simple example project using the plugin + - `/vue2`: The example project in a Vue 2.7 configuration + - `/vue3`: The example project in a Vue 3.0 configuration +- `vue2`: Build files for vue2 configuration +- `vue3`: Build files for vue3 configuration ## Contributors ✨ @@ -352,6 +311,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Gabriel Schuler Barros
Gabriel Schuler Barros

πŸ’» 🚧 JessΓ© Monteiro
JessΓ© Monteiro

πŸ’» 🚧 Tim O'Guin
Tim O'Guin

πŸ“† + Tim O'Guin
Shane

πŸ“– diff --git a/__tests__/__fixtures__/connectGmail.ts b/__tests__/__fixtures__/connectGmail.ts new file mode 100644 index 00000000..cffed772 --- /dev/null +++ b/__tests__/__fixtures__/connectGmail.ts @@ -0,0 +1,15 @@ +import { StateAccount } from "../../src/service/store/state/state-account" +import { Account, accountTypes } from "@mytiki/capture-receipt-capacitor"; +import { ServiceStore } from "../../src/service/store" + +export default function connectGmail (storeGmail: StateAccount): string { + const account: Account = { + username: "test@gmail.com", + type: accountTypes.index.get("GMAIL")!, + isVerified: true + } + //checking the email state + storeGmail.update([account]) + const gmailStatus: string = storeGmail.get().value + return gmailStatus +} \ No newline at end of file diff --git a/__tests__/__fixtures__/connectRetailer.ts b/__tests__/__fixtures__/connectRetailer.ts new file mode 100644 index 00000000..f8f91ce6 --- /dev/null +++ b/__tests__/__fixtures__/connectRetailer.ts @@ -0,0 +1,15 @@ +import { StateAccount } from "../../src/service/store/state/state-account" +import { Account, accountTypes } from "@mytiki/capture-receipt-capacitor"; +import { ServiceStore } from "../../src/service/store" + +export default function connectRetailer (retailerStore: StateAccount): string { + const account: Account = { + username: "test@gmail.com", + type: accountTypes.index.get("AMAZON")!, + isVerified: true + } + //checking the email state + retailerStore.update([account]) + const gmailStatus: string = retailerStore.get().value + return gmailStatus +} \ No newline at end of file diff --git a/__tests__/__fixtures__/fiveReceipts.ts b/__tests__/__fixtures__/fiveReceipts.ts new file mode 100644 index 00000000..3c9970c1 --- /dev/null +++ b/__tests__/__fixtures__/fiveReceipts.ts @@ -0,0 +1,14 @@ +import { StateReceipt } from "../../src/service/store/state"; +export default function fiveReceipts (receiptState: StateReceipt): number { + // add 5 receipts + receiptState.add('receipt1', new Date('09/05/2023')) + receiptState.add('receipt2', new Date('09/12/2023')) + receiptState.add('receipt3', new Date('09/12/2023')) + receiptState.add('receipt4', new Date('09/19/2023')) + receiptState.add('receipt5', new Date('09/19/2023')) + + //check the receipt state + const receiptCount = receiptState.count() + return receiptCount + +} \ No newline at end of file diff --git a/__tests__/__fixtures__/fourWeeks.ts b/__tests__/__fixtures__/fourWeeks.ts new file mode 100644 index 00000000..701fc6f3 --- /dev/null +++ b/__tests__/__fixtures__/fourWeeks.ts @@ -0,0 +1,10 @@ +import { StateSync } from "../../src/service/store/state"; +export default function fourWeeks (stateSync: StateSync): number{ + // add the 4 weeks logins + stateSync.add(new Date('09/05/2023')) + stateSync.add(new Date('09/12/2023')) + stateSync.add(new Date('09/19/2023')) + stateSync.add(new Date('09/26/2023')) + const count = stateSync.countWeeks(new Date('09/27/2023')) + return count +} \ No newline at end of file diff --git a/__tests__/__mocks__/localStorageMock.js b/__tests__/__mocks__/localStorageMock.js new file mode 100644 index 00000000..0eb2d907 --- /dev/null +++ b/__tests__/__mocks__/localStorageMock.js @@ -0,0 +1,18 @@ +let localStorageMock = (function() { + var store = {}; + return { + getItem: function(key) { + return store[key]; + }, + setItem: function(key, value) { + store[key] = value.toString(); + }, + clear: function() { + store = {}; + }, + removeItem: function(key) { + delete store[key]; + } + }; +})(); +Object.defineProperty(window, 'localStorage', { value: localStorageMock }); \ No newline at end of file diff --git a/__tests__/__mocks__/mockCheckPayout.ts b/__tests__/__mocks__/mockCheckPayout.ts new file mode 100644 index 00000000..86676261 --- /dev/null +++ b/__tests__/__mocks__/mockCheckPayout.ts @@ -0,0 +1,17 @@ +import { BulletState } from "../../src/components/bullet/bullet-state"; + +export default function mockCheckPayout( + sync: number, + receipts: number, + gmailState: string, + retailerState: string +): boolean { + if ( + gmailState === BulletState.P100 && + retailerState === BulletState.P100 && + sync >= 4 && + receipts >= 5 + ) { + return true + } else return false +} diff --git a/__tests__/allRequirements.test.ts b/__tests__/allRequirements.test.ts new file mode 100644 index 00000000..5f43f490 --- /dev/null +++ b/__tests__/allRequirements.test.ts @@ -0,0 +1,31 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import connectRetailer from "./__fixtures__/connectRetailer"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("All Requirements Fullfilled", () => { + test("Test suite", () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + expect(connectGmail(gmail)).toBe("P100"); + + const retailer = store.retailer as StateAccount; + expect(connectRetailer(retailer)).toBe("P100"); + + expect(fourWeeks(store.sync)).toBe(4); + + expect(fiveReceipts(store.receipt)).toBe(5); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeTruthy(); + }); +}); diff --git a/__tests__/lostWeekLoginDoesNotResetState.test.ts b/__tests__/lostWeekLoginDoesNotResetState.test.ts new file mode 100644 index 00000000..1ae67ea3 --- /dev/null +++ b/__tests__/lostWeekLoginDoesNotResetState.test.ts @@ -0,0 +1,38 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import connectRetailer from "./__fixtures__/connectRetailer"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("User misses a weekly login", () => { + test("test suite", () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + const retailer = store.retailer as StateAccount; + + store.sync.add(new Date("09/05/2023")); + store.sync.add(new Date("09/12/2023")); + store.sync.add(new Date("09/24/2023")); + store.sync.add(new Date("10/01/2023")); + const count = store.sync.countWeeks(new Date("10/02/2023")); + + expect(count).toBeLessThan(4); + + expect(connectGmail(gmail)).toBe("P100"); + expect(connectRetailer(retailer)).toBe("P100"); + expect(fiveReceipts(store.receipt)).toBe(5); + expect(gmail.get().value).toBe("P100") + expect(retailer.get().value).toBe("P100") + expect(store.receipt.count()).toBe(5) + + expect( + mockCheckPayout( + count, + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/__tests__/userConnectsOnlyGmail.test.ts b/__tests__/userConnectsOnlyGmail.test.ts new file mode 100644 index 00000000..643a96f0 --- /dev/null +++ b/__tests__/userConnectsOnlyGmail.test.ts @@ -0,0 +1,30 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("User connects Gmail but not Retailer Account", () => { + test("test suite", async () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + expect(connectGmail(gmail)).toBe("P100"); + + const retailer = store.retailer as StateAccount; + await retailer.update([]) + + expect(fourWeeks(store.sync)).toBe(4); + + expect(fiveReceipts(store.receipt)).toBe(5); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/__tests__/userConnectsOnlyRetailer.test.ts b/__tests__/userConnectsOnlyRetailer.test.ts new file mode 100644 index 00000000..1880d0cf --- /dev/null +++ b/__tests__/userConnectsOnlyRetailer.test.ts @@ -0,0 +1,32 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; +import connectRetailer from "./__fixtures__/connectRetailer"; + +describe("User Connects Only a Retailer Account", () => { + test("test suite", async () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + await gmail.update([]); + + expect(gmail.get().value).toBe("NULL"); + + const retailer = store.retailer as StateAccount; + expect(connectRetailer(retailer)).toBe("P100"); + + expect(fourWeeks(store.sync)).toBe(4); + + expect(fiveReceipts(store.receipt)).toBe(5); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/__tests__/userDisconnectGmail.ts b/__tests__/userDisconnectGmail.ts new file mode 100644 index 00000000..a1fa364e --- /dev/null +++ b/__tests__/userDisconnectGmail.ts @@ -0,0 +1,35 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import connectRetailer from "./__fixtures__/connectRetailer"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("User disconnect Gmail", () => { + test("test suite", async () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + expect(connectGmail(gmail)).toBe("P100"); + + await gmail.update([]); + const gmailStatus = gmail.get().value; + expect(gmailStatus).toBe("NULL"); + + const retailer = store.retailer as StateAccount + expect(connectRetailer(retailer)).toBe("P100"); + + expect(fourWeeks(store.sync)).toBe(4); + + expect(fiveReceipts(store.receipt)).toBe(5); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/__tests__/userDisconnectRetailer.ts b/__tests__/userDisconnectRetailer.ts new file mode 100644 index 00000000..28bc62af --- /dev/null +++ b/__tests__/userDisconnectRetailer.ts @@ -0,0 +1,36 @@ + +import { StateAccount } from "../src/service/store/state/state-account" +import { ServiceStore } from "../src/service/store" +import connectRetailer from "./__fixtures__/connectRetailer" +import connectGmail from "./__fixtures__/connectGmail"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe('User disconnect Gmail', ()=>{ + test("test suite", async ()=>{ + const store = new ServiceStore() + const retailer = store.retailer as StateAccount + expect(connectRetailer(retailer)).toBe('P100') + + await retailer.update([]) + const retailerStatus = retailer.get().value + expect(retailerStatus).toBe("NULL") + + const gmail = store.gmail as StateAccount + expect(connectGmail(gmail)).toBe("P100") + + expect(fourWeeks(store.sync)).toBe(4); + + expect(fiveReceipts(store.receipt)).toBe(5); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }) +}) \ No newline at end of file diff --git a/__tests__/userDoesNotShare5Receipts.test.ts b/__tests__/userDoesNotShare5Receipts.test.ts new file mode 100644 index 00000000..d3413bf4 --- /dev/null +++ b/__tests__/userDoesNotShare5Receipts.test.ts @@ -0,0 +1,38 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import connectRetailer from "./__fixtures__/connectRetailer"; +import fourWeeks from "./__fixtures__/fourWeeks"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("User does not share 5 receipts", () => { + test("Test Suite", () => { + const store = new ServiceStore(); + + const gmail = store.gmail as StateAccount; + expect(connectGmail(gmail)).toBe("P100"); + + const retailer = store.retailer as StateAccount; + expect(connectRetailer(retailer)).toBe("P100"); + + expect(fourWeeks(store.sync)).toBe(4); + + store.receipt.add("receipt1", new Date("09/05/2023")); + store.receipt.add("receipt2", new Date("09/12/2023")); + store.receipt.add("receipt3", new Date("09/12/2023")); + store.receipt.add("receipt4", new Date("09/19/2023")); + + const receiptCount = store.receipt.count(); + + expect(receiptCount).toBe(4); + + expect( + mockCheckPayout( + store.sync.countWeeks(new Date("09/27/2023")), + receiptCount, + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/__tests__/weeklyLoginMissed.test.ts b/__tests__/weeklyLoginMissed.test.ts new file mode 100644 index 00000000..73cdab4a --- /dev/null +++ b/__tests__/weeklyLoginMissed.test.ts @@ -0,0 +1,37 @@ +import { StateAccount } from "../src/service/store/state/state-account"; +import { ServiceStore } from "../src/service/store"; +import connectGmail from "./__fixtures__/connectGmail"; +import connectRetailer from "./__fixtures__/connectRetailer"; +import fiveReceipts from "./__fixtures__/fiveReceipts"; +import mockCheckPayout from "./__mocks__/mockCheckPayout"; + +describe("User misses a weekly login", () => { + test("test suite", () => { + const store = new ServiceStore(); + const gmail = store.gmail as StateAccount; + + expect(connectGmail(gmail)).toBe("P100"); + + const retailer = store.retailer as StateAccount; + expect(connectRetailer(retailer)).toBe("P100"); + + expect(fiveReceipts(store.receipt)).toBe(5); + + store.sync.add(new Date("09/05/2023")); + store.sync.add(new Date("09/12/2023")); + store.sync.add(new Date("09/24/2023")); + store.sync.add(new Date("10/01/2023")); + const count = store.sync.countWeeks(new Date("10/02/2023")); + + expect(count).toBeLessThan(4); + + expect( + mockCheckPayout( + count, + store.receipt.count(), + gmail.get().value, + retailer.get().value + ) + ).toBeFalsy(); + }); +}); diff --git a/bkup/history/history-event.ts b/bkup/history/history-event.ts deleted file mode 100644 index c0586a2d..00000000 --- a/bkup/history/history-event.ts +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import AccountIcon from "../../src/assets/icons/account.svg?component"; -import ReceiptIcon from "../../src/assets/icons/receipt.svg?component"; -import RedeemIcon from "../../src/assets/icons/redeem.svg?component"; - -import type { PayableRecord, ReceiptRecord } from "@mytiki/tiki-sdk-capacitor"; -import { ReceiptEvent } from "../receipt/receipt-event"; - -/** - * Represents an event in the user's history, such as scanning a receipt, redeeming points, linking an account, etc. - */ -export class HistoryEvent { - /** - * The event name postfix for receipt scanning. - */ - static readonly SCAN_NAME_POSTFIX = "receipt scanned"; - /** - * The event name postfix for points redemption. - */ - static readonly REDEEM_NAME_POSTFIX = "points redeemed"; - /** - * The event name postfix for linking an account. - */ - static readonly LINK_NAME_POSTFIX = "account linked"; - /** - * The event name postfix for unlinking an account. - */ - static readonly UNLINK_NAME_POSTFIX = "account unlinked"; - - /** - * The user-friendly name of the event. - */ - readonly name: string; - /** - * The amount of points issued/redeemed for the event. - */ - readonly amount: number; - /** - * The type of event. - */ - readonly type: ReceiptEvent; - /** - * The date when the event occurred. - */ - readonly date: Date; - - /** - * Creates a new HistoryEvent instance. Private constructor, use one of the - * static methods like scan, link, payable, etc. - * @private - * - * @param name - The name of the event. - * @param amount - The amount of points for the event. - * @param date - The date when the event occurred. - * @param type - The type of event. - */ - private constructor( - name: string, - amount: number, - date: Date, - type: ReceiptEvent, - ) { - this.name = name; - this.amount = amount; - this.date = date; - this.type = type; - } - - /** - * Creates a new history event for scanning a receipt. - * - * @param amount - The amount of points for the event. - * @param date - The date when the event occurred. - * @param text - An optional text description for the event. - * @returns A new HistoryEvent instance. - */ - static scan(amount: number, date: Date, text?: string): HistoryEvent { - return new HistoryEvent( - [text, HistoryEvent.SCAN_NAME_POSTFIX].join(""), - amount, - date, - ReceiptEvent.SCAN, - ); - } - - /** - * Creates a new history event for redeeming points. - * @param amount - The amount of points for the event. - * @param date - The date when the event occurred. - * @param text - An optional text description for the event. - * @returns A new HistoryEvent instance. - */ - static redeem(amount: number, date: Date, text?: string): HistoryEvent { - return new HistoryEvent( - [text, HistoryEvent.REDEEM_NAME_POSTFIX].join(""), - amount, - date, - ReceiptEvent.REDEEM, - ); - } - - /** - * Creates a new history event for linking an account. - * @param amount - The amount of points for the event. - * @param date - The date when the event occurred. - * @param text - An optional text description for the event. - * @returns A new HistoryEvent instance. - */ - static link(amount: number, date: Date, text?: string): HistoryEvent { - return new HistoryEvent( - [text, HistoryEvent.LINK_NAME_POSTFIX].join(""), - amount, - date, - ReceiptEvent.LINK, - ); - } - - /** - * Creates a new history event for a payable record. - * @param payable - The payable record to generate the event from. - * @returns A new HistoryEvent instance or undefined if an unsupported record. - */ - static payable(payable: PayableRecord): HistoryEvent | undefined { - let type: ReceiptEvent; - if (payable.description === undefined) return undefined; - else if (payable.description.endsWith(HistoryEvent.LINK_NAME_POSTFIX)) - type = ReceiptEvent.LINK; - else if (payable.description.endsWith(HistoryEvent.SCAN_NAME_POSTFIX)) - type = ReceiptEvent.SCAN; - else if (payable.description.endsWith(HistoryEvent.REDEEM_NAME_POSTFIX)) - type = ReceiptEvent.REDEEM; - else return undefined; - return new HistoryEvent( - payable.description, - Number(payable.amount), - payable.timestamp != undefined ? new Date(payable.timestamp) : new Date(), - type, - ); - } - - /** - * Creates a new history event for a receipt record. - * @param receipt - The receipt record to generate the event from. - * @returns A new HistoryEvent instance. - */ - static receipt(receipt: ReceiptRecord): HistoryEvent { - return new HistoryEvent( - receipt.description ?? HistoryEvent.REDEEM_NAME_POSTFIX, - Number(receipt.amount), - receipt.timestamp != undefined ? new Date(receipt.timestamp) : new Date(), - ReceiptEvent.REDEEM, - ); - } - - /** - * Creates a new history event with a specified event type. - * @param amount - The amount of points for the event. - * @param date - The date when the event occurred. - * @param type - The type of event. - * @param text - An optional text description for the event. - * @returns A new HistoryEvent instance. - */ - static new( - amount: number, - date: Date, - type: ReceiptEvent, - text?: string, - ): HistoryEvent { - let name; - switch (type) { - case ReceiptEvent.REDEEM: - name = [text, HistoryEvent.REDEEM_NAME_POSTFIX].join(" "); - break; - case ReceiptEvent.LINK: - name = [text, HistoryEvent.LINK_NAME_POSTFIX].join(" "); - break; - case ReceiptEvent.SCAN: - name = [text, HistoryEvent.SCAN_NAME_POSTFIX].join(" "); - break; - case ReceiptEvent.UNLINK: - name = [text, HistoryEvent.UNLINK_NAME_POSTFIX].join(" "); - break; - } - return new HistoryEvent(name, amount, date, type); - } - - /** - * Gets the icon (svg) for the event. - * @returns The icon object associated with the history event. - */ - get icon(): Object { - switch (this.type) { - case ReceiptEvent.SCAN: - return ReceiptIcon; - case ReceiptEvent.REDEEM: - return RedeemIcon; - case ReceiptEvent.UNLINK: - case ReceiptEvent.LINK: - return AccountIcon; - } - } -} diff --git a/bkup/history/history-service.ts b/bkup/history/history-service.ts deleted file mode 100644 index 3c1433a7..00000000 --- a/bkup/history/history-service.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import { TikiService } from "../../src/service/tiki-service"; -import { HistoryEvent } from "./history-event"; -import type { PayableRecord, ReceiptRecord } from "@mytiki/tiki-sdk-capacitor"; -import { SdkService } from "../sdk-service"; -import { ReceiptEvent } from "../receipt/receipt-event"; - -/** - * Manages the user's history events, such as scanning receipts, redeeming points, and more. - */ -export class HistoryService { - private readonly tiki: TikiService; - private _history: HistoryEvent[] = []; - private _total: number = 0; - private _onEventListeners: Map void> = - new Map(); - - /** - * Creates a new HistoryService instance. Do not construct directly. Call from {@link TikiService}. - * @param tiki - The parent service. - */ - constructor(tiki: TikiService) { - this.tiki = tiki; - } - - /** - * Adds an event listener for history events. - * @param id - The ID of the listener. - * @param listener - The callback function to be called when a history event occurs. - */ - onEvent(id: string, listener: (event: HistoryEvent) => void): void { - this._onEventListeners.set(id, listener); - } - - /** - * Gets an array of all history events. - */ - get all(): HistoryEvent[] { - return [...this._history]; - } - - /** - * Gets the latest history event. - */ - get latest(): HistoryEvent | undefined { - return this._history.at(-1); - } - - /** - * Gets the total outstanding reward balance. - */ - get total(): number { - return this._total; - } - - /** - * Loads the user's existing history events from payable and receipt records. - */ - async load(): Promise { - const payables: PayableRecord[] = await this.tiki.sdk.getPayables(); - for (const payable of payables) { - if (payable.type === SdkService.PAYABLE_TYPE) { - const event = HistoryEvent.payable(payable); - if (event != undefined) { - this.add(event); - const receipts: ReceiptRecord[] = - await this.tiki.sdk.plugin.getReceipts(payable.id); - receipts.forEach((receipt) => - this.add(HistoryEvent.receipt(receipt)), - ); - } - } - } - } - - /** - * Adds a history event to the service. - * @param event - The event to be added. - */ - add(event: HistoryEvent): void { - this._history.push(event); - this._total = - event.type === ReceiptEvent.REDEEM - ? this._total - event.amount - : this._total + event.amount; - this._onEventListeners.forEach((listener) => listener(event)); - } - - /** - * Fire the {@link Config.redeem} function and creating a new redeem event - * upon the function returning a number of points. No event created when - * returning undefined. - */ - async redeem(): Promise { - const callback = this.tiki.config.redeem; - if (callback != undefined) { - const points = callback(this._total); - if (points != undefined) { - const event = HistoryEvent.redeem(Math.abs(points), new Date()); - this.add(event); - await this.tiki.sdk.createReceipt(points, event.name); - } - } - } - - /** - * Clears all in-mem history and balance totals - */ - clear = (): void => { - this._history = []; - this._total = 0; - }; -} diff --git a/bkup/receipt/receipt-account-type.ts b/bkup/receipt/receipt-account-type.ts deleted file mode 100644 index 2d855321..00000000 --- a/bkup/receipt/receipt-account-type.ts +++ /dev/null @@ -1,654 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import AcmeIcon from "../../src/assets/images/acme.png"; -import AlbertsonsIcon from "../../src/assets/images/albertsons.png"; -import AmazonIcon from "../../src/assets/images/amazon.png"; -//import AolIcon from "@/assets/images/aol.png"; -import BedBathAndBeyondIcon from "../../src/assets/images/bed-bath-beyond.png"; -import BestBuyIcon from "../../src/assets/images/best-buy.png"; -import BJsIcon from "../../src/assets/images/bjs.png"; -import ChewyIcon from "../../src/assets/images/chewy.png"; -import CostcoIcon from "../../src/assets/images/costco.png"; -import CVSIcon from "../../src/assets/images/cvs.png"; -import DicksIcon from "../../src/assets/images/dicks.png"; -import DollarGeneralIcon from "../../src/assets/images/dollar-general.png"; -import DollarTreeIcon from "../../src/assets/images/dollar-tree.png"; -import DominosIcon from "../../src/assets/images/dominos.png"; -import DoorDashIcon from "../../src/assets/images/door-dash.png"; -import DrizlyIcon from "../../src/assets/images/drizly.png"; -import FamilyDollarIcon from "../../src/assets/images/family-dollar.png"; -import Food4LessIcon from "../../src/assets/images/food-4-less.png"; -import FoodLionIcon from "../../src/assets/images/food-lion.png"; -import FredMeyerIcon from "../../src/assets/images/fred-meyer.png"; -import GapIcon from "../../src/assets/images/gap.png"; -import GiantEagleIcon from "../../src/assets/images/giant-eagle.png"; -import GmailIcon from "../../src/assets/images/gmail.png"; -import GrubHubIcon from "../../src/assets/images/grubhub.png"; -import HarrisTeeterIcon from "../../src/assets/images/harris-teeter.png"; -import HEBIcon from "../../src/assets/images/heb.png"; -import HomeDepotIcon from "../../src/assets/images/home-depot.png"; -import HyVeeIcon from "../../src/assets/images/hy-vee.png"; -import InstacartIcon from "../../src/assets/images/instacart.png"; -import JewelOscoIcon from "../../src/assets/images/jewel-osco.png"; -import KohlsIcon from "../../src/assets/images/kohls.png"; -import KrogerIcon from "../../src/assets/images/kroger.png"; -import LowesIcon from "../../src/assets/images/lowes.png"; -import MacysIcon from "../../src/assets/images/macys.png"; -import MarshallsIcon from "../../src/assets/images/marshalls.png"; -import MeijerIcon from "../../src/assets/images/meijer.png"; -import NikeIcon from "../../src/assets/images/nike.png"; -//import OutlookIcon from "@/assets/images/outlook.png"; -import PublixIcon from "../../src/assets/images/publix.png"; -import RalphsIcon from "../../src/assets/images/ralphs.png"; -import RiteAidIcon from "../../src/assets/images/rite-aid.png"; -import SafewayIcon from "../../src/assets/images/safeway.png"; -import SamsClubIcon from "../../src/assets/images/sams-club.png"; -import SeamlessIcon from "../../src/assets/images/seamless.png"; -import SephoraIcon from "../../src/assets/images/sephora.png"; -import ShiptIcon from "../../src/assets/images/shipt.png"; -import ShopRiteIcon from "../../src/assets/images/shop-rite.png"; -import SproutsIcon from "../../src/assets/images/sprouts.png"; -import StaplesIcon from "../../src/assets/images/staples.png"; -import StaplesCanadaIcon from "../../src/assets/images/staples-canada.png"; -import StarbucksIcon from "../../src/assets/images/starbucks.png"; -import TacoBellIcon from "../../src/assets/images/tacobell.png"; -import TargetIcon from "../../src/assets/images/target.png"; -import TJMaxxIcon from "../../src/assets/images/tj-maxx.png"; -import UberEatsIcon from "../../src/assets/images/uber-eats.png"; -import UltaIcon from "../../src/assets/images/ulta.png"; -import VonsIcon from "../../src/assets/images/vons.png"; -import WalgreensIcon from "../../src/assets/images/walgreens.png"; -import WalmartIcon from "../../src/assets/images/walmart.png"; -import WalmartCanadaIcon from "../../src/assets/images/walmart-canada.png"; -import WegmansIcon from "../../src/assets/images/wegmans.png"; -//import YahooIcon from "@/assets/images/yahoo.png"; -/** - * Enumeration of the supported account types. - */ - -export interface AccountType { - type: "EMAIL" | "RETAILER"; - name: string; - icon?: string; - key: string; -} - -export type ScanType = "PHYSICAL" | "EMAIL" | "RETAILER" | "ONLINE"; - -export class AccountTypeCommom { - /** - * CME Markets account type - */ - static readonly CME_MARKETS: AccountType = { - type: "RETAILER", - name: "Acme", - icon: AcmeIcon, - key: "CME_MARKETS", - }; - - /** - * Albertsons account type. - */ - static readonly ALBERTSONS: AccountType = { - type: "RETAILER", - icon: AlbertsonsIcon, - name: "Albertsons", - key: "ALBERTSONS", - }; - /** - * Amazon account type. - */ - static readonly AMAZON: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon", - key: "AMAZON", - }; - /** - * Amazon Canada account type. - */ - static readonly AMAZON_CA: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon Canada", - key: "AMAZON_CA", - }; - /** - * Amazon United Kingdom account type. - */ - static readonly AMAZON_UK: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon United Kingdom", - key: "AMAZON_UK", - }; - /** - * AOL account type. - */ - // AOL = "AOL", - - /** - * Bed Bath & Beyond account type. - */ - static readonly BED_BATH_AND_BEYOND: AccountType = { - type: "RETAILER", - icon: BedBathAndBeyondIcon, - name: "Bed Bath & Beyond", - key: "BED_BATH_AND_BEYOND", - }; - /** - * Gmail account type. - */ - static readonly GMAIL: AccountType = { - name: "Gmail", - type: "EMAIL", - icon: GmailIcon, - key: 'GMAIL' - } - - /** - * Best Buy account type. - */ - static readonly BESTBUY: AccountType = { - type: "RETAILER", - icon: BestBuyIcon, - name: "Best Buy", - key: "BESTBUY", - }; - /** - * BJ’s Wholesale Club account type. - */ - static readonly BJS_WHOLESALE: AccountType = { - type: "RETAILER", - icon: BJsIcon, - name: "BJ’s Wholesale Club", - key: "BJS_WHOLESALE", - }; - /** - * Chewy account type. - */ - static readonly CHEWY: AccountType = { - type: "RETAILER", - icon: ChewyIcon, - name: "Chewy", - key: "CHEWY", - }; - /** - * Costco account type. - */ - static readonly COSTCO: AccountType = { - type: "RETAILER", - icon: CostcoIcon, - name: "Costco", - key: "COSTCO", - }; - /** - * CVS account type. - */ - static readonly CVS: AccountType = { - type: "RETAILER", - icon: CVSIcon, - name: "CVS", - key: "CVS", - }; - /** - * Dick’s Sporting Goods account type. - */ - static readonly DICKS_SPORTING_GOODS: AccountType = { - type: "RETAILER", - icon: DicksIcon, - name: "Dick’s Sporting Goods", - key: "DICKS_SPORTING_GOODS", - }; - /** - * Dollar General account type. - */ - static readonly DOLLAR_GENERAL: AccountType = { - type: "RETAILER", - icon: DollarGeneralIcon, - name: "Dollar General", - key: "DOLLAR_GENERAL", - }; - /** - * DollarTree account type. - */ - static readonly DOLLAR_TREE: AccountType = { - type: "RETAILER", - icon: DollarTreeIcon, - name: "DollarTree", - key: "DOLLAR_TREE", - }; - /** - * Domino’s Pizza account type. - */ - static readonly DOMINOS_PIZZA: AccountType = { - type: "RETAILER", - icon: DominosIcon, - name: "Domino’s Pizza", - key: "DOMINOS_PIZZA", - }; - /** - * DoorDash account type. - */ - static readonly DOOR_DASH: AccountType = { - type: "RETAILER", - icon: DoorDashIcon, - name: "DoorDash", - key: "DOOR_DASH", - }; - /** - * Drizly account type. - */ - static readonly DRIZLY: AccountType = { - type: "RETAILER", - icon: DrizlyIcon, - name: "Drizly", - key: "DRIZLY", - }; - /** - * Family Dollar account type. - */ - static readonly FAMILY_DOLLAR: AccountType = { - type: "RETAILER", - icon: FamilyDollarIcon, - name: "Family Dollar", - key: "FAMILY_DOLLAR", - }; - /** - * Food 4 Less account type. - */ - static readonly FOOD_4_LESS: AccountType = { - type: "RETAILER", - icon: Food4LessIcon, - name: "Food 4 Less", - key: "FOOD_4_LESS", - }; - /** - * Food Lion account type. - */ - static readonly FOOD_LION: AccountType = { - type: "RETAILER", - icon: FoodLionIcon, - name: "Food Lion", - key: "FOOD_LION", - }; - /** - * Fred Meyer account type. - */ - static readonly FRED_MEYER: AccountType = { - type: "RETAILER", - icon: FredMeyerIcon, - name: "Fred Meyer", - key: "FRED_MEYER", - }; - /** - * GAP account type. - */ - static readonly GAP: AccountType = { - type: "RETAILER", - icon: GapIcon, - name: "GAP", - key: "GAP", - }; - /** - * Giant Eagle account type. - */ - static readonly GIANT_EAGLE: AccountType = { - type: "RETAILER", - icon: GiantEagleIcon, - name: "Giant Eagle", - key: "GIANT_EAGLE", - }; - /** - * Grubhub account type. - */ - static readonly GRUBHUB: AccountType = { - type: "RETAILER", - icon: GrubHubIcon, - name: "Grubhub", - key: "GRUBHUB", - }; - /** - * Harris Teeter account type. - */ - static readonly HARRIS_TEETER: AccountType = { - type: "RETAILER", - icon: HarrisTeeterIcon, - name: "Harris Teeter", - key: "HARRIS_TEETER", - }; - /** - * H.E.B account type. - */ - static readonly HEB: AccountType = { - type: "RETAILER", - icon: HEBIcon, - name: "H.E.B", - key: "HEB", - }; - /** - * Home Depot account type. - */ - static readonly HOME_DEPOT: AccountType = { - type: "RETAILER", - icon: HomeDepotIcon, - name: "Home Depot", - key: "HOME_DEPOT", - }; - /** - * HyVee account type. - */ - static readonly HYVEE: AccountType = { - type: "RETAILER", - icon: HyVeeIcon, - key: "HYVEE", - name: "HyVee", - }; - /** - * Instacart account type. - */ - static readonly INSTACART: AccountType = { - type: "RETAILER", - icon: InstacartIcon, - name: "Instacart", - key: "INSTACART", - }; - /** - * Jewel Osco account type. - */ - static readonly JEWEL_OSCO: AccountType = { - type: "RETAILER", - icon: JewelOscoIcon, - name: "Jewel Osco", - key: "JEWEL_OSCO", - }; - /** - * Kohl’s account type. - */ - static readonly KOHLS: AccountType = { - type: "RETAILER", - icon: KohlsIcon, - name: "Kohl’s", - key: "KOHLS", - }; - /** - * Kroger account type. - */ - static readonly KROGER: AccountType = { - type: "RETAILER", - icon: KrogerIcon, - name: "Kroger", - key: "KROGER", - }; - /** - * Lowe’s account type. - */ - static readonly LOWES: AccountType = { - type: "RETAILER", - icon: LowesIcon, - name: "Lowe’s", - key: "LOWES", - }; - /** - * Macy’s account type. - */ - static readonly MACYS: AccountType = { - type: "RETAILER", - icon: MacysIcon, - name: "Macy’s", - key: "MACYS", - }; - /** - * Marshalls account type. - */ - static readonly MARSHALLS: AccountType = { - type: "RETAILER", - icon: MarshallsIcon, - name: "Marshalls", - key: "MARSHALLS", - }; - /** - * Meijer account type. - */ - static readonly MEIJER: AccountType = { - type: "RETAILER", - icon: MeijerIcon, - name: "Meijer", - key: "MEIJER", - }; - /** - * Nike account type. - */ - static readonly NIKE: AccountType = { - type: "RETAILER", - icon: NikeIcon, - name: "Nike", - key: "NIKE", - }; - /**} - * Microsoft Outlook account type. - */ - // static readonly OUTLOOK: AccountType = { - // name:"Outlook", - // type: "Email", - // icon: "", - // } - - /** - * Publix account type. - */ - static readonly PUBLIX: AccountType = { - type: "RETAILER", - icon: PublixIcon, - name: "Publix", - key: "PUBLIX", - }; - /** - * Ralphs account type. - */ - static readonly RALPHS: AccountType = { - type: "RETAILER", - icon: RalphsIcon, - name: "Ralphs", - key: "RALPHS", - }; - /** - * RiteAid account type. - */ - static readonly RITE_AID: AccountType = { - type: "RETAILER", - icon: RiteAidIcon, - name: "RiteAid", - key: "RITE_AID", - }; - /** - * Safeway account type. - */ - static readonly AFEWAY: AccountType = { - type: "RETAILER", - icon: "", - name: "Safeway", - key: "AFEWAY", - }; - /** - * Sam’s Club account type. - */ - static readonly SAMS_CLUB: AccountType = { - type: "RETAILER", - icon: SamsClubIcon, - name: "Sam’s Club", - key: "SAMS_CLUB", - }; - /** - * Seamless account type. - */ - static readonly SEAMLESS: AccountType = { - type: "RETAILER", - icon: SeamlessIcon, - name: "Seamless", - key: "SEAMLESS", - }; - /** - * Sephora account type. - */ - static readonly SEPHORA: AccountType = { - type: "RETAILER", - icon: SephoraIcon, - name: "Sephora", - key: "SEPHORA", - }; - /** - * Shipt account type. - */ - static readonly SHIPT: AccountType = { - type: "RETAILER", - icon: ShiptIcon, - name: "Shipt", - key: "SHIPT", - }; - /** - * ShopRite account type. - */ - static readonly SHOPRITE: AccountType = { - type: "RETAILER", - icon: ShopRiteIcon, - name: "Shoprite", - key: "SHOPRITE", - }; - - /** - * Sprouts account type. - */ - static readonly SPROUTS: AccountType = { - type: "RETAILER", - icon: SproutsIcon, - name: "Sprouts", - key: "SPROUTS", - }; - /** - * Staples account type. - */ - static readonly STAPLES: AccountType = { - type: "RETAILER", - icon: StaplesIcon, - name: "Staples", - key: "STAPLES", - }; - /** - * Staples Canada account type. - */ - static readonly STAPLES_CA: AccountType = { - type: "RETAILER", - icon: StaplesCanadaIcon, - name: "Staples Canada", - key: "STAPLES_CA", - }; - /** - * Starbucks account type. - */ - static readonly STARBUCKS: AccountType = { - type: "RETAILER", - icon: StarbucksIcon, - name: "Starbucks", - key: "STARBUCKS", - }; - /** - * Taco Bell account type. - */ - static readonly TACO_BELL: AccountType = { - type: "RETAILER", - icon: TacoBellIcon, - name: "Taco Bell", - key: "TACO_BELL", - }; - /** - * Target account type. - */ - static readonly TARGET: AccountType = { - type: "RETAILER", - icon: TargetIcon, - name: "Target", - key: "TARGET", - }; - /** - * T.J.Maxx account type. - */ - static readonly TJ_MAXX: AccountType = { - type: "RETAILER", - icon: TJMaxxIcon, - name: "T.J.Maxx", - key: "TJ_MAXX", - }; - /** - * UberEats account type. - */ - static readonly UBER_EATS: AccountType = { - type: "RETAILER", - icon: UberEatsIcon, - name: "UberEats", - key: "UBER_EATS", - }; - /** - * Ulta account type. - */ - static readonly ULTA: AccountType = { - type: "RETAILER", - icon: UltaIcon, - name: "Ulta", - key: "ULTA", - }; - /** - * Vons account type. - */ - static readonly VONS: AccountType = { - type: "RETAILER", - icon: VonsIcon, - name: "Vons", - key: "VONS", - }; - /**} - * Walgreens account type. - */ - static readonly WALGREENS: AccountType = { - type: "RETAILER", - icon: WalgreensIcon, - name: "Walgreens", - key: "WALGREENS", - }; - /** - * Walmart account type. - */ - static readonly WALMART: AccountType = { - type: "RETAILER", - icon: WalmartIcon, - name: "Walmart", - key: "WALMART", - }; - /** - * Walmart Canada account type. - */ - static readonly WALMART_CA: AccountType = { - type: "RETAILER", - icon: WalmartCanadaIcon, - name: "Walmart Canada", - key: "WALMART_CA", - }; - /** - * Wegman’s account type. - */ - static readonly WEGMANS: AccountType = { - type: "RETAILER", - icon: WegmansIcon, - name: "Wegman’s", - key: "WEGMANS", - }; - // static readonly YAHOO: AccountType = { - // type: "Email", - // icon: '', - // name: "Yahoo", - // key: "YAHOO" - // } -} diff --git a/bkup/receipt/receipt-account.ts b/bkup/receipt/receipt-account.ts deleted file mode 100644 index e28e8493..00000000 --- a/bkup/receipt/receipt-account.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import type { Account } from "@mytiki/tiki-capture-receipt-capacitor"; -import type { AccountType } from "./receipt-account-type"; -import { AccountTypeCommom } from "./receipt-account-type"; - -/** - * Represents a 3rd-party account used to scrape receipts. - */ -export class ReceiptAccount { - /** - * The username of the account. - */ - username: string; - /** - * The 3rd-party account type. - */ - accountType: AccountType; - /** - * The password of the account. Only present during login. - */ - password?: string; - /** - * Indicates whether the account credentials have been verified. - */ - isVerified: boolean; - - /** - * Creates a new ReceiptAccount instance. - * @param username - The username of the account. - * @param type - The type of account. - * @param password - An optional password for the account. - * @param verified - Indicates whether the account credentials have been verified. Default false. - */ - constructor( - username: string, - accountType: AccountType, - password?: string, - isVerified?: boolean, - ) { - this.username = username; - this.accountType = accountType; - this.password = password; - this.isVerified = isVerified ?? false; - } - - static fromValue(account: Account): ReceiptAccount { - if (account) - return new ReceiptAccount( - account.username, - account.accountType, - account.password, - account.isVerified, - ); - else throw Error(`Unsupported value: ${account}`); - } - static fromSource(account: Account): ReceiptAccount { - if (account) { - let accountSource = Object.values(AccountTypeCommom).find( - (accountObj) => accountObj.key === account.source, - ); - return new ReceiptAccount( - account.username, - accountSource, - undefined, - account.isVerified, - ); - } else throw Error(`Unsupported value: ${account}`); - } - - get icon(): string { - return this.accountType.icon!; - } -} diff --git a/bkup/receipt/receipt-event.ts b/bkup/receipt/receipt-event.ts deleted file mode 100644 index 4ea482e6..00000000 --- a/bkup/receipt/receipt-event.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -/** - * Supported receipt event types - */ -export enum ReceiptEvent { - /** - * A new receipt(s) scanned or scraped. - */ - SCAN, - - /** - * An account successfully linked (aka login). - */ - LINK, - - /** - * An account successfully unlinked (aka logout). - */ - UNLINK, - - /** - * Reward points redeemed/cashed out. - */ - REDEEM, -} diff --git a/bkup/receipt/receipt-service.ts b/bkup/receipt/receipt-service.ts deleted file mode 100644 index b413ab8c..00000000 --- a/bkup/receipt/receipt-service.ts +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import type { ReceiptCapture } from "@mytiki/tiki-capture-receipt-capacitor"; -import * as TikiReceiptCapture from "@mytiki/tiki-capture-receipt-capacitor"; -import { TikiService } from "../../src/service/tiki-service"; -import { ReceiptAccount } from "./receipt-account"; -import { ReceiptEvent } from "./receipt-event"; -import { HistoryEvent } from "../history/history-event"; -import type { ScanType } from "./receipt-account-type"; - -/** - * Service responsible for handling receipt-related operations and events. - */ -export class ReceiptService { - /** - * OCR confidence threshold for considering a receipt scan valid. - */ - static readonly OCR_THRESHOLD = 0.9; - - /** - * The raw plugin instance. Use to call {@link TikiReceiptCapture} directly. - */ - readonly plugin: ReceiptCapture = TikiReceiptCapture.instance; - - /** - * The local cached accounts - */ - get cachedAccounts() { - return this._accounts; - } - - private readonly tiki: TikiService; - private _accounts: ReceiptAccount[] = []; - private _onAccountListeners: Map void> = - new Map(); - private _onReceiptListeners: Map< - string, - (receipt: TikiReceiptCapture.Receipt, account?: ReceiptAccount) => void - > = new Map(); - - /** - * Creates an instance of the ReceiptService class. - * - * Do not construct directly. Call from {@link TikiService}. - * - * @param tiki {TikiService} The parent service instance. - */ - constructor(tiki: TikiService) { - this.tiki = tiki; - } - - /** - * Initializes the Microblink SDK. - * - * Ask your account manager for the keys. - * - * @param scanKey {string} Microblink scan Key - * @param intelKey {string} Microblik product intel key - */ - async initialize(scanKey: string, intelKey: string) { - await this.plugin.initialize(scanKey, intelKey).catch((error) => { - throw Error(`Could not initialize; Error: ${error}`); - }); - } - - /** - * Login into a retailer or email account to scan for receipts. - * also saves that account in cache. - * @param account {ReceiptAccount} The account to login. - */ - async login(account: ReceiptAccount) { - await this.plugin.login( - account.username, - account.password!, - account.accountType.key!, - ); - account.isVerified = true; - this.addAccount(account); - await this.process(ReceiptEvent.LINK, { - account: account, - }); - } - - /** - * Log out from one or all {@link ReceiptAccount}. - * - * The logout method will remove the credentials from the cache and remove all - * cached data for this account. - * - * @param {ReceiptAccount} account - which account logout from. Logout from all - * accounts if undefined. - */ - async logout(account: ReceiptAccount | undefined = undefined) { - if (!account) { - await this.plugin.logout(); - this._accounts = []; - return; - } - await this.plugin.logout( - account.username, - account.password!, - account.accountType.key, - ); - this.removeAccount(account!); - await this.process(ReceiptEvent.UNLINK, { - account: account, - }); - } - - /** - * Retrieves all saved accounts from capture plugin. - * Also add those accounts in cache and scan the receipts from they. - */ - async accounts() { - try { - (await this.plugin.accounts()).accounts.forEach((account) => { - this.addAccount(ReceiptAccount.fromSource(account)); - this.scan("ONLINE"); - }); - } catch (error) { - throw Error(`Could not load the accounts; Error: ${error}`); - } - } - - /** - * Scan for receipts. - * It can be a physical one or all virtual receipts (from email/retailer accounts). - * @param scanType - the type of the scan - * @param account - the account to be scanned. - */ - async scan( - scanType: ScanType | undefined, - account?: ReceiptAccount, - ): Promise { - if (scanType === "PHYSICAL") { - const license = await this.tiki.sdk.getLicense(); - if (license != undefined) { - const receipt = await this.plugin.scan(scanType); - if (receipt.receipt.ocrConfidence > ReceiptService.OCR_THRESHOLD) { - await this.addReceipt(receipt.receipt); - } else { - console.warn( - `Receipt ignored: Confidence: ${receipt.receipt.ocrConfidence}`, - ); - } - } else - throw new Error( - `No license found for ${this.tiki.sdk.id}. User must first consent to the program.`, - ); - } - const receipts = await this.plugin - .scan(scanType, account!) - .catch((error) => { - throw new Error(error); - }); - this.addReceipt(receipts.receipt); - } - - /** - * Register an account event listener. - * - * @param id - Identifier for the listener. - * @param listener - The callback function to be called when a new account is added or removed. - */ - onAccount(id: string, listener: (account: ReceiptAccount) => void): void { - this._onAccountListeners.set(id, listener); - } - - /** - * Register a receipt event listener. - * - * @param id - Identifier for the listener. - * @param listener - The callback function to be called whenever a new receipt is parsed. - */ - onReceipt( - id: string, - listener: ( - receipt: TikiReceiptCapture.Receipt, - account?: ReceiptAccount, - ) => void, - ) { - this._onReceiptListeners.set(id, listener); - } - - /** - * save an account in cache and calls the scan for receipts - * @param account - the account to be saved and scanned - */ - private addAccount(account: ReceiptAccount): string | void { - this._accounts.push(account); - this._onAccountListeners.forEach((listener) => listener(account)); - this.scan(account.accountType.type, account).catch((error) => { - throw new Error(error); - }); - } - /** - * remove an account of the cache. - * @param account - the account to be removed. - */ - private removeAccount(account: ReceiptAccount): void { - this._accounts = this._accounts.filter( - (acc) => - acc.username != account.username && - acc.accountType.type != account.accountType.type, - ); - this._onAccountListeners.forEach((listener) => listener(account)); - } - - /** - * verify/validate a Receipt to process it. - * @param receipt - the receipt to be verified and processed after - * @param account - the account that owns the receipt. - */ - private async addReceipt( - receipt: TikiReceiptCapture.Receipt, - account?: TikiReceiptCapture.Account, - ) { - if (!receipt.duplicate && !receipt.fraudulent) { - await this.tiki.sdk.ingest(receipt); - await this.process(ReceiptEvent.SCAN, { - receipt: receipt, - account: ReceiptAccount.fromValue(account!), - }); - this._onReceiptListeners.forEach((listener) => - listener(receipt, ReceiptAccount.fromValue(account!)), - ); - } else { - console.warn( - `Receipt ignored β€” duplicate: ${receipt.duplicate} | fraudulent: ${receipt.fraudulent} | confidence: ${receipt.ocrConfidence}`, - ); - } - } - - /** - * Process the receipts that passed in the addReceipt verification - * @param event - the type of the event that will be processed, in this case its SCAN - * @param details - the receipt and account - * will add the receipt to the history and rewards points to the account - */ - private async process( - event: ReceiptEvent, - details: { - receipt?: TikiReceiptCapture.Receipt; - account?: ReceiptAccount; - }, - ) { - const rewards = this.tiki.config.rewards; - for (const reward of rewards) { - const amount = reward.issuer(event, details); - if (amount != undefined) { - const historyEvent = HistoryEvent.new( - amount, - new Date(), - event, - details.account?.accountType.type?.valueOf(), - ); - await this.tiki.sdk.createPayable( - amount, - historyEvent.name, - details.receipt?.blinkReceiptId, - ); - this.tiki.history.add(historyEvent); - } - } - } -} diff --git a/bkup/scripts/setup-local-ios.sh b/bkup/scripts/setup-local-ios.sh deleted file mode 100644 index 9a28614b..00000000 --- a/bkup/scripts/setup-local-ios.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -cd ../tiki-capture-receipt-capacitor -npm install -npm run build -npm run verify:ios -cd example -npm install -npm run build-only -cd ../../tiki-receipt-capacitor -npm install ../tiki-capture-receipt-capacitor -cd example -npm install ../../tiki-capture-receipt-capacitor -npm install ../ -cd .. -npm run example:ios \ No newline at end of file diff --git a/bkup/scripts/setup-local.sh b/bkup/scripts/setup-local.sh deleted file mode 100755 index b8e2bedf..00000000 --- a/bkup/scripts/setup-local.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -cd ../tiki-capture-receipt-capacitor -npm install -npm run build -npm run verify:android -cd example -npm install -npm run build-only -cd ../../tiki-receipt-capacitor -npm install ../tiki-capture-receipt-capacitor -cd example -npm install ../../tiki-capture-receipt-capacitor -npm install ../ -cd .. -npm run example:android diff --git a/bkup/scripts/setup-prod.sh b/bkup/scripts/setup-prod.sh deleted file mode 100644 index 6eca7673..00000000 --- a/bkup/scripts/setup-prod.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -cd example -npm install ../ -npm run example:android diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 0bd65ce9..00000000 --- a/example/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Example App -On launch, the example app generates a new random user id, with a single button called start. Just click start to try out the library for yourself. - -_Note, if you press start before the initialization is complete, a warning will hit your console logs._ - -## Run the App - -1. Clone this repository -```shell -git clone https://github.com/tiki-bar/tiki-receipt-capacitor -``` - -2. Build the App -```shell -cd example/ && npm install && npm run build-only && npx cap sync -``` - -3. Run the App -```shell -npx cap run android -``` - -## Overview - -- Check out `example/src/main.ts` to view an example configuration of the library. -- In `example/src/app.vue` you'll find Vue template showcasing initialization, logout, and using a button to open the pre-built UI. -- In `example/src/assets/*` there are samples for program and reward images plus markdown template files for legal terms and the learn more page. Feel free to copy, use, and modify any of these assets. diff --git a/example/ios/App/Podfile.lock b/example/ios/App/Podfile.lock deleted file mode 100644 index 84f0eac1..00000000 --- a/example/ios/App/Podfile.lock +++ /dev/null @@ -1,34 +0,0 @@ -PODS: - - Capacitor (5.4.0): - - CapacitorCordova - - CapacitorCordova (5.4.0) - - MytikiTikiCaptureReceiptCapacitor (0.5.0): - - Capacitor - - MytikiTikiSdkCapacitor (0.3.1): - - Capacitor - -DEPENDENCIES: - - "Capacitor (from `../../node_modules/@capacitor/ios`)" - - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" - - "MytikiTikiCaptureReceiptCapacitor (from `../../node_modules/@mytiki/tiki-capture-receipt-capacitor`)" - - "MytikiTikiSdkCapacitor (from `../../node_modules/@mytiki/tiki-sdk-capacitor`)" - -EXTERNAL SOURCES: - Capacitor: - :path: "../../node_modules/@capacitor/ios" - CapacitorCordova: - :path: "../../node_modules/@capacitor/ios" - MytikiTikiCaptureReceiptCapacitor: - :path: "../../node_modules/@mytiki/tiki-capture-receipt-capacitor" - MytikiTikiSdkCapacitor: - :path: "../../node_modules/@mytiki/tiki-sdk-capacitor" - -SPEC CHECKSUMS: - Capacitor: a5cd803e02b471591c81165f400ace01f40b11d3 - CapacitorCordova: 66ce22f9976de30fd816f746e9e92e07d6befafd - MytikiTikiCaptureReceiptCapacitor: 337afd3f86997542d29542650ed00b293ea84cc5 - MytikiTikiSdkCapacitor: 7fb71c6099dd3bba5c75ee7ec1dd30bd90c78c9c - -PODFILE CHECKSUM: edbf290d46d3a64e29e690774515107f33cfbba3 - -COCOAPODS: 1.12.1 diff --git a/example/src/assets/learn-more.md b/example/src/assets/learn-more.md deleted file mode 100644 index 6d85afa3..00000000 --- a/example/src/assets/learn-more.md +++ /dev/null @@ -1,57 +0,0 @@ -# What are Data Rewards? -In principal it's quite straightforward, you have data that businesses want. Many of these businesses are willing to pay you for the legal rights to use it. - -**Q: But don't they already just take it?** -A: Yes, and no. There are several reasons why businesses prefer to legally source data direct from users. There's certain data you have that they can't easily or affordably acquire. The laws around data privacy are radidly changing and this is a lower risk, more sustainable process. And ultimately, data as with anything, straight from the source, is better and cheaper. - -## How does it work? -Once you opt-in to the program, you will see a list of offers for actions you can take to exchange your data for a reward. - -Offers can vary in the types of data, the payout, and the requirements associated. For example, some actions are one-time like taking a photo of a receipt. Where others may require linking your Amazon account for 90 days. - -Data for the program is never automatically collected without your knowledge. You must perform an explicit action to license your data and receive said reward. - -## What rewards are available? -Data rewards are tallied in the form of reward points, similar to something like airline miles. Each offer details the action required, the reward amount, and if there are any additional requirements. - -**The conversion rate is $1 USD = 1,000 points.** - -*Example:* - -![Earn 10 points for every receipt you scan.](https://cdn.mytiki.com/assets/reward-example.png) - - -### How do I get paid? -Just press the Redeem button to begin the withdrawl process to convert your points into cashback. Depending on your account and settings a withdrawl may be subject to a minimum balance or other program participation minimums. - -![Redeem Points](https://cdn.mytiki.com/assets/redeem-button.png) - - -## What happens to my data? - -When you agree to participate in the Data Rewards program a Data License is created specifying how data can be exchanged and used. - -**At this point, none of your data is actually exchanged, only the legal terms and rights are set.** - -If you decide to perform one or more of the rewarded actions detailed in the offer(s), only the data required for fulfilment of the offer is uploaded, and used solely in accordance with your Data License. - -### What is a Data License? - -A Data License declares your ownership over a given set of data, specifying the terms, conditions, and compensation for the use of said dataset. - -In essence, it's a legal agreement that a) ensures your fair compensation for your data and b) contractually obligates businesses to only utilize your data for use cases explicitly defined. - -### Can I change my mind? - -Of course! Since the Data Reward program only works on explicit actions, just stop performing rewarded actions and unlink any connected accounts. Or, if you want to completely opt-out of the program, just contact our support team, and we will terminate your Data License. - -It's important to note that you are legally licensing your data for fair compensation meaning there are no takebacksies on past trades. For example, if you bought an apple for $1 and then ate it, you can't request your $1 back from the vendor, but you can definitely not buy any more apples. - -The same logic applies here, you can't take back the data you exchanged, but you can absolutely stop exchanging any more data. - -### What if I don't participate? - -Participation is **100% optional**. Declining to participate will not negatively impact your current experience. - -  -  diff --git a/example/src/assets/link-reward.png b/example/src/assets/link-reward.png deleted file mode 100644 index 0401b168..00000000 Binary files a/example/src/assets/link-reward.png and /dev/null differ diff --git a/example/src/assets/more-reward.png b/example/src/assets/more-reward.png deleted file mode 100644 index 35f97e37..00000000 Binary files a/example/src/assets/more-reward.png and /dev/null differ diff --git a/example/src/assets/program.png b/example/src/assets/program.png deleted file mode 100644 index 211a1559..00000000 Binary files a/example/src/assets/program.png and /dev/null differ diff --git a/example/src/assets/scan-reward.png b/example/src/assets/scan-reward.png deleted file mode 100644 index 2f94cae1..00000000 Binary files a/example/src/assets/scan-reward.png and /dev/null differ diff --git a/example/src/assets/terms.md b/example/src/assets/terms.md deleted file mode 100644 index 8a139425..00000000 --- a/example/src/assets/terms.md +++ /dev/null @@ -1,94 +0,0 @@ -# User Data License Agreement - -This is an agreement between **you, the *"User"*** and **[company name], the *"Company"***, the licensor. The agreement, the User Data License Agreement (*"UDLA"*), sets out both parties rights and obligations in respect to the licensing and use of the data referred to within. - -The terms of the UDLA are relevant for and apply only to those Users and licensors who have elected to participate in the data licensing program detailed within this agreement. The terms and conditions of this agreement are to be read as a whole, and each clause is deemed essential to the agreement. - -Your participation in this data licensing program is voluntary and will not affect your rights as a consumer or customer of our products and services in any way. - -## 1. Data Use - -By participating in the Company's data licensing program, you, the User, are granting us, the Company, the right to use and share certain data about you (*"Shared Information"*) with the carefully selected partners and customers as described in this Section. In exchange for you granting us this right, we agree to compensate you as described in Section 3. - -In addition, we contractually require any selected partners and customers receiving your Shared Information to not further share, disclose, or use it for any other purpose than the purposes described in this Section. - -### A. Shared Information - -The following details the types of data collected (*"Collected Data"*), the purposes for which the data may be utilized (*"Use Cases"*), and optionally where the data may be stored or processed (*"Destinations"*). In aggregate, this data is the Shared Information. - -#### Collected Data -* *User ID* - Such as screen name, handle, account ID, assigned user ID, customer number, or other user- or account-level ID that can be used to identify a particular user or account. -* *Purchase History* - An account’s or individual’s purchases or purchase tendencies. - -#### Use Cases -* *Attribution* - determine the actions that led to an outcome. -* *AI training* - train machine learning models with user data. -* *Analytics* - extract insights and signals from user data. -* *Distribution* - distribute/relicense raw data, insights, signals, etc., to 3rd-parties. - -#### Destinations -* *Tiki inc. (mytiki.com)* - the Company's zero-party data processor. - -## 2. Compensation - -We, the Company, agree to compensate you, the User, with the compensation described below for granting us a license to use your Shared Information listed in Section 1.A. - -Any changes in compensation require a new agreement. This will have the effect of cancelling and voiding this and any earlier agreements or licenses. - -### A. Program - -We, the Company, agree to compensate you, the User, for granting us a license to use your Shared Information in exchange for reward points, redeemable for cash back within the application at an exchange rate of **1 USD per 1,000 points**. - -The amount of reward points earned for Shared Information is subject to the specific offers and terms displayed within the application. For example, 100 points per account linked for 90 days and 10 points for a receipt scanned. - -Redemption of points for cash back payouts may be subject to minimum balance thresholds, participation durations, and other application restrictions. - -### B. Termination - -If an opt-out or termination occurs, no new Shared Information will be exchanged for rewards. Pre-existing earned rewards will not be affected. Refer to Section 5 for additional termination details. - -### C. Requirements - -This offer is contingent upon you the User, providing reasonable access to the Shared Information through the use of one or more of our products and services. Failure to do so, or attempts to mask, obfuscate, or manipulate the Shared Information may terminate this agreement. - -## 3. Privacy and Confidentiality - -When you, the User, agree to the data licensing program, you agree to the collection of Shared Information by the Company, which may include zero, first, and third-party data covered under our [Terms of Service](Link to Terms of Service) and [Privacy Policy](Link to Privacy Policy). - -This agreement does not replace our Terms of Service or Privacy Policy and any rights or representations unless otherwise explicitly stated extend to this agreement, including but not limited to GDPR, CCPA, and PIPEDA considerations. - -While most Shared Information is not Personally Identifiable Information, it may include information about your account (such as user ids or email address) and information about your computer or device (such as IP address or operating system). Refer Section 1.A for specifics. - -## 4. Duration - -Unless otherwise specified under Section 2, this agreement to license your Shared Information will be considered perpetual. - -## 5. Termination - -Any amendments or alterations to this agreement will render it void. If the Company wishes to change, amend or alter the agreement in any way, the Company will notify you, the User of the new offer. This subsequent offer and, if you accept it, the new UDLA will replace any and all earlier UDLAs between you, the User and the Company. - -The Company may decide to terminate the agreement at any time, for any reason, by notifying you, the User of their intention to terminate. - -### A. User Opt Out - -You, the User, may choose to opt out of this program at any time, by selecting the opt-out button within the application. The choice to do so will have no impact on any other services the Company provide you and the Company will not hold it against you in any way. - -Upon receiving your opt-out notice, the Company will stop all future collection of Shared Information as described in Section 1.A as soon as possible. The Company may continue to use Shared Information licensed prior to the opt-out. - -## 6. Governing Law - -The governing law of this agreement **[insert jurisdiction or address]**, where the company is located or headquartered. - -## 7. Data Ownership - -You, the User, agree that the Shared Information is your data, you are the legal owner, and that you are allowed to share such data. - -You cannot participate in the program if you are underage. If this is the case, the agreement will be immediately rendered void. - -## 8. Limitation of Liability - -Each party's liability to the other parties for any loss, cost, claim, injury, liability, or expense, including reasonable attorney's fees, relating to, or arising from any act or omission in its performance of this agreement, shall be limited to the amount of direct damage actually incurred. In no event shall any party be liable to the other parties for any indirect, special, consequential, or punitive damages. - -## 9. Third-Party Indemnity - -You, the User, and the Company agree to defend, indemnify, and hold harmless Tiki Inc., and its directors, officers, employees, and agents from and against any and all third-party claims, demands, and liabilities, including reasonable attorneys fees, resulting from or arising out of (i) the Services provided under this Agreement actually or allegedly infringing or violating any patents, copyrights, trade secrets, licenses, or other intellectual property rights of a third-party; (ii) any breach of the Company's representations and warranties in this Agreement; or (iii) The Company's failure to comply with the Company's obligations under any and all laws, rules or regulations applicable to the Company or the Services provided under this Agreement. diff --git a/example/vue2/.eslintignore b/example/vue2/.eslintignore new file mode 100644 index 00000000..6b06e31c --- /dev/null +++ b/example/vue2/.eslintignore @@ -0,0 +1,4 @@ +build +dist +vite.config.ts +.eslintrc diff --git a/example/vue2/.eslintrc b/example/vue2/.eslintrc new file mode 100644 index 00000000..58fcc6fa --- /dev/null +++ b/example/vue2/.eslintrc @@ -0,0 +1,49 @@ +{ + "root": true, + "env": { + "browser": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:vue/recommended", + "plugin:prettier/recommended" + ], + "parser": "vue-eslint-parser", + "plugins": [ "@typescript-eslint" ], + "parserOptions": { + "parser": "@typescript-eslint/parser", + "sourceType": "module", + "ecmaVersion": "latest", + "project": ["./tsconfig.app.json"], + "extraFileExtensions": [ ".vue" ] + }, + "rules": { + // https://eslint.org/docs/rules/ + "no-fallthrough": "off", // https://github.com/ionic-team/eslint-config/issues/7 + "no-constant-condition": "off", + "no-unused-vars": "off", + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/no-this-alias": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": [ + "error", { "allowArgumentsExplicitlyTypedAsAny": true }], + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/array-type": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-optional-chain": "error", + + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ] + } +} diff --git a/example/.gitignore b/example/vue2/.gitignore similarity index 100% rename from example/.gitignore rename to example/vue2/.gitignore diff --git a/example/android/.gitignore b/example/vue2/android/.gitignore similarity index 100% rename from example/android/.gitignore rename to example/vue2/android/.gitignore diff --git a/example/android/app/.gitignore b/example/vue2/android/app/.gitignore similarity index 100% rename from example/android/app/.gitignore rename to example/vue2/android/app/.gitignore diff --git a/example/vue2/android/app/build.gradle b/example/vue2/android/app/build.gradle new file mode 100644 index 00000000..80c82102 --- /dev/null +++ b/example/vue2/android/app/build.gradle @@ -0,0 +1,59 @@ +apply plugin: 'com.android.application' + +android { + namespace "com.mytiki.receipt.capacitor" + compileSdkVersion rootProject.ext.compileSdkVersion + defaultConfig { + applicationId "com.mytiki.sdk.capture.receipt.capacitor" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + aaptOptions { + // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. + // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + packagingOptions { + exclude("META-INF/LICENSE-notice.md") + exclude("META-INF/LICENSE.md") + exclude("META-INF/NOTICE.md") + } +} + +repositories { + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' + } +} + +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" + implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" + implementation project(':capacitor-cordova-android-plugins') +} + +apply from: 'capacitor.build.gradle' + +try { + def servicesJSON = file('google-services.json') + if (servicesJSON.text) { + apply plugin: 'com.google.gms.google-services' + } +} catch(Exception e) { + logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") +} diff --git a/example/android/app/capacitor.build.gradle b/example/vue2/android/app/capacitor.build.gradle similarity index 78% rename from example/android/app/capacitor.build.gradle rename to example/vue2/android/app/capacitor.build.gradle index 89b7614a..b4d2927a 100644 --- a/example/android/app/capacitor.build.gradle +++ b/example/vue2/android/app/capacitor.build.gradle @@ -9,7 +9,8 @@ android { apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { - implementation project(':mytiki-tiki-capture-receipt-capacitor') + implementation project(':capacitor-preferences') + implementation project(':mytiki-capture-receipt-capacitor') implementation project(':mytiki-tiki-sdk-capacitor') } diff --git a/example/android/app/proguard-rules.pro b/example/vue2/android/app/proguard-rules.pro similarity index 100% rename from example/android/app/proguard-rules.pro rename to example/vue2/android/app/proguard-rules.pro diff --git a/example/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/example/vue2/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java similarity index 100% rename from example/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java rename to example/vue2/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java diff --git a/example/vue2/android/app/src/main/AndroidManifest.xml b/example/vue2/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..4d7ca380 --- /dev/null +++ b/example/vue2/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java b/example/vue2/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java similarity index 100% rename from example/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java rename to example/vue2/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java diff --git a/example/android/app/src/main/res/drawable-land-hdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-land-hdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-land-hdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-land-hdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-land-mdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-land-mdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-land-mdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-land-mdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-land-xhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-land-xhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-land-xhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-land-xhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-land-xxhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-land-xxhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-land-xxhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-land-xxxhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-land-xxxhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-land-xxxhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-port-hdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-port-hdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-port-hdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-port-hdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-port-mdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-port-mdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-port-mdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-port-mdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-port-xhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-port-xhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-port-xhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-port-xhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-port-xxhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-port-xxhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-port-xxhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/example/vue2/android/app/src/main/res/drawable-port-xxxhdpi/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable-port-xxxhdpi/splash.png rename to example/vue2/android/app/src/main/res/drawable-port-xxxhdpi/splash.png diff --git a/example/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/example/vue2/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from example/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to example/vue2/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/example/android/app/src/main/res/drawable/ic_launcher_background.xml b/example/vue2/android/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from example/android/app/src/main/res/drawable/ic_launcher_background.xml rename to example/vue2/android/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/example/android/app/src/main/res/drawable/splash.png b/example/vue2/android/app/src/main/res/drawable/splash.png similarity index 100% rename from example/android/app/src/main/res/drawable/splash.png rename to example/vue2/android/app/src/main/res/drawable/splash.png diff --git a/example/android/app/src/main/res/layout/activity_main.xml b/example/vue2/android/app/src/main/res/layout/activity_main.xml similarity index 100% rename from example/android/app/src/main/res/layout/activity_main.xml rename to example/vue2/android/app/src/main/res/layout/activity_main.xml diff --git a/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/example/vue2/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to example/vue2/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example/vue2/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to example/vue2/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png rename to example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to example/vue2/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png rename to example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to example/vue2/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png rename to example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to example/vue2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png rename to example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to example/vue2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png rename to example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to example/vue2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/values/ic_launcher_background.xml b/example/vue2/android/app/src/main/res/values/ic_launcher_background.xml similarity index 100% rename from example/android/app/src/main/res/values/ic_launcher_background.xml rename to example/vue2/android/app/src/main/res/values/ic_launcher_background.xml diff --git a/example/android/app/src/main/res/values/strings.xml b/example/vue2/android/app/src/main/res/values/strings.xml similarity index 100% rename from example/android/app/src/main/res/values/strings.xml rename to example/vue2/android/app/src/main/res/values/strings.xml diff --git a/example/vue2/android/app/src/main/res/values/styles.xml b/example/vue2/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..be874e54 --- /dev/null +++ b/example/vue2/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/example/android/app/src/main/res/xml/file_paths.xml b/example/vue2/android/app/src/main/res/xml/file_paths.xml similarity index 100% rename from example/android/app/src/main/res/xml/file_paths.xml rename to example/vue2/android/app/src/main/res/xml/file_paths.xml diff --git a/example/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/example/vue2/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java similarity index 100% rename from example/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java rename to example/vue2/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java diff --git a/example/android/build.gradle b/example/vue2/android/build.gradle similarity index 100% rename from example/android/build.gradle rename to example/vue2/android/build.gradle diff --git a/example/android/capacitor.settings.gradle b/example/vue2/android/capacitor.settings.gradle similarity index 53% rename from example/android/capacitor.settings.gradle rename to example/vue2/android/capacitor.settings.gradle index 2ecf7654..6327a0f3 100644 --- a/example/android/capacitor.settings.gradle +++ b/example/vue2/android/capacitor.settings.gradle @@ -2,8 +2,11 @@ include ':capacitor-android' project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') -include ':mytiki-tiki-capture-receipt-capacitor' -project(':mytiki-tiki-capture-receipt-capacitor').projectDir = new File('../node_modules/@mytiki/tiki-capture-receipt-capacitor/android') +include ':capacitor-preferences' +project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android') + +include ':mytiki-capture-receipt-capacitor' +project(':mytiki-capture-receipt-capacitor').projectDir = new File('../node_modules/@mytiki/capture-receipt-capacitor/android') include ':mytiki-tiki-sdk-capacitor' project(':mytiki-tiki-sdk-capacitor').projectDir = new File('../node_modules/@mytiki/tiki-sdk-capacitor/android') diff --git a/example/android/gradle.properties b/example/vue2/android/gradle.properties similarity index 100% rename from example/android/gradle.properties rename to example/vue2/android/gradle.properties diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/vue2/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from example/android/gradle/wrapper/gradle-wrapper.jar rename to example/vue2/android/gradle/wrapper/gradle-wrapper.jar diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/vue2/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from example/android/gradle/wrapper/gradle-wrapper.properties rename to example/vue2/android/gradle/wrapper/gradle-wrapper.properties diff --git a/example/android/gradlew b/example/vue2/android/gradlew similarity index 100% rename from example/android/gradlew rename to example/vue2/android/gradlew diff --git a/example/android/gradlew.bat b/example/vue2/android/gradlew.bat similarity index 100% rename from example/android/gradlew.bat rename to example/vue2/android/gradlew.bat diff --git a/example/android/settings.gradle b/example/vue2/android/settings.gradle similarity index 100% rename from example/android/settings.gradle rename to example/vue2/android/settings.gradle diff --git a/example/vue2/android/variables.gradle b/example/vue2/android/variables.gradle new file mode 100644 index 00000000..631e6222 --- /dev/null +++ b/example/vue2/android/variables.gradle @@ -0,0 +1,16 @@ +ext { + minSdkVersion = 22 + compileSdkVersion = 34 + targetSdkVersion = 34 + androidxActivityVersion = '1.7.0' + androidxAppCompatVersion = '1.6.1' + androidxCoordinatorLayoutVersion = '1.2.0' + androidxCoreVersion = '1.10.0' + androidxFragmentVersion = '1.5.6' + coreSplashScreenVersion = '1.0.0' + androidxWebkitVersion = '1.6.1' + junitVersion = '4.13.2' + androidxJunitVersion = '1.1.5' + androidxEspressoCoreVersion = '3.5.1' + cordovaAndroidVersion = '10.1.1' +} diff --git a/example/capacitor.config.ts b/example/vue2/capacitor.config.ts similarity index 100% rename from example/capacitor.config.ts rename to example/vue2/capacitor.config.ts diff --git a/example/env.d.ts b/example/vue2/env.d.ts similarity index 100% rename from example/env.d.ts rename to example/vue2/env.d.ts diff --git a/example/index.html b/example/vue2/index.html similarity index 100% rename from example/index.html rename to example/vue2/index.html diff --git a/example/ios/.gitignore b/example/vue2/ios/.gitignore similarity index 100% rename from example/ios/.gitignore rename to example/vue2/ios/.gitignore diff --git a/example/ios/App/App.xcodeproj/project.pbxproj b/example/vue2/ios/App/App.xcodeproj/project.pbxproj similarity index 100% rename from example/ios/App/App.xcodeproj/project.pbxproj rename to example/vue2/ios/App/App.xcodeproj/project.pbxproj diff --git a/example/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/vue2/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from example/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to example/vue2/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/App/App.xcworkspace/contents.xcworkspacedata b/example/vue2/ios/App/App.xcworkspace/contents.xcworkspacedata similarity index 100% rename from example/ios/App/App.xcworkspace/contents.xcworkspacedata rename to example/vue2/ios/App/App.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/vue2/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from example/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to example/vue2/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/example/ios/App/App/AppDelegate.swift b/example/vue2/ios/App/App/AppDelegate.swift similarity index 100% rename from example/ios/App/App/AppDelegate.swift rename to example/vue2/ios/App/App/AppDelegate.swift diff --git a/example/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/example/vue2/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png similarity index 100% rename from example/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png rename to example/vue2/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png diff --git a/example/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/vue2/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from example/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json rename to example/vue2/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/example/ios/App/App/Assets.xcassets/Contents.json b/example/vue2/ios/App/App/Assets.xcassets/Contents.json similarity index 100% rename from example/ios/App/App/Assets.xcassets/Contents.json rename to example/vue2/ios/App/App/Assets.xcassets/Contents.json diff --git a/example/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json similarity index 100% rename from example/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json rename to example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json diff --git a/example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png similarity index 100% rename from example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png rename to example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png diff --git a/example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png similarity index 100% rename from example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png rename to example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png diff --git a/example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png similarity index 100% rename from example/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png rename to example/vue2/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png diff --git a/example/ios/App/App/Base.lproj/LaunchScreen.storyboard b/example/vue2/ios/App/App/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from example/ios/App/App/Base.lproj/LaunchScreen.storyboard rename to example/vue2/ios/App/App/Base.lproj/LaunchScreen.storyboard diff --git a/example/ios/App/App/Base.lproj/Main.storyboard b/example/vue2/ios/App/App/Base.lproj/Main.storyboard similarity index 100% rename from example/ios/App/App/Base.lproj/Main.storyboard rename to example/vue2/ios/App/App/Base.lproj/Main.storyboard diff --git a/example/ios/App/App/Info.plist b/example/vue2/ios/App/App/Info.plist similarity index 100% rename from example/ios/App/App/Info.plist rename to example/vue2/ios/App/App/Info.plist diff --git a/example/ios/App/Podfile b/example/vue2/ios/App/Podfile similarity index 50% rename from example/ios/App/Podfile rename to example/vue2/ios/App/Podfile index 5a9e6300..c98b1991 100644 --- a/example/ios/App/Podfile +++ b/example/vue2/ios/App/Podfile @@ -1,15 +1,8 @@ -def assertDeploymentTarget(installer) - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - # ensure IPHONEOS_DEPLOYMENT_TARGET is at least 13.0 - deployment_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f - should_upgrade = deployment_target < 13.0 && deployment_target != 0.0 - if should_upgrade - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' - end - end - end -end +source 'https://github.com/tiki/PodspecRepo.git' +source 'https://github.com/BlinkReceipt/PodSpecRepo.git' +source 'https://cdn.cocoapods.org/' + +require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' platform :ios, '13.0' use_frameworks! @@ -22,13 +15,17 @@ install! 'cocoapods', :disable_input_output_paths => true def capacitor_pods pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - pod 'MytikiTikiCaptureReceiptCapacitor', :path => '../../node_modules/@mytiki/tiki-capture-receipt-capacitor' + pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences' + pod 'MytikiCaptureReceiptCapacitor', :path => '../../node_modules/@mytiki/capture-receipt-capacitor' pod 'MytikiTikiSdkCapacitor', :path => '../../node_modules/@mytiki/tiki-sdk-capacitor' end target 'App' do capacitor_pods - # Add your Pods here + + pod 'BlinkReceipt', '~> 1.39' + pod 'BlinkEReceipt', '~> 2.31' + pod 'TikiSdk', '~> 2.1.0' end post_install do |installer| diff --git a/example/vue2/ios/App/Podfile.lock b/example/vue2/ios/App/Podfile.lock new file mode 100644 index 00000000..bf900b0c --- /dev/null +++ b/example/vue2/ios/App/Podfile.lock @@ -0,0 +1,129 @@ +PODS: + - AccountLinking (2.6.5) + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): + - AppAuth/Core + - BlinkEReceipt (2.31.0): + - AccountLinking (~> 2.6.5) + - AppAuth (~> 1.3) + - BlinkReceipt (~> 1.39.0) + - BRMailCore (~> 0.1) + - BRMSGraphMSALAuthProvider (~> 1.0.0) + - GoogleAPIClientForREST/Gmail (~> 1.3) + - GoogleSignIn (~> 6.2.0) + - GTMAppAuth (~> 1.0) + - MSGraphClientModels (~> 1.3) + - BlinkReceipt (1.39.0) + - BRMailCore (0.1.0) + - BRMSGraphMSALAuthProvider (1.0.0): + - MSAL (~> 1.0) + - MSGraphClientSDK (~> 1.0.0) + - Capacitor (5.4.2): + - CapacitorCordova + - CapacitorCordova (5.4.2) + - CapacitorPreferences (5.0.6): + - Capacitor + - GoogleAPIClientForREST/Core (1.7.0): + - GTMSessionFetcher (< 2.0, >= 1.6.1) + - GoogleAPIClientForREST/Gmail (1.7.0): + - GoogleAPIClientForREST/Core + - GTMSessionFetcher (< 2.0, >= 1.6.1) + - GoogleSignIn (6.2.4): + - AppAuth (~> 1.5) + - GTMAppAuth (~> 1.3) + - GTMSessionFetcher/Core (< 3.0, >= 1.1) + - GTMAppAuth (1.3.1): + - AppAuth/Core (~> 1.6) + - GTMSessionFetcher/Core (< 3.0, >= 1.5) + - GTMSessionFetcher (1.7.2): + - GTMSessionFetcher/Full (= 1.7.2) + - GTMSessionFetcher/Core (1.7.2) + - GTMSessionFetcher/Full (1.7.2): + - GTMSessionFetcher/Core (= 1.7.2) + - MSAL (1.2.5): + - MSAL/app-lib (= 1.2.5) + - MSAL/app-lib (1.2.5) + - MSGraphClientModels (1.3.0) + - MSGraphClientSDK (1.0.0): + - MSGraphClientSDK/Authentication (= 1.0.0) + - MSGraphClientSDK/Common (= 1.0.0) + - MSGraphClientSDK/Authentication (1.0.0) + - MSGraphClientSDK/Common (1.0.0): + - MSGraphClientSDK/Authentication + - MytikiCaptureReceiptCapacitor (0.7.0): + - BlinkEReceipt + - BlinkReceipt + - Capacitor + - MytikiTikiSdkCapacitor (0.3.2): + - Capacitor + - TikiSdk + - TikiSdk (2.1.0) + +DEPENDENCIES: + - BlinkEReceipt (~> 2.31) + - BlinkReceipt (~> 1.39) + - "Capacitor (from `../../node_modules/@capacitor/ios`)" + - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" + - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)" + - "MytikiCaptureReceiptCapacitor (from `../../node_modules/@mytiki/capture-receipt-capacitor`)" + - "MytikiTikiSdkCapacitor (from `../../node_modules/@mytiki/tiki-sdk-capacitor`)" + - TikiSdk (~> 2.1.0) + +SPEC REPOS: + https://github.com/BlinkReceipt/PodSpecRepo.git: + - AccountLinking + - BlinkEReceipt + - BlinkReceipt + - BRMailCore + - BRMSGraphMSALAuthProvider + https://github.com/tiki/PodspecRepo.git: + - TikiSdk + trunk: + - AppAuth + - GoogleAPIClientForREST + - GoogleSignIn + - GTMAppAuth + - GTMSessionFetcher + - MSAL + - MSGraphClientModels + - MSGraphClientSDK + +EXTERNAL SOURCES: + Capacitor: + :path: "../../node_modules/@capacitor/ios" + CapacitorCordova: + :path: "../../node_modules/@capacitor/ios" + CapacitorPreferences: + :path: "../../node_modules/@capacitor/preferences" + MytikiCaptureReceiptCapacitor: + :path: "../../node_modules/@mytiki/capture-receipt-capacitor" + MytikiTikiSdkCapacitor: + :path: "../../node_modules/@mytiki/tiki-sdk-capacitor" + +SPEC CHECKSUMS: + AccountLinking: b1055f8e09d35b54d22c1b807bd692a8224ee9ca + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + BlinkEReceipt: c3e5d1e0486796df84a3b54008e0ae134461f434 + BlinkReceipt: 1e4e8d306ea7b64e26c64851b151ec1306e4f50c + BRMailCore: 07a819fe3342388551361b95f003a5afc0642281 + BRMSGraphMSALAuthProvider: 62676b8660c31a81e457e3bee0c7145d10601efd + Capacitor: 8a9db42d105f55843cd8ed2a3cb54e2b78e7f102 + CapacitorCordova: cfcc06b698481da655415985eeb2b8da363f8451 + CapacitorPreferences: f03954bcb0ff09c792909e46bff88e3183c16b10 + GoogleAPIClientForREST: 2d4140915e2ec6d1bcb39c9df4a534c75706c595 + GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a + GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd + GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba + MSAL: 5149daaa19228c2c27d81987634da15b50981cef + MSGraphClientModels: ffef6d0a1cdaa774e1689e38da35301cb74fc72a + MSGraphClientSDK: ffc07a58a838e0702c7bf2a856367035d4a335d7 + MytikiCaptureReceiptCapacitor: a9c1d0d8417e5f16442e826bf1bd0bc63a1a44f2 + MytikiTikiSdkCapacitor: 9faeaddd68e5f88479a4d070599ef963a374293a + TikiSdk: 8d9e602193fed19b2cd3d2d9a26ab344867be83a + +PODFILE CHECKSUM: ad9279268a9166e5521e3b9526efafb2d290241d + +COCOAPODS: 1.12.1 diff --git a/example/package-lock.json b/example/vue2/package-lock.json similarity index 93% rename from example/package-lock.json rename to example/vue2/package-lock.json index dd25da50..5bd094d0 100644 --- a/example/package-lock.json +++ b/example/vue2/package-lock.json @@ -9,76 +9,83 @@ "version": "0.0.1", "license": "MIT", "dependencies": { - "@capacitor/android": "^5.3.0", - "@capacitor/core": "^5.2.3", - "@capacitor/ios": "^5.4.0", - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-receipt-capacitor": "file:../", - "@mytiki/tiki-sdk-capacitor": "^0.3.1", + "@capacitor/android": "^5.4.2", + "@capacitor/core": "latest", + "@capacitor/ios": "^5.4.2", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.7.0", + "@mytiki/receipt-capacitor-vue2": "file:../../", + "@mytiki/tiki-sdk-capacitor": "^0.3.2", "uuid": "^9.0.0", - "vue": "^3.3.4" + "vite": "^4.4.10", + "vue": "^2.7.14" }, "devDependencies": { - "@capacitor/cli": "5.3.0", - "@rushstack/eslint-patch": "^1.3.3", - "@tsconfig/node18": "^18.2.1", - "@types/node": "^20.6.2", - "@types/uuid": "^9.0.3", - "@vitejs/plugin-vue": "^4.3.4", + "@babel/types": "^7.22.5", + "@capacitor/cli": "5.4.2", + "@rushstack/eslint-patch": "^1.5.1", + "@tsconfig/node18": "^18.2.2", + "@types/node": "^20.8.2", + "@types/uuid": "^9.0.4", + "@vitejs/plugin-vue2": "^2.2.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.4.0", - "eslint": "^8.49.0", + "eslint": "^8.50.0", "eslint-plugin-vue": "^9.17.0", "npm-run-all": "^4.1.5", "prettier": "^3.0.3", - "typescript": "~5.2.2", - "vite": "^4.4.9", - "vue-tsc": "^1.8.13" + "typescript": "^5.2.2", + "vue-tsc": "^1.8.15" } }, - "..": { - "version": "0.3.0", + "../..": { + "name": "@mytiki/receipt-capacitor-vue2", + "version": "0.4.1", "license": "MIT", "dependencies": { - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-sdk-capacitor": "^0.3.1", - "hammerjs": "^2.0.8", - "vue": "^3.3.4", - "vue-confetti-explosion": "^1.0.2", - "vue-markdown-render": "^2.0.1", - "vue3-carousel": "^0.3.1", - "vue3-touch-events": "^4.1.3" + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.7.0", + "@mytiki/tiki-sdk-capacitor": "^0.3.2", + "vue": "2.7.14", + "vue-markdown-render": "^1.1.3" }, "devDependencies": { "@babel/types": "^7.22.5", + "@capacitor/cli": "^5.4.1", "@rushstack/eslint-patch": "^1.3.2", "@tsconfig/node18": "^18.2.0", - "@types/hammerjs": "^2.0.41", "@types/markdown-it": "^13.0.0", "@types/node": "^20.5.0", - "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue2": "^2.2.0", "@vue/eslint-config-prettier": "^8.0.0", - "@vue/eslint-config-typescript": "^11.0.3", + "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.4.0", "eslint": "^8.47.0", "eslint-plugin-vue": "^9.16.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "path": "^0.12.7", - "rollup-plugin-typescript2": "^0.35.0", + "rollup-plugin-typescript2": "^0.36.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", "typedoc": "^0.25.0", "typescript": "^5.1.6", "vite": "^4.4.9", "vite-plugin-dts": "^3.5.2", "vite-plugin-vue-markdown": "^0.23.8", + "vite-plugin-vue2-svg": "^0.4.0", "vite-svg-loader": "^4.0.0", "vue-tsc": "^1.8.8" }, "peerDependencies": { - "@capacitor/android": "^5.2.2", - "@capacitor/core": "^5.2.2", - "@capacitor/ios": "^5.2.2", - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-sdk-capacitor": "^0.3.1" + "@capacitor/android": "^5.4.1", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.7.0", + "@mytiki/tiki-sdk-capacitor": "^0.3.2", + "vue": "^3.3.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -90,10 +97,28 @@ "node": ">=0.10.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -101,18 +126,32 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@capacitor/android": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.4.0.tgz", - "integrity": "sha512-CTIyFpndki9fW4q0h8jqUCjn2653rL/QrBwyPDEt7YaoUN6umSTZQlVgu8YlWVL5A1RgMEdN10XwDHnyfDt0ZQ==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.4.2.tgz", + "integrity": "sha512-PlOTWpInXPnrbjoe59fA/a8wSfcoGxfkQQ+Jg4REZKOQelYHUQUP9CI1kn3YvRYNhFuWxnOC8NjCu+67rX9n8Q==", "peerDependencies": { "@capacitor/core": "^5.4.0" } }, "node_modules/@capacitor/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-ku23HPqUHUnSgo/SyEWxVviEAxb4ieWvAVMI3KfrrBoinAhTOvNSZwT346rIpxZ9Xj3Qp41UjdIz0ME+DYwhfA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.4.2.tgz", + "integrity": "sha512-ck2DC9hEai2BWsBM08WN98xjC2LDusSzUWQySTNQ81S/cQUpSPXk9YX+KTd3rP/kI/sXpOuDEe7SSS7qkD1a2w==", "dev": true, "dependencies": { "@ionic/cli-framework-output": "^2.2.5", @@ -123,7 +162,7 @@ "debug": "^4.3.4", "env-paths": "^2.2.0", "kleur": "^4.1.4", - "native-run": "^1.7.2", + "native-run": "^1.7.3", "open": "^8.4.0", "plist": "^3.0.5", "prompts": "^2.4.2", @@ -142,21 +181,29 @@ } }, "node_modules/@capacitor/core": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.4.0.tgz", - "integrity": "sha512-lBWMbhPtvtcPoICdvqOaTsS9GDFlw1QHgkHZ5rxQF4Nvahikllvcud1fEu4ta28pykMUSlpCX2iDXYustYaATg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.4.2.tgz", + "integrity": "sha512-XbR1vldJFzBWHeoGPpgfNy3Zhjf0NxXdHEaGNANWVBg0ZWG2gwFr1dcRALUUQtbwrEEkCCNiLYg4YiQPRk7SEQ==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/ios": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.4.0.tgz", - "integrity": "sha512-PwYHZYn6c44844yWexNFUy0cK/Z98TFWtONf0x0qqacXd6xXeByoSnYRc7fm2fuqfkSDYU+oDJMz9QKQJkbRbg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.4.2.tgz", + "integrity": "sha512-KsICm57H7rUOcQ+V7IOIPe87VOiXGWFrsCqAYxDWAS++hxTR7sn8Z0pcq7Ir2xS6as0ct1eZva9BokykpYaUXQ==", "peerDependencies": { "@capacitor/core": "^5.4.0" } }, + "node_modules/@capacitor/preferences": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-5.0.6.tgz", + "integrity": "sha512-aDe4wGTVSAIue6XXdUFgyz7SGszxK/Ptt/iWTydMpzc1PlZXw1XTTnciM+S+SLLNZFzXlkpXT3wMnh9t0DojUA==", + "peerDependencies": { + "@capacitor/core": "^5.0.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -164,7 +211,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -180,7 +226,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -196,7 +241,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -212,7 +256,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -228,7 +271,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -244,7 +286,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -260,7 +301,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -276,7 +316,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -292,7 +331,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -308,7 +346,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -324,7 +361,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -340,7 +376,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -356,7 +391,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -372,7 +406,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -388,7 +421,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -404,7 +436,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -420,7 +451,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -436,7 +466,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -452,7 +481,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -468,7 +496,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -484,7 +511,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -500,7 +526,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -525,9 +550,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -557,9 +582,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -722,27 +747,27 @@ "node": ">=16.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@mytiki/tiki-capture-receipt-capacitor": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mytiki/tiki-capture-receipt-capacitor/-/tiki-capture-receipt-capacitor-0.5.0.tgz", - "integrity": "sha512-jjlGCzGraSDaU+k0kLCa/Y/wjxiy1JUMi0GM4FzuPmS9s9X80e1TjYTRXbJDDk/YK+ZX/qJ6JeZmsCIUIwaY7A==", + "node_modules/@mytiki/capture-receipt-capacitor": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@mytiki/capture-receipt-capacitor/-/capture-receipt-capacitor-0.7.0.tgz", + "integrity": "sha512-/uqln9PvBLyad3Z2HZGSQnTCT/qXOQ8weslYEUEatTstTbKEi02Kf43B/nAtOXQNUGB7aliWe5K8zNCGeyfZYg==", + "dependencies": { + "uuid": "^9.0.1" + }, "peerDependencies": { - "@capacitor/core": "^5.0.0" + "@capacitor/android": "^5.4.1", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1" } }, - "node_modules/@mytiki/tiki-receipt-capacitor": { - "resolved": "..", + "node_modules/@mytiki/receipt-capacitor-vue2": { + "resolved": "../..", "link": true }, "node_modules/@mytiki/tiki-sdk-capacitor": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@mytiki/tiki-sdk-capacitor/-/tiki-sdk-capacitor-0.3.1.tgz", - "integrity": "sha512-Y4waq6Jo5HewmYBs91P90PLgPz/04z0y5oRimO6LgQTPs9ZkDBg+sQzD32IuuCh+Ar6JyUF3WHWqd775SPo0ug==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@mytiki/tiki-sdk-capacitor/-/tiki-sdk-capacitor-0.3.2.tgz", + "integrity": "sha512-aTR54WDkzv2PuMxxjlo7y4uyHBx8V860dYoiRQMrwZcx2fgP/zJy9549pM0Rra52QAr60cGckl7cWJMjnfhqqw==", "peerDependencies": { "@capacitor/core": "^5.2.2" } @@ -833,9 +858,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, "node_modules/@tsconfig/node18": { @@ -860,15 +885,15 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", - "dev": true + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", + "devOptional": true }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/slice-ansi": { @@ -884,16 +909,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", - "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", + "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/type-utils": "6.7.2", - "@typescript-eslint/utils": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/type-utils": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -919,15 +944,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", - "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", + "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/typescript-estree": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "engines": { @@ -947,13 +972,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", - "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -964,13 +989,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", - "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", + "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.2", - "@typescript-eslint/utils": "6.7.2", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -991,9 +1016,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", - "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1004,13 +1029,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", - "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1031,17 +1056,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", - "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/typescript-estree": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "engines": { @@ -1056,12 +1081,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", - "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1072,17 +1097,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", - "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", + "node_modules/@vitejs/plugin-vue2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.2.0.tgz", + "integrity": "sha512-1km7zEuZ/9QRPvzXSjikbTYGQPG86Mq1baktpC4sXqsXlb02HQKfi+fl8qVS703JM7cgm24Ga9j+RwKmvFn90A==", "dev": true, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^14.18.0 || >= 16.0.0" }, "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" + "vite": "^3.0.0 || ^4.0.0", + "vue": "^2.7.0-0" } }, "node_modules/@volar/language-core": { @@ -1116,6 +1141,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dev": true, "dependencies": { "@babel/parser": "^7.21.3", "@vue/shared": "3.3.4", @@ -1127,35 +1153,20 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dev": true, "dependencies": { "@vue/compiler-core": "3.3.4", "@vue/shared": "3.3.4" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" } }, "node_modules/@vue/eslint-config-prettier": { @@ -1197,9 +1208,9 @@ } }, "node_modules/@vue/language-core": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.13.tgz", - "integrity": "sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.15.tgz", + "integrity": "sha512-zche5Aw8kkvp3YaghuLiOZyVIpoWHjSQ0EfjxGSsqHOPMamdCoa9x3HtbenpR38UMUoKJ88wiWuiOrV3B/Yq+A==", "dev": true, "dependencies": { "@volar/language-core": "~1.10.0", @@ -1248,57 +1259,16 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dev": true, "dependencies": { "@vue/shared": "3.3.4" } }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" - } - }, "node_modules/@vue/shared": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "dev": true }, "node_modules/@vue/tsconfig": { "version": "0.4.0", @@ -1307,13 +1277,13 @@ "dev": true }, "node_modules/@vue/typescript": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.13.tgz", - "integrity": "sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.15.tgz", + "integrity": "sha512-qWyanQKXOsK84S8rP7QBrqsvUdQ0nZABZmTjXMpb3ox4Bp5IbkscREA3OPUrkgl64mAxwwCzIWcOc3BPTCPjQw==", "dev": true, "dependencies": { "@volar/typescript": "~1.10.0", - "@vue/language-core": "1.8.13" + "@vue/language-core": "1.8.15" } }, "node_modules/@xmldom/xmldom": { @@ -1938,7 +1908,6 @@ "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1984,15 +1953,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2180,7 +2149,8 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -2437,7 +2407,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -2578,9 +2547,9 @@ } }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2652,13 +2621,10 @@ "dev": true }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -3290,17 +3256,6 @@ "node": "14 || >=16.14" } }, - "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -3438,9 +3393,9 @@ } }, "node_modules/native-run": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.2.tgz", - "integrity": "sha512-2aahC8iXIO8BcvEukVMrYwL5sXurkuIGyQgfSGBto832W6ejV+cB5Ww+2/CRxmyozhbxARJ2OMpEGPV8sTqsrQ==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.3.tgz", + "integrity": "sha512-vEw8X3Yu8TAbP4/uCJV3nCsCrhfHgUecRRDc69ZU9EK0QXHHc7YDzmIeI7SfA08ywzPlC9YcpITcB6bgMbrtwQ==", "dev": true, "dependencies": { "@ionic/utils-fs": "^3.1.6", @@ -3896,9 +3851,9 @@ } }, "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -3972,9 +3927,9 @@ } }, "node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -4210,10 +4165,9 @@ } }, "node_modules/rollup": { - "version": "3.29.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", - "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", - "dev": true, + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -4533,6 +4487,14 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4568,9 +4530,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", - "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/split2": { @@ -4805,6 +4767,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5016,10 +4987,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", - "dev": true, + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -5071,15 +5041,12 @@ } }, "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" } }, "node_modules/vue-eslint-parser": { @@ -5117,13 +5084,13 @@ } }, "node_modules/vue-tsc": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.13.tgz", - "integrity": "sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.15.tgz", + "integrity": "sha512-4DoB3LUj7IToLmggoCxRiFG+QU5lem0nv03m1ocqugXA9rSVoTOEoYYaP8vu8b99Eh+/cCVdYOeIAQ+RsgUYUw==", "dev": true, "dependencies": { - "@vue/language-core": "1.8.13", - "@vue/typescript": "1.8.13", + "@vue/language-core": "1.8.15", + "@vue/typescript": "1.8.15", "semver": "^7.3.8" }, "bin": { diff --git a/example/vue2/package.json b/example/vue2/package.json new file mode 100644 index 00000000..edd07abf --- /dev/null +++ b/example/vue2/package.json @@ -0,0 +1,47 @@ +{ + "name": "@mytiki/tiki-receipt-capacitor-example", + "version": "0.0.1", + "description": "Example app", + "main": "index.js", + "scripts": { + "dev": "vite", + "build": "run-p type-check build-only; npx cap sync", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --declaration --emitDeclarationOnly", + "lint": "eslint .. --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write ../src" + }, + "dependencies": { + "@capacitor/android": "^5.4.2", + "@capacitor/core": "latest", + "@capacitor/ios": "^5.4.2", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.7.0", + "@mytiki/receipt-capacitor-vue2": "file:../../", + "@mytiki/tiki-sdk-capacitor": "^0.3.2", + "uuid": "^9.0.0", + "vite": "^4.4.10", + "vue": "^2.7.14" + }, + "devDependencies": { + "@babel/types": "^7.22.5", + "@capacitor/cli": "5.4.2", + "@rushstack/eslint-patch": "^1.5.1", + "@tsconfig/node18": "^18.2.2", + "@types/node": "^20.8.2", + "@types/uuid": "^9.0.4", + "@vitejs/plugin-vue2": "^2.2.0", + "@vue/eslint-config-prettier": "^8.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.50.0", + "eslint-plugin-vue": "^9.17.0", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.3", + "typescript": "^5.2.2", + "vue-tsc": "^1.8.15" + }, + "author": "Tiki inc.", + "license": "MIT" +} diff --git a/example/vue2/src/app.vue b/example/vue2/src/app.vue new file mode 100644 index 00000000..039ffcfb --- /dev/null +++ b/example/vue2/src/app.vue @@ -0,0 +1,131 @@ + + + + + + + diff --git a/example/src/assets/logo.svg b/example/vue2/src/assets/logo.svg similarity index 100% rename from example/src/assets/logo.svg rename to example/vue2/src/assets/logo.svg diff --git a/example/src/assets/main.css b/example/vue2/src/assets/main.css similarity index 82% rename from example/src/assets/main.css rename to example/vue2/src/assets/main.css index 61dc88fa..958cc6ef 100644 --- a/example/src/assets/main.css +++ b/example/vue2/src/assets/main.css @@ -3,7 +3,7 @@ * MIT license. See LICENSE file in root directory. */ -@import "@mytiki/tiki-receipt-capacitor/dist/tiki-receipt-capacitor.css"; +@import "@mytiki/receipt-capacitor-vue2/dist/receipt-capacitor.css"; #app { margin: 0 auto; diff --git a/example/vue2/src/main.ts b/example/vue2/src/main.ts new file mode 100644 index 00000000..3467d2e2 --- /dev/null +++ b/example/vue2/src/main.ts @@ -0,0 +1,23 @@ +/* + * Copyright (c) TIKI Inc. + * MIT license. See LICENSE file in root directory. + */ + +import "./assets/main.css"; +import Vue from "vue"; +import App from "./app.vue"; +import Tiki from "@mytiki/receipt-capacitor-vue2"; + +Vue.use(Tiki, { + key: { + publishingId: "be19730a-00d5-45f5-b18e-2e19eb25f311", + android: + "sRwAAAAoY29tLm15dGlraS5zZGsuY2FwdHVyZS5yZWNlaXB0LmNhcGFjaXRvcgY6SQlVDCCrMOCc/jLI1A3BmOhqNvtZLzShMcb3/OLQLiqgWjuHuFiqGfg4fnAiPtRcc5uRJ6bCBRkg8EsKabMQkEsMOuVjvEOejVD497WkMgobMbk/X+bdfhPPGdcAHWn5Vnz86SmGdHX5xs6RgYe5jmJCSLiPmB7cjWmxY5ihkCG12Q==", + ios: "sRwAAAAoY29tLm15dGlraS5zZGsuY2FwdHVyZS5yZWNlaXB0LmNhcGFjaXRvcgY6SQlVDCCrMOCc/jLI1A3BmOhqNvtZLzShMcb3/OLQLiqgWjuHuFiqGfg4fnAiPtRcc5uRJ6bCBRkg8EsKabMQkEsMOuVjvEOejVD497WkMgobMbk/X+bdfhPPGdcAHWn5Vnz86SmGdHX5xs6RgYe5jmJCSLiPmB7cjWmxY5ihkCG12Q==", + product: + "wSNX3mu+YGc/2I1DDd0NmrYHS6zS1BQt2geMUH7DDowER43JGeJRUErOHVwU2tz6xHDXia8BuvXQI3j37I0uYw==", + }, + callback: (_total: number): number | undefined => undefined, +}); + +new Vue({ render: (h) => h(App) }).$mount("#app"); diff --git a/example/src/vite-env.d.ts b/example/vue2/src/vite-env.d.ts similarity index 100% rename from example/src/vite-env.d.ts rename to example/vue2/src/vite-env.d.ts diff --git a/example/tsconfig.app.json b/example/vue2/tsconfig.app.json similarity index 68% rename from example/tsconfig.app.json rename to example/vue2/tsconfig.app.json index b9f7a890..627d58b0 100644 --- a/example/tsconfig.app.json +++ b/example/vue2/tsconfig.app.json @@ -1,6 +1,12 @@ { "extends": "@vue/tsconfig/tsconfig.dom.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "include": [ + "env.d.ts", + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], "exclude": ["src/**/__tests__/*"], "compilerOptions": { "composite": true, diff --git a/example/tsconfig.json b/example/vue2/tsconfig.json similarity index 100% rename from example/tsconfig.json rename to example/vue2/tsconfig.json diff --git a/example/tsconfig.node.json b/example/vue2/tsconfig.node.json similarity index 100% rename from example/tsconfig.node.json rename to example/vue2/tsconfig.node.json diff --git a/example/vue2/vite.config.ts b/example/vue2/vite.config.ts new file mode 100644 index 00000000..0b67442d --- /dev/null +++ b/example/vue2/vite.config.ts @@ -0,0 +1,19 @@ +/* + * Copyright (c) TIKI Inc. + * MIT license. See LICENSE file in root directory. + */ + +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue2"; +import path from "path"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + dedupe: ["vue"], + alias: { + "@": path.resolve(__dirname, "src"), + }, + }, +}); diff --git a/example/vue3/.eslintignore b/example/vue3/.eslintignore new file mode 100644 index 00000000..6b06e31c --- /dev/null +++ b/example/vue3/.eslintignore @@ -0,0 +1,4 @@ +build +dist +vite.config.ts +.eslintrc diff --git a/example/vue3/.eslintrc b/example/vue3/.eslintrc new file mode 100644 index 00000000..1d0147eb --- /dev/null +++ b/example/vue3/.eslintrc @@ -0,0 +1,49 @@ +{ + "root": true, + "env": { + "browser": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:vue/vue3-recommended", + "plugin:prettier/recommended" + ], + "parser": "vue-eslint-parser", + "plugins": [ "@typescript-eslint" ], + "parserOptions": { + "parser": "@typescript-eslint/parser", + "sourceType": "module", + "ecmaVersion": "latest", + "project": ["./tsconfig.app.json"], + "extraFileExtensions": [ ".vue" ] + }, + "rules": { + // https://eslint.org/docs/rules/ + "no-fallthrough": "off", // https://github.com/ionic-team/eslint-config/issues/7 + "no-constant-condition": "off", + "no-unused-vars": "off", + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/no-this-alias": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": [ + "error", { "allowArgumentsExplicitlyTypedAsAny": true }], + + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules + "@typescript-eslint/array-type": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-optional-chain": "error", + + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ] + } +} diff --git a/example/vue3/.gitignore b/example/vue3/.gitignore new file mode 100644 index 00000000..1818ee61 --- /dev/null +++ b/example/vue3/.gitignore @@ -0,0 +1,7 @@ +.idea/ +node_modules/ +.vscode/ +*.map +.DS_Store +.sourcemaps +dist/ diff --git a/example/vue3/android/.gitignore b/example/vue3/android/.gitignore new file mode 100644 index 00000000..48354a3d --- /dev/null +++ b/example/vue3/android/.gitignore @@ -0,0 +1,101 @@ +# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +#*.jks +#*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Cordova plugins for Capacitor +capacitor-cordova-android-plugins + +# Copied web assets +app/src/main/assets/public + +# Generated Config files +app/src/main/assets/capacitor.config.json +app/src/main/assets/capacitor.plugins.json +app/src/main/res/xml/config.xml diff --git a/example/vue3/android/app/.gitignore b/example/vue3/android/app/.gitignore new file mode 100644 index 00000000..043df802 --- /dev/null +++ b/example/vue3/android/app/.gitignore @@ -0,0 +1,2 @@ +/build/* +!/build/.npmkeep diff --git a/example/android/app/build.gradle b/example/vue3/android/app/build.gradle similarity index 100% rename from example/android/app/build.gradle rename to example/vue3/android/app/build.gradle diff --git a/example/vue3/android/app/capacitor.build.gradle b/example/vue3/android/app/capacitor.build.gradle new file mode 100644 index 00000000..0354c2a0 --- /dev/null +++ b/example/vue3/android/app/capacitor.build.gradle @@ -0,0 +1,21 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN + +android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" +dependencies { + implementation project(':mytiki-capture-receipt-capacitor') + implementation project(':mytiki-tiki-sdk-capacitor') + implementation project(':capacitor-preferences') + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/example/vue3/android/app/proguard-rules.pro b/example/vue3/android/app/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/example/vue3/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/example/android/app/release/output-metadata.json b/example/vue3/android/app/release/output-metadata.json similarity index 100% rename from example/android/app/release/output-metadata.json rename to example/vue3/android/app/release/output-metadata.json diff --git a/example/vue3/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/example/vue3/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java new file mode 100644 index 00000000..f2c2217e --- /dev/null +++ b/example/vue3/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import android.content.Context; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + + assertEquals("com.getcapacitor.app", appContext.getPackageName()); + } +} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/vue3/android/app/src/main/AndroidManifest.xml similarity index 100% rename from example/android/app/src/main/AndroidManifest.xml rename to example/vue3/android/app/src/main/AndroidManifest.xml diff --git a/example/vue3/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java b/example/vue3/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java new file mode 100644 index 00000000..805a673a --- /dev/null +++ b/example/vue3/android/app/src/main/java/com/mytiki/receipt/capacitor/MainActivity.java @@ -0,0 +1,5 @@ +package com.mytiki.receipt.capacitor; + +import com.getcapacitor.BridgeActivity; + +public class MainActivity extends BridgeActivity {} diff --git a/example/vue3/android/app/src/main/res/drawable-land-hdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-land-hdpi/splash.png new file mode 100644 index 00000000..e31573b4 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-land-hdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-land-mdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-land-mdpi/splash.png new file mode 100644 index 00000000..f7a64923 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-land-mdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-land-xhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-land-xhdpi/splash.png new file mode 100644 index 00000000..80772550 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-land-xhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-land-xxhdpi/splash.png new file mode 100644 index 00000000..14c6c8fe Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-land-xxhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-land-xxxhdpi/splash.png new file mode 100644 index 00000000..244ca250 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-land-xxxhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-port-hdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-port-hdpi/splash.png new file mode 100644 index 00000000..74faaa58 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-port-hdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-port-mdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-port-mdpi/splash.png new file mode 100644 index 00000000..e944f4ad Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-port-mdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-port-xhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-port-xhdpi/splash.png new file mode 100644 index 00000000..564a82ff Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-port-xhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-port-xxhdpi/splash.png new file mode 100644 index 00000000..bfabe687 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-port-xxhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/example/vue3/android/app/src/main/res/drawable-port-xxxhdpi/splash.png new file mode 100644 index 00000000..69290712 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable-port-xxxhdpi/splash.png differ diff --git a/example/vue3/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/example/vue3/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..c7bd21db --- /dev/null +++ b/example/vue3/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/example/vue3/android/app/src/main/res/drawable/ic_launcher_background.xml b/example/vue3/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..d5fccc53 --- /dev/null +++ b/example/vue3/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/vue3/android/app/src/main/res/drawable/splash.png b/example/vue3/android/app/src/main/res/drawable/splash.png new file mode 100644 index 00000000..f7a64923 Binary files /dev/null and b/example/vue3/android/app/src/main/res/drawable/splash.png differ diff --git a/example/vue3/android/app/src/main/res/layout/activity_main.xml b/example/vue3/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..b5ad1387 --- /dev/null +++ b/example/vue3/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..036d09bc --- /dev/null +++ b/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..036d09bc --- /dev/null +++ b/example/vue3/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..c023e505 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..2127973b Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..b441f37d Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..72905b85 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..8ed0605c Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..9502e47a Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..4d1e0771 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..df0f1588 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..853db043 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..6cdf97c1 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..2960cbb6 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..8e3093a8 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..46de6e25 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..d2ea9abe Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..a40d73e9 Binary files /dev/null and b/example/vue3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/example/vue3/android/app/src/main/res/values/ic_launcher_background.xml b/example/vue3/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 00000000..c5d5899f --- /dev/null +++ b/example/vue3/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/example/vue3/android/app/src/main/res/values/strings.xml b/example/vue3/android/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..ad91d568 --- /dev/null +++ b/example/vue3/android/app/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + + TIKI Receipt + TIKI Receipt + com.mytiki.receipt.capacitor + com.mytiki.receipt.capacitor + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/vue3/android/app/src/main/res/values/styles.xml similarity index 100% rename from example/android/app/src/main/res/values/styles.xml rename to example/vue3/android/app/src/main/res/values/styles.xml diff --git a/example/vue3/android/app/src/main/res/xml/file_paths.xml b/example/vue3/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 00000000..bd0c4d80 --- /dev/null +++ b/example/vue3/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/vue3/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/example/vue3/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java new file mode 100644 index 00000000..02973278 --- /dev/null +++ b/example/vue3/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java @@ -0,0 +1,18 @@ +package com.getcapacitor.myapp; + +import static org.junit.Assert.*; + +import org.junit.Test; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} diff --git a/example/vue3/android/build.gradle b/example/vue3/android/build.gradle new file mode 100644 index 00000000..f080b8f8 --- /dev/null +++ b/example/vue3/android/build.gradle @@ -0,0 +1,30 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:8.0.0' + classpath 'com.google.gms:google-services:4.3.15' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +apply from: "variables.gradle" + +allprojects { + repositories { + google() + mavenCentral() + maven { url "https://maven.microblink.com" } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/vue3/android/capacitor.settings.gradle b/example/vue3/android/capacitor.settings.gradle new file mode 100644 index 00000000..9541ced1 --- /dev/null +++ b/example/vue3/android/capacitor.settings.gradle @@ -0,0 +1,12 @@ +// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN +include ':capacitor-android' +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') + +include ':mytiki-capture-receipt-capacitor' +project(':mytiki-capture-receipt-capacitor').projectDir = new File('../node_modules/@mytiki/capture-receipt-capacitor/android') + +include ':mytiki-tiki-sdk-capacitor' +project(':mytiki-tiki-sdk-capacitor').projectDir = new File('../node_modules/@mytiki/tiki-sdk-capacitor/android') + +include ':capacitor-preferences' +project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android') diff --git a/example/vue3/android/gradle.properties b/example/vue3/android/gradle.properties new file mode 100644 index 00000000..2e87c52f --- /dev/null +++ b/example/vue3/android/gradle.properties @@ -0,0 +1,22 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true diff --git a/example/vue3/android/gradle/wrapper/gradle-wrapper.jar b/example/vue3/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..ccebba77 Binary files /dev/null and b/example/vue3/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/example/vue3/android/gradle/wrapper/gradle-wrapper.properties b/example/vue3/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..761b8f08 --- /dev/null +++ b/example/vue3/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/example/vue3/android/gradlew b/example/vue3/android/gradlew new file mode 100755 index 00000000..79a61d42 --- /dev/null +++ b/example/vue3/android/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright Β© 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions Β«$varΒ», Β«${var}Β», Β«${var:-default}Β», Β«${var+SET}Β», +# Β«${var#prefix}Β», Β«${var%suffix}Β», and Β«$( cmd )Β»; +# * compound commands having a testable exit status, especially Β«caseΒ»; +# * various built-in commands including Β«commandΒ», Β«setΒ», and Β«ulimitΒ». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/example/vue3/android/gradlew.bat b/example/vue3/android/gradlew.bat new file mode 100644 index 00000000..6689b85b --- /dev/null +++ b/example/vue3/android/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/example/vue3/android/settings.gradle b/example/vue3/android/settings.gradle new file mode 100644 index 00000000..3b4431d7 --- /dev/null +++ b/example/vue3/android/settings.gradle @@ -0,0 +1,5 @@ +include ':app' +include ':capacitor-cordova-android-plugins' +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') + +apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/example/android/variables.gradle b/example/vue3/android/variables.gradle similarity index 100% rename from example/android/variables.gradle rename to example/vue3/android/variables.gradle diff --git a/example/vue3/capacitor.config.ts b/example/vue3/capacitor.config.ts new file mode 100644 index 00000000..271d2881 --- /dev/null +++ b/example/vue3/capacitor.config.ts @@ -0,0 +1,17 @@ +/* + * Copyright (c) TIKI Inc. + * MIT license. See LICENSE file in root directory. + */ + +import type { CapacitorConfig } from "@capacitor/cli"; + +const config: CapacitorConfig = { + appId: "com.mytiki.receipt.capacitor", + appName: "TIKI Receipt", + webDir: "dist", + server: { + androidScheme: "https", + }, +}; + +export default config; diff --git a/example/vue3/env.d.ts b/example/vue3/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/example/vue3/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/example/vue3/index.html b/example/vue3/index.html new file mode 100644 index 00000000..16c5ee4f --- /dev/null +++ b/example/vue3/index.html @@ -0,0 +1,17 @@ + + + + + + + + DEMO | TIKI Receipt + + +
+ + + diff --git a/example/vue3/ios/.gitignore b/example/vue3/ios/.gitignore new file mode 100644 index 00000000..f4702997 --- /dev/null +++ b/example/vue3/ios/.gitignore @@ -0,0 +1,13 @@ +App/build +App/Pods +App/output +App/App/public +DerivedData +xcuserdata + +# Cordova plugins for Capacitor +capacitor-cordova-ios-plugins + +# Generated Config files +App/App/capacitor.config.json +App/App/config.xml diff --git a/example/vue3/ios/App/App.xcodeproj/project.pbxproj b/example/vue3/ios/App/App.xcodeproj/project.pbxproj new file mode 100644 index 00000000..82748311 --- /dev/null +++ b/example/vue3/ios/App/App.xcodeproj/project.pbxproj @@ -0,0 +1,406 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; }; + 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; + 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; + 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; + 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; + 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; + 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; + A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; }; + 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; + 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; + AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 504EC3011FED79650016851F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { + isa = PBXGroup; + children = ( + AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 504EC2FB1FED79650016851F = { + isa = PBXGroup; + children = ( + 504EC3061FED79650016851F /* App */, + 504EC3051FED79650016851F /* Products */, + 7F8756D8B27F46E3366F6CEA /* Pods */, + 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, + ); + sourceTree = ""; + }; + 504EC3051FED79650016851F /* Products */ = { + isa = PBXGroup; + children = ( + 504EC3041FED79650016851F /* App.app */, + ); + name = Products; + sourceTree = ""; + }; + 504EC3061FED79650016851F /* App */ = { + isa = PBXGroup; + children = ( + 50379B222058CBB4000EE86E /* capacitor.config.json */, + 504EC3071FED79650016851F /* AppDelegate.swift */, + 504EC30B1FED79650016851F /* Main.storyboard */, + 504EC30E1FED79650016851F /* Assets.xcassets */, + 504EC3101FED79650016851F /* LaunchScreen.storyboard */, + 504EC3131FED79650016851F /* Info.plist */, + 2FAD9762203C412B000D30F8 /* config.xml */, + 50B271D01FEDC1A000F3C39B /* public */, + ); + path = App; + sourceTree = ""; + }; + 7F8756D8B27F46E3366F6CEA /* Pods */ = { + isa = PBXGroup; + children = ( + FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, + AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 504EC3031FED79650016851F /* App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; + buildPhases = ( + 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, + 504EC3001FED79650016851F /* Sources */, + 504EC3011FED79650016851F /* Frameworks */, + 504EC3021FED79650016851F /* Resources */, + 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = App; + productName = App; + productReference = 504EC3041FED79650016851F /* App.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 504EC2FC1FED79650016851F /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 0920; + TargetAttributes = { + 504EC3031FED79650016851F = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 504EC2FB1FED79650016851F; + productRefGroup = 504EC3051FED79650016851F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 504EC3031FED79650016851F /* App */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 504EC3021FED79650016851F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */, + 50B271D11FEDC1A000F3C39B /* public in Resources */, + 504EC30F1FED79650016851F /* Assets.xcassets in Resources */, + 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */, + 504EC30D1FED79650016851F /* Main.storyboard in Resources */, + 2FAD9763203C412B000D30F8 /* config.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 504EC3001FED79650016851F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 504EC30B1FED79650016851F /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 504EC30C1FED79650016851F /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 504EC3111FED79650016851F /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 504EC3141FED79650016851F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 504EC3151FED79650016851F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 504EC3171FED79650016851F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = App/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; + PRODUCT_BUNDLE_IDENTIFIER = com.mytiki.receipt.capacitor; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 504EC3181FED79650016851F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = App/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.mytiki.receipt.capacitor; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 504EC3141FED79650016851F /* Debug */, + 504EC3151FED79650016851F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 504EC3171FED79650016851F /* Debug */, + 504EC3181FED79650016851F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 504EC2FC1FED79650016851F /* Project object */; +} diff --git a/example/vue3/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/vue3/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..42daef8a --- /dev/null +++ b/example/vue3/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/vue3/ios/App/App.xcworkspace/contents.xcworkspacedata b/example/vue3/ios/App/App.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..b301e824 --- /dev/null +++ b/example/vue3/ios/App/App.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/vue3/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/vue3/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/example/vue3/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/vue3/ios/App/App/AppDelegate.swift b/example/vue3/ios/App/App/AppDelegate.swift new file mode 100644 index 00000000..c3cd83b5 --- /dev/null +++ b/example/vue3/ios/App/App/AppDelegate.swift @@ -0,0 +1,49 @@ +import UIKit +import Capacitor + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { + // Called when the app was launched with a url. Feel free to add additional processing here, + // but if you want the App API to support tracking app url opens, make sure to keep this call + return ApplicationDelegateProxy.shared.application(app, open: url, options: options) + } + + func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { + // Called when the app was launched with an activity, including Universal Links. + // Feel free to add additional processing here, but if you want the App API to support + // tracking app url opens, make sure to keep this call + return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler) + } + +} diff --git a/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png new file mode 100644 index 00000000..adf6ba01 Binary files /dev/null and b/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png differ diff --git a/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9b7d382d --- /dev/null +++ b/example/vue3/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon-512@2x.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/vue3/ios/App/App/Assets.xcassets/Contents.json b/example/vue3/ios/App/App/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/example/vue3/ios/App/App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json new file mode 100644 index 00000000..d7d96a67 --- /dev/null +++ b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "splash-2732x2732-2.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "splash-2732x2732-1.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "splash-2732x2732.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png new file mode 100644 index 00000000..33ea6c97 Binary files /dev/null and b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png differ diff --git a/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png new file mode 100644 index 00000000..33ea6c97 Binary files /dev/null and b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png differ diff --git a/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png new file mode 100644 index 00000000..33ea6c97 Binary files /dev/null and b/example/vue3/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png differ diff --git a/example/vue3/ios/App/App/Base.lproj/LaunchScreen.storyboard b/example/vue3/ios/App/App/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..e7ae5d78 --- /dev/null +++ b/example/vue3/ios/App/App/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/vue3/ios/App/App/Base.lproj/Main.storyboard b/example/vue3/ios/App/App/Base.lproj/Main.storyboard new file mode 100644 index 00000000..b44df7be --- /dev/null +++ b/example/vue3/ios/App/App/Base.lproj/Main.storyboard @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/example/vue3/ios/App/App/Info.plist b/example/vue3/ios/App/App/Info.plist new file mode 100644 index 00000000..a8fe770b --- /dev/null +++ b/example/vue3/ios/App/App/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + TIKI Receipt + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/example/vue3/ios/App/Podfile b/example/vue3/ios/App/Podfile new file mode 100644 index 00000000..e75830ab --- /dev/null +++ b/example/vue3/ios/App/Podfile @@ -0,0 +1,26 @@ +source 'https://github.com/BlinkReceipt/PodSpecRepo.git' +source 'https://cdn.cocoapods.org/' + +require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' + +platform :ios, '13.0' +use_frameworks! + +install! 'cocoapods', :disable_input_output_paths => true + +def capacitor_pods + pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' + pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' + pod 'MytikiCaptureReceiptCapacitor', :path => '../../node_modules/@mytiki/capture-receipt-capacitor' + pod 'MytikiTikiSdkCapacitor', :path => '../../node_modules/@mytiki/tiki-sdk-capacitor' + pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences' +end + +target 'App' do + capacitor_pods + use_frameworks! +end + +post_install do |installer| + assertDeploymentTarget(installer) +end diff --git a/example/vue3/ios/App/Podfile.lock b/example/vue3/ios/App/Podfile.lock new file mode 100644 index 00000000..df258178 --- /dev/null +++ b/example/vue3/ios/App/Podfile.lock @@ -0,0 +1,40 @@ +PODS: + - Capacitor (5.4.2): + - CapacitorCordova + - CapacitorCordova (5.4.2) + - CapacitorPreferences (5.0.6): + - Capacitor + - MytikiCaptureReceiptCapacitor (0.6.2): + - Capacitor + - MytikiTikiSdkCapacitor (0.3.1): + - Capacitor + +DEPENDENCIES: + - "Capacitor (from `../../node_modules/@capacitor/ios`)" + - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" + - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)" + - "MytikiCaptureReceiptCapacitor (from `../../node_modules/@mytiki/capture-receipt-capacitor`)" + - "MytikiTikiSdkCapacitor (from `../../node_modules/@mytiki/tiki-sdk-capacitor`)" + +EXTERNAL SOURCES: + Capacitor: + :path: "../../node_modules/@capacitor/ios" + CapacitorCordova: + :path: "../../node_modules/@capacitor/ios" + CapacitorPreferences: + :path: "../../node_modules/@capacitor/preferences" + MytikiCaptureReceiptCapacitor: + :path: "../../node_modules/@mytiki/capture-receipt-capacitor" + MytikiTikiSdkCapacitor: + :path: "../../node_modules/@mytiki/tiki-sdk-capacitor" + +SPEC CHECKSUMS: + Capacitor: 8a9db42d105f55843cd8ed2a3cb54e2b78e7f102 + CapacitorCordova: cfcc06b698481da655415985eeb2b8da363f8451 + CapacitorPreferences: f03954bcb0ff09c792909e46bff88e3183c16b10 + MytikiCaptureReceiptCapacitor: aa1e9da282a17da9a47243037fafc640713fafac + MytikiTikiSdkCapacitor: 7fb71c6099dd3bba5c75ee7ec1dd30bd90c78c9c + +PODFILE CHECKSUM: f1577cba99d1d91b705cb25d5cc74e6dbaef78e1 + +COCOAPODS: 1.12.1 diff --git a/package-lock.json b/example/vue3/package-lock.json similarity index 50% rename from package-lock.json rename to example/vue3/package-lock.json index 624e8069..953b2108 100644 --- a/package-lock.json +++ b/example/vue3/package-lock.json @@ -1,38 +1,77 @@ { - "name": "@mytiki/tiki-receipt-capacitor", - "version": "0.3.0", + "name": "@mytiki/tiki-receipt-capacitor-example", + "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@mytiki/tiki-receipt-capacitor", - "version": "0.3.0", + "name": "@mytiki/tiki-receipt-capacitor-example", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@capacitor/android": "^5.3.0", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.6.2", + "@mytiki/receipt-capacitor": "file:../../", + "@mytiki/tiki-sdk-capacitor": "^0.3.1", + "uuid": "^9.0.0", + "vue": "^3.3.4" + }, + "devDependencies": { + "@capacitor/cli": "5.4.1", + "@rushstack/eslint-patch": "^1.3.3", + "@tsconfig/node18": "^18.2.1", + "@types/node": "^20.6.5", + "@types/uuid": "^9.0.3", + "@vitejs/plugin-vue": "^4.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.50.0", + "eslint-plugin-vue": "^9.17.0", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.3", + "typescript": "~5.2.2", + "vite": "^4.4.9", + "vue-tsc": "^1.8.13" + } + }, + "..": { + "extraneous": true + }, + "../..": { + "name": "@mytiki/receipt-capacitor", + "version": "0.4.0", "license": "MIT", "dependencies": { - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.6.2", "@mytiki/tiki-sdk-capacitor": "^0.3.1", - "hammerjs": "^2.0.8", - "vue": "^3.3.4", - "vue-confetti-explosion": "^1.0.2", - "vue-markdown-render": "^2.0.1", - "vue3-carousel": "^0.3.1", - "vue3-touch-events": "^4.1.3" + "vue": "^3.3.0", + "vue-markdown-render": "^2.0.1" }, "devDependencies": { "@babel/types": "^7.22.5", + "@capacitor/cli": "^5.4.1", "@rushstack/eslint-patch": "^1.3.2", "@tsconfig/node18": "^18.2.0", - "@types/hammerjs": "^2.0.41", + "@types/jest": "^29.5.5", "@types/markdown-it": "^13.0.0", "@types/node": "^20.5.0", "@vitejs/plugin-vue": "^4.2.3", "@vue/eslint-config-prettier": "^8.0.0", - "@vue/eslint-config-typescript": "^11.0.3", + "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.4.0", "eslint": "^8.47.0", "eslint-plugin-vue": "^9.16.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "path": "^0.12.7", "rollup-plugin-typescript2": "^0.35.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", "typedoc": "^0.25.0", "typescript": "^5.1.6", "vite": "^4.4.9", @@ -42,11 +81,13 @@ "vue-tsc": "^1.8.8" }, "peerDependencies": { - "@capacitor/android": "^5.2.2", - "@capacitor/core": "^5.2.2", - "@capacitor/ios": "^5.2.2", - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-sdk-capacitor": "^0.3.1" + "@capacitor/android": "^5.4.1", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1", + "@capacitor/preferences": "^5.0.6", + "@mytiki/capture-receipt-capacitor": "^0.6.2", + "@mytiki/tiki-sdk-capacitor": "^0.3.1", + "vue": "^3.3.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -58,37 +99,10 @@ "node": ">=0.10.0" } }, - "node_modules/@antfu/utils": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz", - "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -96,47 +110,92 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "node_modules/@capacitor/android": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.4.2.tgz", + "integrity": "sha512-PlOTWpInXPnrbjoe59fA/a8wSfcoGxfkQQ+Jg4REZKOQelYHUQUP9CI1kn3YvRYNhFuWxnOC8NjCu+67rX9n8Q==", + "peerDependencies": { + "@capacitor/core": "^5.4.0" + } + }, + "node_modules/@capacitor/cli": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.4.1.tgz", + "integrity": "sha512-Smwn38zrTRzPDGBpcoysgL40t34pu/wPbaq6s8HYPJgjutAAO/AsO/OeNA6aY+J+lgqXreBw7NwWfC4FsbqMMA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", - "to-fast-properties": "^2.0.0" + "@ionic/cli-framework-output": "^2.2.5", + "@ionic/utils-fs": "^3.1.6", + "@ionic/utils-subprocess": "^2.1.11", + "@ionic/utils-terminal": "^2.3.3", + "commander": "^9.3.0", + "debug": "^4.3.4", + "env-paths": "^2.2.0", + "kleur": "^4.1.4", + "native-run": "^1.7.3", + "open": "^8.4.0", + "plist": "^3.0.5", + "prompts": "^2.4.2", + "rimraf": "^4.4.1", + "semver": "^7.3.7", + "tar": "^6.1.11", + "tslib": "^2.4.0", + "xml2js": "^0.5.0" + }, + "bin": { + "cap": "bin/capacitor", + "capacitor": "bin/capacitor" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@capacitor/android": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.4.0.tgz", - "integrity": "sha512-CTIyFpndki9fW4q0h8jqUCjn2653rL/QrBwyPDEt7YaoUN6umSTZQlVgu8YlWVL5A1RgMEdN10XwDHnyfDt0ZQ==", - "peer": true, - "peerDependencies": { - "@capacitor/core": "^5.4.0" + "node": ">=16.0.0" } }, "node_modules/@capacitor/core": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.4.0.tgz", - "integrity": "sha512-lBWMbhPtvtcPoICdvqOaTsS9GDFlw1QHgkHZ5rxQF4Nvahikllvcud1fEu4ta28pykMUSlpCX2iDXYustYaATg==", - "peer": true, + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.4.2.tgz", + "integrity": "sha512-XbR1vldJFzBWHeoGPpgfNy3Zhjf0NxXdHEaGNANWVBg0ZWG2gwFr1dcRALUUQtbwrEEkCCNiLYg4YiQPRk7SEQ==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/ios": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.4.0.tgz", - "integrity": "sha512-PwYHZYn6c44844yWexNFUy0cK/Z98TFWtONf0x0qqacXd6xXeByoSnYRc7fm2fuqfkSDYU+oDJMz9QKQJkbRbg==", - "peer": true, + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.4.2.tgz", + "integrity": "sha512-KsICm57H7rUOcQ+V7IOIPe87VOiXGWFrsCqAYxDWAS++hxTR7sn8Z0pcq7Ir2xS6as0ct1eZva9BokykpYaUXQ==", "peerDependencies": { "@capacitor/core": "^5.4.0" } }, + "node_modules/@capacitor/preferences": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-5.0.6.tgz", + "integrity": "sha512-aDe4wGTVSAIue6XXdUFgyz7SGszxK/Ptt/iWTydMpzc1PlZXw1XTTnciM+S+SLLNZFzXlkpXT3wMnh9t0DojUA==", + "peerDependencies": { + "@capacitor/core": "^5.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -505,9 +564,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -537,9 +596,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -578,393 +637,816 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@mdit-vue/plugin-component": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-0.12.1.tgz", - "integrity": "sha512-L3elbvuKUufXwPLHrmJGd/ijd/QKxfcHXy3kRy4O+P7UIV7HSWePpfB0k+wWee+by3MviYYxjVAi392z+DGy3Q==", + "node_modules/@ionic/cli-framework-output": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.6.tgz", + "integrity": "sha512-YLPRwnk5Lw0XQ9pKWG+p2KoR5HjMBigZ6yv+/XtL3TGOnCS1+oAz56ABbAORCjTWhSJQisr8APNFiELAecY6QA==", "dev": true, "dependencies": { - "@types/markdown-it": "^13.0.0", - "markdown-it": "^13.0.1" + "@ionic/utils-terminal": "2.3.4", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@mdit-vue/plugin-frontmatter": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.12.1.tgz", - "integrity": "sha512-C6ycNjrJ+T4JgbVxwo9cUkfLacOO841Yl8ogqd5PJmAVpc5cM2OLBkqqkZxNRXos3g9xM1VvIQ7gK/047UNADg==", + "node_modules/@ionic/utils-array": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", + "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==", "dev": true, "dependencies": { - "@mdit-vue/types": "0.12.0", - "@types/markdown-it": "^13.0.0", - "gray-matter": "^4.0.3", - "markdown-it": "^13.0.1" + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@mdit-vue/types": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-0.12.0.tgz", - "integrity": "sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==", - "dev": true - }, - "node_modules/@microsoft/api-extractor": { - "version": "7.37.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.37.0.tgz", - "integrity": "sha512-df/wffWpDhYRw7kzdxeHGsCpim+dC8aFiZlsJb4uFvVPWhBZpDzOhQxSUTFx3Df1ORY+/JjuPR3fDE9Hq+PHzQ==", - "dev": true, - "dependencies": { - "@microsoft/api-extractor-model": "7.28.0", - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.60.0", - "@rushstack/rig-package": "0.5.0", - "@rushstack/ts-command-line": "4.16.0", - "colors": "~1.2.1", - "lodash": "~4.17.15", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "source-map": "~0.6.1", - "typescript": "~5.0.4" + "node_modules/@ionic/utils-fs": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz", + "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.0", + "debug": "^4.0.0", + "fs-extra": "^9.0.0", + "tslib": "^2.0.1" }, - "bin": { - "api-extractor": "bin/api-extractor" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@microsoft/api-extractor-model": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.0.tgz", - "integrity": "sha512-QIMtUVm1tqiKG+M6ciFgRShcDoovyltaeg+CbyOnyr7SMrp6gg0ojK5/nToMqR9kAvsTS4QVgW4Twl50EoAjcw==", + "node_modules/@ionic/utils-object": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz", + "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.60.0" + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "node_modules/@ionic/utils-process": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.11.tgz", + "integrity": "sha512-Uavxn+x8j3rDlZEk1X7YnaN6wCgbCwYQOeIjv/m94i1dzslqWhqIHEqxEyeE8HsT5Negboagg7GtQiABy+BLbA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "@ionic/utils-object": "2.1.6", + "@ionic/utils-terminal": "2.3.4", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "tree-kill": "^1.2.2", + "tslib": "^2.0.1" }, "engines": { - "node": ">=12.20" + "node": ">=16.0.0" } }, - "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", - "dev": true + "node_modules/@ionic/utils-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.6.tgz", + "integrity": "sha512-4+Kitey1lTA1yGtnigeYNhV/0tggI3lWBMjC7tBs1K9GXa/q7q4CtOISppdh8QgtOhrhAXS2Igp8rbko/Cj+lA==", + "dev": true, + "dependencies": { + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "node_modules/@ionic/utils-subprocess": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.12.tgz", + "integrity": "sha512-N05Y+dIXBHofKWJTheCMzVqmgY9wFmZcRv/LdNnfXaaA/mxLTyGxQYeig8fvQXTtDafb/siZXcrTkmQ+y6n3Yg==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" + "@ionic/utils-array": "2.1.6", + "@ionic/utils-fs": "3.1.7", + "@ionic/utils-process": "2.1.11", + "@ionic/utils-stream": "3.1.6", + "@ionic/utils-terminal": "2.3.4", + "cross-spawn": "^7.0.3", + "debug": "^4.0.0", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "node_modules/@ionic/utils-terminal": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.4.tgz", + "integrity": "sha512-cEiMFl3jklE0sW60r8JHH3ijFTwh/jkdEKWbylSyExQwZ8pPuwoXz7gpkWoJRLuoRHHSvg+wzNYyPJazIHfoJA==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "@types/slice-ansi": "^4.0.0", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@mytiki/tiki-capture-receipt-capacitor": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mytiki/tiki-capture-receipt-capacitor/-/tiki-capture-receipt-capacitor-0.5.0.tgz", - "integrity": "sha512-jjlGCzGraSDaU+k0kLCa/Y/wjxiy1JUMi0GM4FzuPmS9s9X80e1TjYTRXbJDDk/YK+ZX/qJ6JeZmsCIUIwaY7A==", - "peerDependencies": { - "@capacitor/core": "^5.0.0" + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@mytiki/tiki-sdk-capacitor": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@mytiki/tiki-sdk-capacitor/-/tiki-sdk-capacitor-0.3.1.tgz", - "integrity": "sha512-Y4waq6Jo5HewmYBs91P90PLgPz/04z0y5oRimO6LgQTPs9ZkDBg+sQzD32IuuCh+Ar6JyUF3WHWqd775SPo0ug==", - "peerDependencies": { - "@capacitor/core": "^5.2.2" + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=6" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", - "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", - "dev": true + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@rushstack/node-core-library": { - "version": "3.60.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.0.tgz", - "integrity": "sha512-PcyrqhILvzU+65wMFybQ2VeGNnU5JzhDq2OvUi3j6jPUxyllM7b2hrRUwCuVaYboewYzIbpzXFzgxe2K7ii1nw==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@types/node": "*" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "@types/node": { + "node-notifier": { "optional": true } } }, - "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, "engines": { - "node": ">= 4.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/rig-package": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.0.tgz", - "integrity": "sha512-bGnOW4DWHOePDiABKy6qyqYJl9i7fKn4bRucExRVt5QzyPxuVHMl8CMmCabtoNSpXzgG3qymWOrMoa/W2PpJrw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "resolve": "~1.22.1", - "strip-json-comments": "~3.1.1" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.16.0.tgz", - "integrity": "sha512-WJKhdR9ThK9Iy7t78O3at7I3X4Ssp5RRZay/IQa8NywqkFy/DQbT3iLouodMMdUwLZD9n8n++xLubVd3dkmpkg==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/ts-command-line/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=10.13.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@tsconfig/node18": { - "version": "18.2.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", - "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", - "dev": true - }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@mytiki/capture-receipt-capacitor": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@mytiki/capture-receipt-capacitor/-/capture-receipt-capacitor-0.6.2.tgz", + "integrity": "sha512-Xo69ibBHFp9/Dbi3qPlzNi4Br17tY5QdcpouJFuPxEqJoo/m+Ew9x7wCOp9UiclmXF/Qfb0vk58sdRfYaBhOvA==", + "dependencies": { + "uuid": "^9.0.1" + }, + "peerDependencies": { + "@capacitor/android": "^5.4.1", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1" + } + }, + "node_modules/@mytiki/receipt-capacitor": { + "resolved": "../..", + "link": true + }, + "node_modules/@mytiki/tiki-sdk-capacitor": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@mytiki/tiki-sdk-capacitor/-/tiki-sdk-capacitor-0.3.1.tgz", + "integrity": "sha512-Y4waq6Jo5HewmYBs91P90PLgPz/04z0y5oRimO6LgQTPs9ZkDBg+sQzD32IuuCh+Ar6JyUF3WHWqd775SPo0ug==", + "peerDependencies": { + "@capacitor/core": "^5.2.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@types/hammerjs": { - "version": "2.0.42", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.42.tgz", - "integrity": "sha512-Xxk14BrwHnGi0xlURPRb+Y0UNn2w3cTkeFm7pKMsYOaNgH/kabbJLhcBoNIodwsbTz7Z8KcWjtDvlGH0nc0U9w==", + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, - "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "node_modules/@tsconfig/node18": { + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", + "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", "dev": true }, - "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", + "node_modules/@types/fs-extra": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.3.tgz", + "integrity": "sha512-7IdV01N0u/CaVO0fuY1YmEg14HQN3+EW8mpNgg6NEfxEl/lzCa5OxlBu3iFsCAdamnYOcTQ7oEi43Xc/67Rgzw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, - "node_modules/@types/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-SUEb8Frsxs3D5Gg9xek6i6EG6XQ5s+O+ZdQzIPESZVZw3Pv3CPQfjCJBI+RgqZd1IBeu18S0Rn600qpPnEK37w==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", + "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", "dev": true }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, + "node_modules/@types/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", + "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/type-utils": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -973,25 +1455,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", + "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1000,16 +1483,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1017,25 +1500,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", + "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1044,12 +1527,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1057,21 +1540,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1084,42 +1567,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.7.4", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1127,9 +1609,9 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", - "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", + "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", "dev": true, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1227,14 +1709,14 @@ } }, "node_modules/@vue/eslint-config-typescript": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", - "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", + "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", - "vue-eslint-parser": "^9.1.1" + "@typescript-eslint/eslint-plugin": "^6.7.0", + "@typescript-eslint/parser": "^6.7.0", + "vue-eslint-parser": "^9.3.1" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -1251,9 +1733,9 @@ } }, "node_modules/@vue/language-core": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.13.tgz", - "integrity": "sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.15.tgz", + "integrity": "sha512-zche5Aw8kkvp3YaghuLiOZyVIpoWHjSQ0EfjxGSsqHOPMamdCoa9x3HtbenpR38UMUoKJ88wiWuiOrV3B/Yq+A==", "dev": true, "dependencies": { "@volar/language-core": "~1.10.0", @@ -1361,15 +1843,30 @@ "dev": true }, "node_modules/@vue/typescript": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.13.tgz", - "integrity": "sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.15.tgz", + "integrity": "sha512-qWyanQKXOsK84S8rP7QBrqsvUdQ0nZABZmTjXMpb3ox4Bp5IbkscREA3OPUrkgl64mAxwwCzIWcOc3BPTCPjQw==", "dev": true, "dependencies": { "@volar/typescript": "~1.10.0", - "@vue/language-core": "1.8.13" + "@vue/language-core": "1.8.15" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "engines": { + "node": ">=10.0.0" } }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1382,6 +1879,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -1391,6 +1898,27 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1407,23 +1935,44 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, @@ -1437,10 +1986,43 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/array-union": { "version": "2.1.0", @@ -1451,12 +2033,89 @@ "node": ">=8" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -1473,12 +2132,12 @@ "dev": true }, "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", "dev": true, "dependencies": { - "big-integer": "^1.6.44" + "big-integer": "1.6.x" }, "engines": { "node": ">= 5.10.0" @@ -1506,6 +2165,74 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -1521,6 +2248,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1530,6 +2270,35 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001542", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", + "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1546,6 +2315,75 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1564,36 +2402,54 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "engines": { - "node": ">= 10" + "node": "^12.20.0 || >=14" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1608,47 +2464,6 @@ "node": ">= 8" } }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1661,44 +2476,25 @@ "node": ">=4" } }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">=12" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -1722,12 +2518,41 @@ } } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-browser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", @@ -1762,16 +2587,56 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/default-browser-id/node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + }, + } + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + "engines": { + "node": ">= 0.4" "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/dir-glob": { @@ -1798,83 +2663,136 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", "dev": true, "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "sax": "1.1.4" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=0.12" + "node": ">=12" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">= 4" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/esbuild": { @@ -1914,6 +2832,15 @@ "@esbuild/win32-x64": "0.18.20" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1926,16 +2853,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2043,31 +2991,6 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", @@ -2083,13 +3006,16 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { @@ -2109,19 +3035,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -2134,15 +3047,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2155,7 +3059,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2164,15 +3068,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -2210,18 +3105,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2283,6 +3166,24 @@ "reusify": "^1.0.4" } }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2307,51 +3208,69 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "glob": "^7.1.3" }, - "engines": { - "node": ">=12.0.0" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { @@ -2360,18 +3279,52 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/fs.realpath": { @@ -2400,6 +3353,48 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -2412,21 +3407,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "dev": true, + "dependencies": { + }, + "engines": { + }, + "funding": { + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2444,10 +3453,34 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2459,6 +3492,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "dev": true, + "dependencies": { + }, + "engines": { + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "define-properties": "^1.1.3" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -2479,6 +3527,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "dev": true, + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2491,70 +3551,82 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, "engines": { - "node": ">=6.0" + "node": ">= 0.4.0" } }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "get-intrinsic": "^1.1.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "dev": true, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { - "node": ">=0.8.0" + }, + "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { + "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + }, + "funding": { } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "dependencies": { + }, "engines": { - "node": ">=8" + }, + "funding": { + "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "has-symbols": "^1.0.2" + "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/he": { @@ -2566,6 +3638,12 @@ "he": "bin/he" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -2575,6 +3653,18 @@ "node": ">=14.18.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2597,43 +3687,117 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -2646,28 +3810,34 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "has-tostringtag": "^1.0.0" + "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -2679,6 +3849,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2709,6 +3897,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "dev": true, + "engines": { + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2718,6 +3933,21 @@ "node": ">=0.12.0" } }, + "dev": true, + "dependencies": { + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "has-tostringtag": "^1.0.0" "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -2727,6 +3957,34 @@ "node": ">=8" } }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -2739,32 +3997,80 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { }, "engines": { - "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" } + }, + "dev": true, + "dependencies": { + }, + "engines": { + } + }, + "dev": true, + "dependencies": { + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "has-tostringtag": "^1.0.0" + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "has-symbols": "^1.0.2" + "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "which-typed-array": "^1.1.11" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -2772,12 +4078,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2790,12 +4090,75 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2808,12 +4171,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2835,21 +4192,15 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2863,13 +4214,19 @@ "node": ">= 0.8.0" } }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { - "uc.micro": "^1.0.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/locate-path": { @@ -2893,18 +4250,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2912,27 +4257,18 @@ "dev": true }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "14 || >=16.14" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -2940,69 +4276,15 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { - "node": ">= 12" + "node": ">= 0.10.0" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -3031,6 +4313,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -3055,6 +4358,52 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3084,18 +4433,254 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-run": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.3.tgz", + "integrity": "sha512-vEw8X3Yu8TAbP4/uCJV3nCsCrhfHgUecRRDc69ZU9EK0QXHHc7YDzmIeI7SfA08ywzPlC9YcpITcB6bgMbrtwQ==", + "dev": true, + "dependencies": { + "@ionic/utils-fs": "^3.1.6", + "@ionic/utils-terminal": "^2.3.3", + "bplist-parser": "^0.3.2", + "debug": "^4.3.4", + "elementtree": "^0.1.7", + "ini": "^3.0.1", + "plist": "^3.0.6", + "split2": "^4.1.0", + "through2": "^4.0.2", + "tslib": "^2.4.0", + "yauzl": "^2.10.0" + }, + "bin": { + "native-run": "bin/native-run" + }, + "engines": { + "node": ">=12.13.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "engines": { + "node": ">=12" + "dependencies": { + "color-convert": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -3135,6 +4720,42 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3160,18 +4781,17 @@ } }, "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", "is-wsl": "^2.2.0" }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3224,15 +4844,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3245,14 +4856,17 @@ "node": ">=6" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/path-exists": { @@ -3288,6 +4902,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -3297,6 +4936,12 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3304,84 +4949,55 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" }, "engines": { - "node": ">=8" + "node": ">=10.4.0" } }, "node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -3432,7 +5048,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -3455,15 +5070,34 @@ "node": ">=6.0.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "engines": { - "node": ">= 0.6.0" + "node": ">=6" } }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -3473,6 +5107,28 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3493,6 +5149,63 @@ } ] }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve": { "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", @@ -3510,6 +5223,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3519,6 +5253,15 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3530,24 +5273,27 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^9.2.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { - "version": "3.29.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", - "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -3560,23 +5306,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.35.0.tgz", - "integrity": "sha512-szcIO9hPUx3PhQl91u4pfNAH2EKbtrXaES+m163xQVE5O1CC0ea6YZV/5woiDDW3CR9jF2CszPrKN+AFiND0bg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.3.7", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -3704,19 +5433,64 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=4" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "dev": true + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -3732,84 +5506,246 @@ "node": ">=10" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 10.x" } }, - "node_modules/shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/string.prototype.padend": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "engines": { - "node": ">=0.6.19" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { @@ -3824,13 +5760,13 @@ "node": ">=8" } }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/strip-final-newline": { @@ -3881,30 +5817,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -3921,12 +5833,81 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -3939,15 +5920,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3960,31 +5932,153 @@ "node": ">=8.0" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "punycode": "^2.1.1" }, "engines": { - "node": ">= 6" + "node": ">=12" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-check": { "version": "0.4.0", @@ -3998,6 +6092,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -4010,49 +6113,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedoc": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", - "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" + "node": ">= 0.4" } }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { @@ -4068,10 +6191,20 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/universalify": { "version": "2.0.0", @@ -4091,6 +6224,36 @@ "node": ">=8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4100,40 +6263,38 @@ "punycode": "^2.1.0" } }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -4185,120 +6346,6 @@ } } }, - "node_modules/vite-plugin-dts": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.5.4.tgz", - "integrity": "sha512-BJLBj1Vg9kV7ZMXAULT9UGogrElwz5s+k8TzC7LsFkHv5Jy90OWnHKUp8qm7sypu2pkF5pTJ5McUuHudnT0Imw==", - "dev": true, - "dependencies": { - "@microsoft/api-extractor": "^7.36.4", - "@rollup/pluginutils": "^5.0.2", - "@vue/language-core": "^1.8.8", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "vue-tsc": "^1.8.8" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "typescript": "*", - "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vite-plugin-dts/node_modules/@rollup/pluginutils": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", - "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-plugin-vue-markdown": { - "version": "0.23.8", - "resolved": "https://registry.npmjs.org/vite-plugin-vue-markdown/-/vite-plugin-vue-markdown-0.23.8.tgz", - "integrity": "sha512-8G/PmndrdPfsnnUMvlJWHTCtoi/LLA+pKbePkZoZni21zy+mTX/mmdZCqO95e0OOn83W2okNHu9QriQFzmGU3A==", - "deprecated": "`vite-plugin-vue-markdown` is renamed to `unplugin-vue-markdown`. For usages in Vite, you also need to change the import path to `unplugin-vue-markdown/vite`.", - "dev": true, - "dependencies": { - "@antfu/utils": "^0.7.5", - "@mdit-vue/plugin-component": "^0.12.0", - "@mdit-vue/plugin-frontmatter": "^0.12.0", - "@mdit-vue/types": "^0.12.0", - "@rollup/pluginutils": "^5.0.3", - "@types/markdown-it": "^13.0.0", - "markdown-it": "^13.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.0.0 || ^3.0.0-0 || ^4.0.0" - } - }, - "node_modules/vite-plugin-vue-markdown/node_modules/@rollup/pluginutils": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", - "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-svg-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-4.0.0.tgz", - "integrity": "sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA==", - "dev": true, - "dependencies": { - "@vue/compiler-sfc": "^3.2.20", - "svgo": "^3.0.2" - } - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "node_modules/vue": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", @@ -4311,17 +6358,6 @@ "@vue/shared": "3.3.4" } }, - "node_modules/vue-confetti-explosion": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vue-confetti-explosion/-/vue-confetti-explosion-1.0.2.tgz", - "integrity": "sha512-80OboM3/6BItIoZ6DpNcZFqGpF607kjIVc5af56oKgtFmt5yWehvJeoYhkzYlqxrqdBe0Ko4Ie3bWrmLau+dJw==", - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "vue": "^3.0.5" - } - }, "node_modules/vue-eslint-parser": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", @@ -4346,71 +6382,6 @@ "eslint": ">=6.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/vue-markdown-render": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vue-markdown-render/-/vue-markdown-render-2.0.1.tgz", - "integrity": "sha512-/UBCu0OrZ9zzEDtiZVwlV/CQ+CgcwViServGis3TRXSVc6+6lJxcaOcD43vRoQzYfPa9r9WDt0Q7GyupOmpEWA==", - "dependencies": { - "markdown-it": "^12.3.2", - "vue": "^3.2.45" - } - }, - "node_modules/vue-markdown-render/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/vue-markdown-render/node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/vue-markdown-render/node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, "node_modules/vue-template-compiler": { "version": "2.7.14", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", @@ -4422,13 +6393,13 @@ } }, "node_modules/vue-tsc": { - "version": "1.8.13", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.13.tgz", - "integrity": "sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.15.tgz", + "integrity": "sha512-4DoB3LUj7IToLmggoCxRiFG+QU5lem0nv03m1ocqugXA9rSVoTOEoYYaP8vu8b99Eh+/cCVdYOeIAQ+RsgUYUw==", "dev": true, "dependencies": { - "@vue/language-core": "1.8.13", - "@vue/typescript": "1.8.13", + "@vue/language-core": "1.8.15", + "@vue/typescript": "1.8.15", "semver": "^7.3.8" }, "bin": { @@ -4438,19 +6409,6 @@ "typescript": "*" } }, - "node_modules/vue3-carousel": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/vue3-carousel/-/vue3-carousel-0.3.1.tgz", - "integrity": "sha512-86vUkNPBzL2PVuR9w6hUsI90ccFjLp+K8cSFpRTISf+SjUQY3fMHc5CFF5MUL62v1xYYm27zEBmQupO9VQx9Kw==", - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vue3-touch-events": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vue3-touch-events/-/vue3-touch-events-4.1.4.tgz", - "integrity": "sha512-jt3Ig1dvC5Bb7omu1lYCYObpu6VcsjhXuqMOmcJnNQl+MHe8G+Rnk3hjLmVGUXwnzS7QpMmA4PSGyMsYANdf6Q==" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4466,12 +6424,98 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -4481,52 +6525,114 @@ "node": ">=12" } }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=6" } }, - "node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "optional": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/example/package.json b/example/vue3/package.json similarity index 77% rename from example/package.json rename to example/vue3/package.json index 08a4732d..0b5f97f0 100644 --- a/example/package.json +++ b/example/vue3/package.json @@ -14,25 +14,26 @@ }, "dependencies": { "@capacitor/android": "^5.3.0", - "@capacitor/core": "^5.2.3", - "@capacitor/ios": "^5.4.0", - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-receipt-capacitor": "file:../", - "@mytiki/tiki-sdk-capacitor": "^0.3.1", + "@capacitor/core": "^5.4.1", + "@capacitor/ios": "^5.4.1", + "@mytiki/capture-receipt-capacitor": "^0.7.0", + "@mytiki/tiki-sdk-capacitor": "^0.3.2", + "@mytiki/receipt-capacitor": "file:../../", + "@capacitor/preferences": "^5.0.6", "uuid": "^9.0.0", "vue": "^3.3.4" }, "devDependencies": { - "@capacitor/cli": "5.3.0", + "@capacitor/cli": "5.4.1", "@rushstack/eslint-patch": "^1.3.3", "@tsconfig/node18": "^18.2.1", - "@types/node": "^20.6.2", + "@types/node": "^20.6.5", "@types/uuid": "^9.0.3", "@vitejs/plugin-vue": "^4.3.4", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", "@vue/tsconfig": "^0.4.0", - "eslint": "^8.49.0", + "eslint": "^8.50.0", "eslint-plugin-vue": "^9.17.0", "npm-run-all": "^4.1.5", "prettier": "^3.0.3", diff --git a/example/src/app.vue b/example/vue3/src/app.vue similarity index 55% rename from example/src/app.vue rename to example/vue3/src/app.vue index 000958f4..61cc9063 100644 --- a/example/src/app.vue +++ b/example/vue3/src/app.vue @@ -4,15 +4,43 @@ --> @@ -48,8 +79,11 @@ header { } .start { - width: fit-content; margin: 2em auto; +} + +button { + width: fit-content; display: block; padding: 0.5em 2em; border: #00b272 solid 1px; @@ -82,4 +116,16 @@ header { .greetings p { text-align: center; } + +.cycle { + position: absolute; + bottom: 10%; + left: 50%; + transform: translateX(-50%); + text-align: center; +} + +.newUser { + margin: auto; +} diff --git a/example/vue3/src/assets/logo.svg b/example/vue3/src/assets/logo.svg new file mode 100644 index 00000000..830330d9 --- /dev/null +++ b/example/vue3/src/assets/logo.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/vue3/src/assets/main.css b/example/vue3/src/assets/main.css new file mode 100644 index 00000000..ad004cc7 --- /dev/null +++ b/example/vue3/src/assets/main.css @@ -0,0 +1,22 @@ +/* + * Copyright (c) TIKI Inc. + * MIT license. See LICENSE file in root directory. + */ + +@import "@mytiki/receipt-capacitor/dist/receipt-capacitor.css"; + +#app { + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +body { + min-height: 100vh; + color: #1c0000; + background: #ffffff; + font-size: 16px; + line-height: 1.5em; + transition: color 0.5s, background-color 0.5s; + font-family: "Space Grotesk", serif; +} diff --git a/example/src/main.ts b/example/vue3/src/main.ts similarity index 62% rename from example/src/main.ts rename to example/vue3/src/main.ts index 179c6682..65f3fee8 100644 --- a/example/src/main.ts +++ b/example/vue3/src/main.ts @@ -7,17 +7,18 @@ import "./assets/main.css"; import { createApp } from "vue"; import App from "@/app.vue"; -import Tiki from "@mytiki/tiki-receipt-capacitor"; +import Tiki from "@mytiki/receipt-capacitor"; createApp(App) .use(Tiki, { key: { publishingId: "be19730a-00d5-45f5-b18e-2e19eb25f311", - scanKey: + android: "sRwAAAAoY29tLm15dGlraS5zZGsuY2FwdHVyZS5yZWNlaXB0LmNhcGFjaXRvcgY6SQlVDCCrMOCc/jLI1A3BmOhqNvtZLzShMcb3/OLQLiqgWjuHuFiqGfg4fnAiPtRcc5uRJ6bCBRkg8EsKabMQkEsMOuVjvEOejVD497WkMgobMbk/X+bdfhPPGdcAHWn5Vnz86SmGdHX5xs6RgYe5jmJCSLiPmB7cjWmxY5ihkCG12Q==", - intelKey: + ios: "sRwAAAAoY29tLm15dGlraS5zZGsuY2FwdHVyZS5yZWNlaXB0LmNhcGFjaXRvcgY6SQlVDCCrMOCc/jLI1A3BmOhqNvtZLzShMcb3/OLQLiqgWjuHuFiqGfg4fnAiPtRcc5uRJ6bCBRkg8EsKabMQkEsMOuVjvEOejVD497WkMgobMbk/X+bdfhPPGdcAHWn5Vnz86SmGdHX5xs6RgYe5jmJCSLiPmB7cjWmxY5ihkCG12Q==", + product: "wSNX3mu+YGc/2I1DDd0NmrYHS6zS1BQt2geMUH7DDowER43JGeJRUErOHVwU2tz6xHDXia8BuvXQI3j37I0uYw==", }, - callback: (total: number): number | undefined => undefined, + callback: (_total: number): number | undefined => undefined, }) .mount("#app"); diff --git a/src/vite-env.d.ts b/example/vue3/src/vite-env.d.ts similarity index 90% rename from src/vite-env.d.ts rename to example/vue3/src/vite-env.d.ts index 44806484..34428158 100644 --- a/src/vite-env.d.ts +++ b/example/vue3/src/vite-env.d.ts @@ -5,9 +5,6 @@ declare module "*.vue" { import type { DefineComponent } from "vue"; - /** - * @ignore - */ const component: DefineComponent<{}, {}, any>; export default component; } diff --git a/example/vue3/tsconfig.app.json b/example/vue3/tsconfig.app.json new file mode 100644 index 00000000..627d58b0 --- /dev/null +++ b/example/vue3/tsconfig.app.json @@ -0,0 +1,20 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": [ + "env.d.ts", + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": "..", + "target": "ESNext", + "module": "ESNext", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/example/vue3/tsconfig.json b/example/vue3/tsconfig.json new file mode 100644 index 00000000..66b5e570 --- /dev/null +++ b/example/vue3/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/example/vue3/tsconfig.node.json b/example/vue3/tsconfig.node.json new file mode 100644 index 00000000..292c27d1 --- /dev/null +++ b/example/vue3/tsconfig.node.json @@ -0,0 +1,16 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "types": ["node"], + "moduleResolution": "node" + } +} diff --git a/example/vite.config.ts b/example/vue3/vite.config.ts similarity index 91% rename from example/vite.config.ts rename to example/vue3/vite.config.ts index 59b70839..7739bec5 100644 --- a/example/vite.config.ts +++ b/example/vue3/vite.config.ts @@ -7,7 +7,6 @@ import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import path from "path"; -// https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], resolve: { diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..92cc4d56 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,16 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + moduleNameMapper: { + "^@/(.*)$": "/src/$1", + }, + setupFiles: ["/__tests__/__mocks__/localStorageMock.js"], + verbose: true, + globals: { + crypto: { + getRandomValues: (arr) => require("crypto").randomBytes(arr.length), + }, + }, + modulePathIgnorePatterns: ["/__tests__/__mocks__/*", "/__tests__/__fixtures__/*"] +} \ No newline at end of file diff --git a/makefile b/makefile new file mode 100644 index 00000000..12ab0bfc --- /dev/null +++ b/makefile @@ -0,0 +1,49 @@ +.PHONY: vue3 vue2 clean + +lint: + npx eslint "./src/**/*.{ts,js}" + +fmt: + npx prettier "./src/**/*.{css,html,ts,js,java}" --write + +vue3: clean + cp -f ./vue3/main.ts ./src/main.ts + cp -f ./vue3/package.json ./package.json + cp -f ./vue3/vite.config.ts ./vite.config.ts + npm install + npm run build + +vue3-example: vue3 + cd example/vue3 && npm install + cd example/vue3 && npm run build && npx cap sync + +vue3-example-android: vue3-example + cd example/vue3/android && ./gradlew build + cd example/vue3 && npx cap run android + +vue3-example-ios: vue3-example + cd example/vue3/ios/App pod install --repo-update + cd example/vue3 && npx cap run ios + +vue2: clean + cp -f ./vue2/main.ts ./src/main.ts + cp -f ./vue2/package.json ./package.json + cp -f ./vue2/vite.config.ts ./vite.config.ts + npm install + npm run build + +vue2-example: vue2 + cd example/vue2 && npm install + cd example/vue2 && npm run build && npx cap sync + +vue2-example-android: vue2-example + cd example/vue2/android && ./gradlew build + cd example/vue2 && npx cap run android + +vue2-example-ios: vue2-example + cd example/vue2/ios/App pod install --repo-update + cd example/vue2 && npx cap run ios + +clean: + rm -f ./src/main.ts vite.config.ts package.json package-lock.json + rm -rf node_modules/ dist/ docs/ example/vue2/dist/ example/vue3/dist/ diff --git a/package.json b/package.json deleted file mode 100644 index 9ab349c7..00000000 --- a/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "@mytiki/tiki-receipt-capacitor", - "version": "0.3.0", - "description": "The TIKI Receipt library adds to your Vue.js + Capacitor mobile app a Data Reward program for your users to share their receipts in-exchange for loyalty points.", - "author": "Tiki inc.", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/tiki/tiki-receipt-capacitor.git" - }, - "bugs": { - "url": "https://github.com/tiki/tiki-receipt-capacitor/issues" - }, - "files": [ - "dist" - ], - "module": "./dist/tiki-receipt-capacitor.es.js", - "main": "./dist/tiki-receipt-capacitor.umd.js", - "typings": "./dist/types/main.d.ts", - "exports": { - ".": { - "types": "./dist/types/main.d.ts", - "import": "./dist/tiki-receipt-capacitor.es.js" - }, - "./dist/tiki-receipt-capacitor.css": "./dist/tiki-receipt-capacitor.css" - }, - "scripts": { - "build": "rimraf dist && vue-tsc --declaration --emitDeclarationOnly; vite build", - "example:android": "npm run build && cd example && npm run build-only && npx cap sync android && npx cap run android", - "example:ios": "npm run build && cd example && npm run build-only && npx cap sync ios && npx cap run ios" - }, - "keywords": [ - "tiki", - "microblink", - "zero-party", - "receipt" - ], - "dependencies": { - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-sdk-capacitor": "^0.3.1", - "hammerjs": "^2.0.8", - "vue": "^3.3.4", - "vue-markdown-render": "^2.0.1", - "vue3-touch-events": "^4.1.3" - }, - "devDependencies": { - "@babel/types": "^7.22.5", - "@rushstack/eslint-patch": "^1.3.2", - "@tsconfig/node18": "^18.2.0", - "@types/hammerjs": "^2.0.41", - "@types/markdown-it": "^13.0.0", - "@types/node": "^20.5.0", - "@vitejs/plugin-vue": "^4.2.3", - "@vue/eslint-config-prettier": "^8.0.0", - "@vue/eslint-config-typescript": "^11.0.3", - "@vue/tsconfig": "^0.4.0", - "eslint": "^8.47.0", - "eslint-plugin-vue": "^9.16.0", - "path": "^0.12.7", - "rollup-plugin-typescript2": "^0.35.0", - "typedoc": "^0.25.0", - "typescript": "^5.1.6", - "vite": "^4.4.9", - "vite-plugin-dts": "^3.5.2", - "vite-plugin-vue-markdown": "^0.23.8", - "vite-svg-loader": "^4.0.0", - "vue-tsc": "^1.8.8" - }, - "peerDependencies": { - "@capacitor/android": "^5.2.2", - "@capacitor/core": "^5.2.2", - "@capacitor/ios": "^5.2.2", - "@mytiki/tiki-capture-receipt-capacitor": "^0.5.0", - "@mytiki/tiki-sdk-capacitor": "^0.3.1" - } -} diff --git a/src/assets/icons/10p.svg b/src/assets/icons/10p.svg new file mode 100644 index 00000000..21d373e1 --- /dev/null +++ b/src/assets/icons/10p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/15p.svg b/src/assets/icons/15p.svg new file mode 100644 index 00000000..b92a15b7 --- /dev/null +++ b/src/assets/icons/15p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/20p.svg b/src/assets/icons/20p.svg new file mode 100644 index 00000000..822fe4df --- /dev/null +++ b/src/assets/icons/20p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/25p.svg b/src/assets/icons/25p.svg index 29c90ecb..92bd66a0 100644 --- a/src/assets/icons/25p.svg +++ b/src/assets/icons/25p.svg @@ -6,6 +6,6 @@ - diff --git a/src/assets/icons/30p.svg b/src/assets/icons/30p.svg new file mode 100644 index 00000000..958cf63d --- /dev/null +++ b/src/assets/icons/30p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/35p.svg b/src/assets/icons/35p.svg new file mode 100644 index 00000000..3571dc47 --- /dev/null +++ b/src/assets/icons/35p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/40p.svg b/src/assets/icons/40p.svg new file mode 100644 index 00000000..55447cb3 --- /dev/null +++ b/src/assets/icons/40p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/45p.svg b/src/assets/icons/45p.svg new file mode 100644 index 00000000..910fda43 --- /dev/null +++ b/src/assets/icons/45p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/50p.svg b/src/assets/icons/50p.svg index 52979ca2..27fdc545 100644 --- a/src/assets/icons/50p.svg +++ b/src/assets/icons/50p.svg @@ -4,8 +4,8 @@ --> - - diff --git a/src/assets/icons/55p.svg b/src/assets/icons/55p.svg new file mode 100644 index 00000000..f7246280 --- /dev/null +++ b/src/assets/icons/55p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/5p.svg b/src/assets/icons/5p.svg new file mode 100644 index 00000000..14630f2a --- /dev/null +++ b/src/assets/icons/5p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/60p.svg b/src/assets/icons/60p.svg new file mode 100644 index 00000000..d99f9818 --- /dev/null +++ b/src/assets/icons/60p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/65p.svg b/src/assets/icons/65p.svg new file mode 100644 index 00000000..129a06af --- /dev/null +++ b/src/assets/icons/65p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/70p.svg b/src/assets/icons/70p.svg new file mode 100644 index 00000000..3792ddad --- /dev/null +++ b/src/assets/icons/70p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/75p.svg b/src/assets/icons/75p.svg index 8170931d..f7256893 100644 --- a/src/assets/icons/75p.svg +++ b/src/assets/icons/75p.svg @@ -4,8 +4,8 @@ --> - - diff --git a/src/assets/icons/80p.svg b/src/assets/icons/80p.svg new file mode 100644 index 00000000..030b4dfc --- /dev/null +++ b/src/assets/icons/80p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/85p.svg b/src/assets/icons/85p.svg new file mode 100644 index 00000000..0801a9ee --- /dev/null +++ b/src/assets/icons/85p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/90p.svg b/src/assets/icons/90p.svg new file mode 100644 index 00000000..a421f39f --- /dev/null +++ b/src/assets/icons/90p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/icons/95p.svg b/src/assets/icons/95p.svg new file mode 100644 index 00000000..8451efb5 --- /dev/null +++ b/src/assets/icons/95p.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/assets/md/learn-more.md b/src/assets/md/learn-more.md index 6d85afa3..3a25dda1 100644 --- a/src/assets/md/learn-more.md +++ b/src/assets/md/learn-more.md @@ -1,57 +1,1510 @@ -# What are Data Rewards? -In principal it's quite straightforward, you have data that businesses want. Many of these businesses are willing to pay you for the legal rights to use it. +
+
+ Gmail + Walmart + Amazon +
+
+ CVS + Costco + Walgreens +
+
-**Q: But don't they already just take it?** -A: Yes, and no. There are several reasons why businesses prefer to legally source data direct from users. There's certain data you have that they can't easily or affordably acquire. The laws around data privacy are radidly changing and this is a lower risk, more sustainable process. And ultimately, data as with anything, straight from the source, is better and cheaper. +Share your purchasing data to earn _$1 a month_. -## How does it work? -Once you opt-in to the program, you will see a list of offers for actions you can take to exchange your data for a reward. +## Conditions -Offers can vary in the types of data, the payout, and the requirements associated. For example, some actions are one-time like taking a photo of a receipt. Where others may require linking your Amazon account for 90 days. +--- -Data for the program is never automatically collected without your knowledge. You must perform an explicit action to license your data and receive said reward. +### 1. Link your Gmail account -## What rewards are available? -Data rewards are tallied in the form of reward points, similar to something like airline miles. Each offer details the action required, the reward amount, and if there are any additional requirements. +You must connect at least one Gmail account. This allows us to scan for receipt data. -**The conversion rate is $1 USD = 1,000 points.** +### 2. Link a supported retailer account -*Example:* +You must connect _at least one_ retailer account. This allows us to retrieve your purchase history. -![Earn 10 points for every receipt you scan.](https://cdn.mytiki.com/assets/reward-example.png) +Choose from any one of 58 supported retailers: +- Walmart +- Amazon +- CVS +- Costco +- Walgreens -### How do I get paid? -Just press the Redeem button to begin the withdrawl process to convert your points into cashback. Depending on your account and settings a withdrawl may be subject to a minimum balance or other program participation minimums. +And many more! -![Redeem Points](https://cdn.mytiki.com/assets/redeem-button.png) +### 3. Share at least 5 new receipts +Once you've linked your accounts, perform at least 5 transactions over the next 28 days. -## What happens to my data? +We'll keep track of it for you and show your progress. -When you agree to participate in the Data Rewards program a Data License is created specifying how data can be exchanged and used. +### 4. Open the app at least once a week -**At this point, none of your data is actually exchanged, only the legal terms and rights are set.** +Opening the app weekly allows us to scan for new receipts. -If you decide to perform one or more of the rewarded actions detailed in the offer(s), only the data required for fulfilment of the offer is uploaded, and used solely in accordance with your Data License. +We'll send you notifications (if you want). -### What is a Data License? +--- -A Data License declares your ownership over a given set of data, specifying the terms, conditions, and compensation for the use of said dataset. +# Supported Retailers -In essence, it's a legal agreement that a) ensures your fair compensation for your data and b) contractually obligates businesses to only utilize your data for use cases explicitly defined. +We support two methods for sharing your purchasing data: direct account linking and email scanning. -### Can I change my mind? +## Account Linking -Of course! Since the Data Reward program only works on explicit actions, just stop performing rewarded actions and unlink any connected accounts. Or, if you want to completely opt-out of the program, just contact our support team, and we will terminate your Data License. +Choose from up to 58 supported retailers! -It's important to note that you are legally licensing your data for fair compensation meaning there are no takebacksies on past trades. For example, if you bought an apple for $1 and then ate it, you can't request your $1 back from the vendor, but you can definitely not buy any more apples. +
+
Acme Markets
+
Albersons
+
Amazon US, UK, CA
+
Bed Bath & Beyond
+
Best Buy
+
BJ's Wholesale Club
+
Chewy
+
Costco
+
CVS
+
Dick's Sporting Goods
+
Dollar General
+
DollarTree
+
Domino's Pizza
+
DoorDash
+
Drizly
+
Family Dollar
+
Food 4 Less
+
Food Lion
+
Fred Meyer
+
GAP
+
Giant Eagle
+
Grubhub
+
Harris Teeter
+
H.E.B.
+
Home Depot
+
HyVee
+
Instacart
+
Jewel Osco
+
Kohl's
+
Kroger
+
Lowe's
+
Macy's
+
Marshalls
+
Meijer
+
Nike
+
Publix
+
Ralphs
+
RiteAid
+
Safeway
+
Sam's Club
+
Seamless
+
Sephora
+
Shipt
+
ShopRite
+
Sprouts
+
Staples US, Canada
+
Starbucks
+
Taco Bell
+
Target
+
T.J.Maxx
+
UberEats
+
Ulta
+
Vons
+
Walgreens
+
Walmart US, Canada
+
Wegman's
+
-The same logic applies here, you can't take back the data you exchanged, but you can absolutely stop exchanging any more data. +--- -### What if I don't participate? +| Name | Order Types | +| ---- | ----------- | +| Acme Markets | All | +| Albertsons | All | +| Amazon US, UK, CA | Orders, Digital | +| Bed Bath & Beyond | All | +| Best Buy | All | +| BJ’s Wholesale Club | Online | +| Chewy | All | +| Costco | Online | +| CVS | All | +| Dick’s Sporting Goods | All | +| Dollar General | All | +| DollarTree | All | +| Domino’s Pizza | All | +| DoorDash | All | +| Drizly | All | +| Family Dollar | All | +| Food 4 Less | All | +| Food Lion | All | +| Fred Meyer | All | +| GAP | All | +| Giant Eagle | All | +| Grubhub | All | +| Harris Teeter | All | +| H.E.B | All | +| Home Depot | Online | +| HyVee | All | +| Instacart | All | +| Jewel Osco | All | +| Kohl’s | All | +| Kroger | All | +| Lowe’s | Online | +| Macy’s | Online, Store | +| Marshalls | All | +| Meijer | Pickup, Delivery | +| Nike | All | +| Publix | All | +| Ralphs | All | +| RiteAid | All | +| Safeway | All | +| Sam’s Club | Online | +| Seamless | All | +| Sephora | All | +| Shipt | All | +| ShopRite | All | +| Sprouts | All | +| Staples | Online | +| Staples Canada | All | +| Starbucks | All | +| Taco Bell | All | +| Target | Online, Store | +| T.J.Maxx | All | +| UberEats | All | +| Ulta | All | +| Vons | All | +| Walgreens | Online, Store | +| Walmart | All | +| Walmart Canada | All | +| Wegman’s | Store | -Participation is **100% optional**. Declining to participate will not negatively impact your current experience. +--- -  -  +## Email + +For email scanning, we support over 1,000 different merchants! All you need to do is connect your Gmail account. + +Your email is scanned _only_ for receipt data from these specific sources! + +
+
Gmail
+
+ +--- + +### United States (1085) + +| Name | Domain | +| ---- | ------ | +| 13MoonsAromatics.com | 13moonsaromatics@gmail.com | +| 1800Contacts.com | info@t.1800contacts.com | +| 1800Flowers.com | 1800flowers@em.1802flowers.com | +| 1800PetMeds.com | customerservice@1800petmeds.com | +| 1stForOrlando.com | reservations@1stfororlando.com | +| 4InkJets.com | info@4inkjets.com | +| 6PM.com | cs@6pm.com | +| 7-Eleven.com | noreply@7-eleven.com | +| AAA.com | noreply@email-aaa.com | +| AAFES.com | donot-reply@shopmyexchange.com | +| AAFES.com | ereceipt@aafes.com | +| Aarons.com | aarons@email.aarons.com | +| Abebooks.com | noreply_transactional@abebooks.com | +| Abercrombie.com | orders@e.abercrombie.com | +| Academy.com | email@e.academy.com | +| AccessoTicketing | noreply@accessoticketing.com | +| AceHardware.com | acehardware@acehardware.com | +| AceHardware.com | acehardware@email.acehardware.com | +| AceHardware.com | acerewards@promo.acehardware.com | +| AcmeMarkets | acme@deals.acmemarkets.com | +| AcmeMarkets.com | no-reply@status.acmemarkets.com | +| Adidas.com | adidas@us-info.adidas.com | +| Adobe.com | store@adobe.com | +| AdoreMe.com | hello@t.adoreme.com | +| AdvanceAutoParts.com | reply@email-advanceautoparts.com | +| Aerie.com | aerie@t.ae.com | +| Aeropostale.com | aeropostale@o.aeropostale.com | +| Aeropostale.com | receipts@aeropostale.com | +| Afterpay.com | donotreply@afterpay.com | +| Airbnb.com | automated@airbnb.com | +| Airbnb.com | express@airbnb.com | +| Airtalkwireless.com | info@airtalkwireless.com | +| AlbertHeijnBE | bestellingen@ah.nl | +| Albertsons | no.reply@albertsons.com | +| Albertsons | no-reply@status.albertsons.com | +| ALDI.us | no-reply@orders.aldi.us | +| Alibaba.com | credit@notice.alibaba.com | +| AllBirds.com | hello@info.allbirds.com | +| Allivet.com | customercare@allivet.com | +| Allstate.com | allstate@billing01.email-allstate.com | +| Amazon.com | auto-confirm@amazon.com | +| Amazon.com | digital-no-reply@amazon.com | +| Amazon.com | no-reply@amazon.com | +| Amazon.com | no-reply@buywithprime.amazon.com | +| Amazon.com | return@amazon.com | +| Amazon.com | store-news@amazon.com | +| AMCTheatres.com | noreply@email.amctheatres.com | +| AmericanAirlines | no-reply@info.email.aa.com | +| AmericanEagleOutfitters.com | ae@e.ae.com | +| AmericanEagleOutfitters.com | ae@notifications.ae.com | +| AmericanExpress.com | customerservice@mytrips.americanexpress.com | +| AnastasiaBeverlyHills.com | noreply@anastasiabeverlyhills.com | +| AnnTaylor.com | anntaylor@t.anntaylor.com | +| Anthropologie.com | anthropologie@t.e.anthropologie.com | +| Apothic.com | info@email.apothic.com | +| Apple.com | do_not_reply@apple.com | +| Apple.com | donotreply@email.apple.com | +| Apple.com | just_for_you@email.apple.com | +| Apple.com | noreply@applepay.apple.com | +| Apple.com | no_reply@email.apple.com | +| Apple.com | shipping_notification@orders.apple.com | +| Apple.com | your_order_gb@orders.apple.com | +| Arbonne.com | noreply@arbonne.com | +| Arbys.com | noreply@arbys.com | +| Ariat.com | orders@email.ariat.com | +| ArmaniBeauty.com | noreply@mail.giorgioarmanibeauty-usa.com | +| Aroma360.com | aroma360@aroma360.com | +| Athleta.com | orders@email.athleta.com | +| AT&T.com | update@emaildl.att-mail.com | +| Audible.com | donotreply@audible.com | +| Augire.com | support@augire.com | +| AutoPartsKart.com | customerservice@apksolutionsinc.com | +| AutoZone | autozone@e.autozone.com | +| AutoZone.com | customer.service@autozone.com | +| AutoZone.com | orders@e.autozone.com | +| AutoZone.com | orders@em.autozone.com | +| Avant.com | no-reply@avant.com | +| Aveda.com | avedaonlineservice@aveda.com | +| Aveda.com | customercare@aveda.com | +| Avenue.com | customerservice@avenue.com | +| AviaGames.com | helpcenter@aviagames.com | +| AviaGames.com | support@aviagames.com | +| Avis.com | avis@e.avis.com | +| AXS.com | guestservices@axs.com | +| AXS.com | guestservices@boxoffice.axs.com | +| BalanceGrille.com | eat@balancegrille.com | +| BananaRepublic.com | orders@email.bananarepublic.com | +| Bandcamp.com | noreply@bandcamp.com | +| Banfield.com | email@mailer.banfield.com | +| BangGood.com | trigger@deals.banggood.com | +| BarefootWine.com | barefoot@email.barefootwine.com | +| BareMinerals.com | customerservice@email.bareminerals.com | +| BarkBox.com | scout@woof.barkbox.com | +| Bark.co | superchewer@howl.bark.co | +| BarnesAndNoble.com | barnesandnoble@mail.barnesandnoble.com | +| BarnesAndNoble.com | noreply@orderstatus.barnesandnoble.com | +| Barstoolsports.com | help@barstoolsports.com | +| BaskinRobbins.com | noreply@emails.baskinrobbins.com | +| BathAndBodyWorks.com | bathandbodyworks@bathandbodyworks.narvar.com | +| BathAndBodyWorks.com | customerservice@bathandbodyworks.com | +| BathAndBodyWorks.com | customerservice@tem2.bathandbodyworks.com | +| BathAndBodyWorks.com | customerservice@tem.bathandbodyworks.com | +| BathAndBodyWorks.com | e-receipt@bathandbodyworks.com | +| Battle.net | noreply@battle.net | +| BaubleBar.com | helpme@baublebar.com | +| BeautyCounter.com | countmein@beautycounter.com | +| Beautylish.com | service@beautylish.com | +| BedBathAndBeyond | bedbath&beyond@emailbedbathandbeyond.com | +| BedBathAndBeyond.com | beyond@emailbedbathandbeyond.com | +| BedBathAndBeyond.com | beyond@transact.bedbathandbeyond.com | +| BedBathAndBeyond.com | customer.service@bedbathandbeyond.com | +| BedBathAndBeyond.com | delivery@bedbathandbeyond.narvar.com | +| BedBathAndBeyond.com | no_reply@bedbathandbeyond.narvar.com | +| BeetlesGel.com | customerservice@beetlesgel.com | +| BeisTravel.com | hello@beistravel.com | +| Belk.com | belk@belkemail.com | +| Belk.com | belkstore@belk.com | +| Bershka.com | noreply@bershka.com | +| BestBuy.com | bestbuyinfo@emailinfo.bestbuy.com | +| BestBuy.com | geeksquad@emailinfo.bestbuy.com | +| BestBuy.com | genadmin@bestbuy.com | +| BestEgg.com | besteggnotification@email.bestegg.com | +| BestWestern.com | info@myreservation.bestwestern.com | +| Betmgm.com | info@mail.betmgm.com | +| BetRivers.com | pasupport@t.betrivers.com | +| BetRivers.com | wvsupport@t.betrivers.com | +| BeyondMeat.com | ethanandteam@beyondmeat.com | +| BigFishGames.com | orders@bigfishgames.com | +| BigLots.com | noreply@em.biglots.com | +| BillMatrix.com | donotreply@billmatrix.com | +| Binnys.com | info@binnys.com | +| Birchbox.com | info@birchbox.com | +| Birkenstock.com | customerservice@birkenstock.com | +| BJs.com | bjswholesaleclub@emails.bjs.com | +| BJs.com | bjswholesaleclub@oe.bjs.com | +| BJs.com | support@bjssupport.zendesk.com | +| BlickArtMaterials | orders@dickblick.com | +| Blizzard.com | noreply@blizzard.com | +| BloomNation.com | questions@bloomnation.com | +| BloomsToday.com | receipts@receipts.bloomstoday.com | +| BlossomCosmetics.org | crystalbrown@blossomcosmetics.org | +| BlueApron.com | blueapron@t.blueapron.com | +| BlueApron.com | contact@blueapron.com | +| BlueApron.com | team@updates.blueapron.com | +| BlueSpeedPassplus.com | receipts@bluespeedpassplus.com | +| Bojangles.com | orders@bojangles.com | +| Bonanza.com | no-reply@bonanza.com | +| BoostMobile.com | boostmobile@email.my.boostmobile.com | +| Bose.com | no-reply@communications.bose.com | +| Boxed | auto-confirm@boxed.com | +| BPmeRewardsApp | receipt@us.bpme-app.com | +| Bridgecrest.com | bridgecrestpayments@paymentus.com | +| Brigit.com | communications@info.hellobrigit.com | +| BrokenRealmz.com | info@brokenrealmz.com | +| Brooklinen.com | hello@brooklinen.com | +| Brookshires.com | noreply@brookshires-email.com | +| BrooksRunning.com | brooksrunning@updates.brooksrunning.com | +| Budget.com | budget@e.budget.com | +| BuffaloWildWings.com | reply@emailinfo.buffalowildwings.com | +| Bugaboo.com | service@your.bugaboo.com | +| BurgerKing.com | promos-coming@your-way.bk.com | +| BurlingtonStores.com | email@info.burlingtonstores.com | +| ButcherBox.com | support@butcherbox.com | +| BuyBuyBaby | buybuybaby@emailbuybuybaby.com | +| Buybuybaby.com | buybuybaby@transact.buybuybaby.ca | +| Buybuybaby.com | buybuybaby@transact.buybuybaby.com | +| Buybuybaby.com | customer.service@buybuybaby.com | +| CalvinKlein.com | calvinklein@ts.calvinklein.com | +| Canva.com | no-reply@canva.com | +| Carters.com | carters.email@em.carters.com | +| Carters.com | online@carters.com | +| Casetify.com | hello@casetify.com | +| Caseys.com | offers@caseys.com | +| Caseys.com | orders@caseys.com | +| Caviar.com | support@trycaviar.com | +| CenturyLink.com | centurylinknotifications@centurylink.com | +| Champion.com | orders@champion.com | +| ChampsSports.com | accountservices@em.champssports.com | +| Chanel.com | orders@e-us.chanel.com | +| CheekBoss.com | support@cheekboss.com | +| Chegg.com | chegg@alerts.chegg.com | +| Chevron.com | no-reply@chevronmobileapp.com | +| Chewy.com | noreply@chewy.com | +| Chewy.com | service@chewy.com | +| Chick-fil-A.com | one@chick-fil-a.com | +| Chick-fil-A.com | one@email.chick | +| Chick-fil-A.com | one@email.chick-fil-a.com | +| ChildrensPlace.com | customerservice@childrensplace.narvar.com | +| ChildrensPlace.com | noreply@childrensplace.com | +| ChildrensPlace.com | thechildrensplace@tr.childrensplace.com | +| Chilis.com | noreply@chilis.com | +| Chipotle.com | chipotle@email.chipotle.com | +| ChoiceHotels.com | choicehotels@reservations.choicehotels.com | +| ChowNow.com | orders-no-reply@chownow.com | +| ChristopheRobin.com | service@t.christopherobin.com | +| Chumbacasino.com | support@chumbacasino.com | +| Cinemark.com | cinemark@info.cinemark.com | +| CinepolisUSA.com | tickets@cinemastubs.com | +| ClickBank.com | noreply@clickbank.com | +| Clinique.com | customercare@clinique.com | +| Coach.com | coach@e.coachoutlet.com | +| Coach.com | coach@em.coach.com | +| Coach.com | coachoutlet@em.coachoutlet.com | +| Coach.com | coachuk@europe.coach.com | +| Coach.com | uk.customercare@mail.coach.com | +| Comixology.com | comixology@e.comixology.com | +| Co-Mo.coop | como@smarthub.coop | +| CornerShopApp.com | receipts@cornershopapp.com | +| Costco.com | costcopay@pay.costco.com | +| Costco.com | no-reply@costco.com | +| Costco.com | orderstatus@costco.com | +| Costco.com | webpharmacy@costco.com | +| Cox.com | no-reply@mc.cox.com | +| CrackerBarrel.com | crackerbarrelnews@email.crackerbarrel.com | +| CrackerBarrel.com | orders@email.crackerbarrel.com | +| Craft-Hub.com | support@craft-hub.com | +| CrateandBarrel.com | columbus@crateandbarrel.com | +| CrateandBarrel.com | galleria@crateandbarrel.com | +| CreativeMarket.com | hello@creativemarket.com | +| CricketWireless.com | noreply@mail.cricketwireless.com | +| Cricut.com | cricut@et.cricut.com | +| Crocs.com | donotreply@crocs-email.com | +| Crocs.com | email@crocs-email.narvar.com | +| Crocs.com | noreply@crocs-email.com | +| Crunchyroll.com | orders@crunchyroll.com | +| Cub.com | no-reply@cub.com | +| CubeSmart.com | noreply@cubesmartmail.com | +| Culvers.com | noreply@orders.culvers.com | +| CVS.com | alerts@cvsspecialty.com | +| CVS.com | customercare@cvs.com | +| CVS.com | cvs@cvs.narvar.com | +| CVS.com | cvspharmacy@pharmacy.cvs.com | +| CVS.com | extracare@pharmacy.cvs.com | +| CVS.com | noreply_onlineorder@cvshealth.com | +| CVS.com | noreply@pharmacy.cvs.com | +| Daebak.co | hello@daebak.co | +| Daily-Harvest.com | hello@info.daily-harvest.com | +| DairylandInsurance.com | help@dairylandinsurance.com | +| DairyQueen.com | noreply@ordering.dairyqueen.com | +| DaveAndBusters.com | emailreceipt@kiosk.daveandbusters.com | +| DaveAndBusters.com | noreply@order.online | +| DCShoes.com | no-reply@notification.acs.dcshoes.com | +| Delivery.com | info@delivery.com | +| Delta.com | deltaairlines@t.delta.com | +| DHgate.com | marketing@e.dhgate.com | +| Dickeys.com | noreply@dickeys.com | +| Dickies.com | hello@email.dickies.com | +| DicksSportingGoods.com | dsg@e.dcsg.com | +| DicksSportingGoods.com | from@notifications.dcsg.com | +| DicksSportingGoods.com | notifications@delivery.dickssportinggoods.com | +| Dillards.com | dillards@dillards.com | +| Dior.com | info@service.christiandior.com | +| Dior.com | noreply@dior.com | +| DirectAuto.com | service@directauto.com | +| DirecTV.com | no_reply@directv.ebilling.com | +| DirtyDogs.com | store112@dirtydogs.com | +| Discoveryplus.com | noreply@email.discoveryplus.com | +| Disneyland | dlr.guest.mail@disneyonline.com | +| DisneyParks.com | merchandise.guest.services@disneyparks.com | +| DisneyParks.com | shop@disneyparks.com | +| DisneyPlus.com | disneyplus@mail.disneyplus.com | +| Doheny.com | doheny@em.doheny.com | +| Dollar General | dollargeneral@dgemail.dollargeneral.com | +| Dollar General | dollargeneral@receiptiq.com | +| Dollar General | onlineorder@dggo.dollargeneral.com | +| Dollar General | onlineorder@digital.dollargeneral.com | +| DollarGeneral.com | customerservice@orders.dollargeneral.com | +| DollarGeneral.com | dolargeneral@dgemail.dollargeneral.com | +| DollarShaveClub.com | members@shop.dollarshaveclub.com | +| DollarShaveClub.com | support@transact.dollarshaveclub.com | +| DollarShaveClub.com | support@transact.uk.dollarshaveclub.com | +| Dollartree.com | info@dtorder.dollartree.com | +| DollyPartonsStampede | no-reply@dpstampede.com | +| Dominos.com | confirmation@e-confirmation.dominos.com | +| Dominos.com | dominos@confirmation.dominos.com | +| Donatos.com | websupport@donatos.com | +| DoorDash.com | no-reply@doordash.com | +| Dosist.com | orders@dosistthcfree.com | +| Draftkings.com | draftkings@account.draftkings.com | +| DrinkHint.com | hello@drinkhint.com | +| Drizly.com | noreply@drizly.com | +| DrSquatch.com | support@drsquatch.com | +| Dsw.com | customerservice@dsw.com | +| Dsw.com | dsw@em.dsw.com | +| Dsw.com | orders@dsw.com | +| DuluthTrading.com | no-reply@notification.duluthtrading.com | +| DunkinDonuts.com | ddperks@emails.dunkindonuts.com | +| DunkinDonuts.com | noreply@emails.dunkindonuts.com | +| Dyson.com | questions@dyson.com | +| EA.com | noreply@e.ea.com | +| earthbreeze.com | hello@earthbreeze.com | +| EarthFedMuscle.com | support@earthfedmuscle.com | +| EarthWisePet.com | littleton@earthwisepet.com | +| EasySalonBookkeeping.com | support@easysalonbookkeeping.com | +| Ebay.com | ebay@ebay.com | +| Ebay.com | ebay@reply.ebay.com | +| E-FitFlop.com | donotreply@e-fitflop.com | +| ElementVape.com | customerservice@elementvape.com | +| ElfCosmetics.com | elf@elfcosmetics.com | +| ElfCosmetics.com | makeup@e.elfcosmetics.com | +| Emagine-Entertainment.com | no-reply@email.emagine-entertainment.com | +| EnduranceDirect.com | levar.johnson@endurancedirect.com | +| Enterprise.com | no-reply@enterprise.com | +| EONNext.com | hi@eonnext.com | +| Epicgames.com | help@accts.epicgames.com | +| Equinox.com | kaileigh.sandberg@equinox.com | +| ESalon.com | confirmed@esalon.com | +| Esurance.com | customerservice@csr.esurance.com | +| Etsy.com | no-reply@etsy.com | +| Etsy.com | noreply@mail.etsy.com | +| Etsy.com | transaction@etsy.com | +| EuropeanWaxCenter | noreply@ewc.waxcenter.com | +| Eventbrite.com | noreply@order.eventbrite.com | +| ExeterFinanceLLC | exeterbillpay@paymentus.com | +| Expedia.com | expedia@eg.expedia.com | +| Expedia.com | expedia@expediamail.com | +| ExpressScripts.com | express-scripts-pharmacy@orders.express-scripts.com | +| ExtraSpace.com | email@info.extraspace.com | +| ExtraSpace.com | extraspace@email.extraspace.com | +| EzyDog.com | info@ezydog.com | +| FabFitFun.com | vip@fabfitfun.com | +| Fabletics.com | fabletics@e-mail.fabletics.com | +| Fabletics.com | fabletics@fabletics.narvar.com | +| Fabletics.com | fabletics@info.fabletics.com | +| FabricWholesaleDirect.com | support@fabricwholesaledirect.com | +| FamilyDollar.com | info@orders.familydollar.com | +| Fanatics.com | shop@e.fanatics.com | +| Fanatics.com | shop@e.fanaticsretailgroup.com | +| Fandango | confirmation@movies.fandango.com | +| Fandango | fandango@movies.fandango.com | +| Fanduel.com | casino@fanduel.com | +| Fareway.com | 384online@farewaystores.com | +| Fareway.com | online@farewaystores.com | +| Farmasius.com | sm@e.farmasius.com | +| Farmers.com | billing@payments.farmers.com | +| FashionNova.com | donotreply@fashionnova.com | +| Feastables.com | hi@feastables.com | +| Fedex.com | trackingmail@fedex.com | +| FidoTabby.com | info@fidotabby.com | +| FiguJewelry.com | support@figujewelry.com | +| Filson.com | filson@emails.filson.com | +| FingerHut.com | fingerhut@e.fingerhut.com | +| FinishLine.com | finishline@news.finishline.com | +| FireHouseSubs.com | 411@email.firehousesubschatter.com | +| FireHouseSubs.com | onlineorders@firehousesubs.com | +| Fitbit.com | noreply@orders.fitbit.com | +| Fitbit.com | orders@fitbit.com | +| Fitbit.com | orders-noreply@fitbit.com | +| FiveBelow.com | reply@fivebelow.com | +| FiveCBD.com | support@fivecbd.com | +| FleetFarm.com | enews@fleetfarm.com | +| FlexShopper.com | confirm@flexshopper.com | +| Foco.com | customercare@foco.com | +| FoodCity.com | noreply@foodcityemails.com | +| foodlion.com | customerservice@reply.foodlionemail.com | +| foodlion.com | infofoodlion@foodlion.com | +| foodlion.com | info@shop.foodlion.com | +| Foodtown | no-reply@foodtown.com | +| FootLocker | accountservices@em.footlocker.com | +| FootLocker | footlocker@footlocker.narvar.com | +| FootLocker | storereceipt@footlocker.com | +| FootLocker.com | transactions@e.footlocker.com | +| Forever21.com | forever21@t.forever21.com | +| Fossil.com | notifications@fossil.com | +| Fossil.com | orders@e.fossil.com | +| FragranceRevival.com | support@fragrancerevival.com | +| FragranceX.com | support@fragrancex.com | +| FreePeople.com | freepeople@t.e.freepeople.com | +| FreePrintsPhotobooks | gifts@freeprintsapp.co | +| FreePrintsPhotobooks | pbsupport@freeprintsapp.com | +| FreeTaxUSA.com | support@support.freetaxusa.com | +| FreshDirect.com | service@freshdirect.com | +| FrontGateTickets.com | order-support@frontgatetickets.com | +| FuelForwardApp.com | mobile@fuelforwardapp.com | +| FunctionOfBeauty.com | hello@functionofbeauty.com | +| GalaxyTheatres.com | postmaster@galaxytheatres.com | +| GameStop.com | gamestop@e.gamestop.com | +| GameStop.com | notifications@info.gamestop.com | +| GameStop.com | orders@em.gamestop.com | +| GameStop.com | orders@gamestop.com | +| GapFactory.com | orders@email.gap.com | +| GapFactory.com | orders@email.gapfactory.com | +| GasBuddy.com | et-reply@email.gasbuddy.com | +| Geico.com | geico@email1.geico.com | +| GetCasely.com | help@getcasely.com | +| Getir.com | hello@getir.com | +| GetQuip.com | info@accounts.getquip.com | +| GetSlide.com | service@email.getslide.com | +| GetUnion.com | receipts@getunion.com | +| Gfs | email@gfsstore-email.com | +| GiantEagle | no-reply@gianteaglereceipts.com | +| GiantEagle.com | curbside@info.gianteagle.com | +| GiantEagle.com | noreply@email.gianteagle.com | +| GiantFoodStores.com | giantfoodstores@email.giantfoodstores.com | +| Gilt.com | support@p.gilt.com | +| GlassesUSA.com | sales@glassesusa.com | +| Glossier.com | gteam@glossier.com | +| GNC.com | gncreceipts@gnc.com | +| GNC.com | orders@orders.gnc.com | +| GoCurb.com | support@gocurb.com | +| GoodwillFinds.com | no-reply@email.goodwillfinds.com | +| GoodwillFinds.com | order@email.goodwillfinds.com | +| Google.com | domains-noreply@google.com | +| Google.com | googleplay-noreply@google.com | +| Google.com | googlestore-noreply@google.com | +| Google.com | payments-noreply@google.com | +| Google.com | support@google.com | +| GoogleExpress.com | express@google.com | +| Googletravel.com | travel-support@google.com | +| GoPuff.com | no-reply@gopuff.com | +| GoSplitty.com | donotreply@gosplitty.com | +| GoZego.com | noreply@gozego.com | +| GreatWolf.com | greatwolf@email.greatwolfmail.com | +| Greers | donotreply@greers.com | +| Groupon.com | notify@r.groupon.com | +| Groupon.com | orders@r.groupon.com | +| Groupon.com | orders@r.grouponmail.ca | +| Groupon.com | support.emea@groupon.com | +| Grove.co | notifications@updates.grove.co | +| Grubhub.com | help_me@grubhub.com | +| Grubhub.com | no-reply@tapingo-grubhub.com | +| Grubhub.com | orders@eat.grubhub.com | +| Gucci.com | gucci-online@email.gucci.com | +| Guess.com | donotreply@guess.eu | +| Guess.com | noreply@transactional.guess.com | +| Gymshark.com | donotreply@gymshark.com | +| HabitBurger.com | noreply@habitburger.com | +| Hallmark.com | care@hallmark.com | +| Hallmark.com | hallmark@e-mail.hallmark.com | +| Hallmark.com | orders@e-mail.hallmark.com | +| Hallmark.com | orders@hallmarkonline.com | +| HannaFord.com | myhannafordnoreply@hannaford.com | +| HappySocks.com | order@store.happysocks.com | +| HarborFreight.com | no-reply@harborfreight.com | +| HarborFreight.com | noreply@harborfreight.com | +| HarmonDiscount | harmondiscount@emailharmondiscount.com | +| HarrisTeeter.com | reply@mywebgrocer.net | +| Haven.com | booking-confirmation@haven.com | +| HBOMax.com | hbomax@service.hbomax.com | +| HEB.com | curbside@hebdigital.com | +| HEB.com | donotreply@shop.hebtoyou.com | +| HEB.com | heb@hebdigital.com | +| Heinens.com | heinensonline@heinens.com | +| Heinens.com | orders@shop.heinens.com | +| HelloBello.com | noreply@hellobello.com | +| Hellofresh.com | update@h.hellofresh.com | +| HerbaLifeEmail.com | herbalife.e@herbalifemail.com | +| HerbaLifeEmail.com | privacy@herbalife.com | +| HerffJones.com | do-not-reply@herffjones.com | +| HeroCosmetics.us | support@herocosmetics.us | +| Hertz | hertznoreply@rentals.hertz.com | +| Hertz | reservations@emails.hertz.com | +| Hibbett.com | info@hibbett.com | +| HideItMounts.com | info@hideitmounts.com | +| Hilton.com | noreply@h4.hilton.com | +| Hims.com | no-reply@forhims.com | +| Hismile.com | help@hismileteeth.com | +| HobbyLobby.com | noreply@transact.hobbylobby.com | +| HomeDepot.com | contactus@homedepot.com | +| HomeDepot.com | homedepot@order.homedepot.com | +| HomeDepot.com | homedepotpro@order.homedepot.com | +| HomeGoods | homegoods@em.homegoods.com | +| HomeGoods | homegoods@info.tjx.com | +| Hopper.com | bookings@hopper.com | +| HorizonHobby.com | orders@email.horizonhobby.com | +| Hotels.com | confirmation@mail.hotels.com | +| Hotels.com | info@mail.hotels.com | +| Hottopic.com | noreply@s.hottopic.com | +| HousecallPro.com | notifications@housecallpro.com | +| Hp.com | donotreply.hpstore.uk@hp.com | +| Hp.com | do-not-reply-orderstatus@hp.com | +| Hp.com | myhpsales@hp.com | +| HSN.com | hsncustomerservice@email.hsn.com | +| HugoBoss.com | service-uk@hugoboss.com | +| Hulu.com | hulu@hulumail.com | +| HungryHowies.com | orders@hungryhowies.com | +| Hyatt.com | no-reply@t1.hpe-esp.hyatt.com | +| Hyatt.com | SCOZO-no-reply@hyatt.com | +| Hy-vee | info@receipts.hy-vee.com | +| Hy-Vee.com | customercare@hy-vee.com | +| Hy-Vee.com | info@orders.hy-vee.com | +| Hy-Vee.com | receipts@receipts.hy-vee.com | +| IHeartCats.com | orders@iheartcats.com | +| IHerb.com | noreply@info.iherb.com | +| Ikea.com | do-not-reply@ikea.com | +| Ikea.com | noreply@ikea.com | +| InglesMarkets | icurbside@shopingles.com | +| Innisfree.com | support@innisfree.zendesk.com | +| Instacart | help@instacart.com | +| Instacart | orders@instacart.com | +| InTheSwim.com | info@tx.intheswim.com | +| Intimissimi | noreply@shop-intimissimi.com | +| IParkIt.com | iparkit@intpark.com | +| Ipsy.com | ipsy@updates.ipsy.com | +| Jackfir.com | howdy@jackfir.com | +| JackintheBox.com | noreply@jackinthebox.online | +| Jackpocket.com | no-reply@jackpocket.com | +| JanSport.com | js_customer_services@vfc.com | +| JCPenney.com | jcpenney@e.jcpenney.com | +| JCPenney.com | jcpenney@email.jcpenney.com | +| JCPenney.com | jcpenney@s.jcpenney.com | +| JCrew.com | jcrew@mail.jcrew.com | +| JerseyMikes.com | noreply@jerseymikes.com | +| JerseyMikes.com | webmail@jerseymikes.com | +| JetBlue.com | jetblueairways@email.jetblue.com | +| Jet.com | orders@jet.com | +| JewelOsco.com | jewel-osco@deals.jewelosco.com | +| JewelOsco.com | no.reply@jewelosco.com | +| JewelOsco.com | no-reply@status.jewelosco.com | +| JimmyJohns.com | orders@jimmyjohns.com | +| Joann.com | customer.service@joann.com | +| Joann.com | donotreply@joann.narvar.com | +| Joann.com | joannstores@e.joann.com | +| JoeFresh.com | joefresh@email.joefresh.com | +| Journeys.com | journeys@em.journeys.com | +| JoyRideBike.com | support@joyridebike.com | +| JustFab.com | stylist@e-mail.justfab.com | +| JustWalkOut.com | noreply@justwalkout.com | +| KateSpade.com | katespade@mc.katespade.co.uk | +| KateSpade.com | katespadesurprise@mc-surprise.katespade.com | +| KFC.com | email@orders.kfc.com | +| KFC.com | kfc@enterprise.grubhub.com | +| KiaFinance.com | kiafinance@servicing.kiafinance.com | +| KidsFootLocker.com | storereceipt@kidsfootlocker.com | +| Kiehls.com | noreply@mail.kiehls.com | +| Kitsch.com | team@mykitsch.com | +| Kits.com | service@kits.com | +| Klarna.com | noreply-us@klarna.com | +| Kmart | kmart@account.kmart.com | +| KodiakCakes.com | flapjacks@kodiakcakes.com | +| Kohls.com | kohls@at.kohls.com | +| Kohls.com | kohls@t.kohls.com | +| KpopUsaOnline.com | info@kpopusaonline.com | +| KradleMyPet.com | support@kradlemypet.com | +| Kroger | support@caperlab.com | +| Kroger.com | email@e.krogermail.com | +| Kroger.com | orders@krogership.com | +| KumandGo.com | rewards@email.kumandgo.com | +| KuraUSA.com | receipt@kurausa.com | +| LAFitness.com | lafitnessmembershipservices@lafitness.com | +| LaMarcaProsecco.com | sparklesociety@email.lamarcaprosecco.com | +| Lancome.com | noreply@email.lancome-usa.com | +| LangeHair.com | customercare@langehair.com | +| LaRosas.com | contact_us@larosas.com | +| LAZParking.com | reservations@lazparking.com | +| Leclerc | contact.pau@leclercdrive.fr | +| Lemonade.com | maya.ai@lemonade.com | +| LendingClub.com | support@mail6.lendingclub.com | +| Lenovo.com | lenovomail@lenovo.com | +| LensCrafters.com | news@e.lenscrafters.com | +| Levi.com | levis@e.levi.com | +| Levi.com | no-reply@levi.narvar.com | +| LG.com | orders@lgsupport.com | +| LibertyMutual.com | donotreply@finance.libertymutual.com | +| LightInTheBox.com | ordernotice@sys.lightinthebox.com | +| LittleCaesars.com | onlineordering@littlecaesars.com | +| LiveNation.com | customer_support@replyto.livenation.com | +| LocalStealsandDeals.com | help@localstealsanddeals.com | +| Logos.com | customerservice@logos.com | +| Longhornsteakhouse.com | longhornorder@longhornsteakhouse.com | +| LotusEnergyDrinks.com | info@lotusenergydrinks.com | +| Loves.com | noreply@loves.com | +| Lowe's | do-not-reply@receipt.lowes.com | +| Lowes.com | customercare@lowes.com | +| Lowes.com | do-not-reply@confirmation.lowes.com | +| Lowes.com | do-not-reply@lowes.com | +| Lowes.com | do-not-reply@notifications.lowes.com | +| Lowes.com | lowes@e.lowes.com | +| LowesFoods.com | donotreply@shop.lowesfoods.com | +| LowesFoods.com | noreply@shoplowesfoods.com | +| LowesFoods.com | receipts@receipt.lowesfoods.com | +| LuckyLandSlots.com | support@luckylandslots.com | +| LuckySupermarkets.com | noreply@e.luckysupermarkets.com | +| Lularoe.com | noreply@lularoebless.com | +| Lululemon.com | noreply@e.lululemon.com | +| Lululemon.com | receipts@e.lululemon.com | +| Lush.com | orders@lush.com | +| Luxottica.com | news@e.ray-ban.com | +| Lyft.com | no-reply@lyftmail.com | +| Macys.com | alert@emails.macys.com | +| Macys.com | customerservice@oes.macys.com | +| Macys.com | customerservice_www@macys.com | +| MacysWineShop.com | info@emails.macyswineshop.com | +| magazine.store | orders@email2.magazine.store | +| MagicBraUS.com | support@magicbraus.com | +| Manscaped.com | support@manscaped.com | +| MAPCOExpress.com | myrewards@mapcoexpress.com | +| MarblesKidsMuseum.org | mymarbles@marbleskidsmuseum.org | +| MarcJacobs.com | noreply@marketing.marcjacobs.com | +| Marcos.com | noreply@marcos.com | +| MarcusTheatres.com | tickets@marcustheatres.com | +| MarketDistrict.com | no-reply@marketdistrictreceipts.com | +| Marriott.com | reservations@res-marriott.com | +| Marshalls | marshalls_orders@info.tjx.com | +| Mathway.com | billing@mathway.com | +| MattressFirm | mattressfirm@email.mattressfirm.com | +| Mcdonalds.com | donotreply_us@mcdonalds.com | +| Mcdonalds.com | mobile@ca.mcdonalds.com | +| McKesson.com | notifier@mckesson.com | +| Meijer | email@notify.meijer.com | +| Meijer | email@shop.meijer.com | +| Melaleuca.com | isaacbottelberghe@e.melaleuca.com | +| Menards.com | customerservice@menardsoc.com | +| Menards.com | menards@menard-inc.com | +| Mercari.com | contact@mercari.com | +| Mercari.com | no-reply@contact-us.mercariapp.com | +| Mercato.com | help@mercato.com | +| Merrell.com | info@email.merrell.com | +| MetaPay | advertise-noreply@support.facebook.com | +| MetaPay | notification@facebookmail.com | +| MichaelKors.com | michaelkors@michaelkorsereceipts.com | +| MichaelKors.com | michaelkors@michaelkorsmail.com | +| Michaels.com | ereceipt@ereceipt.michaels.com | +| Michaels.com | no-reply@michaels.com | +| Microsoft.com | billing@microsoft.com | +| Microsoft.com | familysafety@microsoft.com | +| Microsoft.com | microsoft-noreply@microsoft.com | +| Microsoft.com | stremail@microsoft.com | +| MidwayUSA.com | midwayusa@email.midwayusa.com | +| MIgardener.com | customerservice@migardener.com | +| MisfitsMarket.com | donotreply@misfitsmarket.com | +| Mixbook.com | support@mixbook.com | +| MonatGlobal.com | monatsupport@monatglobal.com | +| Monin.com | team@email.monin.com | +| Monin.com | team@hello.monin.com | +| Monki.com | noreply@cs.monki.com | +| Moosejaw.com | email@alerts.moosejaw.com | +| MOROVAN | morovan.com@email.shoplazza.com | +| MothersMarket | weborders@mothersmarket.com | +| MountainHardwear.com | email@e-mail.mountainhardwear.com | +| MrCooper.com | noreply@mrcooper.com | +| MrPorter.com | customercare@emails.mrporter.com | +| MyBeeBalmCo.com | support@mybeebalmco.com | +| MyGiftCardsPlus.com | clientcaremgc@mygiftcardsplus.com | +| MyNameNecklace.com | custserv@mynamenecklace.com | +| Nailboo.com | support@nailboo.com | +| NarsCosmetics.com | email@email.narscosmetics.com | +| NationalAmusements.com | no-reply@national-amusements.com | +| NationalGeneralInsurance.com | service@ngic.com | +| Nationwide.com | noreply@alerts.nationwide.com | +| Naturaeco.com | help@naturabrasil.com | +| NaturesOne.com | info@naturesone.com | +| Netflix.com | info@mailer.netflix.com | +| NewBalance.com | newbalance@receipts.newbalance.com | +| Newks.com | donotreply@newks.com | +| Nike.com | nikenoreply@nike.com | +| Nike.com | nike@official.nike.com | +| Nike.com | nike@ship.notifications.nike.com | +| Nisolo.com | support@nisolo.com | +| NoireKloset.com | info@noirekloset.com | +| Noodles&Company | noreply@e.noodles.com | +| Nordstrom.com | nordstrom@eml.nordstrom.com | +| Norse.com | support@flynorse.com | +| Nvidia.com | donotreply@nvidia.com | +| NYXCosmetics.com | nyxprofessionalmakeup@mail.nyxcosmetics.com | +| Oakley.com | customerservice@oakley.com | +| OatsOvernight.com | support@oatsovernight.com | +| Oculus.com | support@mail.oculus.com | +| OfficeDepot.com | officedepotorders@officedepot.com | +| OfficeDepot.com | orders@e.officedepot.com | +| OldNavy.com | oldnavy@oldnavy.narvar.com | +| OldNavy.com | orders@email.oldnavy.com | +| OliveGarden.com | info@olivegarden.com | +| OnePeloton.com | support@onepeloton.com | +| OnlyNaturalPet.com | service@onlynaturalpet.com | +| Onorainbow.com | contact@onorainbow.com | +| OnRunning.com | no-reply@on-running.com | +| Onstar.com | memberservices@account.onstar.com | +| OpenTable.com | no-reply@opentable.com | +| OReillyAuto.com | messages@email.oreillyauto.com | +| OrganicIndiaUSA.com | info@organicindiausa.com | +| Osprey.com | donotreply@orders.osprey.com | +| Overstock.com | orders@transaction.overstock.com | +| OzoFoods.com | ecommerce@eatplanterra.com | +| PalaceEntertainment.com | kennywoodconfirmation-noreply@palaceentertainment.com | +| PamperedChef.com | donotreply@email.pamperedchef.com | +| Pampers.com | info-na@email.rewards.pampers.com | +| PandaExpress.com | noreply@pandaexpress.com | +| PaneraBread.com | no-reply@panerabread.com | +| PaneraBread.com | panera@e2.panerabread.com | +| PaneraBread.com | panera@e3.panerabread.com | +| PaneraBread.com | panera@m2.panerabread.com | +| PantryShop.com | no-reply@pantryshopbypepsi.com | +| PapaJohn's.com | service@pizza.papajohns.com | +| Paramountplus.com | noreply@paramountplus.com | +| Parking.com | no-reply@spplus.com | +| ParkMobile | noreply@alerts.parkmobile.io | +| PartyCity.com | demo@mg.partycity.com | +| PartyCity.com | orders@e.us.partycity.com | +| Patagonia.com | orderreply@patagonia.com | +| Patpat.com | noreply@patpat.com | +| Patreon.com | bingo@patreon.com | +| PaulasChoice.com | info@notification.paulaschoice.com | +| PaulasChoice.com | paulaschoice@em.paulaschoice.com | +| Pavilions.com | no-reply@status.pavilions.com | +| PayRange.com | no-reply@payrange.com | +| Peacocktv.com | no-reply@messaging.peacocktv.com | +| Peapod | yourfriends@peapod.com | +| Peets.com | customerservice@peets.com | +| PerdueFarms.com | noreply@perduefarms.com | +| Petco.com | orders@petco.narvar.com | +| Petco.com | petco@e.petco.com | +| PetSmart.com | petsmart@emails.petsmart.com | +| PetSmart.com | petsmart@mail.petsmart.com | +| Petsuppliesplus.com | petsupplies@petsuppliesplusemail.com | +| Philips.com | donotreply@encompass.com | +| Philips.com | no-reply@philips.com | +| PigglyWiggly.com | online@mypigglywiggly.com | +| PinkZebraHome.com | noreply@pinkzebrahome.com | +| Pizzahut.com | no-reply@orders.pizzahut.com | +| Planetfitness.com | fresnowshawave.ca@planetfitness.com | +| Planetfitness.com | info@myiclubonline.com | +| Planetfitness.com | New Email 3 | +| Polywood.com | hello@polywood.com | +| Popeyes | offers@m.popeyes.com | +| Popeyes | order@t.popeyesuk.com | +| Popeyes | receipts-from@thekitchen.popeyes.com | +| PopFitClothing.com | support@popfitclothing.com | +| PoshMark.com | orders@poshmark.com | +| PoshMark.com | support@poshmark.com | +| Postmates.com | noreply@postmates.com | +| Pressed.com | info@marketing.pressed.com | +| PriceChopperNy.com | updates@mypricechopper.com | +| Primerica.com | donotreply@primerica.com | +| ProgressiveInsurance | customerservice@e.progressive.com | +| ProgressiveLeasing.com | progressiveleasing@t.progleasing.com | +| ProjectAdmission.com | noreply@pa.exchange | +| Publicstorage.com | donotreply@publicstorage.com | +| Publix | no-reply@exact.publix.com | +| Publix | noreply@publix.com | +| Publix | noreply.publix@publix.com | +| Pulsz.com | support@pulsz.com | +| Puma.com | customerservice.us@puma.com | +| Puma.com | info@orderstatus.us.puma.com | +| Puma.com | service@puma.com | +| PuraVidaBracelets.com | info@puravidabracelets.com | +| QDoba.com | noreply@qdoba.com | +| QuikTrip.com | no-reply@quiktrip.com | +| QVC.com | customercareqvc@qvc.narvar.com | +| QVC.com | customer.care@qvcservices.qvcemail.com | +| QVC.com | no_reply@qvc.com | +| QVC.com | qvc@t.qvcemail.com | +| QVC.com | QVC@t.qvcemail.com | +| RadioFlyer.com | custserv@radioflyer.com | +| RaisingCanes.com | donotreply@order.raisingcanes.com | +| Raleys.com | service@shop.raleys.com | +| RalphLauren.com | customerassistance@t.ralphlauren.com | +| Randalls.com | no-reply@status.randalls.com | +| RareBeauty.com | hello@rarebeauty.com | +| Recreation.gov | communications@recreation.gov | +| Redbox.com | receipts@e2.redbox.com | +| RedRobin.com | donotreply@email.redrobin.com | +| RegalTickets.com | noreply@regaltickets.com | +| Regatta.com | customerservices@regatta.com | +| Regatta.com | customerservice@t.regatta.com | +| Rei.com | rei@notices.rei.com | +| Rentacenter.com | noreply@rentacenter.com | +| Rentcafe.com | no-reply@rentcafe.com | +| Resy.com | noreply@resy.com | +| Revive-EO.com | hello@revive-eo.com | +| Ring.com | noreply@orders.ring.com | +| RiotGames.com | noreply@mail.accounts.riotgames.com | +| RiteAid.com | no-reply@confirmation.riteaid.com | +| RiteAid.com | riteaidonlinestore@riteaid.com | +| Ritual.co | no-reply@news.ritual.co | +| Ritual.co | no-reply@updates.ritual.co | +| RockAuto.com | noreply@rockauto.com | +| rocksbox.com | contact@rocksbox.com | +| ROFOPay | noreply@zipline.biz | +| Roku.com | noreply@roku.com | +| Romwe.com | noreply@notice.romwe.com | +| Romwe.com | noreply@romwe.com | +| Rothys.com | help@rothys.com | +| Saatva.com | info@saatva.com | +| SafecoInsurance.com | billing@noreply.safeco.com | +| Safeway | no.reply@safeway.com | +| Safeway.com | noreply@info.safeway.ca | +| Safeway.com | no-reply@status.safeway.com | +| Safeway.com | reply@email.shop.safeway.com | +| Safeway.com | safeway@email.safeway.com | +| SaksFifthAvenue.com | service@news.saks.com | +| SaksOff5th.com | service-noreply@saksoff5th.com | +| SallyBeauty.com | no-reply@sallybeauty.com | +| SallyBeauty.com | uksallysales@uk.sallybeauty.com | +| Sampler.io | no-reply@sampler.io | +| Samsclub.com | no-reply-ugc@samsclub.com | +| Samsclub.com | transactional@samsclub.delivery.net | +| Samsclub.com | transaction@email.samsclub.com | +| Samsclub.com | transaction@info.samsclub.com | +| Samsclub.com | transaction@samsclub.com | +| Samsonite.com | noreply@samsonitebrands.com | +| SavageX.com | email@info.savagex.co.uk | +| SavageX.com | email@savagex.com | +| Scentsy.com | admin@email.scentsyfamilymail.com | +| Schnucks.com | noreply@schnucks.com | +| Schwans.com | schwanshomedelivery@emails.schwans.com | +| ScootersCoffee.com | scooterscoffee@thelevelup.com | +| Seamless.com | orders@eat.seamless.com | +| SearsHomeServices.com | no-reply@shs.com | +| SeatGeek.com | transactions@seatgeek.com | +| Seaworld.com | seaworld@m.seaworldparks.com | +| Sephora.com | customerservice@beauty.sephora.com | +| Sephora.com | customerservice@sephora.narvar.com | +| Sephora.com | shop@beauty.sephora.com | +| Sezzle.com | notifications@sezzle.com | +| ShadyRays.com | team@shadyrays.com | +| ShakeShack.com | noreply@shakeshackapp.com | +| SharkNinja.com | do_not_reply@sharkninja.com | +| SharkNinja.com | noreply@email.sharkninja.eu | +| SharkNinja.com | orders@sharkclean.com | +| SharkNinja.com | support@uk.e.sharkninja.com | +| Shaws | no-reply@status.shaws.com | +| Shaws | shaws@deals.shaws.com | +| Sheetz.com | no-reply@sheetz.com | +| Sheetz.com | no-reply@sheetzdigital.com | +| Shein.com | noreply@sheinemail.com | +| Shell | do-not-reply@shell.com | +| Shell | shellfillupandgo@shell.com | +| Shell.com | donotreply@mail.ereceiptshell.com | +| Sherwin-Williams.com | noreply@sherwin-williams.com | +| Shipt | support@e.shipt.com | +| Shipt | support@shipt.com | +| Shipt | support@t.shipt.com | +| ShoeCarnival.com | customerservice@shoecarnival.com | +| ShoeShowMega.com | customerservice@members-shoeshow.com | +| Shopbop.com | service@em.shopbop.com | +| Shopdisney.com | guest.services@shopdisney.com | +| Shopify.com | no____reply____no@shopify.com | +| Shopify.com | no-reply@shopifyemail.com | +| ShopJustice.com | justice@em.shopjustice.com | +| ShopPremiumOutlets | onlinesupport@sspo.com | +| ShopRite | no-reply@t.shoprite.com | +| ShopRite | shoprite@shoprite-email.com | +| ShopRite From Home | noreply@t.shoprite.com | +| ShopWoodmans.com | appletonsupervisor@shopwoodmans.com | +| ShopWoodmans.com | support@shopwoodmans.com | +| ShopWoodmans.com | sw.37@woodmans-food.com | +| Shutterfly.com | customerservice@cs.shutterfly.com | +| SimpleTuitionSolutions.org | support@simpletuitionsolutions.org | +| SioBeauty.com | care@siobeauty.com | +| SiriusXM.com | noreply@confirmations.siriusxm.com | +| Sixflags.com | noreply@tickets.sixflags.com | +| Skechers.com | e-receipt@e.skechers.com | +| Skechers.com | no-reply@emails.skechers.com | +| Skechers.com | no-reply@emails.uk.skechers.com | +| Skillz.com | no-reply@skillz.com | +| SkinnyMixes.com | xoxojordan@skinnymixes.com | +| SliceLife.com | orders@app.slicelife.com | +| SliceLife.com | orders@slicelife.com | +| SmartAndFinal.com | noreply@e.smartandfinal.com | +| SmartHub.coop | pec-no-reply@smarthub.coop | +| SmashWords.com | do-not-reply@smashwords.com | +| SmokeyBones.com | noreply@smokeybones.com | +| SmoothieKing.com | guestfeedback@smoothieking.com | +| Snackmagic.com | hi@snackmagic-mail.com | +| Snacks2You.com | contact@snacks2you.com | +| Snacks.com | noreply@pepsico.com | +| Snacks.com | noreply@snacks.com | +| SoldeJaneiro.com | ola@soldejaneiro.com | +| SonicDriveIn.com | no-reply@sonicdrivein.com | +| Sonos.com | no-reply@account.sonos.com | +| Southwest.com | southwestairlines@iluv.southwest.com | +| Southwest.com | southwestairlines@wifi.southwest.com | +| Spectrum.net | myaccount@spectrumemails.com | +| Spencers.com | spencers@orders.spencersonline.com | +| SpiritAirlines.com | booking@fly.spirit-airlines.com | +| SpiritHalloween | spirithalloween@orders.spirithalloween.com | +| Sprint.com | ebill@sprintcustserv.com | +| Sprouts.com | noreply@shop.sprouts.com | +| Sprouts.com | orders@shop.sprouts.com | +| Stamps.com | no-reply@stamps.com | +| Stance.com | orders@send.stance.com | +| Staples | copyprintsupport@staples.com | +| Staples | elitesupport@staples.com | +| Staples | orders@staplesadvantage.com | +| Staples | staplesreceipt@staples.com | +| Staples.com | support@orders.staples.com | +| StarBeauty | customerservice@shopstarbeauty.com | +| Starbucks.com | orders@starbucks.com | +| Starbucks.com | starbucks@giftcards.starbucks.com | +| StarMarket.com | no-reply@status.starmarket.com | +| StateFarm.com | statefarminfo@statefarminfo.com | +| SteveMadden.com | newsletter@email.stevemadden.com | +| StewartsShop.com | onlineshop@stewartsshops.com | +| StewLeonards.com | orderstatus@stewleonards.com | +| StitchFix.com | stitchfix@email.stitchfix.com | +| StitchFix.com | stitchfix@t.stitchfix.com | +| StockX.com | noreply@stockx.com | +| StopAndShop.com | orderstatus@stopandshop.com | +| Stradivarius.com | noreply@stradivarius.com | +| StraightTalk.com | straighttalk@straighttalkmail.com | +| StuartWeitzman.com | notifications@mc.stuartweitzman.com | +| StubHub.com | noreply@stubhub.com | +| Subway.com | account@email.subway.com | +| Subway.com | noreply-uk@subwayrewards.uk | +| SunGlassHut.com | news@e.sunglasshut.com | +| Sunpass.com | customerservice@sunpass.com | +| Super1Foods.com | no-reply@super1foods.com | +| Super1Foods.com | noreply@super1foods-email.com | +| Supergoop.com | hello@supergoop.com | +| Supreme.com | support@supremenewyork.com | +| SurLaTable.com | sur_la_table@email.surlatable.com | +| SwansonHealthProducts | swanson@reorder.com | +| Swarovski.com | customer_relations.us@swarovski.com | +| SweatyBetty.com | noreply@sweatybetty.com | +| SweetSnacking.com | info@sweetsnacking.com | +| Sweetwater.com | jeff_rohlfing@sweetwater.com | +| TacoBell.com | noreply@info.tacobell.com | +| Target.com | noreply@targetgiftcardcenter.com | +| Target.com | orders@oe1.target.com | +| Target.com | orders@oe.target.com | +| TarteCosmetics.com | email@email.tartecosmetics.com | +| TarteCosmetics.com | email@e.tartecosmetics.com | +| TCGPlayer.com | sales@tcgplayer.com | +| TeaspoonLife.com | noreply@tapmango.com | +| TeePublic.com | support@teepublic.com | +| TeeSpring.com | notifications@teespring.com | +| Temu.com | temu@customer.temuemail.com | +| Temu.com | temu@order.temu.com | +| Tesla.com | onlineorders@tesla.com | +| TeslaInsuranceServices | noreply@teslainsuranceservices.com | +| TexasRoadHouse.com | noreply@texasroadhouse.com | +| TexasRoadHouse.com | ___receipt__@__ziosk__.com | +| TheBarrelRoom.com | info@email.thebarrelroom.com | +| TheBarrelRoom.com | info@thebarrelroom.com | +| THEDRIPBaR | noreply@meevomail.com | +| TheFreshMarket.com | donotreply@thefreshmarket.com | +| TheFreshMarket.com | orders@shop.thefreshmarket.com | +| TheFreshMarket.com | orders@thefreshmarket.com | +| TheGeneral.com | no-reply@transactional.thegeneral.com | +| TheHairitageBeautySalon.com | noreply@meevo.com | +| TheInscentsBrand.com | contact@theinscentsbrand.com | +| TheRhinestoneWorld.com | info@therhinestoneworld.com | +| TheUpsStore.com | customer-notification@ups.com | +| TheUpsStore.com | mcinfo@ups.com | +| ThirtyOneGifts.com | ordersupport@o.thirtyonegifts.com | +| Thorntons | info@mail.staging.thorntons.com | +| Thorntons | thorntonsreceipt@refreshingrewards.com | +| ThriveMarket.com | hello@thrivemarket.com | +| Ticketmaster.com | customer_support@email.ticketmaster.com | +| TicketsCenter.com | orders@tickets-center.com | +| TicketSmarter.com | customersupport@ticketsmarter.com | +| Tillys.com | tillys@temails.tillys.com | +| Timberland.com | noreply@news.timberland.com | +| Timberland.com | timberland@t.timberland.com | +| TitleMax.com | no-reply@titlemax.com | +| TJX | tjmaxx@info.tjx.com | +| TJX.com | info@tjx.com | +| TJX.com | sierra@info.tjx.com | +| T-Mobile.com | donotreply@notifications.t-mobile.com | +| T-Mobile.com | metrobyt-mobile@notifications.t-mobile.com | +| ToastTab.com | no-reply@toasttab.com | +| ToGoOrder.com | notify@togoorder.com | +| TommyHilfiger.com | store@mailing.tommy.com | +| Toms.com | donotreply@toms.com | +| TomThumb.com | tomthumb@deals.tomthumb.com | +| TopHatter.com | noreply@tophatter.com | +| Torrid.com | noreply@s3.torrid.com | +| Torrid.com | torrid@torrid.narvar.com | +| Toryburch.com | email@emailtoryburch.com | +| TotalWine.com | totalwine.com@web.totalwine.com | +| TotalWine.com | totalwine@totalwine.com | +| TotNeeds.com | support@totneeds.com | +| ToyotaFinancialServices | servicing@emails.toyotafinancial.com | +| Tracksmith.com | support@tracksmith.com | +| TractorSupply.com | noreply@cs.tractorsupply.com | +| TractorSupply.com | no-reply@ta.tractorsupply.com | +| Treering.com | hello@treering.com | +| TributeCenterStore.com | receipts@tributecenterstore.com | +| TrueClassicTees.com | support@trueclassictees.com | +| Tula.com | help@tula.com | +| Turo.com | noreply@mail.turo.com | +| TurtleBeach.com | sales@turtlebeach.com | +| Twitch.tv | purchase-noreply@twitch.tv | +| Uber Eats | noreply@uber.com | +| Uber Eats | uber.us@uber.com | +| UGG.com | ugg@email.ugg.com | +| UGG.com | ugg@updates.ugg.com | +| Ulta.com | guestservices@email.ulta.com | +| Ulta.com | guestservices@e.ulta.com | +| Uncommonjames.com | customerexperience@uncommonjames.com | +| UnderArmour.com | no-reply@underarmour.com | +| UnderArmour.com | noreply@underarmour.com | +| UnderArmour.com | underarmour@em.underarmour.com | +| Uniqlo.com | noreply_uk@ml.uniqlo.eu | +| Uniqlo.com | noreply_uk@uniqlo.com | +| Uniqlo.com | uniqlo-usa@t.uniqlo.com | +| United.com | receipts@united.com | +| UntuckIt.com | untuckit@untuckit.com | +| Upserve.com | notifications@upserve.com | +| Upserve.com | support@upserve.com | +| Upside.com | users@getupside.com | +| UrbanDecay.com | reply@store.urbandecay.com | +| Urbanoutfitters.com | urbanoutfitters@s.urbanoutfitters.com | +| Urbanoutfitters.com | urbanoutfitters@s.urbanoutfitters.eu | +| Urbanoutfitters.com | urbanoutfitters@t.e.urbanoutfitters.com | +| USAA.com | usaa.customer.service@mailcenter.usaa.com | +| UScellular.com | onlineadvisor@uscellular.com | +| USPS.com | noreply@email-special.usps.com | +| VanillaGift.com | noreply@orders.vanillagift.com | +| Vans.com | reply@e.vans.com | +| Vapecentric.com | sales@vapecentric.com | +| Venmo.com | businesssupport@venmo.com | +| Venmo.com | venmo@venmo.com | +| Verizon | verizon-notification@verizon.com | +| Verizon | vzwmail@ecrmemail.verizonwireless.com | +| Versace.com | store@us.versace.com | +| VetSource.com | homedelivery@vetsource.com | +| Viori.com | support@viori.com | +| VitaminShoppe | noreply@vitaminshoppereceipts.com | +| VitaminShoppe | thevitaminshoppe@e.vitaminshoppe.com | +| VividSeats.com | orders@vividseats.com | +| VividSeats.com | shipping@vividseats.com | +| Vons | no.reply@vons.com | +| Vons.com | no-reply@status.vons.com | +| Vons.com | vons@deals.vons.com | +| Vooglam.com | no-reply-necessary@vooglam.com | +| VossEvents.com | support@vossevents.com | +| Vudu.com | email@email.vudu.com | +| Vue | confirmation@kernel.myvue.com | +| Waitr.com | info@waitrapp.com | +| Waitr.com | orders@waitrapp.com | +| Waitr.com | support@waitrapp.com | +| Walgreens.com | donotreply@rxorder.walgreens.com | +| Walgreens.com | info@emails.photo.walgreens.com | +| Walgreens.com | walgreens@ecs.walgreens.com | +| Walgreens.com | walgreens@wpht.walgreens.com | +| Walmart.com | donotreply@walmart.com | +| Walmart.com | help@walmart.com | +| Walmart.com | help@walmart-online.com | +| Walmart Grocery | grocery@walmart.com | +| Walmart Grocery | grocery-wmt@walmart.com | +| Walmart InHome | inhome-orders@walmart.com | +| Walmart InHome | orderstatus@giftcards-email.walmart.com | +| WarbyParker.com | sayhello@mail3.warbyparker.com | +| Wawa.com | donotreply@wawa.com | +| Wawa.com | orders@web.wawa.com | +| Wayfair.com | service@wayfair.com | +| WeAreKPop | wearekpop20@gmail.com | +| Weee! | noreply@sayweee.com | +| Weekday.com | noreply@cs.weekday.com | +| Weekday.com | uk@info.weekday.com | +| Wegmans.com | info@message.wegmans.com | +| WeightWatchers.com | teamww@notification.ww.com | +| Weis2Go | noreply@e.weismarkets.com | +| Wendys.com | mywendys@email.wendys.com | +| WesternUnion.com | westernunionresponse@westernunion.com | +| WhatABurger.com | no-reply@whataburger.com | +| Whitecastle.com | noreply@order.whitecastle.com | +| WhiteHouseBlackMarket.com | whitehouseblackmarket@t.whitehouseblackmarket.com | +| WhoGivesACrap.com | talk@whogivesacrap.org | +| WildForkFoods.com | talk@wildforkfoods.com | +| Wine.com | winecom@t.wine.com | +| Wingstop | noreply@online.wingstop.com | +| WinnDixie.com | noreply@e.winndixie.com | +| WinnDixie.com | no-reply@winndixie.ecrebo.com | +| Woot.com | no-reply@woot.com | +| WorkingAdvantage.com | ordersummary@workingadvantage.com | +| WyndhamHotels.com | email@emails.wyndhamhotelgroup.com | +| Wyze.com | no-reply@wyze.com | +| Xfinity.com | online.communications@alerts.comcast.net | +| Xsolla.com | mailer@xsolla.com | +| YankeeCandle.com | info@yankeecandle.com | +| YesStyle.com | autoreply@yesstyle.com | +| Yoox.com | confirmation@yoox.com | +| Younique.com | no-reply@youniqueproducts.com | +| Youtube.com | noreply-purchases@youtube.com | +| YumbleFoods.com | hello@yumblefoods.com | +| YvesSaintLaurent.com | noreply@email.yslbeautyus.com | +| Zaful.com | no_reply_system@newsletter.zaful.com | +| Zagg.com | donotreply@zagg.com | +| Zagg.com | noreply@zagg.com | +| Zappos.com | cs-noreply@zappos.com | +| Zaxbys.com | noreply@orders.zaxbys.com | +| Zazzle.com | notifications@zazzle.com | +| Zazzle.com | zazzle@tn.send.zazzle.com | +| zebit.com | orders@zebit.com | +| ZebraPack.com | order@zebrapack.com | +| ZenniOptical.com | donotreply@zennioptical.com | +| Zip.co | no-reply@us-accounts.zip.co | +| Zip.co | noreply@us.zip.co | +| Zitel | accounting@zitel.com | +| ZoomOcado.com | zoom@ocado.com | +| Zulily.com | zulily@account.zulily.com | +| Zulily.com | zulily@updates.zulily.com | + +#### Point of Sales (38) + +| Name | Domain | +| ---- | ------ | +| Arryved.com | payment@arryved.com | +| BestRingPOS.com | receipts@bestringpos.com | +| Cash.app | cash@square.com | +| Clover | app@clover.com | +| EquiPay.co | notifications@equipay.co | +| LevelUp.com | zaxbys@thelevelup.com | +| LightSpeed | noreply@lightspeedhq.com | +| Meal-Map.co.uk | transactions@ordering-mail.com | +| Olo.com | noreply@olo.com | +| Paypal.com | service@paypal.com | +| Paypal.com | service@paypal.co.uk | +| Paytia.com | noreply@pay729.net | +| Phorest.com | the-secret-garden-of-beauty@phorest.com | +| Presto.com | no-reply@elacarte.com | +| Presto.com | receipts@prestotablet.com | +| Presto.com | support@prestophoto.com | +| RestaJet.com | noreply@restajet.com | +| RevelSystems.com | no-reply@revelsystems.com | +| RewardGateway.net | support@txn.mail.rewardgateway.net | +| SandBagUK.com | no-reply@sandbaguk.com | +| ShopHero.com | customercare@shophero.com | +| Shops-Support.net | support@shops-support.net | +| SpeedDine.com | noreply@speeddine.com | +| Spoton.com | noreply@spoton.com | +| Squareup.com | messenger@messaging.squareup.com | +| Squareup.com | no-reply@squareup.com | +| Squareup.com | receipts@messaging.squareup.com | +| Stripe.com | receipts+acct_1BW6L7DmrkEmAhCl@stripe.com | +| Stripe.com | receipts@stripe.com | +| TheGoodTill.com | noreply@thegoodtill.com | +| TockHQ.com | noreply@exploretock.com | +| VitaMojo.com | no-reply.tossed@vitamojo.com | +| VitaMojo.com | no-reply.whatthepitta@vitamojo.com | +| VitaMojo.com | orders@bostonteaparty.co.uk | +| WixStores | no-reply@my.store-emails.com | +| Yelp.com | noreply@seatme.com | +| Zettle.com | no-reply@zettle.com | +| Ziosk.com | receipt@ziosk.com | + +#### Powered by Instacart (176) + +| Name | Domain | +| ---- | ------ | +| 10box | orders+10box@instacart.com | +| AcmeMarkets.com | orders+acme-markets@instacart.com | +| AjsFineFoods | orders+ajs-fine-foods@instacart.com | +| Albertsons.com | orders+albertsons@instacart.com | +| ALDI.us | orders+aldi@instacart.com | +| Balduccis | orders+balduccis@instacart.com | +| BartellDrugs | orders+bartell-drugs@instacart.com | +| Bashas.com | orders+bashas@instacart.com | +| BathAndBodyWorks.com | orders+bath-and-body-works@instacart.com | +| BestMarket.com | orders+best-market@instacart.com | +| Binnys.com | orders+binnys@instacart.com | +| BiRiteMarket | orders+bi-rite-market@instacart.com | +| BJs.com | orders+bjs@instacart.com | +| Brookshires.com | orders+brookshires@instacart.com | +| CardenasMarketplace | orders+cardenas-marketplace@instacart.com | +| CarrsQualityCenter.com | orders+carrs-quality-center@instacart.com | +| CashSaver | orders+cash-saver@instacart.com | +| ChefStore | orders+chef-store@instacart.com | +| CityMarketDeliveryNow | orders+city-market-delivery-now@instacart.com | +| CoOpportunity | orders+co-opportunity@instacart.com | +| CosentinosFoodStores.com | orders+cosentinos-food-stores@instacart.com | +| Costco.com | orders+costco@instacart.com | +| CountyMarket | orders+county-market@instacart.com | +| Cub.com | orders+cub`@instacart.com | +| Cub.com | orders+cub@instacart.com | +| CVS.com | orders+cvs@instacart.com | +| Dagnyc | orders+dagnyc@instacart.com | +| DavesMarketplace.com | orders+daves-market@instacart.com | +| DearbornMarket | orders+dearborn-market@instacart.com | +| Deciccos | orders+deciccos@instacart.com | +| DetwilersFarmMarket | orders+detwilers-farm-market@instacart.com | +| DicksSportingGoods | orders+dicks-sporting-goods@instacart.com | +| Dillons.com | orders+dillons@instacart.com | +| Disney-Store | orders+disney-store@instacart.com | +| DollarTree | orders+dollar-tree@instacart.com | +| EarthFare.com | orders+earth-fare@instacart.com | +| EarthFareMarket | orders+earth-fare-market@instacart.com | +| Eataly | orders+eataly@instacart.com | +| FairwayMarket.com | orders+fairway@instacart.com | +| FamilyDollar | orders+family-dollar@instacart.com | +| FarmFreshSupermarkets.com | orders+farm-fresh@instacart.com | +| FiestaMart | orders+fiesta-mart@instacart.com | +| Food4Less.com | orders+food-4-less@instacart.com | +| Food4LessKroger | orders+food-4-less-kroger@instacart.com | +| FoodBazaar.com | orders+food-bazaar@instacart.com | +| Foodcellarscan | orders+foodcellarscan@instacart.com | +| FoodCity.com | orders+food-city@instacart.com | +| FoodCity.com | orders+foodcity@instacart.com | +| Foodemporium | orders+foodemporium@instacart.com | +| FoodLion.com | orders+food-lion@instacart.com | +| FoodlionStaging | orders+foodlion-staging@instacart.com | +| Foodmaxx.com | orders+foodmaxx@instacart.com | +| FoodsCoDeliveryNow | orders+foods-co-delivery-now@instacart.com | +| Foodtown | orders+foodtown@instacart.com | +| FoodTown | orders+food-town@instacart.com | +| FoodWay | orders+food-way@instacart.com | +| FredMeyer.com | orders+fred-meyer@instacart.com | +| FredMeyerDeliveryNow | orders+fred-meyer-delivery-now@instacart.com | +| FreshByBrookshires | orders+fresh-by-brookshires@instacart.com | +| FreshThyme.com | orders+fresh-thyme@instacart.com | +| Frys.com | orders+frys@instacart.com | +| FrysNowConvenience | orders+frys-now-convenience@instacart.com | +| Gelsons.com | orders+gelsons@instacart.com | +| Gfs | orders+gfs@instacart.com | +| Giantinstantdelivery | orders+giantinstantdelivery@instacart.com | +| GreenValleyMarketplaceOfSunnyside | orders+green-valley-marketplace-of-sunnyside@instacart.com | +| Greers | orders+greers@instacart.com | +| Gristedes | orders+gristedes@instacart.com | +| GroceryOutlet | orders+grocery-outlet@instacart.com | +| Gussmarket | orders+gussmarket@instacart.com | +| HarpsFoodStore.com | orders+harps-food-store@instacart.com | +| Heinens.com | orders+heinens@instacart.com | +| HenHouse | orders+hen-house@instacart.com | +| Hmart | orders+hmart@instacart.com | +| HomelandStores.com | orders+homeland@instacart.com | +| Hornbachers.com | orders+hornbachers@instacart.com | +| JacksonsFoodStores | orders+jacksons-food-stores@instacart.com | +| JerrysFood | orders+jerrys-food@instacart.com | +| JewelOsco.com | orders+jewel-osco@instacart.com | +| JoeRandazzosFruitVegetableMarket | orders+joe-randazzos-fruit-vegetable-market@instacart.com | +| Keyfood.com | orders+keyfood@instacart.com | +| KingSoopers.com | orders+kings@instacart.com | +| KingSoopers.com | orders+king-soopers@instacart.com | +| Kroger.com | orders+kroger@instacart.com | +| LakewindsCoOp | orders+lakewinds-co-op@instacart.com | +| LaMichoacanaMeatMarket | orders+la-michoacana-meat-market@instacart.com | +| Landis | orders+landis@instacart.com | +| LazyAcres | orders+lazy-acres@instacart.com | +| Loblaws | orders+loblaw@instacart.com | +| Loblaws | orders+loblaws@instacart.com | +| LowesFoods.com | orders+foods-co@instacart.com | +| LowesMarket.com | orders+lowes-market@instacart.com | +| LuckySupermarkets.com | orders+lucky-supermarkets@instacart.com | +| Marianos.com | orders+marianos@instacart.com | +| Market-32.com | orders+market-32@instacart.com | +| Martinsinstantdelivery | orders+martinsinstantdelivery@instacart.com | +| Martins-Supermarkets.com | orders+martins-super-markets@instacart.com | +| MetroMarketDeliveryNow | orders+metro-market-delivery-now@instacart.com | +| Metropolitan-market.com | orders+metro-market@instacart.com | +| Metropolitan-market.com | orders+metropolitan-market@instacart.com | +| Milams | orders+milams@instacart.com | +| Molliestones.com | orders+mollie-stones@instacart.com | +| Mortonwilliams.com | orders+mortonwilliams@instacart.com | +| Mortonwilliams.com | orders+MortonWilliams@instacart.com | +| MothersMarket | orders+mothers-market@instacart.com | +| MyCountyMarket | orders+my-county-market@instacart.com | +| NaturalGrocers.com | orders+natural-grocers@instacart.com | +| NewLeaf | orders+new-leaf@instacart.com | +| NewSeasonsMarket.com | orders+new-seasons@instacart.com | +| NorthgateMarket | orders+northgate-market@instacart.com | +| Pavilions.com | orders+pavilions@instacart.com | +| PayLessDeliveryNow | orders+pay-less-delivery-now@instacart.com | +| PccCommunityMarkets.com | orders+pcc-community-markets@instacart.com | +| PickNSave.com | orders+pick-n-save@instacart.com | +| PickNSaveDeliveryNow | orders+pick-n-save-delivery-now@instacart.com | +| PigglyWiggly.com | orders+piggly-wiggly@instacart.com | +| PriceChopper.com | orders+price-chopper@instacart.com | +| PriceChopperNy.com | orders+price-chopper-ny@instacart.com | +| PriceChopperOnecart | orders+price-chopper-onecart@instacart.com | +| PriceRiteMarketplace.com | orders+pricerite@instacart.com | +| Publix.com | orders+publix@instacart.com | +| PublixDelivers.com | orders+publix-delivers@instacart.com | +| QFC.com | orders+qfc@instacart.com | +| QfcDeliveryNow | orders+qfc-delivery-now@instacart.com | +| RainbowGrocery | orders+rainbow-grocery@instacart.com | +| Ralphs.com | orders+ralphs@instacart.com | +| RalphsNowConvenience | orders+ralphs-now-convenience@instacart.com | +| RanchoSanMiguel | orders+rancho-san-miguel@instacart.com | +| Randalls.com | orders+randalls@instacart.com | +| RealCanadianSuperstore.ca | orders+real-canadian-superstore@instacart.com | +| Ridleys | orders+ridleys@instacart.com | +| RiteAid.com | orders+rite-aid@instacart.com | +| Rouses.com | orders+rouses@instacart.com | +| Safeway.com | orders+safeway@instacart.com | +| SamedayStaples | orders+sameday-staples@instacart.com | +| Samsclub.com | orders+sams-club@instacart.com | +| Savealot | orders+savealot@instacart.com | +| Savemart.com | orders+savemart@instacart.com | +| Schnucks.com | orders+schnucks@instacart.com | +| SchnucksNow | orders+schnucks-now@instacart.com | +| Sephora.com | orders+sephora@instacart.com | +| Shaws.com | orders+shaws@instacart.com | +| ShopNSaveFood.com | orders+shop-n-save@instacart.com | +| ShopNSavePitt.com | orders+shop-n-save-pitt@instacart.com | +| Shoppersfood.com | orders+shoppersfood@instacart.com | +| SmartAndFinal.com | orders+smart-final@instacart.com | +| SmartFoodservice | orders+smart-foodservice@instacart.com | +| SmithsFoodAndDrug.com | orders+smiths@instacart.com | +| SpiritHalloween | orders+spirit-halloween@instacart.com | +| SpringMarket | orders+spring-market@instacart.com | +| Sprouts.com | orders+sprouts@instacart.com | +| StarMarket.com | orders+star-market@instacart.com | +| StewLeonards.com | orders+stew-leonards@instacart.com | +| StopAndShop.com | orders+stop-shop@instacart.com | +| StopShopExpress | orders+stop-shop-express@instacart.com | +| StrackAndVantil.com | orders+strack-van-til@instacart.com | +| Super1Foods.com | orders+super-1-foods@instacart.com | +| SuperiorGrocers.com | orders+superior-grocers@instacart.com | +| The99Store | orders+the-99-store@instacart.com | +| TheFreshMarket.com | orders+the-fresh-market@instacart.com | +| ThreeBearsAlaska | orders+three-bears-alaska@instacart.com | +| TomThumb.com | orders+tom-thumb@instacart.com | +| TonysFreshMarket | orders+tonys-fresh-market@instacart.com | +| TopsMarkets.com | orders+tops-markets@instacart.com | +| TopsOnecart | orders+tops-onecart@instacart.com | +| TownAndCountry | orders+town-and-country@instacart.com | +| TradeFairSupermarket | orders+trade-fair-supermarket@instacart.com | +| UnitedSupermarketsOk.com | orders+united-supermarkets-ok@instacart.com | +| VitaminShoppe | orders+vitamin-shoppe@instacart.com | +| Vons.com | orders+vons@instacart.com | +| WalgreensScanPopup | orders+walgreens-scan-popup@instacart.com | +| Wegmans.com | orders+wegmans@instacart.com | +| WesternBeef.com | orders+western-beef@instacart.com | +| WholeFoodsMarket.com | orders+whole-foods@instacart.com | +| WildByNature | orders+wild-by-nature@instacart.com | +| WinnDixie.com | orders+winn-dixie@instacart.com | + +--- \ No newline at end of file diff --git a/src/assets/styles/main.css b/src/assets/styles/main.css index 3b74eae3..e8906d41 100644 --- a/src/assets/styles/main.css +++ b/src/assets/styles/main.css @@ -32,31 +32,31 @@ } } -@media (min-height: 640px){ +@media (min-height: 640px) { :root { --tiki-font-size-base: 12px; } } -@media (min-height: 667px){ +@media (min-height: 667px) { :root { --tiki-font-size-base: 13px; } } -@media (min-height: 740px){ +@media (min-height: 740px) { :root { --tiki-font-size-base: 14px; } } -@media (min-height: 780px){ +@media (min-height: 780px) { :root { --tiki-font-size-base: 15px; } } -@media (min-height: 812px){ +@media (min-height: 812px) { :root { --tiki-font-size-base: 16px; } diff --git a/src/components/account/account-creds.ts b/src/components/account/account-creds.ts deleted file mode 100644 index 4afd1c4b..00000000 --- a/src/components/account/account-creds.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import type { Account } from "@mytiki/tiki-capture-receipt-capacitor"; -import * as Type from "@/components/account/account-type"; - -/** - * Represents a 3rd-party account used to scrape receipts. - */ -export class AccountCreds { - /** - * The username of the account. - */ - username: string; - /** - * The 3rd-party account type. - */ - type: Type.AccountType; - /** - * The password of the account. Only present during login. - */ - password?: string; - /** - * Indicates whether the account credentials have been verified. - */ - isVerified: boolean; - - /** - * Creates a new ReceiptAccount instance. - * @param username - The username of the account. - * @param type - The type of account. - * @param password - An optional password for the account. - * @param isVerified - Indicates whether the account credentials have been verified. Default false. - */ - constructor( - username: string, - type: Type.AccountType, - password?: string, - isVerified?: boolean, - ) { - this.username = username; - this.type = type; - this.password = password; - this.isVerified = isVerified ?? false; - } - - static from(account: Account): AccountCreds { - const type = Type.findByKey(account.accountType.key); - if (type != undefined) - return new AccountCreds( - account.username, - account.accountType, - account.password, - account.isVerified, - ); - else throw Error(`Unsupported value: ${account}`); - } -} diff --git a/src/components/account/account-form.vue b/src/components/account/account-form.vue index ebd5806e..2484399d 100644 --- a/src/components/account/account-form.vue +++ b/src/components/account/account-form.vue @@ -4,43 +4,37 @@ --> - - - - diff --git a/src/components/account/account-list.vue b/src/components/account/account-list.vue index 6cd26dbd..de19ef16 100644 --- a/src/components/account/account-list.vue +++ b/src/components/account/account-list.vue @@ -5,12 +5,12 @@ \ No newline at end of file + diff --git a/src/components/account/account-sheet.vue b/src/components/account/account-sheet.vue deleted file mode 100644 index 4ff69d42..00000000 --- a/src/components/account/account-sheet.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - diff --git a/src/components/account/account-status.vue b/src/components/account/account-status.vue index 700ac908..f5eaf542 100644 --- a/src/components/account/account-status.vue +++ b/src/components/account/account-status.vue @@ -7,12 +7,12 @@ import IconMinus from "@/assets/icons/minus.svg?component"; import type { PropType } from "vue"; import { watch, ref } from "vue"; -import type { AccountCreds } from "@/components/account/account-creds"; +import type { Account } from "@mytiki/capture-receipt-capacitor"; defineEmits(["delete"]); const props = defineProps({ account: { - type: Object as PropType, + type: Object as PropType, required: true, }, }); @@ -27,7 +27,7 @@ watch(
diff --git a/src/components/account/account-type.ts b/src/components/account/account-type.ts deleted file mode 100644 index ca09c2e7..00000000 --- a/src/components/account/account-type.ts +++ /dev/null @@ -1,711 +0,0 @@ -/* - * Copyright (c) TIKI Inc. - * MIT license. See LICENSE file in root directory. - */ - -import AcmeIcon from "@/assets/images/acme.png"; -import AlbertsonsIcon from "@/assets/images/albertsons.png"; -import AmazonIcon from "@/assets/images/amazon.png"; -//import AolIcon from "@/assets/images/aol.png"; -import BedBathAndBeyondIcon from "@/assets/images/bed-bath-beyond.png"; -import BestBuyIcon from "@/assets/images/best-buy.png"; -import BJsIcon from "@/assets/images/bjs.png"; -import ChewyIcon from "@/assets/images/chewy.png"; -import CostcoIcon from "@/assets/images/costco.png"; -import CVSIcon from "@/assets/images/cvs.png"; -import DicksIcon from "@/assets/images/dicks.png"; -import DollarGeneralIcon from "@/assets/images/dollar-general.png"; -import DollarTreeIcon from "@/assets/images/dollar-tree.png"; -import DominosIcon from "@/assets/images/dominos.png"; -import DoorDashIcon from "@/assets/images/door-dash.png"; -import DrizlyIcon from "@/assets/images/drizly.png"; -import FamilyDollarIcon from "@/assets/images/family-dollar.png"; -import Food4LessIcon from "@/assets/images/food-4-less.png"; -import FoodLionIcon from "@/assets/images/food-lion.png"; -import FredMeyerIcon from "@/assets/images/fred-meyer.png"; -import GapIcon from "@/assets/images/gap.png"; -import GiantEagleIcon from "@/assets/images/giant-eagle.png"; -import GmailIcon from "@/assets/images/gmail.png"; -import GrubHubIcon from "@/assets/images/grubhub.png"; -import HarrisTeeterIcon from "@/assets/images/harris-teeter.png"; -import HEBIcon from "@/assets/images/heb.png"; -import HomeDepotIcon from "@/assets/images/home-depot.png"; -import HyVeeIcon from "@/assets/images/hy-vee.png"; -import InstacartIcon from "@/assets/images/instacart.png"; -import JewelOscoIcon from "@/assets/images/jewel-osco.png"; -import KohlsIcon from "@/assets/images/kohls.png"; -import KrogerIcon from "@/assets/images/kroger.png"; -import LowesIcon from "@/assets/images/lowes.png"; -import MacysIcon from "@/assets/images/macys.png"; -import MarshallsIcon from "@/assets/images/marshalls.png"; -import MeijerIcon from "@/assets/images/meijer.png"; -import NikeIcon from "@/assets/images/nike.png"; -//import OutlookIcon from "@/assets/images/outlook.png"; -import PublixIcon from "@/assets/images/publix.png"; -import RalphsIcon from "@/assets/images/ralphs.png"; -import RiteAidIcon from "@/assets/images/rite-aid.png"; -import SafewayIcon from "@/assets/images/safeway.png"; -import SamsClubIcon from "@/assets/images/sams-club.png"; -import SeamlessIcon from "@/assets/images/seamless.png"; -import SephoraIcon from "@/assets/images/sephora.png"; -import ShiptIcon from "@/assets/images/shipt.png"; -import ShopRiteIcon from "@/assets/images/shop-rite.png"; -import SproutsIcon from "@/assets/images/sprouts.png"; -import StaplesIcon from "@/assets/images/staples.png"; -import StaplesCanadaIcon from "@/assets/images/staples-canada.png"; -import StarbucksIcon from "@/assets/images/starbucks.png"; -import TacoBellIcon from "@/assets/images/tacobell.png"; -import TargetIcon from "@/assets/images/target.png"; -import TJMaxxIcon from "@/assets/images/tj-maxx.png"; -import UberEatsIcon from "@/assets/images/uber-eats.png"; -import UltaIcon from "@/assets/images/ulta.png"; -import VonsIcon from "@/assets/images/vons.png"; -import WalgreensIcon from "@/assets/images/walgreens.png"; -import WalmartIcon from "@/assets/images/walmart.png"; -import WalmartCanadaIcon from "@/assets/images/walmart-canada.png"; -import WegmansIcon from "@/assets/images/wegmans.png"; -//import YahooIcon from "@/assets/images/yahoo.png"; - -export interface AccountType { - type: "EMAIL" | "RETAILER"; - name: string; - icon?: string; - key: string; -} - -/** - * CME Markets account type - */ -export const CME_MARKETS: AccountType = { - type: "RETAILER", - name: "Acme", - icon: AcmeIcon, - key: "CME_MARKETS", -}; -/** - * Albertsons account type. - */ -export const ALBERTSONS: AccountType = { - type: "RETAILER", - icon: AlbertsonsIcon, - name: "Albertsons", - key: "ALBERTSONS", -}; -/** - * Amazon account type. - */ -export const AMAZON: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon", - key: "AMAZON", -}; -/** - * Amazon Canada account type. - */ -export const AMAZON_CA: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon Canada", - key: "AMAZON_CA", -}; -/** - * Amazon United Kingdom account type. - */ -export const AMAZON_UK: AccountType = { - type: "RETAILER", - icon: AmazonIcon, - name: "Amazon United Kingdom", - key: "AMAZON_UK", -}; -/** - * AOL account type. - */ -// AOL = "AOL", -/** - * Bed Bath & Beyond account type. - */ -export const BED_BATH_AND_BEYOND: AccountType = { - type: "RETAILER", - icon: BedBathAndBeyondIcon, - name: "Bed Bath & Beyond", - key: "BED_BATH_AND_BEYOND", -}; -/** - * Gmail account type. - */ -export const GMAIL: AccountType = { - type: "EMAIL", - icon: GmailIcon, - name: "Gmail", - key: "GMAIL", -}; -/** - * Best Buy account type. - */ -export const BESTBUY: AccountType = { - type: "RETAILER", - icon: BestBuyIcon, - name: "Best Buy", - key: "BESTBUY", -}; -/** - * BJ’s Wholesale Club account type. - */ -export const BJS_WHOLESALE: AccountType = { - type: "RETAILER", - icon: BJsIcon, - name: "BJ’s Wholesale Club", - key: "BJS_WHOLESALE", -}; -/** - * Chewy account type. - */ -export const CHEWY: AccountType = { - type: "RETAILER", - icon: ChewyIcon, - name: "Chewy", - key: "CHEWY", -}; -/** - * Costco account type. - */ -export const COSTCO: AccountType = { - type: "RETAILER", - icon: CostcoIcon, - name: "Costco", - key: "COSTCO", -}; -/** - * CVS account type. - */ -export const CVS: AccountType = { - type: "RETAILER", - icon: CVSIcon, - name: "CVS", - key: "CVS", -}; -/** - * Dick’s Sporting Goods account type. - */ -export const DICKS_SPORTING_GOODS: AccountType = { - type: "RETAILER", - icon: DicksIcon, - name: "Dick’s Sporting Goods", - key: "DICKS_SPORTING_GOODS", -}; -/** - * Dollar General account type. - */ -export const DOLLAR_GENERAL: AccountType = { - type: "RETAILER", - icon: DollarGeneralIcon, - name: "Dollar General", - key: "DOLLAR_GENERAL", -}; -/** - * DollarTree account type. - */ -export const DOLLAR_TREE: AccountType = { - type: "RETAILER", - icon: DollarTreeIcon, - name: "DollarTree", - key: "DOLLAR_TREE", -}; -/** - * Domino’s Pizza account type. - */ -export const DOMINOS_PIZZA: AccountType = { - type: "RETAILER", - icon: DominosIcon, - name: "Domino’s Pizza", - key: "DOMINOS_PIZZA", -}; -/** - * DoorDash account type. - */ -export const DOOR_DASH: AccountType = { - type: "RETAILER", - icon: DoorDashIcon, - name: "DoorDash", - key: "DOOR_DASH", -}; -/** - * Drizly account type. - */ -export const DRIZLY: AccountType = { - type: "RETAILER", - icon: DrizlyIcon, - name: "Drizly", - key: "DRIZLY", -}; -/** - * Family Dollar account type. - */ -export const FAMILY_DOLLAR: AccountType = { - type: "RETAILER", - icon: FamilyDollarIcon, - name: "Family Dollar", - key: "FAMILY_DOLLAR", -}; -/** - * Food 4 Less account type. - */ -export const FOOD_4_LESS: AccountType = { - type: "RETAILER", - icon: Food4LessIcon, - name: "Food 4 Less", - key: "FOOD_4_LESS", -}; -/** - * Food Lion account type. - */ -export const FOOD_LION: AccountType = { - type: "RETAILER", - icon: FoodLionIcon, - name: "Food Lion", - key: "FOOD_LION", -}; -/** - * Fred Meyer account type. - */ -export const FRED_MEYER: AccountType = { - type: "RETAILER", - icon: FredMeyerIcon, - name: "Fred Meyer", - key: "FRED_MEYER", -}; -/** - * GAP account type. - */ -export const GAP: AccountType = { - type: "RETAILER", - icon: GapIcon, - name: "GAP", - key: "GAP", -}; -/** - * Giant Eagle account type. - */ -export const GIANT_EAGLE: AccountType = { - type: "RETAILER", - icon: GiantEagleIcon, - name: "Giant Eagle", - key: "GIANT_EAGLE", -}; -/** - * Grubhub account type. - */ -export const GRUBHUB: AccountType = { - type: "RETAILER", - icon: GrubHubIcon, - name: "Grubhub", - key: "GRUBHUB", -}; -/** - * Harris Teeter account type. - */ -export const HARRIS_TEETER: AccountType = { - type: "RETAILER", - icon: HarrisTeeterIcon, - name: "Harris Teeter", - key: "HARRIS_TEETER", -}; -/** - * H.E.B account type. - */ -export const HEB: AccountType = { - type: "RETAILER", - icon: HEBIcon, - name: "H.E.B", - key: "HEB", -}; -/** - * Home Depot account type. - */ -export const HOME_DEPOT: AccountType = { - type: "RETAILER", - icon: HomeDepotIcon, - name: "Home Depot", - key: "HOME_DEPOT", -}; -/** - * HyVee account type. - */ -export const HYVEE: AccountType = { - type: "RETAILER", - icon: HyVeeIcon, - key: "HYVEE", - name: "HyVee", -}; -/** - * Instacart account type. - */ -export const INSTACART: AccountType = { - type: "RETAILER", - icon: InstacartIcon, - name: "Instacart", - key: "INSTACART", -}; -/** - * Jewel Osco account type. - */ -export const JEWEL_OSCO: AccountType = { - type: "RETAILER", - icon: JewelOscoIcon, - name: "Jewel Osco", - key: "JEWEL_OSCO", -}; -/** - * Kohl’s account type. - */ -export const KOHLS: AccountType = { - type: "RETAILER", - icon: KohlsIcon, - name: "Kohl’s", - key: "KOHLS", -}; -/** - * Kroger account type. - */ -export const KROGER: AccountType = { - type: "RETAILER", - icon: KrogerIcon, - name: "Kroger", - key: "KROGER", -}; -/** - * Lowe’s account type. - */ -export const LOWES: AccountType = { - type: "RETAILER", - icon: LowesIcon, - name: "Lowe’s", - key: "LOWES", -}; -/** - * Macy’s account type. - */ -export const MACYS: AccountType = { - type: "RETAILER", - icon: MacysIcon, - name: "Macy’s", - key: "MACYS", -}; -/** - * Marshalls account type. - */ -export const MARSHALLS: AccountType = { - type: "RETAILER", - icon: MarshallsIcon, - name: "Marshalls", - key: "MARSHALLS", -}; -/** - * Meijer account type. - */ -export const MEIJER: AccountType = { - type: "RETAILER", - icon: MeijerIcon, - name: "Meijer", - key: "MEIJER", -}; -/** - * Nike account type. - */ -export const NIKE: AccountType = { - type: "RETAILER", - icon: NikeIcon, - name: "Nike", - key: "NIKE", -}; -/** - * Microsoft Outlook account type. - */ -// export const OUTLOOK: AccountType = { -// name:"Outlook", -// type: "Email", -// icon: "", -// } -/** - * Publix account type. - */ -export const PUBLIX: AccountType = { - type: "RETAILER", - icon: PublixIcon, - name: "Publix", - key: "PUBLIX", -}; -/** - * Ralphs account type. - */ -export const RALPHS: AccountType = { - type: "RETAILER", - icon: RalphsIcon, - name: "Ralphs", - key: "RALPHS", -}; -/** - * RiteAid account type. - */ -export const RITE_AID: AccountType = { - type: "RETAILER", - icon: RiteAidIcon, - name: "RiteAid", - key: "RITE_AID", -}; -/** - * Safeway account type. - */ -export const SAFEWAY: AccountType = { - type: "RETAILER", - icon: "", - name: "Safeway", - key: "SAFEWAY", -}; -/** - * Sam’s Club account type. - */ -export const SAMS_CLUB: AccountType = { - type: "RETAILER", - icon: SamsClubIcon, - name: "Sam’s Club", - key: "SAMS_CLUB", -}; -/** - * Seamless account type. - */ -export const SEAMLESS: AccountType = { - type: "RETAILER", - icon: SeamlessIcon, - name: "Seamless", - key: "SEAMLESS", -}; -/** - * Sephora account type. - */ -export const SEPHORA: AccountType = { - type: "RETAILER", - icon: SephoraIcon, - name: "Sephora", - key: "SEPHORA", -}; -/** - * Shipt account type. - */ -export const SHIPT: AccountType = { - type: "RETAILER", - icon: ShiptIcon, - name: "Shipt", - key: "SHIPT", -}; -/** - * ShopRite account type. - */ -export const SHOPRITE: AccountType = { - type: "RETAILER", - icon: ShopRiteIcon, - name: "Shoprite", - key: "SHOPRITE", -}; -/** - * Sprouts account type. - */ -export const SPROUTS: AccountType = { - type: "RETAILER", - icon: SproutsIcon, - name: "Sprouts", - key: "SPROUTS", -}; -/** - * Staples account type. - */ -export const STAPLES: AccountType = { - type: "RETAILER", - icon: StaplesIcon, - name: "Staples", - key: "STAPLES", -}; -/** - * Staples Canada account type. - */ -export const STAPLES_CA: AccountType = { - type: "RETAILER", - icon: StaplesCanadaIcon, - name: "Staples Canada", - key: "STAPLES_CA", -}; -/** - * Starbucks account type. - */ -export const STARBUCKS: AccountType = { - type: "RETAILER", - icon: StarbucksIcon, - name: "Starbucks", - key: "STARBUCKS", -}; -/** - * Taco Bell account type. - */ -export const TACO_BELL: AccountType = { - type: "RETAILER", - icon: TacoBellIcon, - name: "Taco Bell", - key: "TACO_BELL", -}; -/** - * Target account type. - */ -export const TARGET: AccountType = { - type: "RETAILER", - icon: TargetIcon, - name: "Target", - key: "TARGET", -}; -/** - * T.J.Maxx account type. - */ -export const TJ_MAXX: AccountType = { - type: "RETAILER", - icon: TJMaxxIcon, - name: "T.J.Maxx", - key: "TJ_MAXX", -}; -/** - * UberEats account type. - */ -export const UBER_EATS: AccountType = { - type: "RETAILER", - icon: UberEatsIcon, - name: "UberEats", - key: "UBER_EATS", -}; -/** - * Ulta account type. - */ -export const ULTA: AccountType = { - type: "RETAILER", - icon: UltaIcon, - name: "Ulta", - key: "ULTA", -}; -/** - * Vons account type. - */ -export const VONS: AccountType = { - type: "RETAILER", - icon: VonsIcon, - name: "Vons", - key: "VONS", -}; -/**} - * Walgreens account type. - */ -export const WALGREENS: AccountType = { - type: "RETAILER", - icon: WalgreensIcon, - name: "Walgreens", - key: "WALGREENS", -}; -/** - * Walmart account type. - */ -export const WALMART: AccountType = { - type: "RETAILER", - icon: WalmartIcon, - name: "Walmart", - key: "WALMART", -}; -/** - * Walmart Canada account type. - */ -export const WALMART_CA: AccountType = { - type: "RETAILER", - icon: WalmartCanadaIcon, - name: "Walmart Canada", - key: "WALMART_CA", -}; -/** - * Wegman’s account type. - */ -export const WEGMANS: AccountType = { - type: "RETAILER", - icon: WegmansIcon, - name: "Wegman’s", - key: "WEGMANS", -}; - -// export const YAHOO: AccountType = { -// type: "Email", -// icon: '', -// name: "Yahoo", -// key: "YAHOO" -// } - -export const findByKey = (key: string): AccountType | undefined => - index.get(key); - -export const index: Map = new Map([ - [ALBERTSONS.key, ALBERTSONS], - [AMAZON.key, AMAZON], - [AMAZON_CA.key, AMAZON_CA], - [AMAZON_UK.key, AMAZON_UK], - //[AOL.key, AOL] - [BED_BATH_AND_BEYOND.key, BED_BATH_AND_BEYOND], - [GMAIL.key, GMAIL], - [BESTBUY.key, BESTBUY], - [BJS_WHOLESALE.key, BJS_WHOLESALE], - [CHEWY.key, CHEWY], - [COSTCO.key, COSTCO], - [CVS.key, CVS], - [DICKS_SPORTING_GOODS.key, DICKS_SPORTING_GOODS], - [DOLLAR_GENERAL.key, DOLLAR_GENERAL], - [DOLLAR_TREE.key, DOLLAR_TREE], - [DOMINOS_PIZZA.key, DOMINOS_PIZZA], - [DOOR_DASH.key, DOOR_DASH], - [DRIZLY.key, DRIZLY], - [FAMILY_DOLLAR.key, FAMILY_DOLLAR], - [FOOD_4_LESS.key, FOOD_4_LESS], - [FOOD_LION.key, FOOD_LION], - [FRED_MEYER.key, FRED_MEYER], - [GAP.key, GAP], - [GIANT_EAGLE.key, GIANT_EAGLE], - [GRUBHUB.key, GRUBHUB], - [HARRIS_TEETER.key, HARRIS_TEETER], - [HEB.key, HEB], - [HOME_DEPOT.key, HOME_DEPOT], - [HYVEE.key, HYVEE], - [INSTACART.key, INSTACART], - [JEWEL_OSCO.key, JEWEL_OSCO], - [KOHLS.key, KOHLS], - [KROGER.key, KROGER], - [LOWES.key, LOWES], - [MACYS.key, MACYS], - [MARSHALLS.key, MARSHALLS], - [MEIJER.key, MEIJER], - [NIKE.key, NIKE], - //[OUTLOOK.key, OUTLOOK], - [RALPHS.key, RALPHS], - [RITE_AID.key, RITE_AID], - [SAFEWAY.key, SAFEWAY], - [SAMS_CLUB.key, SAMS_CLUB], - [SEAMLESS.key, SEAMLESS], - [SEPHORA.key, SEPHORA], - [SHIPT.key, SHIPT], - [SHOPRITE.key, SHOPRITE], - [SPROUTS.key, SPROUTS], - [STAPLES.key, STAPLES], - [STAPLES_CA.key, STAPLES_CA], - [STARBUCKS.key, STARBUCKS], - [TACO_BELL.key, TACO_BELL], - [TARGET.key, TARGET], - [TJ_MAXX.key, TJ_MAXX], - [UBER_EATS.key, UBER_EATS], - [ULTA.key, ULTA], - [VONS.key, VONS], - [WALGREENS.key, WALGREENS], - [WALMART.key, WALMART], - [WALMART_CA.key, WALMART_CA], - [WEGMANS.key, WEGMANS], - //[YAHOO.key, YAHOO], -]); diff --git a/src/components/account/account-unlink.vue b/src/components/account/account-unlink.vue deleted file mode 100644 index ab60f445..00000000 --- a/src/components/account/account-unlink.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - - - diff --git a/src/components/bullet/bullet-list.vue b/src/components/bullet/bullet-list.vue index ee81597b..0bb7e5dd 100644 --- a/src/components/bullet/bullet-list.vue +++ b/src/components/bullet/bullet-list.vue @@ -17,7 +17,7 @@ defineProps({ default: "How to earn $1 / Month", }, bullets: { - type: Array<{ text: String; state?: BulletState }>, + type: Array<{ text: string; state?: BulletState }>, required: false, default: [], }, @@ -28,9 +28,9 @@ defineProps({
{{ title }}
- +
-
+
{{ bullet.text }}
diff --git a/src/components/bullet/bullet-point.vue b/src/components/bullet/bullet-point.vue index 7d36e374..c247faad 100644 --- a/src/components/bullet/bullet-point.vue +++ b/src/components/bullet/bullet-point.vue @@ -4,15 +4,31 @@ --> diff --git a/src/components/button/button-square.vue b/src/components/button/button-square.vue index ee1e8a4e..0c1b1146 100644 --- a/src/components/button/button-square.vue +++ b/src/components/button/button-square.vue @@ -6,7 +6,7 @@ diff --git a/src/components/sheet/sheet-add-gmail.vue b/src/components/sheet/sheet-add-gmail.vue new file mode 100644 index 00000000..ce61284d --- /dev/null +++ b/src/components/sheet/sheet-add-gmail.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/sheet/sheet-add-retailer.vue b/src/components/sheet/sheet-add-retailer.vue new file mode 100644 index 00000000..ae217048 --- /dev/null +++ b/src/components/sheet/sheet-add-retailer.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/sheet/sheet-bottom.vue b/src/components/sheet/sheet-bottom.vue index 217525b4..3d95e3fa 100644 --- a/src/components/sheet/sheet-bottom.vue +++ b/src/components/sheet/sheet-bottom.vue @@ -7,15 +7,13 @@ import { ref, watch } from "vue"; const props = defineProps({ - color: String, - height: String, show: { type: Boolean, required: false, default: true, }, }); -const emit = defineEmits(["dismiss"]); +defineEmits(["dismiss"]); const isShow = ref(props.show); watch( () => props.show, @@ -45,12 +43,6 @@ watch( position: fixed; } -@media (prefers-color-scheme: dark) { - .overlay { - //background-color: rgba(0, 0, 0, 70%); - } -} - .bottom-sheet { background-color: var(--tiki-secondary-background-color); position: fixed; diff --git a/src/components/sheet/sheet-connected.vue b/src/components/sheet/sheet-connected.vue deleted file mode 100644 index b4bdfa21..00000000 --- a/src/components/sheet/sheet-connected.vue +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/components/sheet/sheet-gmail.vue b/src/components/sheet/sheet-gmail.vue new file mode 100644 index 00000000..b6192aed --- /dev/null +++ b/src/components/sheet/sheet-gmail.vue @@ -0,0 +1,48 @@ + + + + + + + diff --git a/src/components/sheet/sheet-google.vue b/src/components/sheet/sheet-google.vue deleted file mode 100644 index 6b09b955..00000000 --- a/src/components/sheet/sheet-google.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - diff --git a/src/components/sheet/sheet-home.vue b/src/components/sheet/sheet-home.vue index 509bbcb5..5ab991ab 100644 --- a/src/components/sheet/sheet-home.vue +++ b/src/components/sheet/sheet-home.vue @@ -5,66 +5,99 @@ diff --git a/src/components/sheet/sheet-link-gmail.vue b/src/components/sheet/sheet-link-gmail.vue deleted file mode 100644 index de4620c7..00000000 --- a/src/components/sheet/sheet-link-gmail.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - \ No newline at end of file diff --git a/src/components/sheet/sheet-link-retailer.vue b/src/components/sheet/sheet-link-retailer.vue deleted file mode 100644 index 7b0a093f..00000000 --- a/src/components/sheet/sheet-link-retailer.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - \ No newline at end of file diff --git a/src/components/sheet/sheet-offer.vue b/src/components/sheet/sheet-offer.vue index 83cd872b..f35b2f8e 100644 --- a/src/components/sheet/sheet-offer.vue +++ b/src/components/sheet/sheet-offer.vue @@ -5,9 +5,7 @@ diff --git a/src/components/sheet/sheet-retailer.vue b/src/components/sheet/sheet-retailer.vue index 8d62944c..54931496 100644 --- a/src/components/sheet/sheet-retailer.vue +++ b/src/components/sheet/sheet-retailer.vue @@ -7,42 +7,37 @@ import HeaderBack from "@/components/header/header-back.vue"; import ButtonText from "@/components/button/button-text.vue"; import AccountList from "@/components/account/account-list.vue"; -import { AccountCreds } from "@/components/account/account-creds"; -import * as AccountTypes from "@/components/account/account-type"; +import type { TikiService } from "@/service"; +import { inject, ref } from "vue"; +import type { Account } from "@mytiki/capture-receipt-capacitor"; -defineEmits(["back", "close", "link"]); -const props = defineProps({ - accounts: { - type: Array, - required: false, - default: [ - { - username: "mike@mytiki.com", - type: AccountTypes.ALBERTSONS, - isVerified: true, - }, - { - username: "mike@mytiki.com", - type: AccountTypes.CVS, - isVerified: false, - }, - ], - }, +const emit = defineEmits(["back", "close", "add", "skip"]); +const tiki: TikiService = inject("Tiki")!; +const filter = (accounts: Account[]): Account[] => + accounts.filter((account) => account.type.type === "RETAILER"); +const accounts = ref(filter(tiki.capture.accounts ?? [])); +if (accounts.value.length == 0) emit("skip"); + +tiki.capture.onAccount("SheetRetailer", (_, __) => { + accounts.value = filter(tiki.capture.accounts ?? []); }); -const filtered = props.accounts?.filter( - (account) => account.type.type === "RETAILER", -); +const remove = async (account: Account) => { + //show warn. + await tiki.capture.logout(account); +};