diff --git a/packages/maskbook/package.json b/packages/maskbook/package.json index 3c7cf1b4eb1e..f3916f010b50 100644 --- a/packages/maskbook/package.json +++ b/packages/maskbook/package.json @@ -122,6 +122,7 @@ "@dimensiondev/webextension-shim": "0.0.3-20210708053012-57a254d", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.0-rc.0", "@sinonjs/text-encoding": "^0.7.1", + "@swc/core": "^1.2.62", "@testing-library/react-hooks": "^7.0.1", "@types/elliptic": "^6.4.12", "@types/enzyme": "^3.10.9", @@ -159,8 +160,8 @@ "react-test-renderer": "^17.0.1", "rimraf": "^3.0.2", "source-map-loader": "^3.0.0", + "swc-loader": "^0.1.14", "ts-jest": "27.0.4", - "ts-loader": "^9.2.3", "type-coverage": "^2.18.0", "webpack": "^5.46.0", "webpack-cli": "^4.7.2", diff --git a/packages/maskbook/src/plugins/Trader/trending/useAvailableCoins.ts b/packages/maskbook/src/plugins/Trader/trending/useAvailableCoins.ts index 3c95f6f7078d..9fe6983ea893 100644 --- a/packages/maskbook/src/plugins/Trader/trending/useAvailableCoins.ts +++ b/packages/maskbook/src/plugins/Trader/trending/useAvailableCoins.ts @@ -1,8 +1,9 @@ import { useAsync } from 'react-use' +import type { AsyncState } from 'react-use/lib/useAsyncFn' import { PluginTraderRPC } from '../messages' -import type { DataProvider, TagType } from '../types' +import type { Coin, DataProvider, TagType } from '../types' -export function useAvailableCoins(type: TagType, keyword: string, dataProvider: DataProvider) { +export function useAvailableCoins(type: TagType, keyword: string, dataProvider: DataProvider): AsyncState { return useAsync(async () => { if (!keyword) return [] return PluginTraderRPC.getAvailableCoins(keyword, type, dataProvider) diff --git a/packages/maskbook/src/plugins/Trader/trending/useAvailableDataProviders.ts b/packages/maskbook/src/plugins/Trader/trending/useAvailableDataProviders.ts index e267a5b96493..c5358880cb83 100644 --- a/packages/maskbook/src/plugins/Trader/trending/useAvailableDataProviders.ts +++ b/packages/maskbook/src/plugins/Trader/trending/useAvailableDataProviders.ts @@ -1,9 +1,10 @@ import { useAsync } from 'react-use' import { useChainId } from '@masknet/web3-shared' import { PluginTraderRPC } from '../messages' -import type { TagType } from '../types' +import type { DataProvider, TagType } from '../types' +import type { AsyncState } from 'react-use/lib/useAsyncFn' -export function useAvailableDataProviders(type?: TagType, keyword?: string) { +export function useAvailableDataProviders(type?: TagType, keyword?: string): AsyncState { const chainId = useChainId() return useAsync(async () => { return PluginTraderRPC.getAvailableDataProviders(type, keyword) diff --git a/packages/maskbook/src/plugins/Trader/trending/useAvailableTraderProviders.ts b/packages/maskbook/src/plugins/Trader/trending/useAvailableTraderProviders.ts index aceac62c2362..c391b5780262 100644 --- a/packages/maskbook/src/plugins/Trader/trending/useAvailableTraderProviders.ts +++ b/packages/maskbook/src/plugins/Trader/trending/useAvailableTraderProviders.ts @@ -1,9 +1,10 @@ import { useAsync } from 'react-use' import { useChainId } from '@masknet/web3-shared' import { PluginTraderRPC } from '../messages' -import type { TagType } from '../types' +import type { TagType, TradeProvider } from '../types' +import type { AsyncState } from 'react-use/lib/useAsyncFn' -export function useAvailableTraderProviders(type?: TagType, keyword?: string) { +export function useAvailableTraderProviders(type?: TagType, keyword?: string): AsyncState { const chainId = useChainId() return useAsync(async () => { return PluginTraderRPC.getAvailableTraderProviders(type, keyword) diff --git a/packages/maskbook/src/utils/hooks/useQRCodeImageScan.tsx b/packages/maskbook/src/utils/hooks/useQRCodeImageScan.tsx index b55a58ed6281..df957e52c0f3 100644 --- a/packages/maskbook/src/utils/hooks/useQRCodeImageScan.tsx +++ b/packages/maskbook/src/utils/hooks/useQRCodeImageScan.tsx @@ -1,8 +1,9 @@ import { loadImage } from '@dimensiondev/kit' import { useRef, useState, useEffect } from 'react' import { useAsync } from 'react-use' +import type { AsyncState } from 'react-use/lib/useAsyncFn' -export function useQRCodeImageScan(image: React.MutableRefObject) { +export function useQRCodeImageScan(image: React.MutableRefObject): AsyncState { const scanner = useRef(new BarcodeDetector({ formats: ['qr_code'] })) const [source, setSource] = useState('') diff --git a/packages/maskbook/src/utils/hooks/useQueryNavigatorPermission.ts b/packages/maskbook/src/utils/hooks/useQueryNavigatorPermission.ts index fb064ead06bc..4920253a08ad 100644 --- a/packages/maskbook/src/utils/hooks/useQueryNavigatorPermission.ts +++ b/packages/maskbook/src/utils/hooks/useQueryNavigatorPermission.ts @@ -3,7 +3,7 @@ import { useEffect, useState } from 'react' import { hasIn } from 'lodash-es' import { Flags } from '../flags' -const q = ['query', 'request', 'revoke'] +const q = ['query', 'request', 'revoke'] as const export function checkPermissionApiUsability(type?: typeof q[number]) { const r: Partial<{ [T in typeof q[number]]: boolean }> = {} diff --git a/packages/maskbook/src/utils/theme-global.d.ts b/packages/maskbook/src/utils/theme-global.d.ts new file mode 100644 index 000000000000..6a4c7502d5b4 --- /dev/null +++ b/packages/maskbook/src/utils/theme-global.d.ts @@ -0,0 +1,6 @@ +declare module '@material-ui/core/styles/createPalette.d' { + export interface TypeText { + hint: string + } +} +export {} diff --git a/packages/maskbook/src/utils/theme.ts b/packages/maskbook/src/utils/theme.ts index ca0076c7c391..34f781dbd1df 100644 --- a/packages/maskbook/src/utils/theme.ts +++ b/packages/maskbook/src/utils/theme.ts @@ -12,6 +12,7 @@ import { useMemo, useRef } from 'react' import { or } from '../components/custom-ui-helper' import { appearanceSettings, languageSettings } from '../settings/settings' import { activatedSocialNetworkUI } from '../social-network' +import './theme-global.d' function getFontFamily(monospace?: boolean) { // We want to look native. @@ -178,9 +179,3 @@ export const useErrorStyles = makeStyles((theme) => { export function extendsTheme(extend: (theme: Theme) => ThemeOptions) { return (theme: Theme) => merge(cloneDeep(theme), extend(theme)) } - -declare module '@material-ui/core/styles/createPalette.d' { - export interface TypeText { - hint: string - } -} diff --git a/packages/maskbook/webpack.config.ts b/packages/maskbook/webpack.config.ts index 1e35f1529f1d..f3d1fd042914 100644 --- a/packages/maskbook/webpack.config.ts +++ b/packages/maskbook/webpack.config.ts @@ -13,7 +13,6 @@ import type { Configuration as DevServerConfiguration } from 'webpack-dev-server //#region Development plugins import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin' -import ReactRefreshTypeScriptTransformer from 'react-refresh-typescript' import NotifierPlugin from 'webpack-notifier' //#endregion //#region Other plugins @@ -132,18 +131,30 @@ function config(opts: { parser: { worker: ['OnDemandWorker', '...'] }, // Compile all ts files in the workspace include: src('../'), - loader: require.resolve('ts-loader'), + loader: require.resolve('swc-loader'), options: { - transpileOnly: true, - compilerOptions: { - importsNotUsedAsValues: 'remove', - jsx: mode === 'production' ? 'react-jsx' : 'react-jsxdev', + jsc: { + parser: { + syntax: 'typescript', + dynamicImport: true, + tsx: true, + importAssertions: true, + }, + target: 'es2019', + externalHelpers: true, + transform: { + react: { + runtime: 'automatic', + useBuiltins: true, + development: disableReactHMR ? false : mode === 'development', + refresh: { + refreshReg: '$RefreshReg$', + refreshSig: '$RefreshSig$', + emitFullSignatures: true, + }, + }, + }, }, - getCustomTransformers: () => ({ - before: [!disableHMR && !disableReactHMR && ReactRefreshTypeScriptTransformer()].filter( - Boolean, - ), - }), }, }, ], diff --git a/packages/shared-base/src/Identifier/IdentifierMap.ts b/packages/shared-base/src/Identifier/IdentifierMap.ts index 04e67941ddc6..385092f7c411 100644 --- a/packages/shared-base/src/Identifier/IdentifierMap.ts +++ b/packages/shared-base/src/Identifier/IdentifierMap.ts @@ -8,7 +8,6 @@ import { immerable } from 'immer' * Because Identifier is not a value-type record so to make it behave like a value-type, * please use this class instead of Map. */ -@serialize('IdentifierMap') export class IdentifierMap implements Map { [immerable] = true /** @@ -101,6 +100,7 @@ export class IdentifierMap implements Map< return this.entries() } } +serialize('IdentifierMap')(IdentifierMap) IdentifierMap.prototype[Symbol.toStringTag] = 'IdentifierMap' export type ReadonlyIdentifierMap = ReadonlyMap & { diff --git a/packages/shared-base/src/Identifier/type.ts b/packages/shared-base/src/Identifier/type.ts index b5d3bc7de73c..2369a941b0ed 100644 --- a/packages/shared-base/src/Identifier/type.ts +++ b/packages/shared-base/src/Identifier/type.ts @@ -78,7 +78,6 @@ export abstract class Identifier { return ax.join(',') } } -@serialize('ProfileIdentifier') export class ProfileIdentifier extends Identifier { static getUserName(x: string | ProfileIdentifier): string | null { if (typeof x === 'string') { @@ -114,7 +113,7 @@ export class ProfileIdentifier extends Identifier { return new ProfileIdentifier(network, userId) } } -@serialize('GroupIdentifier') +serialize('ProfileIdentifier')(ProfileIdentifier) export class GroupIdentifier extends Identifier { static getFriendsGroupIdentifier(who: ProfileIdentifier, groupId: string) { return new GroupIdentifier(who.network, who.userId, groupId) @@ -148,7 +147,7 @@ export class GroupIdentifier extends Identifier { return new GroupIdentifier(network, belongs, groupID) } } -@serialize('PostIdentifier') +serialize('GroupIdentifier')(GroupIdentifier) export class PostIdentifier extends Identifier { static readonly unknown = new PostIdentifier(ProfileIdentifier.unknown, '$unknown') get isUnknown() { @@ -172,7 +171,7 @@ export class PostIdentifier extends Identifie return new PostIdentifier(id.val, postId) } } -@serialize('PostIVIdentifier') +serialize('PostIdentifier')(PostIdentifier) export class PostIVIdentifier extends Identifier { constructor(public readonly network: string, public readonly postIV: string) { super() @@ -186,12 +185,12 @@ export class PostIVIdentifier extends Identifier { return new PostIVIdentifier(network, iv) } } +serialize('PostIVIdentifier')(PostIVIdentifier) /** * This class identify the point on an EC curve. * ec_key:secp256k1/CompressedPoint */ -@serialize('ECKeyIdentifier') export class ECKeyIdentifier extends Identifier { public readonly type = 'ec_key' constructor(public readonly curve: 'secp256k1', public readonly compressedPoint: string) { @@ -209,6 +208,7 @@ export class ECKeyIdentifier extends Identifier { return new ECKeyIdentifier(curve, point) } } +serialize('ECKeyIdentifier')(ECKeyIdentifier) export type PersonaIdentifier = ECKeyIdentifier // eslint-disable-next-line no-redeclare export const PersonaIdentifier = [ECKeyIdentifier] diff --git a/packages/shared-base/src/TypedMessage/utils/index.ts b/packages/shared-base/src/TypedMessage/utils/index.ts index f210e640d4fc..301dac0c8d43 100644 --- a/packages/shared-base/src/TypedMessage/utils/index.ts +++ b/packages/shared-base/src/TypedMessage/utils/index.ts @@ -10,8 +10,8 @@ import { eq } from 'lodash-es' import { Err, Ok, Result } from 'ts-results' export function isSerializableTypedMessage(x: TypedMessage): x is SerializableTypedMessages { - if ((>x).serializable) return true - const y = x + if ((x as SerializableTypedMessage).serializable) return true + const y = x as NonSerializableWithToJSONTypedMessage if (y.serializable === false && y.toJSON) return true return false } diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index a202891c1182..25c2aa23cc39 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "rootDir": "./src/", "outDir": "./dist/", - "experimentalDecorators": true, "tsBuildInfoFile": "./dist/.tsbuildinfo" }, "include": ["./src/**/*", "./src/**/*.json", "./src/locales/*.json"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c5ad851baba..d0ea295dfa82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -245,6 +245,7 @@ importers: '@servie/events': ^3.0.0 '@sinonjs/text-encoding': ^0.7.1 '@snapshot-labs/snapshot.js': github:snapshot-labs/snapshot.js#f32bf0f5b4a27a23b0db3c6fdaced1abab25f55a + '@swc/core': ^1.2.62 '@testing-library/react-hooks': ^7.0.1 '@types/bn.js': ^4.11.6 '@types/d3': 5.16.4 @@ -348,9 +349,9 @@ importers: source-map-loader: ^3.0.0 stream-browserify: ^3.0.0 stream-http: ^2.8.3 + swc-loader: ^0.1.14 tiny-secp256k1: ^1.1.5 ts-jest: 27.0.4 - ts-loader: ^9.2.3 ts-results: ^3.3.0 type-coverage: ^2.18.0 unstated-next: ^1.1.0 @@ -490,6 +491,7 @@ importers: '@dimensiondev/webextension-shim': 0.0.3-20210708053012-57a254d_typescript@4.3.5 '@pmmmwh/react-refresh-webpack-plugin': 0.5.0-rc.2_0cb17a392999b7da0b5f4263f37b1695 '@sinonjs/text-encoding': 0.7.1 + '@swc/core': 1.2.63 '@testing-library/react-hooks': 7.0.1_1959de3a9153879cff3acd96b46ed70f '@types/enzyme': 3.10.9 '@types/enzyme-adapter-react-16': 1.0.6 @@ -526,8 +528,8 @@ importers: react-test-renderer: 17.0.2_react@18.0.0-alpha-aecb3b6d1 rimraf: 3.0.2 source-map-loader: 3.0.0_webpack@5.46.0 + swc-loader: 0.1.14_webpack@5.46.0 ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 - ts-loader: 9.2.3_typescript@4.3.5+webpack@5.46.0 type-coverage: 2.18.0_typescript@4.3.5 webpack: 5.46.0_webpack-cli@4.7.2 webpack-cli: 4.7.2_d46d1c9a5e33a01c3500802a2e542ae0 @@ -739,7 +741,7 @@ packages: bintrees: 1.0.2 bn.js: 4.12.0 compare-versions: 3.6.0 - ethereumjs-abi: 0.6.6 + ethereumjs-abi: 0.6.8 ethereumjs-blockstream: 2.0.7 ethereumjs-util: 5.2.1 find-versions: 2.0.0 @@ -5751,11 +5753,22 @@ packages: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} dev: false + /@napi-rs/triples/1.0.2: + resolution: {integrity: sha512-EL3SiX43m9poFSnhDx4d4fn9SSaqyO2rHsCNhETi9bWPmjXK3uPJ0QpPFtx39FEdHcz1vJmsiW41kqc0AgvtzQ==} + dev: true + /@nice-labs/git-rev/3.5.0: resolution: {integrity: sha512-Ea0kEEqm3Du1JfNL6SiUHyO9BwctA+eY9GFHYxegb8S0rjaXMUGFWo99ONfPBkN3wjpG0z9sw96x+jLGePraEw==} engines: {node: '>= 11'} dev: true + /@node-rs/helper/1.2.0: + resolution: {integrity: sha512-pzIFIS0POyqWVqdcF0NQO2DjnO1IeI1UN/hENCZMW3o/ndEpTmZLRVhoXGSHjjzoQaEuHwzj79BnYUXI3syv8w==} + dependencies: + '@napi-rs/triples': 1.0.2 + tslib: 2.3.0 + dev: true + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -7766,6 +7779,122 @@ packages: '@styled-system/css': 5.1.5 dev: true + /@swc/core-android-arm64/1.2.63: + resolution: {integrity: sha512-3Q43hlq4C2EX1jcFex0OsFNjT742fYgnPfNnWDtSeOXZz5D2e1pIpjSXfZZtOE3ZIvXlIAb1d99yw8fBQ5uSpA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [android] + dev: true + optional: true + + /@swc/core-darwin-arm64/1.2.63: + resolution: {integrity: sha512-6wN8Ur65ugCIZJiHOPav73IyPTUxmn/+7MqSwx0jB+80dp8PqEdj32AQOMtvvj/Ts1lXg023CLC7kXDsbOYYjw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + dev: true + optional: true + + /@swc/core-darwin-x64/1.2.63: + resolution: {integrity: sha512-xGSPmOMU28U0t9rNHilaD3nN9xoP772lUhtM9U8By4tKk4ZJcjMjL79XtoMflbKP3HhYU+qeyTnsDG3STaCYwg==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + dev: true + optional: true + + /@swc/core-freebsd-x64/1.2.63: + resolution: {integrity: sha512-gil07mAooVket0GmjuCHrpLjxmxaMFpKRLWHMKWZ1uwK6o9IC8b7c9II60O/5kbjFnhX1KMx078N4oZphhydjQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [freebsd] + dev: true + optional: true + + /@swc/core-linux-arm-gnueabihf/1.2.63: + resolution: {integrity: sha512-KgpIKQRxLQoXgzafx0t+HKuz9sF6D51eboFEvGkqyXCSuybu6mD+BIU2A25fHiS3LJrFCmKAkJjTvffzFN1Olw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + dev: true + optional: true + + /@swc/core-linux-arm64-gnu/1.2.63: + resolution: {integrity: sha512-dHVNAiQaQw/6ysUgQttsg0+3ElN6Puv9TboNH+FudJoNYecmZjfiPIZQi8S2VxzrUqpcg/jOWSsnUOTaDx7GlQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + dev: true + optional: true + + /@swc/core-linux-arm64-musl/1.2.63: + resolution: {integrity: sha512-ZfOKCZi/HvhVfus52QLVUT4ckSEnYKoMx7IKvHj4Vqij59JzeU3XscsD0Pkx8DJKzs5ZJikukFJqOuexryLZfw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + dev: true + optional: true + + /@swc/core-linux-x64-gnu/1.2.63: + resolution: {integrity: sha512-ht+UTpMDo8lGJHatA/YkQwkR6lbqv11GbKaGu76vG1g8lPmppDeQtdA7UL659LdrbfHxCKm8FT9pEgPR837fxQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + dev: true + optional: true + + /@swc/core-linux-x64-musl/1.2.63: + resolution: {integrity: sha512-bQXjfJ0z1aBgfrNtNFbPxmjCYbVOdDthcR19L6rwMo4g0M91YYUSpA7xQ4P6pT/m8y1rsau87t9ZoE/C5I3qxA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + dev: true + optional: true + + /@swc/core-win32-arm64-msvc/1.2.63: + resolution: {integrity: sha512-hjXBDYxlDqI8ybRQnJSlWiDUOtRc7FJw0ypkfb54NfGagzBubxzXUrVfZJcG6wLmR5ub0fINb2aX/7F86e2UMg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + dev: true + optional: true + + /@swc/core-win32-ia32-msvc/1.2.63: + resolution: {integrity: sha512-++QMBZQ4N12DkMie6YPRWENnxgsR3oosGWnMb/lwGhuYk82YCeOBjoItgqrGxL4KBq7y3+uR135OPf7r2sCJcA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + dev: true + optional: true + + /@swc/core-win32-x64-msvc/1.2.63: + resolution: {integrity: sha512-SzpMh2c47BPSTuWWtiJhiCHrmHWEubMbmf1MWW8eVnK+oDZJuk86LYxuLRm0vHZellgX9UehSMfc0uzJTwvb5w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + dev: true + optional: true + + /@swc/core/1.2.63: + resolution: {integrity: sha512-jjpYsgPHBcAa9rAxEDRPlRxoXlVfhCopDvScyJeFutF1EE+q4ZVc4Qj4bSRRRMGZIPrznpFX7+zFDP46QfgCnQ==} + engines: {node: '>=10'} + dependencies: + '@node-rs/helper': 1.2.0 + optionalDependencies: + '@swc/core-android-arm64': 1.2.63 + '@swc/core-darwin-arm64': 1.2.63 + '@swc/core-darwin-x64': 1.2.63 + '@swc/core-freebsd-x64': 1.2.63 + '@swc/core-linux-arm-gnueabihf': 1.2.63 + '@swc/core-linux-arm64-gnu': 1.2.63 + '@swc/core-linux-arm64-musl': 1.2.63 + '@swc/core-linux-x64-gnu': 1.2.63 + '@swc/core-linux-x64-musl': 1.2.63 + '@swc/core-win32-arm64-msvc': 1.2.63 + '@swc/core-win32-ia32-msvc': 1.2.63 + '@swc/core-win32-x64-msvc': 1.2.63 + dev: true + /@szmarczak/http-timer/1.1.2: resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} engines: {node: '>=6'} @@ -14126,11 +14255,11 @@ packages: setimmediate: 1.0.5 dev: false - /ethereumjs-abi/0.6.6: - resolution: {integrity: sha512-w8KubDsA/+OAuqtIR9RGsMcoZ5nhM8vxwjJAJvEIY+clhxA3BHoLG3+ClYQaQhD0n3mlDt3U5rBrmSVJvI3c8A==} + /ethereumjs-abi/0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: bn.js: 4.12.0 - ethereumjs-util: 5.2.1 + ethereumjs-util: 6.2.1 dev: false /ethereumjs-account/2.0.5: @@ -23762,6 +23891,16 @@ packages: xhr-request: 1.1.0 dev: false + /swc-loader/0.1.14_webpack@5.46.0: + resolution: {integrity: sha512-JNSnwWj2EK5tbSWHELcYe8sJVQEHoezLYZRwRTW6HcelsLgsy+i4V1HFW8x1tcfZLvWyyTyompeVUuwpVudtTQ==} + peerDependencies: + webpack: '>=2' + dependencies: + '@swc/core': 1.2.63 + loader-utils: 2.0.0 + webpack: 5.46.0_webpack-cli@4.7.2 + dev: true + /symbol-observable/1.2.0: resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} engines: {node: '>=0.10.0'} @@ -24305,21 +24444,6 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-loader/9.2.3_typescript@4.3.5+webpack@5.46.0: - resolution: {integrity: sha512-sEyWiU3JMHBL55CIeC4iqJQadI0U70A5af0kvgbNLHVNz2ACztQg0j/9x10bjjIht8WfFYLKfn4L6tkZ+pu+8Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - dependencies: - chalk: 4.1.1 - enhanced-resolve: 5.8.2 - micromatch: 4.0.4 - semver: 7.3.5 - typescript: 4.3.5 - webpack: 5.46.0_webpack-cli@4.7.2 - dev: true - /ts-node/10.1.0_typescript@4.3.5: resolution: {integrity: sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==} engines: {node: '>=12.0.0'}