├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── workflows │ ├── ci.yaml │ └── publish.yml ├── .gitignore ├── .npmrc ├── LICENSE.md ├── README.md ├── adblock-detect-react ├── CHANGELOG.json ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── package.json ├── src │ ├── components │ │ └── AdBlockDetectedWrapper.tsx │ ├── hooks │ │ └── useDetectAdBlock.ts │ └── index.ts └── tsconfig.json ├── beachball.config.js ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml └── vite-test ├── .env ├── index.html ├── package.json ├── src ├── App.css ├── App.jsx ├── index.css ├── logo.svg └── main.jsx └── vite.config.js /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Please complete the following information:** 27 | 28 | - OS: [e.g. iOS] 29 | - Browser [e.g. chrome, safari] 30 | - Browser Version [e.g. 22] 31 | - Package Version [e.g. 1.0.x] 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | pull_request: 5 | branches: "master" 6 | 7 | jobs: 8 | ci: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | with: 14 | fetch-depth: 2 15 | 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: 20 19 | registry-url: https://registry.npmjs.org/ 20 | 21 | - uses: pnpm/action-setup@v2.2.2 22 | name: Install pnpm 23 | id: pnpm-install 24 | with: 25 | version: 8 26 | run_install: true 27 | 28 | - run: pnpm check 29 | 30 | - run: pnpm build -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish Package Pipeline 2 | 3 | on: 4 | push: 5 | branches: "master" 6 | 7 | jobs: 8 | publish-npm: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | with: 14 | fetch-depth: 2 15 | 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: 20 19 | registry-url: https://registry.npmjs.org/ 20 | 21 | - uses: pnpm/action-setup@v2.2.2 22 | name: Install pnpm 23 | id: pnpm-install 24 | with: 25 | version: 8 26 | run_install: true 27 | 28 | - run: pnpm build 29 | 30 | - name: Set git credentials 31 | run: | 32 | git config user.name "aruniverse" 33 | git config user.email "aruniverse@users.noreply.github.com" 34 | git remote set-url origin "https://$REPO_PAT@github.com/aruniverse/adblock-detect-react" 35 | env: 36 | REPO_PAT: ${{ secrets.REPO_PAT }} 37 | 38 | - run: pnpm release 39 | env: 40 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | cjs/ 3 | esm/ 4 | *.tgz 5 | 6 | build/ 7 | *.eslintcache 8 | 9 | .turbo 10 | 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | *.local -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=false 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Arun George 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # adblock-detect-react 2 | 3 | [![npm version](https://badge.fury.io/js/adblock-detect-react.svg)](https://www.npmjs.com/package/adblock-detect-react) 4 | 5 | ![Publish Status](https://github.com/aruniverse/adblock-detect-react/workflows/Publish%20Package%20Pipeline/badge.svg) 6 | 7 | 8 | [Live Demo Site](https://adblock-detect-react.vercel.app/) 9 | 10 | ## Description 11 | 12 | Small utility package that helps to detect if theres an adblcoker running on your page. For more details look at the [package's readme](./adblock-detect-react/). 13 | 14 | #### Last known good 15 | 16 | adblock-detect-react@1.0.3 has been verified to work on the following browsers with version: 17 | 18 | | | Version | 19 | | ------------- | --------- | 20 | | Chrome | 88.0.4324 | 21 | | Firefox | 85.0.0 | 22 | | Chromium Edge | 88.0.705 | 23 | | Safari | 14.0.2 | 24 | -------------------------------------------------------------------------------- /adblock-detect-react/CHANGELOG.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adblock-detect-react", 3 | "entries": [ 4 | { 5 | "date": "Wed, 03 Jan 2024 17:39:59 GMT", 6 | "version": "1.3.1", 7 | "tag": "adblock-detect-react_v1.3.1", 8 | "comments": { 9 | "patch": [ 10 | { 11 | "author": "11051042+aruniverse@users.noreply.github.com", 12 | "package": "adblock-detect-react", 13 | "commit": "ef9dd717020645dbc1b0b1db6e97d246ac92133f", 14 | "comment": "change jsx target back to react" 15 | } 16 | ] 17 | } 18 | }, 19 | { 20 | "date": "Fri, 29 Dec 2023 18:31:24 GMT", 21 | "version": "1.3.0", 22 | "tag": "adblock-detect-react_v1.3.0", 23 | "comments": { 24 | "patch": [ 25 | { 26 | "author": "aruniverse@users.noreply.github.com", 27 | "package": "adblock-detect-react", 28 | "commit": "81b795649b72aa48ff7f9118cc3f90afa145f68a", 29 | "comment": "Publish changelogs" 30 | } 31 | ], 32 | "minor": [ 33 | { 34 | "author": "aruniverse@users.noreply.github.com", 35 | "package": "adblock-detect-react", 36 | "commit": "c3dffee8e4520561522e3014b148fe196553c064", 37 | "comment": "Correctly handle ad blockers that return a HTTP307 redirect" 38 | } 39 | ] 40 | } 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /adblock-detect-react/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log - adblock-detect-react 2 | 3 | This log was last generated on Wed, 03 Jan 2024 17:39:59 GMT and should not be manually modified. 4 | 5 | 6 | 7 | ## 1.3.1 8 | 9 | Wed, 03 Jan 2024 17:39:59 GMT 10 | 11 | ### Patches 12 | 13 | - change jsx target back to react (11051042+aruniverse@users.noreply.github.com) 14 | 15 | ## 1.3.0 16 | 17 | Fri, 29 Dec 2023 18:31:24 GMT 18 | 19 | ### Minor changes 20 | 21 | - Correctly handle ad blockers that return a HTTP307 redirect (aruniverse@users.noreply.github.com) 22 | 23 | ### Patches 24 | 25 | - Publish changelogs (aruniverse@users.noreply.github.com) 26 | -------------------------------------------------------------------------------- /adblock-detect-react/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Arun George 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /adblock-detect-react/README.md: -------------------------------------------------------------------------------- 1 | # adblock-detect-react 2 | 3 | [![npm version](https://badge.fury.io/js/adblock-detect-react.svg)](https://www.npmjs.com/package/adblock-detect-react) 4 | ![Publish Status](https://github.com/aruniverse/adblock-detect-react/workflows/Publish%20Package%20Pipeline/badge.svg) 5 | 6 | ## Description 7 | 8 | Provides utilities to check if ad block is enabled on a page via either a React hook or a wrapper component. 9 | 10 | ## Example Usage 11 | 12 | ### useDetectAdBlock hook 13 | 14 | ```tsx 15 | import React from "react"; 16 | import { useDetectAdBlock } from "adblock-detect-react"; 17 | 18 | const SomeFunctionalComponent = () => { 19 | const adBlockDetected = useDetectAdBlock(); 20 | 21 | React.useEffect(() => { 22 | if (adBlockDetected) { 23 | window.alert("ad block detected"); 24 | } 25 | }, []); 26 | 27 | return
{adBlockDetected && "Hello Ad Blocked Page"}
; 28 | }; 29 | ``` 30 | 31 | ### AdBlockDetectedWrapper component 32 | 33 | ```tsx 34 | import React from "react"; 35 | import { AdBlockDetectedWrapper } from "adblock-detect-react"; 36 | 37 | const SomeFunctionalComponent = () => { 38 | return ( 39 | 40 |
{"Hello Ad Blocked Page"}
41 |
42 | ); 43 | }; 44 | ``` 45 | -------------------------------------------------------------------------------- /adblock-detect-react/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adblock-detect-react", 3 | "version": "1.3.1", 4 | "description": "Provides utilities to check if ad block is enabled on a page via both a React hook and a wrapper component.", 5 | "main": "cjs/index.js", 6 | "module": "esm/index.js", 7 | "types": "esm/index.d.ts", 8 | "author": "https://github.com/aruniverse", 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/aruniverse/adblock-detect-react", 13 | "directory": "adblock-detect-react" 14 | }, 15 | "files": [ 16 | "cjs/**/*", 17 | "esm/**/*" 18 | ], 19 | "keywords": [ 20 | "react", 21 | "hooks", 22 | "adblock", 23 | "ad", 24 | "block", 25 | "detect" 26 | ], 27 | "scripts": { 28 | "build": "npm run -s build:cjs && npm run -s build:esm", 29 | "build:cjs": "tsc 1>&2 --outDir cjs", 30 | "build:esm": "tsc 1>&2 --module ES2020 --outDir esm", 31 | "clean": "rimraf cjs esm", 32 | "rebuild": "npm run -s clean && npm run -s build" 33 | }, 34 | "devDependencies": { 35 | "@types/react": "^16.14.55", 36 | "@types/react-dom": "^16.9.24", 37 | "react": "16.13.1", 38 | "react-dom": "16.13.1", 39 | "rimraf": "^3.0.2", 40 | "typescript": "~5.3.2" 41 | }, 42 | "peerDependencies": { 43 | "react": ">=16.8.0", 44 | "react-dom": ">=16.8.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /adblock-detect-react/src/components/AdBlockDetectedWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useDetectAdBlock } from "../hooks/useDetectAdBlock"; 3 | 4 | export const AdBlockDetectedWrapper = ({ 5 | children, 6 | }: React.PropsWithChildren<{}>) => { 7 | const adBlockDetected = useDetectAdBlock(); 8 | 9 | return <>{adBlockDetected && children}; 10 | }; 11 | -------------------------------------------------------------------------------- /adblock-detect-react/src/hooks/useDetectAdBlock.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | export const useDetectAdBlock = () => { 4 | const [adBlockDetected, setAdBlockDetected] = useState(false); 5 | 6 | useEffect(() => { 7 | // grab a domain from https://github1s.com/gorhill/uBlock/blob/master/docs/tests/hostname-pool.js 8 | const url = "https://www3.doubleclick.net"; 9 | fetch(url, { 10 | method: "HEAD", 11 | mode: "no-cors", 12 | cache: "no-store", 13 | }) 14 | .then(({ redirected }) => { 15 | if (redirected) setAdBlockDetected(true); 16 | }) 17 | .catch(() => { 18 | setAdBlockDetected(true); 19 | }); 20 | }, []); 21 | 22 | return adBlockDetected; 23 | }; 24 | -------------------------------------------------------------------------------- /adblock-detect-react/src/index.ts: -------------------------------------------------------------------------------- 1 | export { AdBlockDetectedWrapper } from "./components/AdBlockDetectedWrapper"; 2 | export { useDetectAdBlock } from "./hooks/useDetectAdBlock"; 3 | -------------------------------------------------------------------------------- /adblock-detect-react/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | "jsx": "react", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "Node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 59 | "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": ["./src/**/*.ts*"], 110 | "exclude": ["cjs", "esm", "node_modules"] 111 | } 112 | -------------------------------------------------------------------------------- /beachball.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import("beachball").BeachballConfig } */ 2 | module.exports = { 3 | bumpDeps: false, 4 | access: "public", 5 | tag: "latest", 6 | scope: ["adblock-detect-react"], 7 | ignorePatterns: [ 8 | ".*ignore", 9 | ".github/**", 10 | ".vscode/**", 11 | "**/test/**", 12 | "pnpm-lock.yaml", 13 | ], 14 | changehint: "Run 'pnpm change' to generate a change file", 15 | publish: true, 16 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adblock-monorepo", 3 | "version": "0.0.0", 4 | "private": true, 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/aruniverse/adblock-detect-react.git" 8 | }, 9 | "packageManager": "pnpm@8.13.1", 10 | "scripts": { 11 | "preinstall": "npx only-allow pnpm", 12 | "build": "pnpm -r build", 13 | "clean": "pnpm -r clean", 14 | "clean:all": "pnpm clean && rimraf node_modules", 15 | "change": "beachball change", 16 | "check": "beachball check", 17 | "release": "beachball publish", 18 | "sync": "beachball sync" 19 | }, 20 | "devDependencies": { 21 | "beachball": "^2.39.0", 22 | "rimraf": "3.0.2" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: false 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | beachball: 12 | specifier: ^2.39.0 13 | version: 2.39.0 14 | rimraf: 15 | specifier: 3.0.2 16 | version: 3.0.2 17 | 18 | adblock-detect-react: 19 | devDependencies: 20 | '@types/react': 21 | specifier: ^16.14.55 22 | version: 16.14.55 23 | '@types/react-dom': 24 | specifier: ^16.9.24 25 | version: 16.9.24 26 | react: 27 | specifier: 16.13.1 28 | version: 16.13.1 29 | react-dom: 30 | specifier: 16.13.1 31 | version: 16.13.1(react@16.13.1) 32 | rimraf: 33 | specifier: ^3.0.2 34 | version: 3.0.2 35 | typescript: 36 | specifier: ~5.3.2 37 | version: 5.3.3 38 | 39 | vite-test: 40 | dependencies: 41 | adblock-detect-react: 42 | specifier: workspace:* 43 | version: link:../adblock-detect-react 44 | detect-browser: 45 | specifier: ^5.3.0 46 | version: 5.3.0 47 | react: 48 | specifier: ^18.2.0 49 | version: 18.2.0 50 | react-dom: 51 | specifier: ^18.2.0 52 | version: 18.2.0(react@18.2.0) 53 | react-ga: 54 | specifier: 3.3.1 55 | version: 3.3.1(react@18.2.0) 56 | devDependencies: 57 | '@vitejs/plugin-react': 58 | specifier: ^2.2.0 59 | version: 2.2.0(vite@3.2.7) 60 | vite: 61 | specifier: ^3.2.7 62 | version: 3.2.7 63 | 64 | packages: 65 | 66 | /@ampproject/remapping@2.2.1: 67 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 68 | engines: {node: '>=6.0.0'} 69 | dependencies: 70 | '@jridgewell/gen-mapping': 0.3.3 71 | '@jridgewell/trace-mapping': 0.3.20 72 | dev: true 73 | 74 | /@babel/code-frame@7.23.5: 75 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 76 | engines: {node: '>=6.9.0'} 77 | dependencies: 78 | '@babel/highlight': 7.23.4 79 | chalk: 2.4.2 80 | dev: true 81 | 82 | /@babel/compat-data@7.23.5: 83 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 84 | engines: {node: '>=6.9.0'} 85 | dev: true 86 | 87 | /@babel/core@7.23.6: 88 | resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} 89 | engines: {node: '>=6.9.0'} 90 | dependencies: 91 | '@ampproject/remapping': 2.2.1 92 | '@babel/code-frame': 7.23.5 93 | '@babel/generator': 7.23.6 94 | '@babel/helper-compilation-targets': 7.23.6 95 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) 96 | '@babel/helpers': 7.23.6 97 | '@babel/parser': 7.23.6 98 | '@babel/template': 7.22.15 99 | '@babel/traverse': 7.23.6 100 | '@babel/types': 7.23.6 101 | convert-source-map: 2.0.0 102 | debug: 4.3.4 103 | gensync: 1.0.0-beta.2 104 | json5: 2.2.3 105 | semver: 6.3.1 106 | transitivePeerDependencies: 107 | - supports-color 108 | dev: true 109 | 110 | /@babel/generator@7.23.6: 111 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 112 | engines: {node: '>=6.9.0'} 113 | dependencies: 114 | '@babel/types': 7.23.6 115 | '@jridgewell/gen-mapping': 0.3.3 116 | '@jridgewell/trace-mapping': 0.3.20 117 | jsesc: 2.5.2 118 | dev: true 119 | 120 | /@babel/helper-annotate-as-pure@7.22.5: 121 | resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} 122 | engines: {node: '>=6.9.0'} 123 | dependencies: 124 | '@babel/types': 7.23.6 125 | dev: true 126 | 127 | /@babel/helper-compilation-targets@7.23.6: 128 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 129 | engines: {node: '>=6.9.0'} 130 | dependencies: 131 | '@babel/compat-data': 7.23.5 132 | '@babel/helper-validator-option': 7.23.5 133 | browserslist: 4.22.2 134 | lru-cache: 5.1.1 135 | semver: 6.3.1 136 | dev: true 137 | 138 | /@babel/helper-environment-visitor@7.22.20: 139 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 140 | engines: {node: '>=6.9.0'} 141 | dev: true 142 | 143 | /@babel/helper-function-name@7.23.0: 144 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@babel/template': 7.22.15 148 | '@babel/types': 7.23.6 149 | dev: true 150 | 151 | /@babel/helper-hoist-variables@7.22.5: 152 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 153 | engines: {node: '>=6.9.0'} 154 | dependencies: 155 | '@babel/types': 7.23.6 156 | dev: true 157 | 158 | /@babel/helper-module-imports@7.22.15: 159 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 160 | engines: {node: '>=6.9.0'} 161 | dependencies: 162 | '@babel/types': 7.23.6 163 | dev: true 164 | 165 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): 166 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 167 | engines: {node: '>=6.9.0'} 168 | peerDependencies: 169 | '@babel/core': ^7.0.0 170 | dependencies: 171 | '@babel/core': 7.23.6 172 | '@babel/helper-environment-visitor': 7.22.20 173 | '@babel/helper-module-imports': 7.22.15 174 | '@babel/helper-simple-access': 7.22.5 175 | '@babel/helper-split-export-declaration': 7.22.6 176 | '@babel/helper-validator-identifier': 7.22.20 177 | dev: true 178 | 179 | /@babel/helper-plugin-utils@7.22.5: 180 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 181 | engines: {node: '>=6.9.0'} 182 | dev: true 183 | 184 | /@babel/helper-simple-access@7.22.5: 185 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 186 | engines: {node: '>=6.9.0'} 187 | dependencies: 188 | '@babel/types': 7.23.6 189 | dev: true 190 | 191 | /@babel/helper-split-export-declaration@7.22.6: 192 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 193 | engines: {node: '>=6.9.0'} 194 | dependencies: 195 | '@babel/types': 7.23.6 196 | dev: true 197 | 198 | /@babel/helper-string-parser@7.23.4: 199 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 200 | engines: {node: '>=6.9.0'} 201 | dev: true 202 | 203 | /@babel/helper-validator-identifier@7.22.20: 204 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 205 | engines: {node: '>=6.9.0'} 206 | dev: true 207 | 208 | /@babel/helper-validator-option@7.23.5: 209 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 210 | engines: {node: '>=6.9.0'} 211 | dev: true 212 | 213 | /@babel/helpers@7.23.6: 214 | resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} 215 | engines: {node: '>=6.9.0'} 216 | dependencies: 217 | '@babel/template': 7.22.15 218 | '@babel/traverse': 7.23.6 219 | '@babel/types': 7.23.6 220 | transitivePeerDependencies: 221 | - supports-color 222 | dev: true 223 | 224 | /@babel/highlight@7.23.4: 225 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 226 | engines: {node: '>=6.9.0'} 227 | dependencies: 228 | '@babel/helper-validator-identifier': 7.22.20 229 | chalk: 2.4.2 230 | js-tokens: 4.0.0 231 | dev: true 232 | 233 | /@babel/parser@7.23.6: 234 | resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} 235 | engines: {node: '>=6.0.0'} 236 | hasBin: true 237 | dependencies: 238 | '@babel/types': 7.23.6 239 | dev: true 240 | 241 | /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): 242 | resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} 243 | engines: {node: '>=6.9.0'} 244 | peerDependencies: 245 | '@babel/core': ^7.0.0-0 246 | dependencies: 247 | '@babel/core': 7.23.6 248 | '@babel/helper-plugin-utils': 7.22.5 249 | dev: true 250 | 251 | /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.6): 252 | resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} 253 | engines: {node: '>=6.9.0'} 254 | peerDependencies: 255 | '@babel/core': ^7.0.0-0 256 | dependencies: 257 | '@babel/core': 7.23.6 258 | '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) 259 | dev: true 260 | 261 | /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.6): 262 | resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} 263 | engines: {node: '>=6.9.0'} 264 | peerDependencies: 265 | '@babel/core': ^7.0.0-0 266 | dependencies: 267 | '@babel/core': 7.23.6 268 | '@babel/helper-plugin-utils': 7.22.5 269 | dev: true 270 | 271 | /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.6): 272 | resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} 273 | engines: {node: '>=6.9.0'} 274 | peerDependencies: 275 | '@babel/core': ^7.0.0-0 276 | dependencies: 277 | '@babel/core': 7.23.6 278 | '@babel/helper-plugin-utils': 7.22.5 279 | dev: true 280 | 281 | /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): 282 | resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} 283 | engines: {node: '>=6.9.0'} 284 | peerDependencies: 285 | '@babel/core': ^7.0.0-0 286 | dependencies: 287 | '@babel/core': 7.23.6 288 | '@babel/helper-annotate-as-pure': 7.22.5 289 | '@babel/helper-module-imports': 7.22.15 290 | '@babel/helper-plugin-utils': 7.22.5 291 | '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) 292 | '@babel/types': 7.23.6 293 | dev: true 294 | 295 | /@babel/template@7.22.15: 296 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 297 | engines: {node: '>=6.9.0'} 298 | dependencies: 299 | '@babel/code-frame': 7.23.5 300 | '@babel/parser': 7.23.6 301 | '@babel/types': 7.23.6 302 | dev: true 303 | 304 | /@babel/traverse@7.23.6: 305 | resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} 306 | engines: {node: '>=6.9.0'} 307 | dependencies: 308 | '@babel/code-frame': 7.23.5 309 | '@babel/generator': 7.23.6 310 | '@babel/helper-environment-visitor': 7.22.20 311 | '@babel/helper-function-name': 7.23.0 312 | '@babel/helper-hoist-variables': 7.22.5 313 | '@babel/helper-split-export-declaration': 7.22.6 314 | '@babel/parser': 7.23.6 315 | '@babel/types': 7.23.6 316 | debug: 4.3.4 317 | globals: 11.12.0 318 | transitivePeerDependencies: 319 | - supports-color 320 | dev: true 321 | 322 | /@babel/types@7.23.6: 323 | resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} 324 | engines: {node: '>=6.9.0'} 325 | dependencies: 326 | '@babel/helper-string-parser': 7.23.4 327 | '@babel/helper-validator-identifier': 7.22.20 328 | to-fast-properties: 2.0.0 329 | dev: true 330 | 331 | /@esbuild/android-arm@0.15.18: 332 | resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} 333 | engines: {node: '>=12'} 334 | cpu: [arm] 335 | os: [android] 336 | requiresBuild: true 337 | dev: true 338 | optional: true 339 | 340 | /@esbuild/linux-loong64@0.15.18: 341 | resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} 342 | engines: {node: '>=12'} 343 | cpu: [loong64] 344 | os: [linux] 345 | requiresBuild: true 346 | dev: true 347 | optional: true 348 | 349 | /@jridgewell/gen-mapping@0.3.3: 350 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 351 | engines: {node: '>=6.0.0'} 352 | dependencies: 353 | '@jridgewell/set-array': 1.1.2 354 | '@jridgewell/sourcemap-codec': 1.4.15 355 | '@jridgewell/trace-mapping': 0.3.20 356 | dev: true 357 | 358 | /@jridgewell/resolve-uri@3.1.1: 359 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 360 | engines: {node: '>=6.0.0'} 361 | dev: true 362 | 363 | /@jridgewell/set-array@1.1.2: 364 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 365 | engines: {node: '>=6.0.0'} 366 | dev: true 367 | 368 | /@jridgewell/sourcemap-codec@1.4.15: 369 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 370 | dev: true 371 | 372 | /@jridgewell/trace-mapping@0.3.20: 373 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 374 | dependencies: 375 | '@jridgewell/resolve-uri': 3.1.1 376 | '@jridgewell/sourcemap-codec': 1.4.15 377 | dev: true 378 | 379 | /@nodelib/fs.scandir@2.1.5: 380 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 381 | engines: {node: '>= 8'} 382 | dependencies: 383 | '@nodelib/fs.stat': 2.0.5 384 | run-parallel: 1.2.0 385 | dev: true 386 | 387 | /@nodelib/fs.stat@2.0.5: 388 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 389 | engines: {node: '>= 8'} 390 | dev: true 391 | 392 | /@nodelib/fs.walk@1.2.8: 393 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 394 | engines: {node: '>= 8'} 395 | dependencies: 396 | '@nodelib/fs.scandir': 2.1.5 397 | fastq: 1.16.0 398 | dev: true 399 | 400 | /@types/prop-types@15.7.11: 401 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 402 | dev: true 403 | 404 | /@types/react-dom@16.9.24: 405 | resolution: {integrity: sha512-Gcmq2JTDheyWn/1eteqyzzWKSqDjYU6KYsIvH7thb7CR5OYInAWOX+7WnKf6PaU/cbdOc4szJItcDEJO7UGmfA==} 406 | dependencies: 407 | '@types/react': 16.14.55 408 | dev: true 409 | 410 | /@types/react@16.14.55: 411 | resolution: {integrity: sha512-HO/QHDg23Dx4ukfufr5YSTWyhrbyThXE2OzXfNkcw7vJcusBY5l1i1TZpJuyAn9EsC6o91/6OsIvXY54xTV+XQ==} 412 | dependencies: 413 | '@types/prop-types': 15.7.11 414 | '@types/scheduler': 0.16.8 415 | csstype: 3.1.3 416 | dev: true 417 | 418 | /@types/scheduler@0.16.8: 419 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 420 | dev: true 421 | 422 | /@vitejs/plugin-react@2.2.0(vite@3.2.7): 423 | resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==} 424 | engines: {node: ^14.18.0 || >=16.0.0} 425 | peerDependencies: 426 | vite: ^3.0.0 427 | dependencies: 428 | '@babel/core': 7.23.6 429 | '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) 430 | '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.6) 431 | '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.6) 432 | '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6) 433 | magic-string: 0.26.7 434 | react-refresh: 0.14.0 435 | vite: 3.2.7 436 | transitivePeerDependencies: 437 | - supports-color 438 | dev: true 439 | 440 | /@yarnpkg/lockfile@1.1.0: 441 | resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} 442 | dev: true 443 | 444 | /ansi-styles@3.2.1: 445 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 446 | engines: {node: '>=4'} 447 | dependencies: 448 | color-convert: 1.9.3 449 | dev: true 450 | 451 | /argparse@2.0.1: 452 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 453 | dev: true 454 | 455 | /array-union@2.1.0: 456 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 457 | engines: {node: '>=8'} 458 | dev: true 459 | 460 | /balanced-match@1.0.2: 461 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 462 | dev: true 463 | 464 | /beachball@2.39.0: 465 | resolution: {integrity: sha512-YyhL16twP3sa0Pd+auXDzG2xqIPBLF+9GIsMEXMRpSjk9eYpzqSY/BOKbwzy+VqsUlQxWfVIFxijbUEQZYIwUQ==} 466 | engines: {node: '>=14.0.0'} 467 | hasBin: true 468 | dependencies: 469 | cosmiconfig: 8.3.6 470 | execa: 5.1.1 471 | fs-extra: 11.2.0 472 | lodash: 4.17.21 473 | minimatch: 3.1.2 474 | p-limit: 3.1.0 475 | prompts: 2.4.2 476 | semver: 7.5.4 477 | toposort: 2.0.2 478 | uuid: 9.0.1 479 | workspace-tools: 0.36.4 480 | yargs-parser: 21.1.1 481 | transitivePeerDependencies: 482 | - typescript 483 | dev: true 484 | 485 | /brace-expansion@1.1.11: 486 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 487 | dependencies: 488 | balanced-match: 1.0.2 489 | concat-map: 0.0.1 490 | dev: true 491 | 492 | /braces@3.0.2: 493 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 494 | engines: {node: '>=8'} 495 | dependencies: 496 | fill-range: 7.0.1 497 | dev: true 498 | 499 | /browserslist@4.22.2: 500 | resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} 501 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 502 | hasBin: true 503 | dependencies: 504 | caniuse-lite: 1.0.30001572 505 | electron-to-chromium: 1.4.616 506 | node-releases: 2.0.14 507 | update-browserslist-db: 1.0.13(browserslist@4.22.2) 508 | dev: true 509 | 510 | /callsites@3.1.0: 511 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 512 | engines: {node: '>=6'} 513 | dev: true 514 | 515 | /caniuse-lite@1.0.30001572: 516 | resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} 517 | dev: true 518 | 519 | /chalk@2.4.2: 520 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 521 | engines: {node: '>=4'} 522 | dependencies: 523 | ansi-styles: 3.2.1 524 | escape-string-regexp: 1.0.5 525 | supports-color: 5.5.0 526 | dev: true 527 | 528 | /color-convert@1.9.3: 529 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 530 | dependencies: 531 | color-name: 1.1.3 532 | dev: true 533 | 534 | /color-name@1.1.3: 535 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 536 | dev: true 537 | 538 | /concat-map@0.0.1: 539 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 540 | dev: true 541 | 542 | /convert-source-map@2.0.0: 543 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 544 | dev: true 545 | 546 | /cosmiconfig@8.3.6: 547 | resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} 548 | engines: {node: '>=14'} 549 | peerDependencies: 550 | typescript: '>=4.9.5' 551 | peerDependenciesMeta: 552 | typescript: 553 | optional: true 554 | dependencies: 555 | import-fresh: 3.3.0 556 | js-yaml: 4.1.0 557 | parse-json: 5.2.0 558 | path-type: 4.0.0 559 | dev: true 560 | 561 | /cross-spawn@7.0.3: 562 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 563 | engines: {node: '>= 8'} 564 | dependencies: 565 | path-key: 3.1.1 566 | shebang-command: 2.0.0 567 | which: 2.0.2 568 | dev: true 569 | 570 | /csstype@3.1.3: 571 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 572 | dev: true 573 | 574 | /debug@4.3.4: 575 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 576 | engines: {node: '>=6.0'} 577 | peerDependencies: 578 | supports-color: '*' 579 | peerDependenciesMeta: 580 | supports-color: 581 | optional: true 582 | dependencies: 583 | ms: 2.1.2 584 | dev: true 585 | 586 | /detect-browser@5.3.0: 587 | resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} 588 | dev: false 589 | 590 | /dir-glob@3.0.1: 591 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 592 | engines: {node: '>=8'} 593 | dependencies: 594 | path-type: 4.0.0 595 | dev: true 596 | 597 | /electron-to-chromium@1.4.616: 598 | resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} 599 | dev: true 600 | 601 | /error-ex@1.3.2: 602 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 603 | dependencies: 604 | is-arrayish: 0.2.1 605 | dev: true 606 | 607 | /esbuild-android-64@0.15.18: 608 | resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} 609 | engines: {node: '>=12'} 610 | cpu: [x64] 611 | os: [android] 612 | requiresBuild: true 613 | dev: true 614 | optional: true 615 | 616 | /esbuild-android-arm64@0.15.18: 617 | resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} 618 | engines: {node: '>=12'} 619 | cpu: [arm64] 620 | os: [android] 621 | requiresBuild: true 622 | dev: true 623 | optional: true 624 | 625 | /esbuild-darwin-64@0.15.18: 626 | resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} 627 | engines: {node: '>=12'} 628 | cpu: [x64] 629 | os: [darwin] 630 | requiresBuild: true 631 | dev: true 632 | optional: true 633 | 634 | /esbuild-darwin-arm64@0.15.18: 635 | resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} 636 | engines: {node: '>=12'} 637 | cpu: [arm64] 638 | os: [darwin] 639 | requiresBuild: true 640 | dev: true 641 | optional: true 642 | 643 | /esbuild-freebsd-64@0.15.18: 644 | resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} 645 | engines: {node: '>=12'} 646 | cpu: [x64] 647 | os: [freebsd] 648 | requiresBuild: true 649 | dev: true 650 | optional: true 651 | 652 | /esbuild-freebsd-arm64@0.15.18: 653 | resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} 654 | engines: {node: '>=12'} 655 | cpu: [arm64] 656 | os: [freebsd] 657 | requiresBuild: true 658 | dev: true 659 | optional: true 660 | 661 | /esbuild-linux-32@0.15.18: 662 | resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} 663 | engines: {node: '>=12'} 664 | cpu: [ia32] 665 | os: [linux] 666 | requiresBuild: true 667 | dev: true 668 | optional: true 669 | 670 | /esbuild-linux-64@0.15.18: 671 | resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} 672 | engines: {node: '>=12'} 673 | cpu: [x64] 674 | os: [linux] 675 | requiresBuild: true 676 | dev: true 677 | optional: true 678 | 679 | /esbuild-linux-arm64@0.15.18: 680 | resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} 681 | engines: {node: '>=12'} 682 | cpu: [arm64] 683 | os: [linux] 684 | requiresBuild: true 685 | dev: true 686 | optional: true 687 | 688 | /esbuild-linux-arm@0.15.18: 689 | resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} 690 | engines: {node: '>=12'} 691 | cpu: [arm] 692 | os: [linux] 693 | requiresBuild: true 694 | dev: true 695 | optional: true 696 | 697 | /esbuild-linux-mips64le@0.15.18: 698 | resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} 699 | engines: {node: '>=12'} 700 | cpu: [mips64el] 701 | os: [linux] 702 | requiresBuild: true 703 | dev: true 704 | optional: true 705 | 706 | /esbuild-linux-ppc64le@0.15.18: 707 | resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} 708 | engines: {node: '>=12'} 709 | cpu: [ppc64] 710 | os: [linux] 711 | requiresBuild: true 712 | dev: true 713 | optional: true 714 | 715 | /esbuild-linux-riscv64@0.15.18: 716 | resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} 717 | engines: {node: '>=12'} 718 | cpu: [riscv64] 719 | os: [linux] 720 | requiresBuild: true 721 | dev: true 722 | optional: true 723 | 724 | /esbuild-linux-s390x@0.15.18: 725 | resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} 726 | engines: {node: '>=12'} 727 | cpu: [s390x] 728 | os: [linux] 729 | requiresBuild: true 730 | dev: true 731 | optional: true 732 | 733 | /esbuild-netbsd-64@0.15.18: 734 | resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} 735 | engines: {node: '>=12'} 736 | cpu: [x64] 737 | os: [netbsd] 738 | requiresBuild: true 739 | dev: true 740 | optional: true 741 | 742 | /esbuild-openbsd-64@0.15.18: 743 | resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} 744 | engines: {node: '>=12'} 745 | cpu: [x64] 746 | os: [openbsd] 747 | requiresBuild: true 748 | dev: true 749 | optional: true 750 | 751 | /esbuild-sunos-64@0.15.18: 752 | resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} 753 | engines: {node: '>=12'} 754 | cpu: [x64] 755 | os: [sunos] 756 | requiresBuild: true 757 | dev: true 758 | optional: true 759 | 760 | /esbuild-windows-32@0.15.18: 761 | resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} 762 | engines: {node: '>=12'} 763 | cpu: [ia32] 764 | os: [win32] 765 | requiresBuild: true 766 | dev: true 767 | optional: true 768 | 769 | /esbuild-windows-64@0.15.18: 770 | resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} 771 | engines: {node: '>=12'} 772 | cpu: [x64] 773 | os: [win32] 774 | requiresBuild: true 775 | dev: true 776 | optional: true 777 | 778 | /esbuild-windows-arm64@0.15.18: 779 | resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} 780 | engines: {node: '>=12'} 781 | cpu: [arm64] 782 | os: [win32] 783 | requiresBuild: true 784 | dev: true 785 | optional: true 786 | 787 | /esbuild@0.15.18: 788 | resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} 789 | engines: {node: '>=12'} 790 | hasBin: true 791 | requiresBuild: true 792 | optionalDependencies: 793 | '@esbuild/android-arm': 0.15.18 794 | '@esbuild/linux-loong64': 0.15.18 795 | esbuild-android-64: 0.15.18 796 | esbuild-android-arm64: 0.15.18 797 | esbuild-darwin-64: 0.15.18 798 | esbuild-darwin-arm64: 0.15.18 799 | esbuild-freebsd-64: 0.15.18 800 | esbuild-freebsd-arm64: 0.15.18 801 | esbuild-linux-32: 0.15.18 802 | esbuild-linux-64: 0.15.18 803 | esbuild-linux-arm: 0.15.18 804 | esbuild-linux-arm64: 0.15.18 805 | esbuild-linux-mips64le: 0.15.18 806 | esbuild-linux-ppc64le: 0.15.18 807 | esbuild-linux-riscv64: 0.15.18 808 | esbuild-linux-s390x: 0.15.18 809 | esbuild-netbsd-64: 0.15.18 810 | esbuild-openbsd-64: 0.15.18 811 | esbuild-sunos-64: 0.15.18 812 | esbuild-windows-32: 0.15.18 813 | esbuild-windows-64: 0.15.18 814 | esbuild-windows-arm64: 0.15.18 815 | dev: true 816 | 817 | /escalade@3.1.1: 818 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 819 | engines: {node: '>=6'} 820 | dev: true 821 | 822 | /escape-string-regexp@1.0.5: 823 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 824 | engines: {node: '>=0.8.0'} 825 | dev: true 826 | 827 | /execa@5.1.1: 828 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 829 | engines: {node: '>=10'} 830 | dependencies: 831 | cross-spawn: 7.0.3 832 | get-stream: 6.0.1 833 | human-signals: 2.1.0 834 | is-stream: 2.0.1 835 | merge-stream: 2.0.0 836 | npm-run-path: 4.0.1 837 | onetime: 5.1.2 838 | signal-exit: 3.0.7 839 | strip-final-newline: 2.0.0 840 | dev: true 841 | 842 | /fast-glob@3.3.2: 843 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 844 | engines: {node: '>=8.6.0'} 845 | dependencies: 846 | '@nodelib/fs.stat': 2.0.5 847 | '@nodelib/fs.walk': 1.2.8 848 | glob-parent: 5.1.2 849 | merge2: 1.4.1 850 | micromatch: 4.0.5 851 | dev: true 852 | 853 | /fastq@1.16.0: 854 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 855 | dependencies: 856 | reusify: 1.0.4 857 | dev: true 858 | 859 | /fill-range@7.0.1: 860 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 861 | engines: {node: '>=8'} 862 | dependencies: 863 | to-regex-range: 5.0.1 864 | dev: true 865 | 866 | /fs-extra@11.2.0: 867 | resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} 868 | engines: {node: '>=14.14'} 869 | dependencies: 870 | graceful-fs: 4.2.11 871 | jsonfile: 6.1.0 872 | universalify: 2.0.1 873 | dev: true 874 | 875 | /fs.realpath@1.0.0: 876 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 877 | dev: true 878 | 879 | /fsevents@2.3.3: 880 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 881 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 882 | os: [darwin] 883 | requiresBuild: true 884 | dev: true 885 | optional: true 886 | 887 | /function-bind@1.1.2: 888 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 889 | dev: true 890 | 891 | /gensync@1.0.0-beta.2: 892 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 893 | engines: {node: '>=6.9.0'} 894 | dev: true 895 | 896 | /get-stream@6.0.1: 897 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 898 | engines: {node: '>=10'} 899 | dev: true 900 | 901 | /git-up@7.0.0: 902 | resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} 903 | dependencies: 904 | is-ssh: 1.4.0 905 | parse-url: 8.1.0 906 | dev: true 907 | 908 | /git-url-parse@13.1.1: 909 | resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==} 910 | dependencies: 911 | git-up: 7.0.0 912 | dev: true 913 | 914 | /glob-parent@5.1.2: 915 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 916 | engines: {node: '>= 6'} 917 | dependencies: 918 | is-glob: 4.0.3 919 | dev: true 920 | 921 | /glob@7.2.3: 922 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 923 | dependencies: 924 | fs.realpath: 1.0.0 925 | inflight: 1.0.6 926 | inherits: 2.0.4 927 | minimatch: 3.1.2 928 | once: 1.4.0 929 | path-is-absolute: 1.0.1 930 | dev: true 931 | 932 | /globals@11.12.0: 933 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 934 | engines: {node: '>=4'} 935 | dev: true 936 | 937 | /globby@11.1.0: 938 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 939 | engines: {node: '>=10'} 940 | dependencies: 941 | array-union: 2.1.0 942 | dir-glob: 3.0.1 943 | fast-glob: 3.3.2 944 | ignore: 5.3.0 945 | merge2: 1.4.1 946 | slash: 3.0.0 947 | dev: true 948 | 949 | /graceful-fs@4.2.11: 950 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 951 | dev: true 952 | 953 | /has-flag@3.0.0: 954 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 955 | engines: {node: '>=4'} 956 | dev: true 957 | 958 | /hasown@2.0.0: 959 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 960 | engines: {node: '>= 0.4'} 961 | dependencies: 962 | function-bind: 1.1.2 963 | dev: true 964 | 965 | /human-signals@2.1.0: 966 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 967 | engines: {node: '>=10.17.0'} 968 | dev: true 969 | 970 | /ignore@5.3.0: 971 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 972 | engines: {node: '>= 4'} 973 | dev: true 974 | 975 | /import-fresh@3.3.0: 976 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 977 | engines: {node: '>=6'} 978 | dependencies: 979 | parent-module: 1.0.1 980 | resolve-from: 4.0.0 981 | dev: true 982 | 983 | /inflight@1.0.6: 984 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 985 | dependencies: 986 | once: 1.4.0 987 | wrappy: 1.0.2 988 | dev: true 989 | 990 | /inherits@2.0.4: 991 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 992 | dev: true 993 | 994 | /is-arrayish@0.2.1: 995 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 996 | dev: true 997 | 998 | /is-core-module@2.13.1: 999 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1000 | dependencies: 1001 | hasown: 2.0.0 1002 | dev: true 1003 | 1004 | /is-extglob@2.1.1: 1005 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1006 | engines: {node: '>=0.10.0'} 1007 | dev: true 1008 | 1009 | /is-glob@4.0.3: 1010 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1011 | engines: {node: '>=0.10.0'} 1012 | dependencies: 1013 | is-extglob: 2.1.1 1014 | dev: true 1015 | 1016 | /is-number@7.0.0: 1017 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1018 | engines: {node: '>=0.12.0'} 1019 | dev: true 1020 | 1021 | /is-ssh@1.4.0: 1022 | resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} 1023 | dependencies: 1024 | protocols: 2.0.1 1025 | dev: true 1026 | 1027 | /is-stream@2.0.1: 1028 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1029 | engines: {node: '>=8'} 1030 | dev: true 1031 | 1032 | /isexe@2.0.0: 1033 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1034 | dev: true 1035 | 1036 | /jju@1.4.0: 1037 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1038 | dev: true 1039 | 1040 | /js-tokens@4.0.0: 1041 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1042 | 1043 | /js-yaml@4.1.0: 1044 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1045 | hasBin: true 1046 | dependencies: 1047 | argparse: 2.0.1 1048 | dev: true 1049 | 1050 | /jsesc@2.5.2: 1051 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1052 | engines: {node: '>=4'} 1053 | hasBin: true 1054 | dev: true 1055 | 1056 | /json-parse-even-better-errors@2.3.1: 1057 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1058 | dev: true 1059 | 1060 | /json5@2.2.3: 1061 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1062 | engines: {node: '>=6'} 1063 | hasBin: true 1064 | dev: true 1065 | 1066 | /jsonfile@6.1.0: 1067 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1068 | dependencies: 1069 | universalify: 2.0.1 1070 | optionalDependencies: 1071 | graceful-fs: 4.2.11 1072 | dev: true 1073 | 1074 | /kleur@3.0.3: 1075 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1076 | engines: {node: '>=6'} 1077 | dev: true 1078 | 1079 | /lines-and-columns@1.2.4: 1080 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1081 | dev: true 1082 | 1083 | /lodash@4.17.21: 1084 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1085 | dev: true 1086 | 1087 | /loose-envify@1.4.0: 1088 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1089 | hasBin: true 1090 | dependencies: 1091 | js-tokens: 4.0.0 1092 | 1093 | /lru-cache@5.1.1: 1094 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1095 | dependencies: 1096 | yallist: 3.1.1 1097 | dev: true 1098 | 1099 | /lru-cache@6.0.0: 1100 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1101 | engines: {node: '>=10'} 1102 | dependencies: 1103 | yallist: 4.0.0 1104 | dev: true 1105 | 1106 | /magic-string@0.26.7: 1107 | resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} 1108 | engines: {node: '>=12'} 1109 | dependencies: 1110 | sourcemap-codec: 1.4.8 1111 | dev: true 1112 | 1113 | /merge-stream@2.0.0: 1114 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1115 | dev: true 1116 | 1117 | /merge2@1.4.1: 1118 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1119 | engines: {node: '>= 8'} 1120 | dev: true 1121 | 1122 | /micromatch@4.0.5: 1123 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1124 | engines: {node: '>=8.6'} 1125 | dependencies: 1126 | braces: 3.0.2 1127 | picomatch: 2.3.1 1128 | dev: true 1129 | 1130 | /mimic-fn@2.1.0: 1131 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1132 | engines: {node: '>=6'} 1133 | dev: true 1134 | 1135 | /minimatch@3.1.2: 1136 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1137 | dependencies: 1138 | brace-expansion: 1.1.11 1139 | dev: true 1140 | 1141 | /ms@2.1.2: 1142 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1143 | dev: true 1144 | 1145 | /nanoid@3.3.7: 1146 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1147 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1148 | hasBin: true 1149 | dev: true 1150 | 1151 | /node-releases@2.0.14: 1152 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1153 | dev: true 1154 | 1155 | /npm-run-path@4.0.1: 1156 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1157 | engines: {node: '>=8'} 1158 | dependencies: 1159 | path-key: 3.1.1 1160 | dev: true 1161 | 1162 | /object-assign@4.1.1: 1163 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1164 | engines: {node: '>=0.10.0'} 1165 | dev: true 1166 | 1167 | /once@1.4.0: 1168 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1169 | dependencies: 1170 | wrappy: 1.0.2 1171 | dev: true 1172 | 1173 | /onetime@5.1.2: 1174 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1175 | engines: {node: '>=6'} 1176 | dependencies: 1177 | mimic-fn: 2.1.0 1178 | dev: true 1179 | 1180 | /p-limit@3.1.0: 1181 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1182 | engines: {node: '>=10'} 1183 | dependencies: 1184 | yocto-queue: 0.1.0 1185 | dev: true 1186 | 1187 | /parent-module@1.0.1: 1188 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1189 | engines: {node: '>=6'} 1190 | dependencies: 1191 | callsites: 3.1.0 1192 | dev: true 1193 | 1194 | /parse-json@5.2.0: 1195 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1196 | engines: {node: '>=8'} 1197 | dependencies: 1198 | '@babel/code-frame': 7.23.5 1199 | error-ex: 1.3.2 1200 | json-parse-even-better-errors: 2.3.1 1201 | lines-and-columns: 1.2.4 1202 | dev: true 1203 | 1204 | /parse-path@7.0.0: 1205 | resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} 1206 | dependencies: 1207 | protocols: 2.0.1 1208 | dev: true 1209 | 1210 | /parse-url@8.1.0: 1211 | resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} 1212 | dependencies: 1213 | parse-path: 7.0.0 1214 | dev: true 1215 | 1216 | /path-is-absolute@1.0.1: 1217 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1218 | engines: {node: '>=0.10.0'} 1219 | dev: true 1220 | 1221 | /path-key@3.1.1: 1222 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1223 | engines: {node: '>=8'} 1224 | dev: true 1225 | 1226 | /path-parse@1.0.7: 1227 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1228 | dev: true 1229 | 1230 | /path-type@4.0.0: 1231 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1232 | engines: {node: '>=8'} 1233 | dev: true 1234 | 1235 | /picocolors@1.0.0: 1236 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1237 | dev: true 1238 | 1239 | /picomatch@2.3.1: 1240 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1241 | engines: {node: '>=8.6'} 1242 | dev: true 1243 | 1244 | /postcss@8.4.32: 1245 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 1246 | engines: {node: ^10 || ^12 || >=14} 1247 | dependencies: 1248 | nanoid: 3.3.7 1249 | picocolors: 1.0.0 1250 | source-map-js: 1.0.2 1251 | dev: true 1252 | 1253 | /prompts@2.4.2: 1254 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1255 | engines: {node: '>= 6'} 1256 | dependencies: 1257 | kleur: 3.0.3 1258 | sisteransi: 1.0.5 1259 | dev: true 1260 | 1261 | /prop-types@15.8.1: 1262 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1263 | dependencies: 1264 | loose-envify: 1.4.0 1265 | object-assign: 4.1.1 1266 | react-is: 16.13.1 1267 | dev: true 1268 | 1269 | /protocols@2.0.1: 1270 | resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} 1271 | dev: true 1272 | 1273 | /queue-microtask@1.2.3: 1274 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1275 | dev: true 1276 | 1277 | /react-dom@16.13.1(react@16.13.1): 1278 | resolution: {integrity: sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==} 1279 | peerDependencies: 1280 | react: ^16.13.1 1281 | dependencies: 1282 | loose-envify: 1.4.0 1283 | object-assign: 4.1.1 1284 | prop-types: 15.8.1 1285 | react: 16.13.1 1286 | scheduler: 0.19.1 1287 | dev: true 1288 | 1289 | /react-dom@18.2.0(react@18.2.0): 1290 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1291 | peerDependencies: 1292 | react: ^18.2.0 1293 | dependencies: 1294 | loose-envify: 1.4.0 1295 | react: 18.2.0 1296 | scheduler: 0.23.0 1297 | dev: false 1298 | 1299 | /react-ga@3.3.1(react@18.2.0): 1300 | resolution: {integrity: sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==} 1301 | peerDependencies: 1302 | prop-types: ^15.6.0 1303 | react: ^15.6.2 || ^16.0 || ^17 || ^18 1304 | dependencies: 1305 | react: 18.2.0 1306 | dev: false 1307 | 1308 | /react-is@16.13.1: 1309 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1310 | dev: true 1311 | 1312 | /react-refresh@0.14.0: 1313 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 1314 | engines: {node: '>=0.10.0'} 1315 | dev: true 1316 | 1317 | /react@16.13.1: 1318 | resolution: {integrity: sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==} 1319 | engines: {node: '>=0.10.0'} 1320 | dependencies: 1321 | loose-envify: 1.4.0 1322 | object-assign: 4.1.1 1323 | prop-types: 15.8.1 1324 | dev: true 1325 | 1326 | /react@18.2.0: 1327 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1328 | engines: {node: '>=0.10.0'} 1329 | dependencies: 1330 | loose-envify: 1.4.0 1331 | dev: false 1332 | 1333 | /resolve-from@4.0.0: 1334 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1335 | engines: {node: '>=4'} 1336 | dev: true 1337 | 1338 | /resolve@1.22.8: 1339 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1340 | hasBin: true 1341 | dependencies: 1342 | is-core-module: 2.13.1 1343 | path-parse: 1.0.7 1344 | supports-preserve-symlinks-flag: 1.0.0 1345 | dev: true 1346 | 1347 | /reusify@1.0.4: 1348 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1349 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1350 | dev: true 1351 | 1352 | /rimraf@3.0.2: 1353 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1354 | hasBin: true 1355 | dependencies: 1356 | glob: 7.2.3 1357 | dev: true 1358 | 1359 | /rollup@2.79.1: 1360 | resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 1361 | engines: {node: '>=10.0.0'} 1362 | hasBin: true 1363 | optionalDependencies: 1364 | fsevents: 2.3.3 1365 | dev: true 1366 | 1367 | /run-parallel@1.2.0: 1368 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1369 | dependencies: 1370 | queue-microtask: 1.2.3 1371 | dev: true 1372 | 1373 | /scheduler@0.19.1: 1374 | resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==} 1375 | dependencies: 1376 | loose-envify: 1.4.0 1377 | object-assign: 4.1.1 1378 | dev: true 1379 | 1380 | /scheduler@0.23.0: 1381 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1382 | dependencies: 1383 | loose-envify: 1.4.0 1384 | dev: false 1385 | 1386 | /semver@6.3.1: 1387 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1388 | hasBin: true 1389 | dev: true 1390 | 1391 | /semver@7.5.4: 1392 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1393 | engines: {node: '>=10'} 1394 | hasBin: true 1395 | dependencies: 1396 | lru-cache: 6.0.0 1397 | dev: true 1398 | 1399 | /shebang-command@2.0.0: 1400 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1401 | engines: {node: '>=8'} 1402 | dependencies: 1403 | shebang-regex: 3.0.0 1404 | dev: true 1405 | 1406 | /shebang-regex@3.0.0: 1407 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1408 | engines: {node: '>=8'} 1409 | dev: true 1410 | 1411 | /signal-exit@3.0.7: 1412 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1413 | dev: true 1414 | 1415 | /sisteransi@1.0.5: 1416 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1417 | dev: true 1418 | 1419 | /slash@3.0.0: 1420 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1421 | engines: {node: '>=8'} 1422 | dev: true 1423 | 1424 | /source-map-js@1.0.2: 1425 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1426 | engines: {node: '>=0.10.0'} 1427 | dev: true 1428 | 1429 | /sourcemap-codec@1.4.8: 1430 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1431 | deprecated: Please use @jridgewell/sourcemap-codec instead 1432 | dev: true 1433 | 1434 | /strip-final-newline@2.0.0: 1435 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1436 | engines: {node: '>=6'} 1437 | dev: true 1438 | 1439 | /supports-color@5.5.0: 1440 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1441 | engines: {node: '>=4'} 1442 | dependencies: 1443 | has-flag: 3.0.0 1444 | dev: true 1445 | 1446 | /supports-preserve-symlinks-flag@1.0.0: 1447 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1448 | engines: {node: '>= 0.4'} 1449 | dev: true 1450 | 1451 | /to-fast-properties@2.0.0: 1452 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1453 | engines: {node: '>=4'} 1454 | dev: true 1455 | 1456 | /to-regex-range@5.0.1: 1457 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1458 | engines: {node: '>=8.0'} 1459 | dependencies: 1460 | is-number: 7.0.0 1461 | dev: true 1462 | 1463 | /toposort@2.0.2: 1464 | resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} 1465 | dev: true 1466 | 1467 | /typescript@5.3.3: 1468 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1469 | engines: {node: '>=14.17'} 1470 | hasBin: true 1471 | dev: true 1472 | 1473 | /universalify@2.0.1: 1474 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1475 | engines: {node: '>= 10.0.0'} 1476 | dev: true 1477 | 1478 | /update-browserslist-db@1.0.13(browserslist@4.22.2): 1479 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 1480 | hasBin: true 1481 | peerDependencies: 1482 | browserslist: '>= 4.21.0' 1483 | dependencies: 1484 | browserslist: 4.22.2 1485 | escalade: 3.1.1 1486 | picocolors: 1.0.0 1487 | dev: true 1488 | 1489 | /uuid@9.0.1: 1490 | resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} 1491 | hasBin: true 1492 | dev: true 1493 | 1494 | /vite@3.2.7: 1495 | resolution: {integrity: sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==} 1496 | engines: {node: ^14.18.0 || >=16.0.0} 1497 | hasBin: true 1498 | peerDependencies: 1499 | '@types/node': '>= 14' 1500 | less: '*' 1501 | sass: '*' 1502 | stylus: '*' 1503 | sugarss: '*' 1504 | terser: ^5.4.0 1505 | peerDependenciesMeta: 1506 | '@types/node': 1507 | optional: true 1508 | less: 1509 | optional: true 1510 | sass: 1511 | optional: true 1512 | stylus: 1513 | optional: true 1514 | sugarss: 1515 | optional: true 1516 | terser: 1517 | optional: true 1518 | dependencies: 1519 | esbuild: 0.15.18 1520 | postcss: 8.4.32 1521 | resolve: 1.22.8 1522 | rollup: 2.79.1 1523 | optionalDependencies: 1524 | fsevents: 2.3.3 1525 | dev: true 1526 | 1527 | /which@2.0.2: 1528 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1529 | engines: {node: '>= 8'} 1530 | hasBin: true 1531 | dependencies: 1532 | isexe: 2.0.0 1533 | dev: true 1534 | 1535 | /workspace-tools@0.36.4: 1536 | resolution: {integrity: sha512-v0UFVvw9BjHtRu2Dau5PEJKkuG8u4jPlpXZQWjSz9XgbSutpPURqtO2P0hp3cVmQVATh8lkMFCewFgJuDnyC/w==} 1537 | dependencies: 1538 | '@yarnpkg/lockfile': 1.1.0 1539 | fast-glob: 3.3.2 1540 | git-url-parse: 13.1.1 1541 | globby: 11.1.0 1542 | jju: 1.4.0 1543 | js-yaml: 4.1.0 1544 | micromatch: 4.0.5 1545 | dev: true 1546 | 1547 | /wrappy@1.0.2: 1548 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1549 | dev: true 1550 | 1551 | /yallist@3.1.1: 1552 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1553 | dev: true 1554 | 1555 | /yallist@4.0.0: 1556 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1557 | dev: true 1558 | 1559 | /yargs-parser@21.1.1: 1560 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1561 | engines: {node: '>=12'} 1562 | dev: true 1563 | 1564 | /yocto-queue@0.1.0: 1565 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1566 | engines: {node: '>=10'} 1567 | dev: true 1568 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "adblock-detect-react/**" 3 | - "vite-test/**" -------------------------------------------------------------------------------- /vite-test/.env: -------------------------------------------------------------------------------- 1 | VITE_GOOGLE_TRACKING_ID="" -------------------------------------------------------------------------------- /vite-test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | adblock-detect-react test-app 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /vite-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-test", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "preview": "vite preview" 8 | }, 9 | "dependencies": { 10 | "adblock-detect-react": "workspace:*", 11 | "detect-browser": "^5.3.0", 12 | "react": "^18.2.0", 13 | "react-dom": "^18.2.0", 14 | "react-ga": "3.3.1" 15 | }, 16 | "devDependencies": { 17 | "@vitejs/plugin-react": "^2.2.0", 18 | "vite": "^3.2.7" 19 | } 20 | } -------------------------------------------------------------------------------- /vite-test/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | .App-header { 11 | background-color: #282c34; 12 | min-height: 100vh; 13 | display: flex; 14 | flex-direction: column; 15 | align-items: center; 16 | justify-content: center; 17 | font-size: calc(10px + 2vmin); 18 | color: white; 19 | } 20 | 21 | .App-link { 22 | color: #61dafb; 23 | } 24 | -------------------------------------------------------------------------------- /vite-test/src/App.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import ReactGA from "react-ga"; 3 | import logo from "./logo.svg"; 4 | import "./App.css"; 5 | 6 | import { useDetectAdBlock } from "adblock-detect-react"; 7 | import { detect } from "detect-browser"; 8 | 9 | function App() { 10 | useEffect(() => { 11 | const { VITE_GOOGLE_TRACKING_ID } = import.meta.env; 12 | ReactGA.initialize(VITE_GOOGLE_TRACKING_ID); 13 | ReactGA.pageview(window.location.origin); 14 | }, []); 15 | 16 | const adBlockDetected = useDetectAdBlock(); 17 | const browser = detect(); 18 | 19 | return ( 20 |
21 |
22 |
{JSON.stringify(browser, null, 2)}
23 | {adBlockDetected && ( 24 | <> 25 | logo 26 |
{"An ad-blocker has been detected!"}
27 | 33 | using adblock-detect-react 34 | 35 | 36 | )} 37 |
38 |
39 | ); 40 | } 41 | 42 | export default App; 43 | -------------------------------------------------------------------------------- /vite-test/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /vite-test/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /vite-test/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import App from "./App"; 4 | import "./index.css"; 5 | 6 | ReactDOM.createRoot(document.getElementById("root")).render( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /vite-test/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | /** @type {import("vite").UserConfigExport } */ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | --------------------------------------------------------------------------------