diff --git a/.i18n-codegen.json b/.i18n-codegen.json index 6ef6e33910e5..807ea0027cc4 100644 --- a/.i18n-codegen.json +++ b/.i18n-codegen.json @@ -157,6 +157,18 @@ "trans": "Translate", "sourceMap": "inline" } + }, + { + "input": "./packages/plugins/template/src/locales/en-US.json", + "output": "./packages/plugins/template/src/locales/i18n_generated", + "parser": "i18next", + "generator": { + "type": "i18next/react-hooks", + "hooks": "useI18N", + "namespace": "__template__", + "trans": "Translate", + "sourceMap": "inline" + } } ] } diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index 850883e4424e..18f81567dd5f 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -20,8 +20,6 @@ const approvedList = new Map([ ['html-parse-stringify2', 'github:locize/html-parse-stringify2'], /* cspell:disable-next-line */ ['async-eventemitter', 'github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c'], - // !!! Relative path - ['xhr2-cookies', 'link:./package-overrides/xhr2-cookies'], ]) /** diff --git a/docs/plugin-development-guide.md b/docs/plugin-development-guide.md index ca6d6e68de16..42c2ef8676cc 100644 --- a/docs/plugin-development-guide.md +++ b/docs/plugin-development-guide.md @@ -7,9 +7,15 @@ maintainer: # Plugin Development Guide +## Run + +> npx gulp new-pkg + +To create a new plugin + ## Minimum File Structure -`packages/plugins/example/src` is an example of this structure. +The following folder is automatically created by the command above. ```plaintext packages/mask/src/plugins/{your-plugin-name} @@ -34,22 +40,14 @@ The file need to provide this information: - Reference resource list - Known issues / Caveats -## Registration - -Import your plugin definition at: `packages/mask/src/plugin-infra/register.ts`. - -If your plugin is defined at `packages/plugins/*` instead of `packages/mask/src/plugins/*`, please make sure you have set up the monorepo correctly. - -Plugins defined at `packages/plugins/*` and compatible with the isolated dashboard should also be registered in `packages/dashboard/src/initialization/plugins.ts` - ## Plugin APIs - Plugin definition: `packages/plugin-infra/src/types.ts` - Database: `context.getDatabaseStorage()` (2nd parameter of the `init` method of your `Worker` definition). See example in `packages/plugins/example/src/Worker/index.ts`. -- Message emitter: `createPluginMessage` in `packages/plugin-infra/src/utils/message.ts` -- RPC: `createPluginRPC` in `packages/plugin-infra/src/utils/rpc.ts` -- Metadata reader: `createTypedMessageMetadataReader` in `packages/mask/src/protocols/typed-message/metadata.ts` -- React renderer with metadata reader: `createRenderWithMetadata` in `packages/mask/src/protocols/typed-message/metadata.ts` +- Message emitter: `createPluginMessage` exported from `@masknet/plugin-infra` +- RPC: `createPluginRPC` exported from `@masknet/plugin-infra` +- Metadata reader: `createTypedMessageMetadataReader` in `@masknet/shared-base` +- React renderer with metadata reader: `createRenderWithMetadata` in `@masknet/shared-base` ## Architecture diff --git a/package-overrides/xhr2-cookies/index.cjs b/package-overrides/xhr2-cookies/index.cjs deleted file mode 100644 index 9e6169823132..000000000000 --- a/package-overrides/xhr2-cookies/index.cjs +++ /dev/null @@ -1 +0,0 @@ -module.exports = globalThis.XMLHttpRequest diff --git a/package-overrides/xhr2-cookies/index.mjs b/package-overrides/xhr2-cookies/index.mjs deleted file mode 100644 index 5c7550194623..000000000000 --- a/package-overrides/xhr2-cookies/index.mjs +++ /dev/null @@ -1,2 +0,0 @@ -export const XMLHttpRequest = globalThis.XMLHttpRequest -export default globalThis.XMLHttpRequest diff --git a/package-overrides/xhr2-cookies/package.json b/package-overrides/xhr2-cookies/package.json deleted file mode 100644 index 40556c0b21a2..000000000000 --- a/package-overrides/xhr2-cookies/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "xhr2-cookies", - "type": "module", - "main": "./index.cjs", - "module": "./index.mjs" -} diff --git a/package.json b/package.json index 93c36f85cdfb..2059a7bd7dca 100644 --- a/package.json +++ b/package.json @@ -83,8 +83,7 @@ }, "pnpm": { "overrides": { - "xhr2-cookies": "link:./package-overrides/xhr2-cookies", - "@types/node": "^16.11.6" + "@types/node": "^17.0.17" } } } diff --git a/packages/empty/package.json b/packages/empty/package.json index ef41fd6e157a..916baf8f2a71 100644 --- a/packages/empty/package.json +++ b/packages/empty/package.json @@ -1,6 +1,5 @@ { "name": "@masknet/null", - "version": "0.0.0", "private": true, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/empty/tests/.gitkeep b/packages/empty/tests/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/empty/tsconfig.tests.json b/packages/empty/tsconfig.tests.json new file mode 100644 index 000000000000..5c696bf78dab --- /dev/null +++ b/packages/empty/tsconfig.tests.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./dist/tests.tsbuildinfo", + "types": ["node"] + }, + "include": ["./tests"], + "references": [{ "path": "./tsconfig.json" }] +} diff --git a/packages/mask/src/plugins/NextID/locales/languages.ts b/packages/mask/src/plugins/NextID/locales/languages.ts index b188075ca8d6..b0b73b68c8b3 100644 --- a/packages/mask/src/plugins/NextID/locales/languages.ts +++ b/packages/mask/src/plugins/NextID/locales/languages.ts @@ -3,17 +3,32 @@ // Default fallback language in a family of languages are chosen by the alphabet order // To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts import en_US from './en-US.json' +import ja_JP from './ja-JP.json' +import ko_KR from './ko-KR.json' +import qya_AA from './qya-AA.json' +import zh_CN from './zh-CN.json' +import zh_TW from './zh-TW.json' export const languages = { en: en_US, + ja: ja_JP, + ko: ko_KR, + qy: qya_AA, + 'zh-CN': zh_CN, + zh: zh_TW, } // @ts-ignore if (import.meta.webpackHot) { // @ts-ignore - import.meta.webpackHot.accept(['./en-US.json'], () => - globalThis.dispatchEvent?.( - new CustomEvent('MASK_I18N_HMR', { - detail: ['com.mask.nextid', { en: en_US }], - }), - ), + import.meta.webpackHot.accept( + ['./en-US.json', './ja-JP.json', './ko-KR.json', './qya-AA.json', './zh-CN.json', './zh-TW.json'], + () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: [ + 'com.mask.next_id', + { en: en_US, ja: ja_JP, ko: ko_KR, qy: qya_AA, 'zh-CN': zh_CN, zh: zh_TW }, + ], + }), + ), ) } diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 573d240b1ca4..7d6eeba9a3a1 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -720,6 +720,7 @@ export enum PluginId { PoolTogether = 'com.pooltogether', UnlockProtocol = 'com.maskbook.unlockprotocol', FileService = 'com.maskbook.fileservice', + // @masknet/scripts: insert-here } export interface Pagination { diff --git a/packages/plugins/example/src/locales/languages.ts b/packages/plugins/example/src/locales/languages.ts index 0818a6f2f73f..1c9a8260bafb 100644 --- a/packages/plugins/example/src/locales/languages.ts +++ b/packages/plugins/example/src/locales/languages.ts @@ -3,18 +3,16 @@ // Default fallback language in a family of languages are chosen by the alphabet order // To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts import en_US from './en-US.json' -import zh_TW from './zh-TW.json' export const languages = { en: en_US, - zh: zh_TW, } // @ts-ignore if (import.meta.webpackHot) { // @ts-ignore - import.meta.webpackHot.accept(['./en-US.json', './zh-TW.json'], () => + import.meta.webpackHot.accept(['./en-US.json'], () => globalThis.dispatchEvent?.( new CustomEvent('MASK_I18N_HMR', { - detail: ['io.mask.example', { en: en_US, zh: zh_TW }], + detail: ['io.mask.example', { en: en_US }], }), ), ) diff --git a/packages/plugins/example/src/locales/zh-TW.json b/packages/plugins/example/src/locales/zh-TW.json deleted file mode 100644 index 0230173f422c..000000000000 --- a/packages/plugins/example/src/locales/zh-TW.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "測試插件", - "__entry__": "🤔 測試" -} diff --git a/packages/plugins/template/README.md b/packages/plugins/template/README.md new file mode 100644 index 000000000000..c67dc19c5f8b --- /dev/null +++ b/packages/plugins/template/README.md @@ -0,0 +1,7 @@ +# Example plugin + +## TODOs + +## Referenced resources + +## Known issues / Caveats diff --git a/packages/plugins/template/package.json b/packages/plugins/template/package.json new file mode 100644 index 000000000000..7539398a33db --- /dev/null +++ b/packages/plugins/template/package.json @@ -0,0 +1,12 @@ +{ + "name": "@masknet/plugin-template", + "private": true, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@masknet/plugin-infra": "workspace:*", + "@masknet/shared": "workspace:*", + "@masknet/shared-base": "workspace:*", + "react-use": "^17.3.2" + } +} diff --git a/packages/plugins/template/src/Dashboard/index.tsx b/packages/plugins/template/src/Dashboard/index.tsx new file mode 100644 index 000000000000..3052bb2f8ad3 --- /dev/null +++ b/packages/plugins/template/src/Dashboard/index.tsx @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' + +const dashboard: Plugin.Dashboard.Definition = { + ...base, + init(signal, context) {}, +} + +export default dashboard diff --git a/packages/plugins/template/src/SNSAdaptor/index.tsx b/packages/plugins/template/src/SNSAdaptor/index.tsx new file mode 100644 index 000000000000..6a18d03fda0c --- /dev/null +++ b/packages/plugins/template/src/SNSAdaptor/index.tsx @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' + +const sns: Plugin.SNSAdaptor.Definition = { + ...base, + init(signal, context) {}, +} + +export default sns diff --git a/packages/plugins/template/src/Worker/index.ts b/packages/plugins/template/src/Worker/index.ts new file mode 100644 index 000000000000..6c436f1cb4fb --- /dev/null +++ b/packages/plugins/template/src/Worker/index.ts @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' + +const worker: Plugin.Worker.Definition = { + ...base, + init(signal, context) {}, +} + +export default worker diff --git a/packages/plugins/template/src/base.ts b/packages/plugins/template/src/base.ts new file mode 100644 index 000000000000..b88adee59a7f --- /dev/null +++ b/packages/plugins/template/src/base.ts @@ -0,0 +1,18 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { PLUGIN_DESCRIPTION, PLUGIN_ID, PLUGIN_NAME } from './constants' +import { languages } from './locales/languages' + +export const base: Plugin.Shared.Definition = { + ID: PLUGIN_ID, + icon: '\u{1F9EA}', + name: { fallback: PLUGIN_NAME }, + description: { fallback: PLUGIN_DESCRIPTION }, + publisher: { name: { fallback: '' }, link: '' }, + enableRequirement: { + architecture: { app: false, web: true }, + networks: { type: 'opt-out', networks: {} }, + target: 'beta', + }, + experimentalMark: true, + i18n: languages, +} diff --git a/packages/plugins/template/src/constants.ts b/packages/plugins/template/src/constants.ts new file mode 100644 index 000000000000..ff2f9de64642 --- /dev/null +++ b/packages/plugins/template/src/constants.ts @@ -0,0 +1,5 @@ +import { PluginId } from '@masknet/plugin-infra' + +export const PLUGIN_ID = PluginId.Example +export const PLUGIN_DESCRIPTION = 'An example plugin of Mask Network.' +export const PLUGIN_NAME = 'Example' diff --git a/packages/plugins/template/src/env.d.ts b/packages/plugins/template/src/env.d.ts new file mode 100644 index 000000000000..868322d5ff30 --- /dev/null +++ b/packages/plugins/template/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/plugins/template/src/index.ts b/packages/plugins/template/src/index.ts new file mode 100644 index 000000000000..ec9b1a34e7af --- /dev/null +++ b/packages/plugins/template/src/index.ts @@ -0,0 +1,23 @@ +import { registerPlugin } from '@masknet/plugin-infra' +import { base } from './base' + +export * from './constants' + +registerPlugin({ + ...base, + SNSAdaptor: { + load: () => import('./SNSAdaptor'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./SNSAdaptor', () => hot(import('./SNSAdaptor'))), + }, + Dashboard: { + load: () => import('./Dashboard'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./Dashboard', () => hot(import('./Dashboard'))), + }, + Worker: { + load: () => import('./Worker'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./Worker', () => hot(import('./Worker'))), + }, +}) diff --git a/packages/plugins/template/src/locales/en-US.json b/packages/plugins/template/src/locales/en-US.json new file mode 100644 index 000000000000..6585c4ff2c25 --- /dev/null +++ b/packages/plugins/template/src/locales/en-US.json @@ -0,0 +1,4 @@ +{ + "name": "Example Plugin", + "__entry__": "🤔 Example" +} diff --git a/packages/plugins/template/src/locales/index.ts b/packages/plugins/template/src/locales/index.ts new file mode 100644 index 000000000000..d6ead60252e4 --- /dev/null +++ b/packages/plugins/template/src/locales/index.ts @@ -0,0 +1,6 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts + +export * from './i18n_generated' diff --git a/packages/plugins/template/src/locales/languages.ts b/packages/plugins/template/src/locales/languages.ts new file mode 100644 index 000000000000..ae368751ee48 --- /dev/null +++ b/packages/plugins/template/src/locales/languages.ts @@ -0,0 +1,21 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts +import en_US from './en-US.json' +export const languages = { + en: en_US, +} +import { createI18NBundle } from '@masknet/shared-base' +export const add__template__I18N = createI18NBundle('__template__', languages) +// @ts-ignore +if (import.meta.webpackHot) { + // @ts-ignore + import.meta.webpackHot.accept(['./en-US.json'], () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: ['__template__', { en: en_US }], + }), + ), + ) +} diff --git a/packages/plugins/template/tsconfig.json b/packages/plugins/template/tsconfig.json new file mode 100644 index 000000000000..da48bfe2740e --- /dev/null +++ b/packages/plugins/template/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "tsBuildInfoFile": "dist/.tsbuildinfo", + "resolveJsonModule": true + }, + "include": ["src", "src/**/*.json"], + "references": [{ "path": "../../plugin-infra" }, { "path": "../../shared" }, { "path": "../../shared-base" }] +} diff --git a/packages/plugins/tsconfig.json b/packages/plugins/tsconfig.json index 89cb24e84ab7..805c5a367f8c 100644 --- a/packages/plugins/tsconfig.json +++ b/packages/plugins/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "references": [ + { "path": "./template/" }, { "path": "./example/" }, { "path": "./Debugger/" }, { "path": "./Flow/" }, diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 89e92cb182b2..1351ab1ec3e2 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -8,12 +8,15 @@ "dependencies": { "@types/rimraf": "^3.0.2", "chalk": "^4.1.2", + "enquirer": "^2.3.6", + "fs-extra": "^10.0.0", "gulp-zip": "^5.1.0", "proper-lockfile": "^4.1.1", "rimraf": "^3.0.2", "yargs": "^17.3.1" }, "devDependencies": { + "@types/fs-extra": "^9.0.13", "@types/gulp": "^4.0.9", "@types/lodash": "^4.14.178", "@types/proper-lockfile": "^4.1.2", diff --git a/packages/scripts/src/commands/clean.ts b/packages/scripts/src/commands/clean.ts index cca37ad9d75c..263cfbb86f60 100644 --- a/packages/scripts/src/commands/clean.ts +++ b/packages/scripts/src/commands/clean.ts @@ -1,26 +1,14 @@ -import { awaitChildProcess, parseArgs, printShell, ROOT_PATH, shell, task } from '../utils' +import { awaitChildProcess, printShell, ROOT_PATH, shell, task } from '../utils' import rimraf from 'rimraf' import { join } from 'path' import { promisify } from 'util' const rm = promisify(rimraf) -interface Args { - deps: boolean -} export async function clean() { - const { deps } = parseArgs() - if (deps) { - printShell`rm -rf **/node_modules` - await rm(join(ROOT_PATH, '**/node_modules')) - await awaitChildProcess(shell.cwd(ROOT_PATH)`git clean -xdf ./packages/`) - } else { - await awaitChildProcess(shell.cwd(ROOT_PATH)`git clean -xdf -e node_modules ./packages/`) - printShell`rm -rf **/node_modules/.cache` - await rm(join(ROOT_PATH, '**/node_modules/.cache')) - } + await awaitChildProcess(shell.cwd(ROOT_PATH)`git clean -xdf -e node_modules ./packages/`) + printShell`rm -rf **/node_modules/.cache` + await rm(join(ROOT_PATH, '**/node_modules/.cache')) await awaitChildProcess(shell.cwd(ROOT_PATH)`pnpm install --frozen-lockfile --prefer-offline`) } -task(clean, 'clean', 'Clean all build caches', { - '--deps': 'including node_modules', -}) +task(clean, 'clean', 'Clean all build caches') diff --git a/packages/scripts/src/commands/index.ts b/packages/scripts/src/commands/index.ts index c695a46f6c2e..284d86201548 100644 --- a/packages/scripts/src/commands/index.ts +++ b/packages/scripts/src/commands/index.ts @@ -1,2 +1,3 @@ export * from './clean' export * from './help' +export * from './new-package' diff --git a/packages/scripts/src/commands/new-package.ts b/packages/scripts/src/commands/new-package.ts new file mode 100644 index 000000000000..a4d55f2843d8 --- /dev/null +++ b/packages/scripts/src/commands/new-package.ts @@ -0,0 +1,146 @@ +import { resolve } from 'path' +import { copy, ensureDir } from 'fs-extra' +import { prompt } from 'enquirer' +import { identity, kebabCase, upperFirst } from 'lodash-unified' +import { task } from '../utils/task' +import { ROOT_PATH } from '../utils/paths' +import { awaitChildProcess, changeFile, shell } from '../utils' + +type PackageOptions = { + type: 'plugin' | 'package' + path: string + npmName: string + pluginID?: string +} +export async function createPackageInteractive() { + // Select package type + const packageDetail: PackageOptions = { + path: '', + npmName: '', + type: await prompt<{ type: 'plugin' | 'package' }>({ + type: 'select', + name: 'type', + choices: ['plugin', 'package'], + message: 'What type of package do you want to create?', + }).then((x) => x.type), + } + + if (packageDetail.type === 'plugin') { + packageDetail.pluginID = await prompt<{ pluginID: string }>({ + type: 'input', + message: 'What is the plugin ID? (e.g. "io.mask.example-plugin")', + name: 'pluginID', + }).then((x) => x.pluginID) + } + + // Choose monorepo folder name + { + const base = 'packages/' + (packageDetail.type === 'plugin' ? 'plugins/' : '') + packageDetail.path = + base + + (packageDetail.type === 'plugin' ? upperFirst : identity)( + await prompt<{ name: string }>({ + type: 'input', + name: 'name', + message: 'Create a new package at: ' + base, + }).then((x) => x.name), + ) + packageDetail.path + } + + // Choose npm package name + { + const suggestedNpmPackageName = kebabCase(packageDetail.path.split('/').at(-1)) + packageDetail.npmName = + '@masknet/' + + (await prompt<{ npmName: string }>({ + type: 'input', + name: 'npmName', + message: 'What is the npm package name? @masknet/', + initial: + packageDetail.type === 'package' ? suggestedNpmPackageName : 'plugin-' + suggestedNpmPackageName, + }).then((x) => x.npmName)) + } + + return createNewPackage(packageDetail) +} +task(createPackageInteractive, 'new-pkg', 'Create a new package interactively') + +const INSERT_HERE = '// @masknet/scripts: insert-here' +async function createNewPackage({ path, npmName, type, pluginID }: PackageOptions) { + await changeFile(resolve(ROOT_PATH, 'pnpm-workspace.yaml'), (content) => content + ` - '${path}'\n`) + + const packagePath = resolve(ROOT_PATH, path) + await ensureDir(packagePath) + + if (type === 'plugin') { + const NormativeName = path.split('/').at(-1) + // cp -r packages/plugins/template packages/plugins/NEW_PLUGIN + await copy(resolve(ROOT_PATH, 'packages/plugins/template'), packagePath, { + filter: (src) => { + if (src.includes('node_modules') || src.includes('dist')) return false + return true + }, + }) + await changeFile.typescript(resolve(packagePath, 'src/constants.ts'), (content) => + content.replace('PluginId.Example', `PluginId.${NormativeName}`), + ) + await changeFile.JSON(resolve(packagePath, 'package.json'), (content) => { + content.name = npmName + }) + + /** + * .i18n-codegen.json + * packages/plugins/tsconfig.json + * packages/plugin-infra/src/types.ts + * packages/mask/src/plugin-infra/register.ts + * packages/mask/package.json + */ + await changeFile.JSON(resolve(ROOT_PATH, '.i18n-codegen.json'), (content) => { + content.list.push({ + input: `./${path}/src/locales/en-US.json`, + output: `./${path}/src/locales/i18n_generated`, + parser: 'i18next', + generator: { + type: 'i18next/react-hooks', + hooks: 'useI18N', + namespace: pluginID, + trans: 'Translate', + sourceMap: 'inline', + }, + }) + }) + await changeFile.JSON(resolve(ROOT_PATH, 'packages/plugins/tsconfig.json'), (content) => { + content.references.push({ path: `./${NormativeName}/` }) + }) + await changeFile.typescript(resolve(ROOT_PATH, 'packages/plugin-infra/src/types.ts'), (content) => + content.replace(INSERT_HERE, `${NormativeName} = '${pluginID}'\n${INSERT_HERE}`), + ) + await changeFile.typescript( + resolve(ROOT_PATH, `packages/mask/src/plugin-infra/register.ts`), + (content) => `${content}import '${npmName}'`, + ) + await awaitChildProcess(shell.cwd(ROOT_PATH)`pnpm install --prefer-offline -C packages/mask ${npmName}`) + await changeFile(resolve(ROOT_PATH, 'packages/mask/package.json'), (content) => + content.replaceAll(/workspace:\^undefined/g, 'workspace:*'), + ) + } else { + // cp -r packages/empty packages/NEW_PACKAGE + await copy(resolve(ROOT_PATH, 'packages/empty'), packagePath, { + filter: (src) => { + if (src.includes('node_modules') || src.includes('dist')) return false + return true + }, + }) + await changeFile.JSON(resolve(packagePath, 'package.json'), (content) => { + content.name = npmName + }) + await changeFile(resolve(ROOT_PATH, 'tsconfig.json'), (content) => + content.replace(INSERT_HERE, `${INSERT_HERE}\n { "path": "./${path}/tsconfig.tests.json" },`), + ) + await changeFile(resolve(packagePath, 'README.md'), (content) => `# ${npmName}`) + } + + // regenerate lockfile and install dependencies for newly installed packages + await awaitChildProcess(shell.cwd(ROOT_PATH)`pnpm install --prefer-offline`) +} diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index e69989569c06..46fb098cb97b 100644 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -1,5 +1,3 @@ -export { clean, help } from './commands' -export { localeKit } from './locale-kit' export { codegen, codegenWatch, @@ -12,6 +10,10 @@ export { } from './codegen' export { ciBuild } from './extension' export { buildNetlify } from './netlify' + +// Tools +export { clean, help, createPackageInteractive } from './commands' +export { localeKit } from './locale-kit' export { syncLanguages } from './locale-kit-next' export { reorderSpellcheck } from './spellcheck' diff --git a/packages/scripts/src/utils/index.ts b/packages/scripts/src/utils/index.ts index 0f0df01d8d25..24aac8c04a53 100644 --- a/packages/scripts/src/utils/index.ts +++ b/packages/scripts/src/utils/index.ts @@ -6,3 +6,4 @@ export * from './run' export * from './process-lock' export * from './storybook' export * from './walk' +export * from './write' diff --git a/packages/scripts/src/utils/write.ts b/packages/scripts/src/utils/write.ts new file mode 100644 index 000000000000..27b9e98be167 --- /dev/null +++ b/packages/scripts/src/utils/write.ts @@ -0,0 +1,18 @@ +import { readFile, writeFile } from 'fs/promises' +import { prettier } from './prettier' + +export async function changeFile(path: string, f: (x: string) => string | Promise) { + const content = await readFile(path, 'utf8') + const newContent = f(content) + await writeFile(path, await newContent) +} +changeFile.JSON = (path: string, f: (x: any) => void) => { + return changeFile(path, (content) => { + const obj = JSON.parse(content) + f(obj) + return prettier(JSON.stringify(obj), 'json') + }) +} +changeFile.typescript = (path: string, f: (x: any) => any) => { + return changeFile(path, (content) => prettier(f(content), 'typescript')) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5a4ef742206..fc42ea3db80f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8 +1,7 @@ lockfileVersion: 5.3 overrides: - xhr2-cookies: link:./package-overrides/xhr2-cookies - '@types/node': ^16.11.6 + '@types/node': ^17.0.17 importers: @@ -327,7 +326,7 @@ importers: '@types/elliptic': ^6.4.14 '@types/json-stable-stringify': ^1.0.33 '@types/json2csv': ^5.0.3 - '@types/node': ^16.11.6 + '@types/node': ^17.0.17 '@types/react-highlight-words': ^0.16.4 '@types/react-router-dom': ^5.3.3 '@types/react-virtualized-auto-sizer': ^1.0.1 @@ -460,7 +459,7 @@ importers: '@types/elliptic': 6.4.14 '@types/json-stable-stringify': 1.0.33 '@types/json2csv': 5.0.3 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/react-highlight-words': 0.16.4 '@types/react-router-dom': 5.3.3 '@types/react-virtualized-auto-sizer': 1.0.1 @@ -803,13 +802,25 @@ importers: '@masknet/plugin-infra': link:../../plugin-infra ts-results: 3.3.0 + packages/plugins/template: + specifiers: + '@masknet/plugin-infra': workspace:* + '@masknet/shared': workspace:* + '@masknet/shared-base': workspace:* + react-use: ^17.3.2 + dependencies: + '@masknet/plugin-infra': link:../../plugin-infra + '@masknet/shared': link:../../shared + '@masknet/shared-base': link:../../shared-base + react-use: 17.3.2_757a802188413a36d4f24237d13b8e90 + packages/polyfills: specifiers: '@rollup/plugin-commonjs': ^21.0.1 '@rollup/plugin-json': ^4.1.0 '@rollup/plugin-node-resolve': ^13.1.3 '@rollup/plugin-sucrase': ^4.0.2 - '@types/node': ^16.11.6 + '@types/node': ^17.0.17 buffer: ^6.0.3 clipboard-polyfill: ^3.0.3 core-js: ^3.21.0 @@ -829,7 +840,7 @@ importers: '@rollup/plugin-json': 4.1.0_rollup@2.67.2 '@rollup/plugin-node-resolve': 13.1.3_rollup@2.67.2 '@rollup/plugin-sucrase': 4.0.2_rollup@2.67.2 - '@types/node': 16.11.24 + '@types/node': 17.0.18 core-js-builder: 3.21.0 rollup: 2.67.2 rollup-plugin-terser: 7.0.2_rollup@2.67.2 @@ -875,11 +886,14 @@ importers: packages/scripts: specifiers: + '@types/fs-extra': ^9.0.13 '@types/gulp': ^4.0.9 '@types/lodash': ^4.14.178 '@types/proper-lockfile': ^4.1.2 '@types/rimraf': ^3.0.2 chalk: ^4.1.2 + enquirer: ^2.3.6 + fs-extra: ^10.0.0 gulp-zip: ^5.1.0 proper-lockfile: ^4.1.1 rimraf: ^3.0.2 @@ -888,11 +902,14 @@ importers: dependencies: '@types/rimraf': 3.0.2 chalk: 4.1.2 + enquirer: 2.3.6 + fs-extra: 10.0.0 gulp-zip: 5.1.0_gulp@4.0.2 proper-lockfile: 4.1.2 rimraf: 3.0.2 yargs: 17.3.1 devDependencies: + '@types/fs-extra': 9.0.13 '@types/gulp': 4.0.9 '@types/lodash': 4.14.178 '@types/proper-lockfile': 4.1.2 @@ -1255,7 +1272,7 @@ packages: engines: {node: '>=6.12'} dependencies: '@0xproject/typescript-typings': 0.3.2 - '@types/node': 16.11.24 + '@types/node': 17.0.18 jsonschema: 1.4.0 lodash.values: 4.3.0 dev: false @@ -1271,7 +1288,7 @@ packages: resolution: {integrity: sha1-+tE5Je6SrU7hmAZopcsr7U3Kq48=} engines: {node: '>=6.12'} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 bignumber.js: 4.1.0 dev: false @@ -4368,7 +4385,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -4389,7 +4406,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -4426,7 +4443,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 jest-mock: 27.5.1 dev: true @@ -4436,7 +4453,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 16.11.24 + '@types/node': 17.0.18 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -4465,7 +4482,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4572,7 +4589,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/yargs': 15.0.14 chalk: 4.1.2 dev: true @@ -4583,7 +4600,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.21 + '@types/node': 17.0.18 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true @@ -4594,7 +4611,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true @@ -6042,7 +6059,7 @@ packages: '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/ui': 6.4.18_9eb0130ea7f00b7e78e913147317bb83 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/webpack': 4.41.32 autoprefixer: 9.8.8 babel-loader: 8.2.3_60b7ed408fec1293d95f86d9ceaa88ca @@ -6134,7 +6151,7 @@ packages: '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/ui': 6.4.18_9eb0130ea7f00b7e78e913147317bb83 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/webpack': 4.41.32 autoprefixer: 9.8.8 babel-loader: 8.2.3_60b7ed408fec1293d95f86d9ceaa88ca @@ -6224,7 +6241,7 @@ packages: '@storybook/semver': 7.3.2 '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 - '@types/node': 16.11.24 + '@types/node': 17.0.18 babel-loader: 8.2.3_900eac683bef8a6b239b47efcf24e8a9 babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.2 @@ -6476,7 +6493,7 @@ packages: '@babel/register': 7.17.0_@babel+core@7.17.2 '@storybook/node-logger': 6.4.18 '@storybook/semver': 7.3.2 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/pretty-hrtime': 1.0.1 babel-loader: 8.2.3_60b7ed408fec1293d95f86d9ceaa88ca babel-plugin-macros: 3.1.0 @@ -6546,7 +6563,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/node-fetch': 2.5.12 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.32 @@ -6622,7 +6639,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/node-fetch': 2.5.12 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.32 @@ -6698,7 +6715,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.18_757a802188413a36d4f24237d13b8e90 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/node-fetch': 2.5.12 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.32 @@ -6898,7 +6915,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/ui': 6.4.18_9eb0130ea7f00b7e78e913147317bb83 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/webpack': 4.41.32 babel-loader: 8.2.3_60b7ed408fec1293d95f86d9ceaa88ca case-sensitive-paths-webpack-plugin: 2.4.0 @@ -6958,7 +6975,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/ui': 6.4.18_9eb0130ea7f00b7e78e913147317bb83 - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/webpack': 4.41.32 babel-loader: 8.2.3_60b7ed408fec1293d95f86d9ceaa88ca case-sensitive-paths-webpack-plugin: 2.4.0 @@ -7018,7 +7035,7 @@ packages: '@storybook/node-logger': 6.4.18 '@storybook/theming': 6.4.18_757a802188413a36d4f24237d13b8e90 '@storybook/ui': 6.4.18_9eb0130ea7f00b7e78e913147317bb83 - '@types/node': 16.11.24 + '@types/node': 17.0.18 babel-loader: 8.2.3_900eac683bef8a6b239b47efcf24e8a9 case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 @@ -7598,24 +7615,24 @@ packages: /@types/bn.js/4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 /@types/bn.js/5.1.0: resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/bonjour/3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/bs58/4.0.1: @@ -7649,13 +7666,13 @@ packages: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.28 - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 /@types/d3-array/1.2.9: resolution: {integrity: sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==} @@ -7890,7 +7907,7 @@ packages: /@types/express-serve-static-core/4.17.25: resolution: {integrity: sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==} dependencies: - '@types/node': 16.11.17 + '@types/node': 17.0.18 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: false @@ -7898,7 +7915,7 @@ packages: /@types/express-serve-static-core/4.17.28: resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -7922,6 +7939,12 @@ packages: resolution: {integrity: sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==} dev: false + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 17.0.18 + dev: true + /@types/geojson/7946.0.8: resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} dev: false @@ -7930,26 +7953,26 @@ packages: resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==} dependencies: '@types/glob': 7.1.4 - '@types/node': 16.11.6 + '@types/node': 17.0.18 dev: true /@types/glob/7.1.4: resolution: {integrity: sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 16.11.6 + '@types/node': 17.0.18 /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/gulp/4.0.9: @@ -7989,7 +8012,7 @@ packages: /@types/http-proxy/1.17.8: resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/is-function/1.0.1: @@ -8027,7 +8050,7 @@ packages: /@types/json2csv/5.0.3: resolution: {integrity: sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: false /@types/json5/0.0.29: @@ -8070,26 +8093,12 @@ packages: /@types/node-fetch/2.5.12: resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 form-data: 3.0.1 dev: true - /@types/node/16.11.17: - resolution: {integrity: sha512-C1vTZME8cFo8uxY2ui41xcynEotVkczIVI5AjLmy5pkpBv/FtG+jhtOlfcPysI8VRVwoOMv6NJm44LGnoMSWkw==} - - /@types/node/16.11.21: - resolution: {integrity: sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==} - dev: true - - /@types/node/16.11.24: - resolution: {integrity: sha512-Ezv33Rl4mIi6YdSHfIRNBd4Q9kUe5okiaw/ikvJiJDmuQZNW5kfdg7+oQPF8NO6sTcr3woIpj3jANzTXdvEZXA==} - - /@types/node/16.11.6: - resolution: {integrity: sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==} - - /@types/node/16.11.7: - resolution: {integrity: sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==} - dev: false + /@types/node/17.0.18: + resolution: {integrity: sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -8112,7 +8121,7 @@ packages: /@types/pbkdf2/3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 /@types/prettier/2.3.2: resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} @@ -8142,7 +8151,7 @@ packages: /@types/qrcode/1.4.2: resolution: {integrity: sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==} dependencies: - '@types/node': 16.11.17 + '@types/node': 17.0.18 dev: false /@types/qs/6.9.7: @@ -8255,7 +8264,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 16.11.21 + '@types/node': 17.0.18 dev: true /@types/retry/0.12.1: @@ -8266,7 +8275,7 @@ packages: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} dependencies: '@types/glob': 7.1.4 - '@types/node': 16.11.6 + '@types/node': 17.0.18 dev: false /@types/scheduler/0.16.2: @@ -8275,7 +8284,7 @@ packages: /@types/secp256k1/4.0.3: resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 /@types/serve-index/1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -8287,7 +8296,7 @@ packages: resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} dependencies: '@types/mime': 1.3.2 - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/socket.io-client/1.4.36: @@ -8297,7 +8306,7 @@ packages: /@types/sockjs/0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/source-list-map/0.1.2: @@ -8333,7 +8342,7 @@ packages: /@types/undertaker/1.2.7: resolution: {integrity: sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==} dependencies: - '@types/node': 16.11.6 + '@types/node': 17.0.18 '@types/undertaker-registry': 1.0.1 async-done: 1.3.2 dev: true @@ -8353,7 +8362,7 @@ packages: resolution: {integrity: sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==} dependencies: '@types/glob-stream': 6.1.1 - '@types/node': 16.11.6 + '@types/node': 17.0.18 '@types/vinyl': 2.0.5 dev: true @@ -8361,7 +8370,7 @@ packages: resolution: {integrity: sha512-1m6uReH8R/RuLVQGvTT/4LlWq67jZEUxp+FBHt0hYv2BT7TUwFbKI0wa7JZVEU/XtlcnX1QcTuZ36es4rGj7jg==} dependencies: '@types/expect': 1.20.4 - '@types/node': 16.11.6 + '@types/node': 17.0.18 dev: true /@types/web/0.0.52: @@ -8375,7 +8384,7 @@ packages: /@types/webpack-sources/3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/source-list-map': 0.1.2 source-map: 0.7.3 dev: true @@ -8383,7 +8392,7 @@ packages: /@types/webpack/4.41.32: resolution: {integrity: sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 '@types/tapable': 1.0.8 '@types/uglify-js': 3.13.1 '@types/webpack-sources': 3.2.0 @@ -8394,13 +8403,13 @@ packages: /@types/ws/7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 16.11.7 + '@types/node': 17.0.18 dev: false /@types/ws/8.2.2: resolution: {integrity: sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /@types/yargs-parser/20.2.1: @@ -9217,6 +9226,11 @@ packages: engines: {node: '>=6'} dev: true + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: false + /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -10599,7 +10613,7 @@ packages: /bip39/3.0.4: resolution: {integrity: sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 create-hash: 1.2.0 pbkdf2: 3.1.2 randombytes: 2.1.0 @@ -11746,6 +11760,9 @@ packages: resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} engines: {node: '>= 0.6'} + /cookiejar/2.1.3: + resolution: {integrity: sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==} + /copy-concurrently/1.0.5: resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} dependencies: @@ -13181,6 +13198,13 @@ packages: tapable: 2.2.1 dev: true + /enquirer/2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.1 + dev: false + /entities/2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true @@ -14787,7 +14811,6 @@ packages: graceful-fs: 4.2.9 jsonfile: 6.1.0 universalify: 2.0.0 - dev: true /fs-extra/4.0.3: resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} @@ -16713,7 +16736,7 @@ packages: '@types/connect': 3.4.35 '@types/express-serve-static-core': 4.17.25 '@types/lodash': 4.14.177 - '@types/node': 16.11.7 + '@types/node': 17.0.18 '@types/ws': 7.4.7 commander: 2.20.3 delay: 5.0.0 @@ -16746,7 +16769,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -16882,7 +16905,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -16900,7 +16923,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -16921,7 +16944,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.24 + '@types/node': 17.0.18 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.9 @@ -16942,7 +16965,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.24 + '@types/node': 17.0.18 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.9 @@ -16964,7 +16987,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -17019,7 +17042,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: @@ -17080,7 +17103,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.9 @@ -17137,7 +17160,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 graceful-fs: 4.2.9 dev: true @@ -17145,7 +17168,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 graceful-fs: 4.2.9 dev: true @@ -17184,7 +17207,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 graceful-fs: 4.2.9 is-ci: 2.0.0 @@ -17196,7 +17219,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.4.2 - '@types/node': 16.11.21 + '@types/node': 17.0.18 chalk: 4.1.2 ci-info: 3.3.0 graceful-fs: 4.2.9 @@ -17208,7 +17231,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 chalk: 4.1.2 ci-info: 3.3.0 graceful-fs: 4.2.9 @@ -17233,7 +17256,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -17251,7 +17274,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.11.17 + '@types/node': 17.0.18 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -17260,7 +17283,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -17573,7 +17596,6 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.9 - dev: true /jsonify/0.0.0: resolution: {integrity: sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=} @@ -20017,7 +20039,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.1 - '@types/node': 16.11.24 + '@types/node': 17.0.18 long: 4.0.0 dev: false @@ -21336,7 +21358,7 @@ packages: /rtl-css-js/1.15.0: resolution: {integrity: sha512-99Cu4wNNIhrI10xxUaABHsdDqzalrSRTie4GeCmbGVuehm4oj+fIy8fTzB+16pmKe8Bv9rl+hxIBez6KxExTew==} dependencies: - '@babel/runtime': 7.16.7 + '@babel/runtime': 7.17.2 dev: false /run-parallel/1.2.0: @@ -23696,7 +23718,6 @@ packages: /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: true /unpipe/1.0.0: resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} @@ -24138,7 +24159,7 @@ packages: engines: {node: '>=8.0.0'} requiresBuild: true dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 got: 9.6.0 swarm-js: 0.1.40 dev: false @@ -24189,7 +24210,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: '@types/bn.js': 4.11.6 - '@types/node': 16.11.6 + '@types/node': 17.0.18 bignumber.js: 9.0.1 web3-core-helpers: 1.5.2 web3-core-method: 1.5.2 @@ -24258,7 +24279,7 @@ packages: resolution: {integrity: sha512-nH5N2GiVC0C5XeMEKU16PeFP3Hb3hkPvlR6Tf9WQ+pE+jw1c8eaXBO1CJQLr15ikhUF3s94ICyHcfjzkDsmRbA==} engines: {node: '>=8.0.0'} dependencies: - '@types/node': 16.11.24 + '@types/node': 17.0.18 web3-core: 1.5.2 web3-core-helpers: 1.5.2 web3-core-method: 1.5.2 @@ -24322,7 +24343,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: web3-core-helpers: 1.5.2 - xhr2-cookies: link:package-overrides/xhr2-cookies + xhr2-cookies: 1.1.0 /web3-providers-ipc/1.5.2: resolution: {integrity: sha512-SJC4Sivt4g9LHKlRy7cs1jkJgp7bjrQeUndE6BKs0zNALKguxu6QYnzbmuHCTFW85GfMDjhvi24jyyZHMnBNXQ==} @@ -24381,7 +24402,7 @@ packages: bignumber.js: github.com/frozeman/bignumber.js-nolookahead/57692b3ecfc98bbdd6b3a516cb2353652ea49934 crypto-js: 3.3.0 utf8: 2.1.2 - xhr2-cookies: link:package-overrides/xhr2-cookies + xhr2-cookies: 1.1.0 xmlhttprequest: 1.8.0 dev: false @@ -25119,6 +25140,11 @@ packages: parse-headers: 2.0.4 xtend: 4.0.2 + /xhr2-cookies/1.1.0: + resolution: {integrity: sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=} + dependencies: + cookiejar: 2.1.3 + /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true @@ -25436,7 +25462,7 @@ packages: '@0xproject/utils': 0.1.3 '@0xproject/web3-wrapper': 0.1.14 '@types/lodash': 4.14.178 - '@types/node': 16.11.24 + '@types/node': 17.0.18 0x.js: 0.29.2 awesome-typescript-loader: 3.5.0_typescript@2.9.2 bn.js: 4.12.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 03fa5787a12b..b4c852afdb45 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,6 +25,7 @@ packages: - 'packages/icons' - 'packages/theme' - 'packages/plugin-infra' + - 'packages/plugins/template' - 'packages/plugins/example' - 'packages/plugins/Debugger' - 'packages/plugins/Wallet' diff --git a/tsconfig.json b/tsconfig.json index 11d880a856e4..f57ae37e680d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ { "path": "./packages/dashboard/stories" }, { "path": "./packages/theme/stories" }, // Tests + // @masknet/scripts: insert-here { "path": "./packages/backup-format/tsconfig.tests.json" }, { "path": "./packages/encryption/tsconfig.tests.json" }, { "path": "./packages/shared-base/tsconfig.tests.json" },