mirror of
https://github.com/CryptKeeperZK/crypt-keeper-extension.git
synced 2026-01-08 21:47:56 -05:00
chore: dev improvements
- [x] Add eslint and prettier ignore files - [x] Add types check for precommit hook - [x] Add types for local demo
This commit is contained in:
4
.eslintignore
Normal file
4
.eslintignore
Normal file
@@ -0,0 +1,4 @@
|
||||
dist/
|
||||
node_modules/
|
||||
coverage/
|
||||
zkeyFiles/
|
||||
@@ -11,14 +11,11 @@ module.exports = {
|
||||
node: true,
|
||||
jest: true,
|
||||
},
|
||||
ignorePatterns: [".eslintrc.js"],
|
||||
ignorePatterns: [".eslintrc.js", "webpack.*.js"],
|
||||
rules: {
|
||||
//"semi": [2, "always"],
|
||||
"no-console": "warn",
|
||||
"quotes": [
|
||||
"error",
|
||||
"double"
|
||||
],
|
||||
quotes: ["error", "double"],
|
||||
"@typescript-eslint/interface-name-prefix": "off",
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||
|
||||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -58,4 +58,4 @@ How should reviewers and QA manually test your changes? For instance:
|
||||
- [ ] Manual testing complete & passed
|
||||
- [ ] "Extension QA Board" label has been applied
|
||||
|
||||
> PR template source from [github.com/MetaMask](https://github.com/MetaMask)
|
||||
> PR template source from [github.com/MetaMask](https://github.com/MetaMask)
|
||||
|
||||
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
branches: master
|
||||
pull_request:
|
||||
|
||||
concurrency:
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
@@ -18,14 +18,13 @@ jobs:
|
||||
node-version: [16, 18]
|
||||
env: [build, dev]
|
||||
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
cache: "npm"
|
||||
|
||||
- run: npm install
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged
|
||||
npx lint-staged && npm run types
|
||||
|
||||
4
.prettierignore
Normal file
4
.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
||||
dist/
|
||||
node_modules/
|
||||
coverage/
|
||||
zkeyFiles/
|
||||
16
.prettierrc
16
.prettierrc
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"arrowParens": "avoid",
|
||||
"bracketSpacing": true,
|
||||
"endOfLine":"auto",
|
||||
"printWidth": 120,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all"
|
||||
}
|
||||
"arrowParens": "avoid",
|
||||
"bracketSpacing": true,
|
||||
"endOfLine": "auto",
|
||||
"printWidth": 120,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all"
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ Currently it supports operations for Semaphore and RLN gadgets.
|
||||
This plugin is still in development phase.
|
||||
|
||||
The following features are supported currently:
|
||||
|
||||
- Identity secret and Identity commitment generation
|
||||
- Semaphore ZK-Proof generation
|
||||
- RLN ZK-Proof generation
|
||||
@@ -13,6 +14,7 @@ The following features are supported currently:
|
||||
The plugin uses the [zk-kit library](https://github.com/appliedzkp/zk-kit).
|
||||
|
||||
Proof generation is enabled in two ways:
|
||||
|
||||
- by providing merkle witness directly
|
||||
- by providing a secure service address from which the merkle witness should be obtained
|
||||
|
||||
@@ -29,4 +31,4 @@ Proof generation is enabled in two ways:
|
||||
3. `cd demo && npm run start`
|
||||
|
||||
To run the demo and generate proofs, you additionally need the circuit files for Semaphore and RLN. For compatible Semaphore and RLN zk files you can use the following [link](https://drive.google.com/file/d/1Yi14jwly70VwMSuqJrPCc3j15MWeE7mc/view?usp=sharing).
|
||||
Please extract the files into a directory named `zkeyFiles` at the root of this repository.
|
||||
Please extract the files into a directory named `zkeyFiles` at the root of this repository.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Crypt-keeper Extension demo</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="./index.tsx"></script>
|
||||
</body>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Crypt-keeper Extension demo</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="./index.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* eslint-disable no-console */
|
||||
import React, { useState, useEffect, useCallback } from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
import { RLN, genExternalNullifier } from "rlnjs";
|
||||
@@ -8,6 +9,8 @@ import { ToastContainer, toast } from "react-toastify";
|
||||
import "react-toastify/dist/ReactToastify.css";
|
||||
import log from "loglevel";
|
||||
|
||||
import type { Client } from "@src/contentscripts/injected";
|
||||
|
||||
const SERVER_URL = "http://localhost:8090";
|
||||
|
||||
const semaphorePath = {
|
||||
@@ -29,11 +32,19 @@ enum MerkleProofType {
|
||||
ARTIFACTS,
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
zkpr: {
|
||||
connect: () => Promise<Client | null>;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const genMockIdentityCommitments = (): string[] => {
|
||||
let identityCommitments: string[] = [];
|
||||
const identityCommitments: string[] = [];
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const mockIdentity = new Identity();
|
||||
let idCommitment = bigintToHex(mockIdentity.getCommitment());
|
||||
const idCommitment = bigintToHex(mockIdentity.getCommitment());
|
||||
|
||||
identityCommitments.push(idCommitment);
|
||||
}
|
||||
@@ -57,7 +68,7 @@ function NoActiveIDCommitment() {
|
||||
}
|
||||
|
||||
function App() {
|
||||
const [client, setClient] = useState();
|
||||
const [client, setClient] = useState<Client | null>(null);
|
||||
const [isLocked, setIsLocked] = useState(true);
|
||||
const [identityCommitment, setIdentityCommitment] = useState("");
|
||||
const mockIdentityCommitments: string[] = genMockIdentityCommitments();
|
||||
@@ -96,7 +107,7 @@ function App() {
|
||||
);
|
||||
|
||||
console.log("Semaphore proof generated successfully!", proof);
|
||||
toast(`Semaphore proof generated successfully!`, { type: "success" });
|
||||
toast("Semaphore proof generated successfully!", { type: "success" });
|
||||
} catch (e) {
|
||||
toast("Error while generating Semaphore proof!", { type: "error" });
|
||||
console.error(e);
|
||||
@@ -125,13 +136,11 @@ function App() {
|
||||
};
|
||||
}
|
||||
|
||||
let circuitPath = rlnPath.circuitFilePath;
|
||||
let zkeyFilePath = rlnPath.zkeyFilePath;
|
||||
let verificationKey = rlnPath.verificationKey;
|
||||
const circuitPath = rlnPath.circuitFilePath;
|
||||
const zkeyFilePath = rlnPath.zkeyFilePath;
|
||||
|
||||
let toastId;
|
||||
try {
|
||||
toastId = toast("Generating RLN proof...", {
|
||||
const toastId = toast("Generating RLN proof...", {
|
||||
type: "info",
|
||||
hideProgressBar: true,
|
||||
closeOnClick: true,
|
||||
@@ -149,11 +158,11 @@ function App() {
|
||||
|
||||
console.log("RLN proof generated successfully!", proof);
|
||||
toast("RLN proof generated successfully!", { type: "success" });
|
||||
toast.dismiss(toastId);
|
||||
} catch (e) {
|
||||
toast("Error while generating RLN proof!", { type: "error" });
|
||||
console.error(e);
|
||||
}
|
||||
toast.dismiss(toastId);
|
||||
};
|
||||
|
||||
const getIdentityCommitment = useCallback(async () => {
|
||||
@@ -168,7 +177,7 @@ function App() {
|
||||
}, [client, setIdentityCommitment]);
|
||||
|
||||
const initClient = useCallback(async () => {
|
||||
const { zkpr } = window as any;
|
||||
const { zkpr } = window;
|
||||
|
||||
if (!zkpr) {
|
||||
log.warn("zkpr is not defined");
|
||||
@@ -181,8 +190,8 @@ function App() {
|
||||
}, [setClient, setIsLocked]);
|
||||
|
||||
const onIdentityChanged = useCallback(
|
||||
(idCommitment: string) => {
|
||||
setIdentityCommitment(idCommitment);
|
||||
(idCommitment: unknown) => {
|
||||
setIdentityCommitment(idCommitment as string);
|
||||
},
|
||||
[setIdentityCommitment],
|
||||
);
|
||||
|
||||
38300
demo/package-lock.json
generated
38300
demo/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"name": "crypt-keeper-demo",
|
||||
"version": "0.1.0",
|
||||
"scripts": {
|
||||
"start": "parcel serve --open --no-cache index.html"
|
||||
},
|
||||
"dependencies": {
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-toastify": "^8.1.0",
|
||||
"rlnjs": "github:Rate-Limiting-Nullifier/rlnjs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^17.0.18",
|
||||
"@types/react-dom": "^17.0.9",
|
||||
"parcel": "^2.0.0-rc.0"
|
||||
}
|
||||
"name": "crypt-keeper-demo",
|
||||
"version": "0.1.0",
|
||||
"scripts": {
|
||||
"start": "parcel serve --open --no-cache index.html"
|
||||
},
|
||||
"dependencies": {
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-toastify": "^8.1.0",
|
||||
"rlnjs": "github:Rate-Limiting-Nullifier/rlnjs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^17.0.18",
|
||||
"@types/react-dom": "^17.0.9",
|
||||
"parcel": "^2.0.0-rc.0"
|
||||
}
|
||||
}
|
||||
|
||||
2
externals/worker_threads.js
vendored
2
externals/worker_threads.js
vendored
@@ -1,2 +0,0 @@
|
||||
// eslint-disable-next-line no-undef
|
||||
module.exports = window.worker_threads
|
||||
@@ -16,6 +16,7 @@
|
||||
"lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
|
||||
"prettier": "prettier -c .",
|
||||
"prettier:fix": "prettier -w .",
|
||||
"types": "tsc -p tsconfig.json",
|
||||
"commit": "cz",
|
||||
"precommit": "lint-staged",
|
||||
"prepare": "is-ci || husky install"
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
### Last updated January 17, 2023
|
||||
|
||||
|
||||
|
||||
This privacy notice for CryptKeeper ("Company," "we," "us," or "our"), describes how and why we might collect, store, use, and/or share ("process") your information when you use our services ("Services"), such as when you:
|
||||
|
||||
- Download and use our mobile application (CryptKeeper), or any other application of ours that links to this privacy notice.
|
||||
@@ -12,7 +10,6 @@ This privacy notice for CryptKeeper ("Company," "we," "us," or "our"), describes
|
||||
|
||||
Questions or concerns? Reading this privacy notice will help you understand your privacy rights and choices. If you do not agree with our policies and practices, please do not use our Services. If you still have any questions or concerns, please contact us at `isk.extensions@gmail.com`.
|
||||
|
||||
|
||||
# SUMMARY OF KEY POINTS
|
||||
|
||||
This summary provides key points from our privacy notice, but you can find out more details about any of these topics by clicking the link following each key point or by using our table of contents below to find the section you are looking for. You can also click here to go directly to our table of contents.
|
||||
@@ -35,7 +32,6 @@ How do you exercise your rights? The easiest way to exercise your rights is by f
|
||||
|
||||
Want to learn more about what CryptKeeper does with any information we collect? Click here to review the notice in full.
|
||||
|
||||
|
||||
# TABLE OF CONTENTS
|
||||
|
||||
1. WHAT INFORMATION DO WE COLLECT?
|
||||
@@ -54,7 +50,6 @@ Want to learn more about what CryptKeeper does with any information we collect?
|
||||
14. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?
|
||||
15. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?
|
||||
|
||||
|
||||
# 1. WHAT INFORMATION DO WE COLLECT?
|
||||
|
||||
## Personal information you disclose to us
|
||||
@@ -88,7 +83,6 @@ We process your personal information for a variety of reasons, depending on how
|
||||
|
||||
- To save or protect an individual's vital interest. We may process your information when necessary to save or protect an individual’s vital interest, such as to prevent harm.
|
||||
|
||||
|
||||
# 3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION?
|
||||
|
||||
In Short: We only process your personal information when we believe it is necessary and we have a valid legal reason (i.e., legal basis) to do so under applicable law, like with your consent, to comply with laws, to provide you with services to enter into or fulfill our contractual obligations, to protect your rights, or to fulfill our legitimate business interests.
|
||||
@@ -103,7 +97,6 @@ The General Data Protection Regulation (GDPR) and UK GDPR require us to explain
|
||||
|
||||
- Vital Interests. We may process your information where we believe it is necessary to protect your vital interests or the vital interests of a third party, such as situations involving potential threats to the safety of any person.
|
||||
|
||||
|
||||
<ins>If you are located in Canada, this section applies to you.</ins>
|
||||
|
||||
We may process your information if you have given us specific permission (i.e., express consent) to use your personal information for a specific purpose, or in situations where your permission can be inferred (i.e., implied consent). You can withdraw your consent at any time. Click here to learn more.
|
||||
@@ -132,7 +125,6 @@ In some exceptional cases, we may be legally permitted under applicable law to p
|
||||
|
||||
- If the information is publicly available and is specified by the regulations
|
||||
|
||||
|
||||
# 4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?
|
||||
|
||||
In Short: We may share information in specific situations described in this section and/or with the following third parties.
|
||||
@@ -141,7 +133,6 @@ We may need to share your personal information in the following situations:
|
||||
|
||||
- Business Transfers. We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.
|
||||
|
||||
|
||||
# 5. DO WE USE COOKIES AND OTHER TRACKING TECHNOLOGIES?
|
||||
|
||||
In Short: We may use cookies and other tracking technologies to collect and store your information.
|
||||
@@ -183,7 +174,7 @@ In Short: In some regions, such as the European Economic Area (EEA), United King
|
||||
In some regions (like the EEA, UK, and Canada), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data portability. In certain circumstances, you may also have the right to object to the processing of your personal information. You can make such a request by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below.
|
||||
|
||||
We will consider and act upon any request in accordance with applicable data protection laws.
|
||||
|
||||
|
||||
If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your local data protection supervisory authority. You can find their contact details here: https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.
|
||||
|
||||
If you are located in Switzerland, the contact details for the data protection authorities are available here: https://www.edoeb.admin.ch/edoeb/en/home.html.
|
||||
@@ -224,22 +215,20 @@ What categories of personal information do we collect?
|
||||
|
||||
We have collected the following categories of personal information in the past twelve (12) months:
|
||||
|
||||
| Category | Examples | Collected |
|
||||
| ------- | --- | --- |
|
||||
| A. Identifiers | Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name | NO |
|
||||
| B. Personal information categories listed in the California Customer Records statute | Name, contact information, education, employment, employment history, and financial information | NO |
|
||||
| C. Protected classification characteristics under California or federal law | Gender and date of birth | NO |
|
||||
| D. Commercial information | Transaction information, purchase history, financial details, and payment information | NO |
|
||||
| E. Biometric information | Fingerprints and voiceprints | NO |
|
||||
| F. Internet or other similar network activity | Browsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems, and advertisements | NO |
|
||||
| G. Geolocation data | Device location | NO |
|
||||
| H. Audio, electronic, visual, thermal, olfactory, or similar information | Images and audio, video or call recordings created in connection with our business activities | NO |
|
||||
| I. Professional or employment-related information | Business contact details in order to provide you our Services at a business level or job title, work history, and professional qualifications if you apply for a job with us | NO |
|
||||
| J. Education Information | Student records and directory information | NO |
|
||||
| K. Inferences drawn from other personal information | Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristics | NO |
|
||||
| L. Sensitive Personal Information | Account login information | YES |
|
||||
|
||||
|
||||
| Category | Examples | Collected |
|
||||
| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
|
||||
| A. Identifiers | Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name | NO |
|
||||
| B. Personal information categories listed in the California Customer Records statute | Name, contact information, education, employment, employment history, and financial information | NO |
|
||||
| C. Protected classification characteristics under California or federal law | Gender and date of birth | NO |
|
||||
| D. Commercial information | Transaction information, purchase history, financial details, and payment information | NO |
|
||||
| E. Biometric information | Fingerprints and voiceprints | NO |
|
||||
| F. Internet or other similar network activity | Browsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems, and advertisements | NO |
|
||||
| G. Geolocation data | Device location | NO |
|
||||
| H. Audio, electronic, visual, thermal, olfactory, or similar information | Images and audio, video or call recordings created in connection with our business activities | NO |
|
||||
| I. Professional or employment-related information | Business contact details in order to provide you our Services at a business level or job title, work history, and professional qualifications if you apply for a job with us | NO |
|
||||
| J. Education Information | Student records and directory information | NO |
|
||||
| K. Inferences drawn from other personal information | Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristics | NO |
|
||||
| L. Sensitive Personal Information | Account login information | YES |
|
||||
|
||||
We will use and retain the collected personal information as needed to provide the Services or for:
|
||||
|
||||
@@ -359,10 +348,11 @@ We may update this privacy notice from time to time. The updated version will be
|
||||
|
||||
If you have questions or comments about this notice, you may email us at `isk.extensions@gmail.com` or by post to:
|
||||
|
||||
|
||||
CryptKeeper
|
||||
__________
|
||||
----------
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
# 15. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ async function getIdentityCommitments() {
|
||||
async function getActiveIdentity() {
|
||||
return post({
|
||||
method: RPCAction.GET_ACTIVE_IDENTITY,
|
||||
});
|
||||
}) as Promise<string>;
|
||||
}
|
||||
|
||||
async function getHostPermissions(host: string) {
|
||||
@@ -215,13 +215,15 @@ const client = {
|
||||
createDummyRequest,
|
||||
};
|
||||
|
||||
export type Client = typeof client;
|
||||
|
||||
/**
|
||||
* Connect to Extension
|
||||
* @returns injected client
|
||||
*/
|
||||
// eslint-disable-next-line consistent-return
|
||||
async function connect() {
|
||||
let result;
|
||||
async function connect(): Promise<Client | null> {
|
||||
let result: Client | null = null;
|
||||
try {
|
||||
const approved = await tryInject(window.location.origin);
|
||||
|
||||
@@ -243,7 +245,7 @@ async function connect() {
|
||||
declare global {
|
||||
interface Window {
|
||||
zkpr: {
|
||||
connect: () => any;
|
||||
connect: () => Promise<Client | null>;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,3 +5,5 @@ if (!global.atob) {
|
||||
if (!global.btoa) {
|
||||
global.btoa = (str: string) => Buffer.from(str, "binary").toString("base64");
|
||||
}
|
||||
|
||||
export {};
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"rootDir": "./",
|
||||
"paths": {
|
||||
"@src/*": ["src/*"]
|
||||
},
|
||||
"target": "ES2020",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"rootDir": "./src",
|
||||
"outDir": "dist/js",
|
||||
"strict": true,
|
||||
"sourceMap": true,
|
||||
"jsx": "react",
|
||||
"jsx": "react-jsx",
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"isolatedModules": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"lib": ["es2020", "dom", "webworker"],
|
||||
"experimentalDecorators": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
@@ -20,5 +24,6 @@
|
||||
"noImplicitAny": false,
|
||||
"strictPropertyInitialization": false
|
||||
},
|
||||
"include": ["src"]
|
||||
"include": ["src", "demo"],
|
||||
"exclude": ["node_modules", "coverage", "dist"]
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
const webpack = require("webpack");
|
||||
const path = require("path");
|
||||
const CopyPlugin = require("copy-webpack-plugin");
|
||||
@@ -111,5 +109,4 @@ module.exports = {
|
||||
constants: false,
|
||||
},
|
||||
},
|
||||
externals: /^(worker_threads)$/,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
/* eslint-disable import/extensions */
|
||||
const { merge } = require("webpack-merge");
|
||||
const common = require("./webpack.common.js");
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* eslint-disable import/extensions */
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
const { merge } = require("webpack-merge");
|
||||
const common = require("./webpack.common.js");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user