From f91d173dac5a9a4da1ae848c45255d14ffb34053 Mon Sep 17 00:00:00 2001 From: Christopher Pappas Date: Sat, 23 Nov 2024 21:39:26 -0800 Subject: [PATCH 1/2] test: add test coverage --- .../Utils/__tests__/renderToStream.jest.tsx | 126 ++++++++++++++++++ src/System/Router/Utils/collectAssets.tsx | 6 +- 2 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 src/System/Router/Utils/__tests__/renderToStream.jest.tsx diff --git a/src/System/Router/Utils/__tests__/renderToStream.jest.tsx b/src/System/Router/Utils/__tests__/renderToStream.jest.tsx new file mode 100644 index 00000000000..a6c15c747ea --- /dev/null +++ b/src/System/Router/Utils/__tests__/renderToStream.jest.tsx @@ -0,0 +1,126 @@ +import { flushPromiseQueue } from "DevTools/flushPromiseQueue" +import { renderToPipeableStream } from "react-dom/server" +import { ArtsyResponse } from "Server/middleware/artsyExpress" +import { renderToStream } from "System/Router/Utils/renderToStream" + +jest.mock("react-dom/server", () => ({ + renderToPipeableStream: jest.fn(), +})) + +describe("renderToStream", () => { + const mockRenderToPipeableStream = renderToPipeableStream as jest.Mock + + const mockRes = ({ + statusCode: 0, + setHeader: jest.fn(), + } as unknown) as ArtsyResponse + + const mockSheet = { + _emitSheetCSS: jest.fn(() => "mock-css"), + instance: { + clearTag: jest.fn(), + }, + } + + afterEach(() => { + jest.clearAllMocks() + }) + + it("should set the response status and content type on shell ready", async () => { + const mockPipe = jest.fn() + const mockAbort = jest.fn() + + mockRenderToPipeableStream.mockImplementation((_, options) => { + setTimeout(() => { + options.onShellReady() + }) + + return { pipe: mockPipe, abort: mockAbort } + }) + + const jsx =
Hello World
+ renderToStream(jsx, mockSheet, mockRes) + + await flushPromiseQueue() + + expect(mockRes.statusCode).toBe(200) + expect(mockRes.setHeader).toHaveBeenCalledWith( + "Content-Type", + "text/html; charset=utf-8" + ) + expect(mockPipe).toHaveBeenCalled() + }) + + it("should handle onError and set didError to true", async () => { + const mockPipe = jest.fn() + const mockAbort = jest.fn() + + mockRenderToPipeableStream.mockImplementation((_, options) => { + options.onError(new Error("Test error")) + + setTimeout(() => { + options.onShellReady() + }) + + return { pipe: mockPipe, abort: mockAbort } + }) + + const jsx =
Hello Error
+ renderToStream(jsx, mockSheet, mockRes) + + await flushPromiseQueue() + + expect(mockRes.statusCode).toBe(500) + expect(mockPipe).toHaveBeenCalled() + }) + + it("should call abort if STREAM_TIMEOUT is reached", () => { + jest.useFakeTimers() + const mockAbort = jest.fn() + + mockRenderToPipeableStream.mockImplementation((_, options) => { + return { pipe: jest.fn(), abort: mockAbort } + }) + + const jsx =
Timeout Test
+ renderToStream(jsx, mockSheet, mockRes) + + jest.advanceTimersByTime(5000) + + expect(mockAbort).toHaveBeenCalled() + jest.useRealTimers() + }) + + // eslint-disable-next-line jest/no-done-callback + it("should transform the stream and inject CSS into the HTML", done => { + const mockPipe = jest.fn() + const mockAbort = jest.fn() + + mockRenderToPipeableStream.mockImplementation((_, options) => { + setTimeout(() => { + options.onShellReady() + }) + return { pipe: mockPipe, abort: mockAbort } + }) + + const jsx =
Stream Test
+ const stream = renderToStream(jsx, mockSheet, mockRes) + + stream.write("") + + const chunks: string[] = [] + stream.on("data", chunk => { + chunks.push(chunk) + }) + + stream.on("end", () => { + const result = chunks.join("") + expect(result).toContain( + "mock-css" + ) + done() + }) + + stream.end() + }) +}) diff --git a/src/System/Router/Utils/collectAssets.tsx b/src/System/Router/Utils/collectAssets.tsx index 54ff430f234..ecc6c6a0cd7 100644 --- a/src/System/Router/Utils/collectAssets.tsx +++ b/src/System/Router/Utils/collectAssets.tsx @@ -70,6 +70,8 @@ export const collectAssets = async ({ const initialRelayData = await relaySSRMiddleware.getCache() + console.log(initialRelayData) + const extractScriptTags = () => { const initialScripts: string[] = [] @@ -79,10 +81,6 @@ export const collectAssets = async ({ bundleScriptTags .split("\n") .map(script => { - /** - * In production, prefix injected script src with CDN endpoint. - * @see https://github.com/artsy/force/blob/main/src/lib/middleware/asset.ts#L23 - */ if (getENV("CDN_URL")) { const scriptTagWithCDN = script.replace( /src="\/assets/g, From 41fae0e234bde4070d8d3b4962257824912fedf1 Mon Sep 17 00:00:00 2001 From: Christopher Pappas Date: Sat, 23 Nov 2024 22:03:03 -0800 Subject: [PATCH 2/2] chore: remove swc in prep for RSPack --- .gitignore | 1 - .swcrc.js | 36 ----- HACKS.md | 35 ----- __mocks__/@loadable/component.tsx | 11 +- coffeelint.json | 132 ------------------ jest.config.js | 9 +- jest.legacy.config.js | 1 - package.json | 5 - scripts/clean.sh | 1 - ...woFactorBackupCodesActions.jest.enzyme.tsx | 3 +- .../Utils/__tests__/renderToStream.jest.tsx | 126 ----------------- webpack/envs/clientDevelopmentConfig.js | 12 +- webpack/sharedLoaders.js | 12 -- webpack/webpackEnv.js | 3 - yarn.lock | 125 ----------------- 15 files changed, 5 insertions(+), 507 deletions(-) delete mode 100644 .swcrc.js delete mode 100644 HACKS.md delete mode 100644 coffeelint.json delete mode 100644 src/System/Router/Utils/__tests__/renderToStream.jest.tsx diff --git a/.gitignore b/.gitignore index 11b82ceeed4..43af4e797ee 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ .env .env.* !.env.development -.swc/ .yalc *.csv *.dat diff --git a/.swcrc.js b/.swcrc.js deleted file mode 100644 index 36952625f1f..00000000000 --- a/.swcrc.js +++ /dev/null @@ -1,36 +0,0 @@ -module.exports = { - jsc: { - experimental: { - plugins: [ - [ - "@swc/plugin-styled-components", - { - displayName: true, - ssr: true, - }, - ], - [ - "@swc/plugin-relay", - { - language: "typescript", - schema: "data/schema.graphql", - rootDir: __dirname, - src: "src", - artifactDirectory: "src/__generated__", - }, - ], - ], - }, - parser: { - decorators: true, - dynamicImport: true, - syntax: "typescript", - tsx: true, - }, - transform: { - react: { - runtime: "automatic", - }, - }, - }, -} diff --git a/HACKS.md b/HACKS.md deleted file mode 100644 index 5589f96bc28..00000000000 --- a/HACKS.md +++ /dev/null @@ -1,35 +0,0 @@ - - -> 👀 When adding a new item, see comment on top of file for template. - -## patches/relay-mock-network-layer+2.0.0.patch - -#### Explanation/Context: - -Added to better support our custom relay test tools, but has been superceded in favor of official relay testing tools. This still remains because of old code tests. - -#### When can we remove this: - -Can be removed when old relay test code has been deleted, and our legacy Relay dev tools in v2/Devtools is no longer used. - -## patches/found+0.5.5.patch - -#### Explanation/Context: - -Added in order to support proper types in `findCurrentRoute`. - -#### When can we remove this: - -When correct types are added to found. diff --git a/__mocks__/@loadable/component.tsx b/__mocks__/@loadable/component.tsx index 047e13b48d1..7ef4077acea 100644 --- a/__mocks__/@loadable/component.tsx +++ b/__mocks__/@loadable/component.tsx @@ -1,16 +1,7 @@ import React from "react" async function loadable(load, { resolveComponent }) { - let Component - - // If running jest using babel, lean on babel-plugin-loadable - // TODO: Remove this when we fully switch to SWC - if (load.requireSync) { - Component = resolveComponent(load.requireSync()) - // Using SWC compiler, no transform; load like normal - } else { - Component = resolveComponent(await load()) - } + let Component = resolveComponent(load.requireSync()) const Loadable = props => { return diff --git a/coffeelint.json b/coffeelint.json deleted file mode 100644 index 411ec2a8df3..00000000000 --- a/coffeelint.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "arrow_spacing": { - "level": "ignore" - }, - "braces_spacing": { - "level": "ignore", - "spaces": 0, - "empty_object_spaces": 0 - }, - "camel_case_classes": { - "level": "error" - }, - "colon_assignment_spacing": { - "level": "ignore", - "spacing": { - "left": 0, - "right": 0 - } - }, - "cyclomatic_complexity": { - "level": "ignore", - "value": 10 - }, - "duplicate_key": { - "level": "error" - }, - "empty_constructor_needs_parens": { - "level": "ignore" - }, - "ensure_comprehensions": { - "level": "warn" - }, - "eol_last": { - "level": "ignore" - }, - "indentation": { - "value": 2, - "level": "error" - }, - "line_endings": { - "level": "ignore", - "value": "unix" - }, - "max_line_length": { - "value": 1000, - "level": "error", - "limitComments": true - }, - "missing_fat_arrows": { - "level": "ignore", - "is_strict": false - }, - "newlines_after_classes": { - "value": 3, - "level": "ignore" - }, - "no_backticks": { - "level": "error" - }, - "no_debugger": { - "level": "warn", - "console": false - }, - "no_empty_functions": { - "level": "ignore" - }, - "no_empty_param_list": { - "level": "ignore" - }, - "no_implicit_braces": { - "level": "ignore", - "strict": true - }, - "no_implicit_parens": { - "level": "ignore", - "strict": true - }, - "no_interpolation_in_single_quotes": { - "level": "ignore" - }, - "no_nested_string_interpolation": { - "level": "warn" - }, - "no_plusplus": { - "level": "ignore" - }, - "no_private_function_fat_arrows": { - "level": "warn" - }, - "no_stand_alone_at": { - "level": "ignore" - }, - "no_tabs": { - "level": "error" - }, - "no_this": { - "level": "ignore" - }, - "no_throwing_strings": { - "level": "error" - }, - "no_trailing_semicolons": { - "level": "error" - }, - "no_trailing_whitespace": { - "level": "error", - "allowed_in_comments": false, - "allowed_in_empty_lines": true - }, - "no_unnecessary_double_quotes": { - "level": "ignore" - }, - "no_unnecessary_fat_arrows": { - "level": "warn" - }, - "non_empty_constructor_needs_parens": { - "level": "ignore" - }, - "prefer_english_operator": { - "level": "ignore", - "doubleNotLevel": "ignore" - }, - "space_operators": { - "level": "ignore" - }, - "spacing_after_comma": { - "level": "ignore" - }, - "transform_messes_up_line_numbers": { - "level": "warn" - } -} diff --git a/jest.config.js b/jest.config.js index 3ec3ba23af0..b16f1bf7824 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,10 +1,5 @@ -const swcConfig = require("./.swcrc.js") const { webpackEnv } = require("./webpack/webpackEnv") -if (webpackEnv.experimentalSWCCompiler) { - console.log("[jest.config.js] Experimental SWC Compiler is enabled.\n") -} - module.exports = { cacheDirectory: ".cache/jest", moduleDirectories: ["node_modules", "/src"], @@ -25,9 +20,7 @@ module.exports = { }, transform: { "\\.(gql|graphql)$": "@graphql-tools/jest-transform", - "(ts|tsx|js|jsx)$": webpackEnv.experimentalSWCCompiler - ? ["@swc/jest", swcConfig] - : "babel-jest", + "(ts|tsx|js|jsx)$": "babel-jest", }, watchPlugins: [ "jest-watch-typeahead/filename", diff --git a/jest.legacy.config.js b/jest.legacy.config.js index 4320ee7b941..0013b19dc30 100644 --- a/jest.legacy.config.js +++ b/jest.legacy.config.js @@ -1,4 +1,3 @@ -const swcConfig = require("./.swcrc.js") const { webpackEnv } = require("./webpack/webpackEnv") module.exports = { diff --git a/package.json b/package.json index f97f1367213..bec81618a9d 100644 --- a/package.json +++ b/package.json @@ -228,10 +228,6 @@ "@storybook/builder-webpack5": "6.5.13", "@storybook/manager-webpack5": "6.5.13", "@storybook/react": "6.5.13", - "@swc/core": "^1.3.95", - "@swc/jest": "^0.2.29", - "@swc/plugin-relay": "^1.5.94", - "@swc/plugin-styled-components": "^1.5.94", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", "@testing-library/react-hooks": "^8.0.1", @@ -337,7 +333,6 @@ "size-plugin": "^3.0.0", "storybook-states": "1.2.0", "style-loader": "0.23.1", - "swc-loader": "^0.2.3", "terser-webpack-plugin": "5.1.3", "time-fix-plugin": "^2.0.7", "typescript": "^5.6.3", diff --git a/scripts/clean.sh b/scripts/clean.sh index 1964a4f952c..bbca1bf166c 100755 --- a/scripts/clean.sh +++ b/scripts/clean.sh @@ -3,7 +3,6 @@ set -ex rm -rf .cache -rm -rf .swc rm -f manifest.json rm -rf public mkdir public diff --git a/src/Apps/Settings/Routes/EditSettings/Components/SettingsEditSettingsTwoFactor/TwoFactorAuthentication/__tests__/SettingsEditSettingsTwoFactorBackupCodesActions.jest.enzyme.tsx b/src/Apps/Settings/Routes/EditSettings/Components/SettingsEditSettingsTwoFactor/TwoFactorAuthentication/__tests__/SettingsEditSettingsTwoFactorBackupCodesActions.jest.enzyme.tsx index 674f3e9c643..0cf85f0153e 100644 --- a/src/Apps/Settings/Routes/EditSettings/Components/SettingsEditSettingsTwoFactor/TwoFactorAuthentication/__tests__/SettingsEditSettingsTwoFactorBackupCodesActions.jest.enzyme.tsx +++ b/src/Apps/Settings/Routes/EditSettings/Components/SettingsEditSettingsTwoFactor/TwoFactorAuthentication/__tests__/SettingsEditSettingsTwoFactorBackupCodesActions.jest.enzyme.tsx @@ -55,8 +55,7 @@ describe("Two factor authentication enrollment", () => { expect(downloadButton.text()).toBe("Download") }) - // FIXME: SWC_COMPILER_MIGRATION - it.skip("enables user to download the recovery codes", () => { + it("enables user to download the recovery codes", () => { global.URL.createObjectURL = jest.fn() global.URL.revokeObjectURL = jest.fn() diff --git a/src/System/Router/Utils/__tests__/renderToStream.jest.tsx b/src/System/Router/Utils/__tests__/renderToStream.jest.tsx deleted file mode 100644 index a6c15c747ea..00000000000 --- a/src/System/Router/Utils/__tests__/renderToStream.jest.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { flushPromiseQueue } from "DevTools/flushPromiseQueue" -import { renderToPipeableStream } from "react-dom/server" -import { ArtsyResponse } from "Server/middleware/artsyExpress" -import { renderToStream } from "System/Router/Utils/renderToStream" - -jest.mock("react-dom/server", () => ({ - renderToPipeableStream: jest.fn(), -})) - -describe("renderToStream", () => { - const mockRenderToPipeableStream = renderToPipeableStream as jest.Mock - - const mockRes = ({ - statusCode: 0, - setHeader: jest.fn(), - } as unknown) as ArtsyResponse - - const mockSheet = { - _emitSheetCSS: jest.fn(() => "mock-css"), - instance: { - clearTag: jest.fn(), - }, - } - - afterEach(() => { - jest.clearAllMocks() - }) - - it("should set the response status and content type on shell ready", async () => { - const mockPipe = jest.fn() - const mockAbort = jest.fn() - - mockRenderToPipeableStream.mockImplementation((_, options) => { - setTimeout(() => { - options.onShellReady() - }) - - return { pipe: mockPipe, abort: mockAbort } - }) - - const jsx =
Hello World
- renderToStream(jsx, mockSheet, mockRes) - - await flushPromiseQueue() - - expect(mockRes.statusCode).toBe(200) - expect(mockRes.setHeader).toHaveBeenCalledWith( - "Content-Type", - "text/html; charset=utf-8" - ) - expect(mockPipe).toHaveBeenCalled() - }) - - it("should handle onError and set didError to true", async () => { - const mockPipe = jest.fn() - const mockAbort = jest.fn() - - mockRenderToPipeableStream.mockImplementation((_, options) => { - options.onError(new Error("Test error")) - - setTimeout(() => { - options.onShellReady() - }) - - return { pipe: mockPipe, abort: mockAbort } - }) - - const jsx =
Hello Error
- renderToStream(jsx, mockSheet, mockRes) - - await flushPromiseQueue() - - expect(mockRes.statusCode).toBe(500) - expect(mockPipe).toHaveBeenCalled() - }) - - it("should call abort if STREAM_TIMEOUT is reached", () => { - jest.useFakeTimers() - const mockAbort = jest.fn() - - mockRenderToPipeableStream.mockImplementation((_, options) => { - return { pipe: jest.fn(), abort: mockAbort } - }) - - const jsx =
Timeout Test
- renderToStream(jsx, mockSheet, mockRes) - - jest.advanceTimersByTime(5000) - - expect(mockAbort).toHaveBeenCalled() - jest.useRealTimers() - }) - - // eslint-disable-next-line jest/no-done-callback - it("should transform the stream and inject CSS into the HTML", done => { - const mockPipe = jest.fn() - const mockAbort = jest.fn() - - mockRenderToPipeableStream.mockImplementation((_, options) => { - setTimeout(() => { - options.onShellReady() - }) - return { pipe: mockPipe, abort: mockAbort } - }) - - const jsx =
Stream Test
- const stream = renderToStream(jsx, mockSheet, mockRes) - - stream.write("") - - const chunks: string[] = [] - stream.on("data", chunk => { - chunks.push(chunk) - }) - - stream.on("end", () => { - const result = chunks.join("") - expect(result).toContain( - "mock-css" - ) - done() - }) - - stream.end() - }) -}) diff --git a/webpack/envs/clientDevelopmentConfig.js b/webpack/envs/clientDevelopmentConfig.js index 5dd12386210..50a0411f034 100644 --- a/webpack/envs/clientDevelopmentConfig.js +++ b/webpack/envs/clientDevelopmentConfig.js @@ -12,7 +12,7 @@ import webpack from "webpack" import { basePath, webpackEnv } from "../webpackEnv" import { splitChunks } from "../bundleSplitting" import { sharedPlugins } from "../sharedPlugins" -import { babelLoader, ejsLoader, mjsLoader, swcLoader } from "../sharedLoaders" +import { babelLoader, ejsLoader, mjsLoader } from "../sharedLoaders" import { cache, @@ -26,10 +26,6 @@ import { console.log("\n[Force] Building client-side development code...\n") -if (webpackEnv.experimentalSWCCompiler) { - console.log("[Force] Experimental SWC Compiler is enabled.\n") -} - export const clientDevelopmentConfig = () => { return { cache, @@ -44,11 +40,7 @@ export const clientDevelopmentConfig = () => { externals, mode, module: { - rules: [ - webpackEnv.experimentalSWCCompiler ? swcLoader : babelLoader, - ejsLoader, - mjsLoader, - ], + rules: [babelLoader, ejsLoader, mjsLoader], }, optimization: { runtimeChunk: "single", // Extract webpack runtime code into it's own file diff --git a/webpack/sharedLoaders.js b/webpack/sharedLoaders.js index 9970cc6437c..ff2c58fbe00 100644 --- a/webpack/sharedLoaders.js +++ b/webpack/sharedLoaders.js @@ -2,18 +2,6 @@ import path from "path" import { basePath, webpackEnv } from "./webpackEnv" -import swcConfig from "../.swcrc.js" - -export const swcLoader = { - include: path.resolve(basePath, "src"), - test: /(\.(js|ts)x?$)/, - use: [ - { - loader: "swc-loader", - options: swcConfig, - }, - ], -} export const babelLoader = { exclude: /(node_modules)/, diff --git a/webpack/webpackEnv.js b/webpack/webpackEnv.js index 4b4dcd9b2f5..9b3965c9fd2 100644 --- a/webpack/webpackEnv.js +++ b/webpack/webpackEnv.js @@ -8,8 +8,6 @@ loadEnvs(".env.shared", ".env") const webpackEnv = { isDevelopment: process.env.NODE_ENV === "development", isProduction: process.env.NODE_ENV === "production", - experimentalSWCCompiler: - process.env.EXPERIMENTAL_SWC_COMPILER_ENABLED === "true", } const basePath = process.cwd() @@ -24,7 +22,6 @@ if (process.env.CI || process.env.WEBPACK_LOG_CONFIG) { console.log("\n[Webpack Environment]") console.log(" basePath".padEnd(40), chalk.yellow(basePath)) console.log(" CI".padEnd(40), chalk.yellow(process.env.CI)) - console.log(" EXPERIMENTAL_SWC_COMPILER_ENABLED".padEnd(40), chalk.yellow(webpackEnv.experimentalSWCCompiler)) console.log(" NODE_ENV".padEnd(40), chalk.yellow(process.env.NODE_ENV)) console.log(" WEBPACK_BUNDLE_REPORT".padEnd(40), chalk.yellow(process.env.WEBPACK_BUNDLE_REPORT)) console.log(" WEBPACK_DEVTOOL".padEnd(40), chalk.yellow(process.env.WEBPACK_DEVTOOL)) diff --git a/yarn.lock b/yarn.lock index 89380aec169..56718117b3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2289,13 +2289,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/create-cache-key-function@^27.4.2": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" - integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== - dependencies: - "@jest/types" "^27.5.1" - "@jest/environment@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" @@ -2641,17 +2634,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jest/types@^29.0.0", "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" @@ -4731,103 +4713,6 @@ "@styled-system/core" "^5.1.2" "@styled-system/css" "^5.1.5" -"@swc/core-darwin-arm64@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz#e6b6363fc0a22ee3cd9a63130d2042d5027aae2c" - integrity sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw== - -"@swc/core-darwin-x64@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz#7911a03f4e0f9359710d3d6ad1dba7b5569efe5d" - integrity sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q== - -"@swc/core-linux-arm-gnueabihf@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz#95a2c9fc6849df9f1944957669c82c559d65b24f" - integrity sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ== - -"@swc/core-linux-arm64-gnu@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz#1914d42041469582e3cc56619890edbcc54e83d6" - integrity sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng== - -"@swc/core-linux-arm64-musl@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz#8d73822a5807575a572d6a2d6cb64587a9f19ce6" - integrity sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg== - -"@swc/core-linux-x64-gnu@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz#80467727ec11da3de49e6be2abf735964a808483" - integrity sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw== - -"@swc/core-linux-x64-musl@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz#675a53ac037846bd1bb9840a95ebcb5289265d3b" - integrity sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg== - -"@swc/core-win32-arm64-msvc@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz#7f0b5d0d0a090c5c625bbc54ffaf427d861c068a" - integrity sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA== - -"@swc/core-win32-ia32-msvc@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz#06e2778549a37f0b505b24fd8f40c1c038e29f3e" - integrity sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ== - -"@swc/core-win32-x64-msvc@1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz#40f6b131e84ba6ed97f516edf0f9d5a766c0da64" - integrity sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA== - -"@swc/core@^1.3.95": - version "1.3.95" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.95.tgz#2743b8460e6f29385e3dbe49f3f66277ab233536" - integrity sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA== - dependencies: - "@swc/counter" "^0.1.1" - "@swc/types" "^0.1.5" - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.95" - "@swc/core-darwin-x64" "1.3.95" - "@swc/core-linux-arm-gnueabihf" "1.3.95" - "@swc/core-linux-arm64-gnu" "1.3.95" - "@swc/core-linux-arm64-musl" "1.3.95" - "@swc/core-linux-x64-gnu" "1.3.95" - "@swc/core-linux-x64-musl" "1.3.95" - "@swc/core-win32-arm64-msvc" "1.3.95" - "@swc/core-win32-ia32-msvc" "1.3.95" - "@swc/core-win32-x64-msvc" "1.3.95" - -"@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== - -"@swc/jest@^0.2.29": - version "0.2.29" - resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.29.tgz#b27d647ec430c909f9bb567d1df2a47eaa3841f4" - integrity sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow== - dependencies: - "@jest/create-cache-key-function" "^27.4.2" - jsonc-parser "^3.2.0" - -"@swc/plugin-relay@^1.5.94": - version "1.5.94" - resolved "https://registry.yarnpkg.com/@swc/plugin-relay/-/plugin-relay-1.5.94.tgz#7e8a93dce95f52874bcca01a0b70d034a06358d1" - integrity sha512-T5j2psiU8zZxrKLQGv1OwM6ndKU1d4GlrHnVkE2O+/Jm/KMEUugTmNRB1w6FKzipzqw7iz517Fb31S4OQV6eQQ== - -"@swc/plugin-styled-components@^1.5.94": - version "1.5.94" - resolved "https://registry.yarnpkg.com/@swc/plugin-styled-components/-/plugin-styled-components-1.5.94.tgz#f3ffc53d7e543b34bcb7bdcc0af420cffa07038f" - integrity sha512-vpEwcAqeyTnuabwIWE5y9fSH/S8DqGnr0Y1mf5AwNdtl+Cf47nxe20l+gzwT217gTr72CMYDWaAZ+hkyafDNiA== - -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== - "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -15807,11 +15692,6 @@ jsonc-parser@^1.0.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.3.tgz#1d53d7160e401a783dbceabaad82473f80e6ad7e" integrity sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g== -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -22051,11 +21931,6 @@ svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" -swc-loader@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" - integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== - symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"