diff --git a/.github/workflows/e2e-playwright.yml b/.github/workflows/e2e-playwright.yml index 694502923c0..e67b0a0cfee 100644 --- a/.github/workflows/e2e-playwright.yml +++ b/.github/workflows/e2e-playwright.yml @@ -155,7 +155,7 @@ jobs: - name: Install and Build run: | pnpm install - pnpm compile:ts + pnpm turbo compile pnpm run build:curriculum - name: Start apps diff --git a/.github/workflows/e2e-third-party.yml b/.github/workflows/e2e-third-party.yml index 16e1ace032b..a2e8b66e6a1 100644 --- a/.github/workflows/e2e-third-party.yml +++ b/.github/workflows/e2e-third-party.yml @@ -138,7 +138,7 @@ jobs: - name: Install and Build run: | pnpm install - pnpm compile:ts + pnpm turbo compile pnpm run build:curriculum - name: Start apps diff --git a/.gitignore b/.gitignore index 9bb5ba85de5..32256e8d743 100644 --- a/.gitignore +++ b/.gitignore @@ -151,10 +151,6 @@ jspm_packages/ ### Netlify ### .netlify -### Generated config files ### -shared/tsconfig.tsbuildinfo -curriculum/tsconfig.tsbuildinfo - ### Old Generated files ### # These files are no longer generated by the client, but can # exist on older branches. Continuing to ignore them ensures they @@ -197,7 +193,6 @@ curriculum/curricula.json curriculum/dist curriculum/build curriculum/src/test/blocks-generated -shared-dist ### Playwright ### diff --git a/.gitpod.yml b/.gitpod.yml index a795190474c..bfdb3073aa7 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -52,7 +52,7 @@ tasks: cp sample.env .env && pnpm install && gp sync-done pnpm-install && - pnpm compile:ts && + pnpm turbo compile && pnpm run build:curriculum && gp ports await 27017 command: > diff --git a/.prettierignore b/.prettierignore index b2f6701e9ba..1a2658d7c6d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,15 +9,14 @@ client/public curriculum/challenges/_meta/*/* curriculum/challenges/**/* curriculum/i18n-curriculum +curriculum/generated docs/**/*.md /playwright pnpm-lock.yaml shared/config/*.js -shared/config/curriculum.json shared/utils/get-lines.js shared/utils/get-lines.test.js shared/utils/is-audited.js shared/utils/validate.js shared/utils/validate.test.js -shared-dist dist diff --git a/api/package.json b/api/package.json index be394a25881..20312d1009b 100644 --- a/api/package.json +++ b/api/package.json @@ -12,6 +12,7 @@ "@fastify/swagger": "9.6.1", "@fastify/swagger-ui": "5.2.4", "@fastify/type-provider-typebox": "6.1.0", + "@freecodecamp/shared": "workspace:*", "@growthbook/growthbook": "1.6.2", "@prisma/client": "6.19.1", "@sentry/node": "9.47.1", @@ -41,6 +42,7 @@ "description": "The freeCodeCamp.org open-source codebase and curriculum", "devDependencies": { "@freecodecamp/eslint-config": "workspace:*", + "@freecodecamp/shared": "workspace:*", "@total-typescript/ts-reset": "0.6.1", "@types/jsonwebtoken": "9.0.5", "@types/lodash-es": "^4.17.12", diff --git a/api/src/routes/helpers/certificate-utils.ts b/api/src/routes/helpers/certificate-utils.ts index ab26370b066..f38d7c44443 100644 --- a/api/src/routes/helpers/certificate-utils.ts +++ b/api/src/routes/helpers/certificate-utils.ts @@ -3,7 +3,7 @@ import { certSlugTypeMap, certToIdMap, Certification -} from '../../../../shared/config/certification-settings.js'; +} from '@freecodecamp/shared/config/certification-settings'; import { normalizeDate } from '../../utils/normalize.js'; const fullStackCertificateIds = [ diff --git a/api/src/routes/helpers/is-restricted.ts b/api/src/routes/helpers/is-restricted.ts index 3a7c02289c0..e74c1f0f2b5 100644 --- a/api/src/routes/helpers/is-restricted.ts +++ b/api/src/routes/helpers/is-restricted.ts @@ -1,6 +1,6 @@ import { isProfane } from 'no-profanity'; -import { blocklistedUsernames } from '../../../../shared/config/constants.js'; +import { blocklistedUsernames } from '@freecodecamp/shared/config/constants'; /** * Checks if a username is restricted (i.e. It's profane or reserved). diff --git a/api/src/routes/protected/certificate.test.ts b/api/src/routes/protected/certificate.test.ts index 6fdb7de8711..0e88d1eda47 100644 --- a/api/src/routes/protected/certificate.test.ts +++ b/api/src/routes/protected/certificate.test.ts @@ -8,7 +8,7 @@ import { vi } from 'vitest'; -import { Certification } from '../../../../shared/config/certification-settings.js'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; import { defaultUserEmail, defaultUserId, diff --git a/api/src/routes/protected/certificate.ts b/api/src/routes/protected/certificate.ts index 18b019504d9..5b660e4ed27 100644 --- a/api/src/routes/protected/certificate.ts +++ b/api/src/routes/protected/certificate.ts @@ -13,7 +13,7 @@ import { legacyCertifications, legacyFullStackCertification, upcomingCertifications -} from '../../../../shared/config/certification-settings.js'; +} from '@freecodecamp/shared/config/certification-settings'; import * as schemas from '../../schemas.js'; import { normalizeChallenges, removeNulls } from '../../utils/normalize.js'; diff --git a/api/src/routes/protected/challenge.test.ts b/api/src/routes/protected/challenge.test.ts index fd3fd869b2d..017e77cf209 100644 --- a/api/src/routes/protected/challenge.test.ts +++ b/api/src/routes/protected/challenge.test.ts @@ -28,7 +28,7 @@ import { Static } from '@fastify/type-provider-typebox'; import { DailyCodingChallengeLanguage } from '@prisma/client'; import request from 'supertest'; -import { challengeTypes } from '../../../../shared/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { defaultUserId, devLogin, diff --git a/api/src/routes/protected/challenge.ts b/api/src/routes/protected/challenge.ts index 89ceee2caeb..a0538bd2ab9 100644 --- a/api/src/routes/protected/challenge.ts +++ b/api/src/routes/protected/challenge.ts @@ -6,7 +6,7 @@ import { uniqBy, matches } from 'lodash-es'; import validator from 'validator'; -import { challengeTypes } from '../../../../shared/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import * as schemas from '../../schemas.js'; import { jsCertProjectIds, diff --git a/api/src/routes/protected/donate.ts b/api/src/routes/protected/donate.ts index 275daeb6126..7ffb1b42a02 100644 --- a/api/src/routes/protected/donate.ts +++ b/api/src/routes/protected/donate.ts @@ -2,7 +2,7 @@ import { type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebo import Stripe from 'stripe'; import * as schemas from '../../schemas.js'; -import { donationSubscriptionConfig } from '../../../../shared/config/donation-settings.js'; +import { donationSubscriptionConfig } from '@freecodecamp/shared/config/donation-settings'; import { STRIPE_SECRET_KEY, HOME_LOCATION } from '../../utils/env.js'; /** diff --git a/api/src/routes/protected/settings.ts b/api/src/routes/protected/settings.ts index 414a2d121d6..0a22c7f481c 100644 --- a/api/src/routes/protected/settings.ts +++ b/api/src/routes/protected/settings.ts @@ -3,7 +3,7 @@ import type { FastifyError, FastifyInstance } from 'fastify'; import { differenceInMinutes } from 'date-fns'; import validator from 'validator'; -import { isValidUsername } from '../../../../shared/utils/validate.js'; +import { isValidUsername } from '@freecodecamp/shared/utils/validate'; import * as schemas from '../../schemas.js'; import { createAuthToken, isExpired } from '../../utils/tokens.js'; import { API_LOCATION } from '../../utils/env.js'; diff --git a/api/src/routes/public/certificate.ts b/api/src/routes/public/certificate.ts index 33aa8aced37..505c0be16a7 100644 --- a/api/src/routes/public/certificate.ts +++ b/api/src/routes/public/certificate.ts @@ -8,7 +8,7 @@ import { certToIdMap, completionHours, oldDataVizId -} from '../../../../shared/config/certification-settings.js'; +} from '@freecodecamp/shared/config/certification-settings'; import { getFallbackFullStackDate, isKnownCertSlug diff --git a/api/src/routes/public/donate.ts b/api/src/routes/public/donate.ts index acf24468890..02660b01abf 100644 --- a/api/src/routes/public/donate.ts +++ b/api/src/routes/public/donate.ts @@ -5,7 +5,7 @@ import { STRIPE_SECRET_KEY } from '../../utils/env.js'; import { donationSubscriptionConfig, allStripeProductIdsArray -} from '../../../../shared/config/donation-settings.js'; +} from '@freecodecamp/shared/config/donation-settings'; import * as schemas from '../../schemas.js'; import { inLastFiveMinutes } from '../../utils/validate-donation.js'; import { findOrCreateUser } from '../helpers/auth-helpers.js'; diff --git a/api/src/routes/public/user.ts b/api/src/routes/public/user.ts index 8a260ab6212..b37d1d5a643 100644 --- a/api/src/routes/public/user.ts +++ b/api/src/routes/public/user.ts @@ -21,7 +21,7 @@ import { getPoints, ProgressTimestamp } from '../../utils/progress.js'; -import { challengeTypes } from '../../../../shared/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; type ProfileUI = Partial<{ isLocked: boolean; diff --git a/api/src/schemas/certificate/cert-slug.ts b/api/src/schemas/certificate/cert-slug.ts index f81df3d8f0a..d942bcf8119 100644 --- a/api/src/schemas/certificate/cert-slug.ts +++ b/api/src/schemas/certificate/cert-slug.ts @@ -1,5 +1,5 @@ import { Type } from '@fastify/type-provider-typebox'; -import { Certification } from '../../../../shared/config/certification-settings.js'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; import { genericError } from '../types.js'; export const certSlug = { diff --git a/api/src/utils/common-challenge-functions.ts b/api/src/utils/common-challenge-functions.ts index 57b438b8480..7847080e975 100644 --- a/api/src/utils/common-challenge-functions.ts +++ b/api/src/utils/common-challenge-functions.ts @@ -1,7 +1,7 @@ import type { ExamResults, user, Prisma } from '@prisma/client'; import { FastifyInstance } from 'fastify'; import { omit, pick } from 'lodash-es'; -import { challengeTypes } from '../../../shared/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { challenges, savableChallenges } from './get-challenges.js'; import { normalizeDate } from './normalize.js'; diff --git a/api/src/utils/exam.ts b/api/src/utils/exam.ts index d4851224b03..7c57e3a92a6 100644 --- a/api/src/utils/exam.ts +++ b/api/src/utils/exam.ts @@ -1,5 +1,5 @@ import { Exam, Question } from '@prisma/client'; -import { shuffleArray } from './../../../shared/utils/shuffle-array.js'; +import { shuffleArray } from '@freecodecamp/shared/utils/shuffle-array'; import { UserExam, GeneratedExam } from './exam-types.js'; /** diff --git a/api/src/utils/get-challenges.ts b/api/src/utils/get-challenges.ts index 7a5b9452b34..d66c9117a14 100644 --- a/api/src/utils/get-challenges.ts +++ b/api/src/utils/get-challenges.ts @@ -7,7 +7,7 @@ import { readFileSync } from 'fs'; import { fileURLToPath } from 'node:url'; import { join, dirname } from 'path'; -const CURRICULUM_PATH = '../../../shared-dist/config/curriculum.json'; +const CURRICULUM_PATH = '../../../curriculum/generated/curriculum.json'; const __dirname = dirname(fileURLToPath(import.meta.url)); // Curriculum is read using fs, because it is too large for VSCode's LSP to handle type inference which causes annoying behavior. const curriculum = JSON.parse( diff --git a/api/src/utils/redirection.ts b/api/src/utils/redirection.ts index e3b858db77c..6b7453bc1d4 100644 --- a/api/src/utils/redirection.ts +++ b/api/src/utils/redirection.ts @@ -1,6 +1,6 @@ import jwt from 'jsonwebtoken'; -import { availableLangs } from '../../../shared/config/i18n.js'; +import { availableLangs } from '@freecodecamp/shared/config/i18n'; import { allowedOrigins } from './allowed-origins.js'; // process.env.HOME_LOCATION is being used as a fallback here. If the one diff --git a/client/config/cert-and-project-map.ts b/client/config/cert-and-project-map.ts index 75df4eb5d52..d803741a6ca 100644 --- a/client/config/cert-and-project-map.ts +++ b/client/config/cert-and-project-map.ts @@ -3,7 +3,8 @@ import { legacyCertifications, upcomingCertifications, currentCertifications -} from '../../shared-dist/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; + import config from '../config/env.json'; const { showUpcomingChanges } = config; diff --git a/client/gatsby-node.js b/client/gatsby-node.js index 648a5ac5ef8..0717564c4ff 100644 --- a/client/gatsby-node.js +++ b/client/gatsby-node.js @@ -5,7 +5,7 @@ const uniq = require('lodash/uniq'); const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); const webpack = require('webpack'); -const { SuperBlocks } = require('../shared-dist/config/curriculum'); +const { SuperBlocks } = require('@freecodecamp/shared/config/curriculum'); const env = require('./config/env.json'); const { createChallengePages, diff --git a/client/i18n/config.js b/client/i18n/config.js index 1977f5f3374..51a0f810236 100644 --- a/client/i18n/config.js +++ b/client/i18n/config.js @@ -4,7 +4,7 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; const envData = require('../config/env.json'); -const { i18nextCodes } = require('../../shared-dist/config/i18n'); +const { i18nextCodes } = require('@freecodecamp/shared/config/i18n'); const { clientLocale } = envData; diff --git a/client/i18n/locales.test.ts b/client/i18n/locales.test.ts index 3eb061be536..ef94c59c5d8 100644 --- a/client/i18n/locales.test.ts +++ b/client/i18n/locales.test.ts @@ -8,11 +8,11 @@ import { availableLangs, LangNames, LangCodes -} from '../../shared-dist/config/i18n'; +} from '@freecodecamp/shared/config/i18n'; import { catalogSuperBlocks, SuperBlocks -} from '../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import intro from './locales/english/intro.json'; interface Intro { diff --git a/client/i18n/schema-validation.ts b/client/i18n/schema-validation.ts index 8c6ad006db2..98ed44ceb11 100644 --- a/client/i18n/schema-validation.ts +++ b/client/i18n/schema-validation.ts @@ -1,6 +1,6 @@ import path from 'path'; import { readFile } from 'fs/promises'; -import { availableLangs } from '../../shared-dist/config/i18n'; +import { availableLangs } from '@freecodecamp/shared/config/i18n'; import introSchema from './locales/english/intro.json'; import linksSchema from './locales/english/links.json'; import metaTagsSchema from './locales/english/meta-tags.json'; diff --git a/client/package.json b/client/package.json index cdf7a2d62ae..f179706e5f5 100644 --- a/client/package.json +++ b/client/package.json @@ -24,7 +24,7 @@ "build:scripts": "pnpm run -F=browser-scripts build", "build:external-curriculum": "tsx ./tools/external-curriculum/build", "clean": "gatsby clean", - "common-setup": "pnpm -w run compile:ts && pnpm run create:env && pnpm run create:trending && pnpm run create:search-placeholder", + "common-setup": "pnpm -w turbo compile && pnpm run create:env && pnpm run create:trending && pnpm run create:search-placeholder", "create:env": "DEBUG=fcc:* tsx ./tools/create-env.ts", "create:trending": "tsx ./tools/download-trending.ts", "create:search-placeholder": "tsx ./tools/generate-search-placeholder", @@ -139,6 +139,7 @@ "devDependencies": { "@babel/plugin-syntax-dynamic-import": "7.8.3", "@freecodecamp/eslint-config": "workspace:*", + "@freecodecamp/shared": "workspace:*", "@testing-library/jest-dom": "^6.8.0", "@testing-library/react": "12.1.5", "@testing-library/react-hooks": "^8.0.1", diff --git a/client/src/analytics/call-ga.ts b/client/src/analytics/call-ga.ts index cd6b26d617b..ba0a2b82af1 100644 --- a/client/src/analytics/call-ga.ts +++ b/client/src/analytics/call-ga.ts @@ -1,7 +1,7 @@ import { DonationAmount, DonationDuration -} from '../../../shared-dist/config/donation-settings'; +} from '@freecodecamp/shared/config/donation-settings'; import { ChallengeFiles } from '../redux/prop-types'; import TagManager from '.'; diff --git a/client/src/assets/chapter-icon.tsx b/client/src/assets/chapter-icon.tsx index d9a1e6e32be..926c51fddee 100644 --- a/client/src/assets/chapter-icon.tsx +++ b/client/src/assets/chapter-icon.tsx @@ -3,7 +3,7 @@ import { A1SpanishChapters, FsdChapters, A1ChineseChapters -} from '../../../shared-dist/config/chapters'; +} from '@freecodecamp/shared/config/chapters'; import DatabaseIcon from './icons/database'; import JavaScriptIcon from './icons/javascript'; import ReactIcon from './icons/react'; diff --git a/client/src/assets/superblock-icon.tsx b/client/src/assets/superblock-icon.tsx index 5265fef14a7..95bf7b7040c 100644 --- a/client/src/assets/superblock-icon.tsx +++ b/client/src/assets/superblock-icon.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { SuperBlocks } from '../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import APIIcon from './icons/api'; import D3Icon from './icons/d3'; import DatabaseIcon from './icons/database'; diff --git a/client/src/client-only-routes/show-certification.tsx b/client/src/client-only-routes/show-certification.tsx index 33e1125ec3c..511cd6553c1 100644 --- a/client/src/client-only-routes/show-certification.tsx +++ b/client/src/client-only-routes/show-certification.tsx @@ -8,7 +8,7 @@ import { createSelector } from 'reselect'; import { Container, Col, Row, Image, Button, Spacer } from '@freecodecamp/ui'; import envData from '../../config/env.json'; -import { getLangCode } from '../../../shared-dist/config/i18n'; +import { getLangCode } from '@freecodecamp/shared/config/i18n'; import FreeCodeCampLogo from '../assets/icons/freecodecamp-logo'; import MicrosoftLogo from '../assets/icons/microsoft-logo'; import { createFlashMessage } from '../components/Flash/redux'; @@ -33,13 +33,13 @@ import { standardErrorMessage } from '../utils/error-messages'; -import { PaymentContext } from '../../../shared-dist/config/donation-settings'; +import { PaymentContext } from '@freecodecamp/shared/config/donation-settings'; import ribbon from '../assets/images/ribbon.svg'; import { Certification, CertSlug, linkedInCredentialIds -} from '../../../shared-dist/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; import MultiTierDonationForm from '../components/Donation/multi-tier-donation-form'; import callGA from '../analytics/call-ga'; import ShowProjectLinks from './show-project-links'; diff --git a/client/src/client-only-routes/show-project-links.tsx b/client/src/client-only-routes/show-project-links.tsx index 79fd3dac6f7..19a07ca22d2 100644 --- a/client/src/client-only-routes/show-project-links.tsx +++ b/client/src/client-only-routes/show-project-links.tsx @@ -19,9 +19,9 @@ import ExamResultsModal from '../components/SolutionViewer/exam-results-modal'; import { openModal } from '../templates/Challenges/redux/actions'; -import { regenerateMissingProperties } from '../../../shared-dist/utils/polyvinyl'; +import { regenerateMissingProperties } from '@freecodecamp/shared/utils/polyvinyl'; import '../components/layouts/project-links.css'; -import { Certification } from '../../../shared-dist/config/certification-settings'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; interface ShowProjectLinksProps { certSlug: Certification; name: string; diff --git a/client/src/components/Donation/donate-form.tsx b/client/src/components/Donation/donate-form.tsx index 9473f845d73..c960363c648 100644 --- a/client/src/components/Donation/donate-form.tsx +++ b/client/src/components/Donation/donate-form.tsx @@ -12,7 +12,7 @@ import { defaultDonation, DonationAmount, type DonationConfig -} from '../../../../shared-dist/config/donation-settings'; +} from '@freecodecamp/shared/config/donation-settings'; import { defaultDonationFormState } from '../../redux'; import { updateDonationFormState, postCharge } from '../../redux/actions'; import { diff --git a/client/src/components/Donation/donation-modal-body.tsx b/client/src/components/Donation/donation-modal-body.tsx index 0f4ec53a59c..a3c385a0b77 100644 --- a/client/src/components/Donation/donation-modal-body.tsx +++ b/client/src/components/Donation/donation-modal-body.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next'; import { useFeature } from '@growthbook/growthbook-react'; import { Col, Row, Modal, Spacer } from '@freecodecamp/ui'; import { closeDonationModal } from '../../redux/actions'; -import { PaymentContext } from '../../../../shared-dist/config/donation-settings'; +import { PaymentContext } from '@freecodecamp/shared/config/donation-settings'; import donationAnimation from '../../assets/images/donation-bear-animation.svg'; import donationAnimationB from '../../assets/images/new-bear-animation.svg'; import supporterBearBlock from '../../assets/images/supporter-bear-block.svg'; diff --git a/client/src/components/Donation/multi-tier-donation-form.tsx b/client/src/components/Donation/multi-tier-donation-form.tsx index 82a82668b6e..82197850a8e 100644 --- a/client/src/components/Donation/multi-tier-donation-form.tsx +++ b/client/src/components/Donation/multi-tier-donation-form.tsx @@ -18,7 +18,7 @@ import { defaultTierAmount, defaultTierAmountB, type DonationAmount -} from '../../../../shared-dist/config/donation-settings'; // You can further extract these into separate components and import them +} from '@freecodecamp/shared/config/donation-settings'; // You can further extract these into separate components and import them import callGA from '../../analytics/call-ga'; import { LocalStorageThemes } from '../../redux/types'; import { formattedAmountLabel, convertToTimeContributed } from './utils'; diff --git a/client/src/components/Donation/patreon-button.tsx b/client/src/components/Donation/patreon-button.tsx index e8ce1eb1536..771183e3d06 100644 --- a/client/src/components/Donation/patreon-button.tsx +++ b/client/src/components/Donation/patreon-button.tsx @@ -3,7 +3,7 @@ import { DonationAmount, donationUrls, PaymentProvider -} from '../../../../shared-dist/config/donation-settings'; +} from '@freecodecamp/shared/config/donation-settings'; import envData from '../../../config/env.json'; import PatreonLogo from '../../assets/images/components/patreon-logo'; import { PostPayment } from './types'; diff --git a/client/src/components/Donation/paypal-button.tsx b/client/src/components/Donation/paypal-button.tsx index 35ce3775e08..2884a766034 100644 --- a/client/src/components/Donation/paypal-button.tsx +++ b/client/src/components/Donation/paypal-button.tsx @@ -9,7 +9,7 @@ import { PaymentProvider, type DonationDuration, type DonationAmount -} from '../../../../shared-dist/config/donation-settings'; +} from '@freecodecamp/shared/config/donation-settings'; import envData from '../../../config/env.json'; import { userSelector, signInLoadingSelector } from '../../redux/selectors'; import { LocalStorageThemes } from '../../redux/types'; diff --git a/client/src/components/Donation/stripe-card-form.tsx b/client/src/components/Donation/stripe-card-form.tsx index 094a28e1955..2e3ca7a853d 100644 --- a/client/src/components/Donation/stripe-card-form.tsx +++ b/client/src/components/Donation/stripe-card-form.tsx @@ -10,7 +10,7 @@ import type { } from '@stripe/stripe-js'; import React, { useState } from 'react'; -import { PaymentProvider } from '../../../../shared-dist/config/donation-settings'; +import { PaymentProvider } from '@freecodecamp/shared/config/donation-settings'; import { LocalStorageThemes } from '../../redux/types'; import { DonationApprovalData, PostPayment } from './types'; diff --git a/client/src/components/Donation/types.ts b/client/src/components/Donation/types.ts index 2f183a49a50..8049488a6e9 100644 --- a/client/src/components/Donation/types.ts +++ b/client/src/components/Donation/types.ts @@ -1,5 +1,5 @@ import type { PaymentIntentResult } from '@stripe/stripe-js'; -import { SuperBlocks } from '../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; export type PaymentContext = 'modal' | 'donate page' | 'certificate'; export type PaymentProvider = 'patreon' | 'paypal' | 'stripe' | 'stripe card'; diff --git a/client/src/components/Donation/wallets-button.tsx b/client/src/components/Donation/wallets-button.tsx index 6db6829d6e3..12a320572b5 100644 --- a/client/src/components/Donation/wallets-button.tsx +++ b/client/src/components/Donation/wallets-button.tsx @@ -10,7 +10,7 @@ import { LocalStorageThemes } from '../../redux/types'; import { PaymentProvider, DonationDuration -} from '../../../../shared-dist/config/donation-settings'; +} from '@freecodecamp/shared/config/donation-settings'; import { createStripePaymentIntent } from '../../utils/ajax'; import { DonationApprovalData, PostPayment } from './types'; diff --git a/client/src/components/Header/components/language-list.tsx b/client/src/components/Header/components/language-list.tsx index ff40a4d2f7c..bb24fda8137 100644 --- a/client/src/components/Header/components/language-list.tsx +++ b/client/src/components/Header/components/language-list.tsx @@ -8,7 +8,7 @@ import { LangNames, LangCodes, hiddenLangs -} from '../../../../../shared-dist/config/i18n'; +} from '@freecodecamp/shared/config/i18n'; import { hardGoTo as navigate } from '../../../redux/actions'; import createLanguageRedirect from '../../create-language-redirect'; import LanguageGlobe from '../../../assets/icons/language-globe'; diff --git a/client/src/components/Map/index.tsx b/client/src/components/Map/index.tsx index 62d43b009fd..4a5405d035a 100644 --- a/client/src/components/Map/index.tsx +++ b/client/src/components/Map/index.tsx @@ -9,7 +9,7 @@ import { getStageOrder, superBlockStages, archivedSuperBlocks -} from '../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import { SuperBlockIcon } from '../../assets/superblock-icon'; import LinkButton from '../../assets/icons/link-button'; import { ButtonLink, Link } from '../helpers'; diff --git a/client/src/components/Progress/progress.tsx b/client/src/components/Progress/progress.tsx index 0507500e4ac..be151a0e21e 100644 --- a/client/src/components/Progress/progress.tsx +++ b/client/src/components/Progress/progress.tsx @@ -22,7 +22,7 @@ import { updateSuperBlockStructures, superBlockStructuresSelector } from '../../templates/Introduction/redux'; -import { getIsDailyCodingChallenge } from '../../../../shared-dist/config/challenge-types'; +import { getIsDailyCodingChallenge } from '@freecodecamp/shared/config/challenge-types'; import { isValidDateString, formatDisplayDate diff --git a/client/src/components/app-mount-notifier.test.tsx b/client/src/components/app-mount-notifier.test.tsx index db1b0ee4e72..77f1cbe9a95 100644 --- a/client/src/components/app-mount-notifier.test.tsx +++ b/client/src/components/app-mount-notifier.test.tsx @@ -4,7 +4,7 @@ import { I18nextProvider } from 'react-i18next'; import { Provider } from 'react-redux'; import { describe, vi, test, expect } from 'vitest'; -import { i18nextCodes } from '../../../shared-dist/config/i18n'; +import { i18nextCodes } from '@freecodecamp/shared/config/i18n'; import i18nTestConfig from '../../i18n/config-for-tests'; import { createStore } from '../redux/create-store'; import AppMountNotifier from './app-mount-notifier'; diff --git a/client/src/components/growth-book/codeally-button.tsx b/client/src/components/growth-book/codeally-button.tsx index 5f72072ba83..a7d1b6a95ff 100644 --- a/client/src/components/growth-book/codeally-button.tsx +++ b/client/src/components/growth-book/codeally-button.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { useFeature } from '@growthbook/growthbook-react'; import { useTranslation } from 'react-i18next'; import { Button } from '@freecodecamp/ui'; -import { challengeTypes } from '../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; interface CodeAllyButtonProps { challengeType: number; diff --git a/client/src/components/growth-book/ona-note.tsx b/client/src/components/growth-book/ona-note.tsx index a398587bf8e..86d6a38647f 100644 --- a/client/src/components/growth-book/ona-note.tsx +++ b/client/src/components/growth-book/ona-note.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Callout } from '@freecodecamp/ui'; import { useFeatureValue } from '@growthbook/growthbook-react'; -import { SuperBlocks } from '../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { Link } from '../helpers'; type OnaNoteProps = { diff --git a/client/src/components/profile/components/heat-map.test.tsx b/client/src/components/profile/components/heat-map.test.tsx index 226b9cf4c8e..bb93f3f934d 100644 --- a/client/src/components/profile/components/heat-map.test.tsx +++ b/client/src/components/profile/components/heat-map.test.tsx @@ -11,7 +11,7 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; import envData from '../../../../config/env.json'; -import { getLangCode } from '../../../../../shared-dist/config/i18n'; +import { getLangCode } from '@freecodecamp/shared/config/i18n'; import HeatMap from './heat-map'; const { clientLocale } = envData; diff --git a/client/src/components/profile/components/heat-map.tsx b/client/src/components/profile/components/heat-map.tsx index 9f8b42d7dd6..7fec170c2e9 100644 --- a/client/src/components/profile/components/heat-map.tsx +++ b/client/src/components/profile/components/heat-map.tsx @@ -13,7 +13,7 @@ import 'react-calendar-heatmap/dist/styles.css'; import './heatmap.css'; import envData from '../../../../config/env.json'; -import { getLangCode } from '../../../../../shared-dist/config/i18n'; +import { getLangCode } from '@freecodecamp/shared/config/i18n'; import { User } from '../../../redux/prop-types'; import FullWidthRow from '../../helpers/full-width-row'; diff --git a/client/src/components/profile/components/time-line.tsx b/client/src/components/profile/components/time-line.tsx index 73e0c6aa884..652818ab41e 100644 --- a/client/src/components/profile/components/time-line.tsx +++ b/client/src/components/profile/components/time-line.tsx @@ -8,9 +8,9 @@ import { connect } from 'react-redux'; import { Table, Button, Modal, Spacer } from '@freecodecamp/ui'; import envData from '../../../../config/env.json'; -import { getLangCode } from '../../../../../shared-dist/config/i18n'; +import { getLangCode } from '@freecodecamp/shared/config/i18n'; import { getCertIds, getPathFromID } from '../../../../utils'; -import { regenerateMissingProperties } from '../../../../../shared-dist/utils/polyvinyl'; +import { regenerateMissingProperties } from '@freecodecamp/shared/utils/polyvinyl'; import CertificationIcon from '../../../assets/icons/certification'; import type { ChallengeData, @@ -21,7 +21,7 @@ import ExamResultsModal from '../../SolutionViewer/exam-results-modal'; import { openModal } from '../../../templates/Challenges/redux/actions'; import { Link, FullWidthRow } from '../../helpers'; import { SolutionDisplayWidget } from '../../solution-display-widget'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import TimelinePagination from './timeline-pagination'; const SolutionViewer = Loadable( diff --git a/client/src/components/profile/components/username.tsx b/client/src/components/profile/components/username.tsx index de19ff69367..e8c52e0cdad 100644 --- a/client/src/components/profile/components/username.tsx +++ b/client/src/components/profile/components/username.tsx @@ -8,7 +8,7 @@ import { bindActionCreators } from 'redux'; import type { Dispatch } from 'redux'; import { createSelector } from 'reselect'; -import { isValidUsername } from '../../../../../shared-dist/utils/validate'; +import { isValidUsername } from '@freecodecamp/shared/utils/validate'; import { usernameValidationSelector } from '../../../redux/settings/selectors'; import { validateUsername, diff --git a/client/src/components/profile/components/utils/certification.ts b/client/src/components/profile/components/utils/certification.ts index 08489415187..23d527cc7e3 100644 --- a/client/src/components/profile/components/utils/certification.ts +++ b/client/src/components/profile/components/utils/certification.ts @@ -1,4 +1,4 @@ -import { Certification } from '../../../../../../shared-dist/config/certification-settings'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; import { User } from '../../../../redux/prop-types'; export const getCertifications = (user: User) => { diff --git a/client/src/components/profile/components/utils/utils.ts b/client/src/components/profile/components/utils/utils.ts index 741abd1145a..bf59c604981 100644 --- a/client/src/components/profile/components/utils/utils.ts +++ b/client/src/components/profile/components/utils/utils.ts @@ -1,5 +1,5 @@ import type { TFunction } from 'i18next'; -import { getLangCode } from '../../../../../../shared-dist/config/i18n'; +import { getLangCode } from '@freecodecamp/shared/config/i18n'; import envData from '../../../../../config/env.json'; const { clientLocale } = envData; diff --git a/client/src/components/seo/index.tsx b/client/src/components/seo/index.tsx index 82e55b744cc..39015765a99 100644 --- a/client/src/components/seo/index.tsx +++ b/client/src/components/seo/index.tsx @@ -2,7 +2,7 @@ import { useStaticQuery, graphql } from 'gatsby'; import React from 'react'; import Helmet from 'react-helmet'; import { useTranslation } from 'react-i18next'; -import { SuperBlocks } from '../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; interface SEOProps { title?: string; diff --git a/client/src/components/settings/certification.tsx b/client/src/components/settings/certification.tsx index 04ea4860200..4144a8e416a 100644 --- a/client/src/components/settings/certification.tsx +++ b/client/src/components/settings/certification.tsx @@ -6,7 +6,7 @@ import { Element } from 'react-scroll'; import { connect } from 'react-redux'; import { Table, Button, Spacer } from '@freecodecamp/ui'; -import { regenerateMissingProperties } from '../../../../shared-dist/utils/polyvinyl'; +import { regenerateMissingProperties } from '@freecodecamp/shared/utils/polyvinyl'; import ProjectPreviewModal from '../../templates/Challenges/components/project-preview-modal'; import ExamResultsModal from '../SolutionViewer/exam-results-modal'; import { openModal } from '../../templates/Challenges/redux/actions'; @@ -22,7 +22,7 @@ import { legacyCertifications, upcomingCertifications, type CertificationFlags -} from '../../../../shared-dist/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; import env from '../../../config/env.json'; import type { diff --git a/client/src/components/settings/settings-sidebar-nav.tsx b/client/src/components/settings/settings-sidebar-nav.tsx index 68d326620b4..a65e7475140 100644 --- a/client/src/components/settings/settings-sidebar-nav.tsx +++ b/client/src/components/settings/settings-sidebar-nav.tsx @@ -6,7 +6,7 @@ import { legacyCertifications, legacyFullStackCertification, upcomingCertifications -} from '../../../../shared-dist/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; import env from '../../../config/env.json'; type SettingsSidebarNavProps = { diff --git a/client/src/html.tsx b/client/src/html.tsx index 75cee24306d..87b61b1b8be 100644 --- a/client/src/html.tsx +++ b/client/src/html.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { clientLocale } from '../config/env.json'; -import { rtlLangs } from '../../shared-dist/config/i18n'; +import { rtlLangs } from '@freecodecamp/shared/config/i18n'; interface HTMLProps { body: string; diff --git a/client/src/pages/catalog.tsx b/client/src/pages/catalog.tsx index 88b1e148175..626e7215f05 100644 --- a/client/src/pages/catalog.tsx +++ b/client/src/pages/catalog.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Col, Spacer } from '@freecodecamp/ui'; import { ButtonLink } from '../components/helpers'; -import { catalog } from '../../../shared-dist/config/catalog'; +import { catalog } from '@freecodecamp/shared/config/catalog'; import { showUpcomingChanges } from '../../config/env.json'; import FourOhFour from '../components/FourOhFour'; diff --git a/client/src/pages/donate.tsx b/client/src/pages/donate.tsx index 63a31c16a49..806dd8cda95 100644 --- a/client/src/pages/donate.tsx +++ b/client/src/pages/donate.tsx @@ -22,7 +22,7 @@ import { userSelector, donationFormStateSelector } from '../redux/selectors'; -import { PaymentContext } from '../../../shared-dist/config/donation-settings'; +import { PaymentContext } from '@freecodecamp/shared/config/donation-settings'; import { DonateFormState } from '../redux/types'; import callGA from '../analytics/call-ga'; import type { User } from '../redux/prop-types'; diff --git a/client/src/redux/donation-saga.js b/client/src/redux/donation-saga.js index 3a34991639a..ad173497d0f 100644 --- a/client/src/redux/donation-saga.js +++ b/client/src/redux/donation-saga.js @@ -17,7 +17,7 @@ import { } from '../utils/ajax'; import { stringifyDonationEvents } from '../utils/analytics-strings'; import { stripe } from '../utils/stripe'; -import { PaymentProvider } from '../../../shared-dist/config/donation-settings'; +import { PaymentProvider } from '@freecodecamp/shared/config/donation-settings'; import { getSessionChallengeData, saveCurrentCount diff --git a/client/src/redux/failed-updates-epic.js b/client/src/redux/failed-updates-epic.js index 2c5d089910d..cd8e9e0220c 100644 --- a/client/src/redux/failed-updates-epic.js +++ b/client/src/redux/failed-updates-epic.js @@ -11,7 +11,7 @@ import { import store from 'store'; import { v4 as uuid } from 'uuid'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { isGoodXHRStatus } from '../templates/Challenges/utils'; import postUpdate$ from '../templates/Challenges/utils/post-update'; import { actionTypes } from './action-types'; diff --git a/client/src/redux/index.js b/client/src/redux/index.js index 428b183ec40..36c7556347b 100644 --- a/client/src/redux/index.js +++ b/client/src/redux/index.js @@ -6,7 +6,7 @@ import { actionTypes as challengeTypes, CURRENT_CHALLENGE_KEY } from '../templates/Challenges/redux/action-types'; -import { getIsDailyCodingChallenge } from '../../../shared-dist/config/challenge-types'; +import { getIsDailyCodingChallenge } from '@freecodecamp/shared/config/challenge-types'; import { actionTypes, ns as MainApp } from './action-types'; import { createAppMountSaga } from './app-mount-saga'; import { createDonationSaga } from './donation-saga'; diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts index 054b69b65cf..299ffc30723 100644 --- a/client/src/redux/prop-types.ts +++ b/client/src/redux/prop-types.ts @@ -2,11 +2,11 @@ import { HandlerProps } from 'react-reflex'; import type { ChallengeLang, SuperBlocks -} from '../../../shared-dist/config/curriculum'; -import type { CertificationFlags } from '../../../shared-dist/config/certification-settings'; -import type { Chapter } from '../../../shared-dist/config/chapters'; -import { BlockLayouts, BlockLabel } from '../../../shared-dist/config/blocks'; -import type { ChallengeFile, Ext } from '../../../shared-dist/utils/polyvinyl'; +} from '@freecodecamp/shared/config/curriculum'; +import type { CertificationFlags } from '@freecodecamp/shared/config/certification-settings'; +import type { Chapter } from '@freecodecamp/shared/config/chapters'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; +import type { ChallengeFile, Ext } from '@freecodecamp/shared/utils/polyvinyl'; import { type CertTitle } from '../../config/cert-and-project-map'; import { UserThemes } from './types'; diff --git a/client/src/redux/selectors.js b/client/src/redux/selectors.js index f8ebf9fbbc0..15acdfbe5d4 100644 --- a/client/src/redux/selectors.js +++ b/client/src/redux/selectors.js @@ -3,7 +3,7 @@ import { liveCerts } from '../../config/cert-and-project-map'; import { certSlugTypeMap, certToTitleMap -} from '../../../shared-dist/config/certification-settings.js'; +} from '@freecodecamp/shared/config/certification-settings'; import { randomBetween } from '../utils/random-between'; import { getSessionChallengeData } from '../utils/session-storage'; diff --git a/client/src/redux/settings/settings-sagas.js b/client/src/redux/settings/settings-sagas.js index 8fee93ee4d4..90efa9d86d6 100644 --- a/client/src/redux/settings/settings-sagas.js +++ b/client/src/redux/settings/settings-sagas.js @@ -10,7 +10,7 @@ import { import store from 'store'; import { navigate } from 'gatsby'; -import { Certification } from '../../../../shared-dist/config/certification-settings'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; import { createFlashMessage } from '../../components/Flash/redux'; import { liveCerts } from '../../../config/cert-and-project-map'; import { diff --git a/client/src/templates/Challenges/classic/action-row.tsx b/client/src/templates/Challenges/classic/action-row.tsx index 93d9324debe..90f32186e51 100644 --- a/client/src/templates/Challenges/classic/action-row.tsx +++ b/client/src/templates/Challenges/classic/action-row.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import store from 'store'; import { DailyCodingChallengeLanguages } from '../../../redux/prop-types'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import EditorTabs from './editor-tabs'; interface ClassicLayoutProps { diff --git a/client/src/templates/Challenges/classic/desktop-layout.tsx b/client/src/templates/Challenges/classic/desktop-layout.tsx index a8fc6784f76..8296b7707e4 100644 --- a/client/src/templates/Challenges/classic/desktop-layout.tsx +++ b/client/src/templates/Challenges/classic/desktop-layout.tsx @@ -4,7 +4,7 @@ import { ReflexContainer, ReflexSplitter, ReflexElement } from 'react-reflex'; import { createSelector } from 'reselect'; import { connect } from 'react-redux'; import store from 'store'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { ChallengeFiles, DailyCodingChallengeLanguages, diff --git a/client/src/templates/Challenges/classic/editor.tsx b/client/src/templates/Challenges/classic/editor.tsx index c3f2949b444..1b10f17d26f 100644 --- a/client/src/templates/Challenges/classic/editor.tsx +++ b/client/src/templates/Challenges/classic/editor.tsx @@ -34,7 +34,7 @@ import type { } from '../../../redux/prop-types'; import { editorToneOptions } from '../../../utils/tone/editor-config'; import { editorNotes } from '../../../utils/tone/editor-notes'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { executeChallenge, saveEditorContent, diff --git a/client/src/templates/Challenges/classic/show.tsx b/client/src/templates/Challenges/classic/show.tsx index 1818477182e..192a849a8a4 100644 --- a/client/src/templates/Challenges/classic/show.tsx +++ b/client/src/templates/Challenges/classic/show.tsx @@ -11,7 +11,7 @@ import { editor } from 'monaco-editor'; import type { FitAddon } from 'xterm-addon-fit'; import { useFeature } from '@growthbook/growthbook-react'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import LearnLayout from '../../../components/layouts/learn'; import { MAX_MOBILE_WIDTH } from '../../../../config/misc'; diff --git a/client/src/templates/Challenges/codeally/show.tsx b/client/src/templates/Challenges/codeally/show.tsx index 8c391f46ac8..87c8eac5817 100644 --- a/client/src/templates/Challenges/codeally/show.tsx +++ b/client/src/templates/Challenges/codeally/show.tsx @@ -15,7 +15,7 @@ import { useFeature } from '@growthbook/growthbook-react'; import LearnLayout from '../../../components/layouts/learn'; import ChallengeTitle from '../components/challenge-title'; import PrismFormatted from '../components/prism-formatted'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import CompletionModal from '../components/completion-modal'; import HelpModal from '../components/help-modal'; import Hotkeys from '../components/hotkeys'; @@ -45,7 +45,7 @@ import ProjectToolPanel from '../projects/tool-panel'; import { getChallengePaths } from '../utils/challenge-paths'; import SolutionForm from '../projects/solution-form'; import { FlashMessages } from '../../../components/Flash/redux/flash-messages'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { CodeAllyDown } from '../../../components/growth-book/codeally-down'; import { postUserToken } from '../../../utils/ajax'; import RdbStep1Instructions from './rdb-step-1-instructions'; diff --git a/client/src/templates/Challenges/components/multiple-choice-questions.tsx b/client/src/templates/Challenges/components/multiple-choice-questions.tsx index 1083913117d..df0414e081e 100644 --- a/client/src/templates/Challenges/components/multiple-choice-questions.tsx +++ b/client/src/templates/Challenges/components/multiple-choice-questions.tsx @@ -7,7 +7,7 @@ import { faMicrophone } from '@fortawesome/free-solid-svg-icons'; import { Button, Spacer } from '@freecodecamp/ui'; import { Question } from '../../../redux/prop-types'; import { openModal } from '../redux/actions'; -import { SuperBlocks } from '../../../../../shared/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import SpeakingModal from './speaking-modal'; import ChallengeHeading from './challenge-heading'; import PrismFormatted from './prism-formatted'; diff --git a/client/src/templates/Challenges/components/speaking-modal.tsx b/client/src/templates/Challenges/components/speaking-modal.tsx index b72dc658854..ccd071bf80f 100644 --- a/client/src/templates/Challenges/components/speaking-modal.tsx +++ b/client/src/templates/Challenges/components/speaking-modal.tsx @@ -17,7 +17,7 @@ import { isSpeakingModalOpenSelector } from '../redux/selectors'; import { SuperBlocks, superBlockToSpeechLang -} from '../../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import { compareTexts, type ComparisonResult, diff --git a/client/src/templates/Challenges/fill-in-the-blank/show.tsx b/client/src/templates/Challenges/fill-in-the-blank/show.tsx index 014700cd0f4..de10fe0b6d0 100644 --- a/client/src/templates/Challenges/fill-in-the-blank/show.tsx +++ b/client/src/templates/Challenges/fill-in-the-blank/show.tsx @@ -10,9 +10,11 @@ import { bindActionCreators } from 'redux'; import type { Dispatch } from 'redux'; import { createSelector } from 'reselect'; import { Container, Col, Row, Button, Spacer } from '@freecodecamp/ui'; -import ShortcutsModal from '../components/shortcuts-modal'; + +import { ChallengeLang } from '@freecodecamp/shared/config/curriculum'; // Local Utilities +import ShortcutsModal from '../components/shortcuts-modal'; import LearnLayout from '../../../components/layouts/learn'; import { ChallengeNode, ChallengeMeta, Test } from '../../../redux/prop-types'; import Hotkeys from '../components/hotkeys'; @@ -38,7 +40,6 @@ import { replaceAppleQuotes } from '../../../utils/replace-apple-quotes'; import { parseHanziPinyinPairs } from './parse-blanks'; import './show.css'; -import { ChallengeLang } from '../../../../../shared-dist/config/curriculum'; // Redux Setup const mapStateToProps = createSelector( diff --git a/client/src/templates/Challenges/ms-trophy/link-ms-user.tsx b/client/src/templates/Challenges/ms-trophy/link-ms-user.tsx index c1777213be8..5da43564827 100644 --- a/client/src/templates/Challenges/ms-trophy/link-ms-user.tsx +++ b/client/src/templates/Challenges/ms-trophy/link-ms-user.tsx @@ -13,7 +13,7 @@ import { Spacer } from '@freecodecamp/ui'; -import { isMicrosoftTranscriptLink } from '../../../../../shared-dist/utils/validate'; +import { isMicrosoftTranscriptLink } from '@freecodecamp/shared/utils/validate'; import { linkMsUsername, unlinkMsUsername, diff --git a/client/src/templates/Challenges/projects/solution-form.tsx b/client/src/templates/Challenges/projects/solution-form.tsx index e3a4b3fdf9d..ab15b8cd38b 100644 --- a/client/src/templates/Challenges/projects/solution-form.tsx +++ b/client/src/templates/Challenges/projects/solution-form.tsx @@ -2,7 +2,7 @@ import React, { Component } from 'react'; import { withTranslation } from 'react-i18next'; import type { WithTranslation } from 'react-i18next'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { StrictSolutionForm, ValidatedValues diff --git a/client/src/templates/Challenges/quiz/show.tsx b/client/src/templates/Challenges/quiz/show.tsx index 4d14cc9e32c..0d098d5dd8c 100644 --- a/client/src/templates/Challenges/quiz/show.tsx +++ b/client/src/templates/Challenges/quiz/show.tsx @@ -19,7 +19,7 @@ import { } from '@freecodecamp/ui'; // Local Utilities -import { shuffleArray } from '../../../../../shared-dist/utils/shuffle-array'; +import { shuffleArray } from '@freecodecamp/shared/utils/shuffle-array'; import LearnLayout from '../../../components/layouts/learn'; import { ChallengeNode, ChallengeMeta, Test } from '../../../redux/prop-types'; import ChallengeDescription from '../components/challenge-description'; diff --git a/client/src/templates/Challenges/rechallenge/transformers.js b/client/src/templates/Challenges/rechallenge/transformers.js index 200b5a81437..94dd8a80f4e 100644 --- a/client/src/templates/Challenges/rechallenge/transformers.js +++ b/client/src/templates/Challenges/rechallenge/transformers.js @@ -15,7 +15,7 @@ import { transformHeadTailAndContents, compileHeadTail, createSource -} from '../../../../../shared-dist/utils/polyvinyl'; +} from '@freecodecamp/shared/utils/polyvinyl'; import { WorkerExecutor } from '../utils/worker-executor'; import { compileTypeScriptCode, diff --git a/client/src/templates/Challenges/redux/code-storage-epic.js b/client/src/templates/Challenges/redux/code-storage-epic.js index 4ac79d62b03..410f97edf7c 100644 --- a/client/src/templates/Challenges/redux/code-storage-epic.js +++ b/client/src/templates/Challenges/redux/code-storage-epic.js @@ -3,7 +3,7 @@ import { of } from 'rxjs'; import { filter, ignoreElements, map, switchMap, tap } from 'rxjs/operators'; import store from 'store'; -import { isPoly, setContent } from '../../../../../shared-dist/utils/polyvinyl'; +import { isPoly, setContent } from '@freecodecamp/shared/utils/polyvinyl'; import { createFlashMessage } from '../../../components/Flash/redux'; import { FlashMessages } from '../../../components/Flash/redux/flash-messages'; import { savedChallengesSelector } from '../../../redux/selectors'; @@ -11,7 +11,7 @@ import { actionTypes as appTypes } from '../../../redux/action-types'; import { getIsDailyCodingChallenge, getDailyCodingChallengeLanguage -} from '../../../../../shared-dist/config/challenge-types'; +} from '@freecodecamp/shared/config/challenge-types'; import { actionTypes } from './action-types'; import { noStoredCodeFound, updateFile } from './actions'; import { challengeFilesSelector, challengeMetaSelector } from './selectors'; diff --git a/client/src/templates/Challenges/redux/completion-epic.js b/client/src/templates/Challenges/redux/completion-epic.js index 82e4927d4a6..9cdb75b9362 100644 --- a/client/src/templates/Challenges/redux/completion-epic.js +++ b/client/src/templates/Challenges/redux/completion-epic.js @@ -20,7 +20,7 @@ import { getIsDailyCodingChallenge, getDailyCodingChallengeLanguage, submitTypes -} from '../../../../../shared-dist/config/challenge-types'; +} from '@freecodecamp/shared/config/challenge-types'; import { actionTypes as submitActionTypes } from '../../../redux/action-types'; import { allowSectionDonationRequests, @@ -34,7 +34,7 @@ import { isSignedInSelector, userSelector } from '../../../redux/selectors'; import { mapFilesToChallengeFiles } from '../../../utils/ajax'; import { standardizeRequestBody } from '../../../utils/challenge-request-helpers'; import postUpdate$ from '../utils/post-update'; -import { chapterBasedSuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { chapterBasedSuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { actionTypes } from './action-types'; import { closeModal, diff --git a/client/src/templates/Challenges/redux/create-question-epic.js b/client/src/templates/Challenges/redux/create-question-epic.js index 704cbd08187..01135a1edce 100644 --- a/client/src/templates/Challenges/redux/create-question-epic.js +++ b/client/src/templates/Challenges/redux/create-question-epic.js @@ -4,7 +4,7 @@ import { mapTo, tap } from 'rxjs/operators'; import envData from '../../../../config/env.json'; import { transformEditorLink } from '../utils'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { actionTypes } from './action-types'; import { closeModal } from './actions'; import { diff --git a/client/src/templates/Challenges/redux/execute-challenge-saga.js b/client/src/templates/Challenges/redux/execute-challenge-saga.js index 9d087fd5c54..548a96a7461 100644 --- a/client/src/templates/Challenges/redux/execute-challenge-saga.js +++ b/client/src/templates/Challenges/redux/execute-challenge-saga.js @@ -14,7 +14,7 @@ import { takeLatest } from 'redux-saga/effects'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { createFlashMessage } from '../../../components/Flash/redux'; import { FlashMessages } from '../../../components/Flash/redux/flash-messages'; import { diff --git a/client/src/templates/Challenges/redux/index.js b/client/src/templates/Challenges/redux/index.js index 34e8feb624f..5d4c66468a1 100644 --- a/client/src/templates/Challenges/redux/index.js +++ b/client/src/templates/Challenges/redux/index.js @@ -1,7 +1,7 @@ import { isEmpty } from 'lodash-es'; import { handleActions } from 'redux-actions'; -import { getLines } from '../../../../../shared-dist/utils/get-lines'; +import { getLines } from '@freecodecamp/shared/utils/get-lines'; import { getTargetEditor } from '../utils/get-target-editor'; import { actionTypes, ns } from './action-types'; import codeStorageEpic from './code-storage-epic'; diff --git a/client/src/templates/Challenges/redux/selectors.js b/client/src/templates/Challenges/redux/selectors.js index 6b73376bab9..5f85179e1b2 100644 --- a/client/src/templates/Challenges/redux/selectors.js +++ b/client/src/templates/Challenges/redux/selectors.js @@ -1,5 +1,5 @@ import { createSelector } from 'reselect'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { completedChallengesSelector, allChallengesInfoSelector, diff --git a/client/src/templates/Challenges/utils/build.ts b/client/src/templates/Challenges/utils/build.ts index 130e5a48d08..4d4bb0b50e6 100644 --- a/client/src/templates/Challenges/utils/build.ts +++ b/client/src/templates/Challenges/utils/build.ts @@ -1,4 +1,4 @@ -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import type { ChallengeFile } from '../../../redux/prop-types'; import { concatHtml } from '../rechallenge/builders'; diff --git a/client/src/templates/Introduction/components/block-header.tsx b/client/src/templates/Introduction/components/block-header.tsx index 581e105b974..7cdbc9080f2 100644 --- a/client/src/templates/Introduction/components/block-header.tsx +++ b/client/src/templates/Introduction/components/block-header.tsx @@ -3,7 +3,7 @@ import { isEmpty } from 'lodash'; import { Button } from '@freecodecamp/ui'; import { Link } from '../../../components/helpers'; -import type { BlockLabel as BlockLabelType } from '../../../../../shared-dist/config/blocks'; +import type { BlockLabel as BlockLabelType } from '@freecodecamp/shared/config/blocks'; import { ProgressBar } from '../../../components/Progress/progress-bar'; import DropDown from '../../../assets/icons/dropdown'; import CheckMark from './check-mark'; diff --git a/client/src/templates/Introduction/components/block-label.tsx b/client/src/templates/Introduction/components/block-label.tsx index 045b1323143..f4383d3845f 100644 --- a/client/src/templates/Introduction/components/block-label.tsx +++ b/client/src/templates/Introduction/components/block-label.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; -import { BlockLabel as BlockLabelType } from '../../../../../shared-dist/config/blocks'; +import { BlockLabel as BlockLabelType } from '@freecodecamp/shared/config/blocks'; interface BlockLabelProps { blockLabel: BlockLabelType; diff --git a/client/src/templates/Introduction/components/block.test.tsx b/client/src/templates/Introduction/components/block.test.tsx index a2d539ac569..1d40a9ae13f 100644 --- a/client/src/templates/Introduction/components/block.test.tsx +++ b/client/src/templates/Introduction/components/block.test.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { describe, it, expect, afterEach, vi, Mock } from 'vitest'; import type { TFunction } from 'i18next'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { ChallengeFiles, PrerequisiteChallenge, @@ -12,14 +12,11 @@ import { FileKeyChallenge, BilibiliIds } from '../../../redux/prop-types'; -import { isAuditedSuperBlock } from '../../../../../shared-dist/utils/is-audited'; -import { - BlockLayouts, - BlockLabel -} from '../../../../../shared-dist/config/blocks'; +import { isAuditedSuperBlock } from '@freecodecamp/shared/utils/is-audited'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; import { Block } from './block'; -vi.mock('../../../../../shared-dist/utils/is-audited', () => ({ +vi.mock('@freecodecamp/shared/utils/is-audited', () => ({ isAuditedSuperBlock: vi.fn().mockReturnValueOnce(true) })); diff --git a/client/src/templates/Introduction/components/block.tsx b/client/src/templates/Introduction/components/block.tsx index 053361b371c..09817389867 100644 --- a/client/src/templates/Introduction/components/block.tsx +++ b/client/src/templates/Introduction/components/block.tsx @@ -7,13 +7,13 @@ import { bindActionCreators, Dispatch } from 'redux'; import { createSelector } from 'reselect'; import { Spacer } from '@freecodecamp/ui'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { chapterBasedSuperBlocks, SuperBlocks -} from '../../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import envData from '../../../../config/env.json'; -import { isAuditedSuperBlock } from '../../../../../shared-dist/utils/is-audited'; +import { isAuditedSuperBlock } from '@freecodecamp/shared/utils/is-audited'; import Caret from '../../../assets/icons/caret'; import { Link } from '../../../components/helpers'; import { completedChallengesSelector } from '../../../redux/selectors'; @@ -23,7 +23,7 @@ import { isProjectBased } from '../../../utils/curriculum-layout'; import { BlockLayouts, BlockLabel as BlockLabelType -} from '../../../../../shared-dist/config/blocks'; +} from '@freecodecamp/shared/config/blocks'; import CheckMark from './check-mark'; import { GridMapChallenges, diff --git a/client/src/templates/Introduction/components/cert-challenge.tsx b/client/src/templates/Introduction/components/cert-challenge.tsx index 85b2466fd1c..1824d091053 100644 --- a/client/src/templates/Introduction/components/cert-challenge.tsx +++ b/client/src/templates/Introduction/components/cert-challenge.tsx @@ -7,8 +7,8 @@ import { Button } from '@freecodecamp/ui'; import { type Certification, superBlockToCertMap -} from '../../../../../shared-dist/config/certification-settings'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/certification-settings'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { isSignedInSelector, diff --git a/client/src/templates/Introduction/components/challenges.tsx b/client/src/templates/Introduction/components/challenges.tsx index 83a416aa41d..fe2b0685542 100644 --- a/client/src/templates/Introduction/components/challenges.tsx +++ b/client/src/templates/Introduction/components/challenges.tsx @@ -3,8 +3,8 @@ import { useTranslation } from 'react-i18next'; import GreenNotCompleted from '../../../assets/icons/green-not-completed'; import GreenPass from '../../../assets/icons/green-pass'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; -import { challengeTypes } from '../../../../../shared-dist/config/challenge-types'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { Link } from '../../../components/helpers'; import { ButtonLink } from '../../../components/helpers/button-link'; diff --git a/client/src/templates/Introduction/components/help-translate.tsx b/client/src/templates/Introduction/components/help-translate.tsx index ffdbec4254e..222fc952bdd 100644 --- a/client/src/templates/Introduction/components/help-translate.tsx +++ b/client/src/templates/Introduction/components/help-translate.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Spacer } from '@freecodecamp/ui'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; -import { isAuditedSuperBlock } from '../../../../../shared-dist/utils/is-audited'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; +import { isAuditedSuperBlock } from '@freecodecamp/shared/utils/is-audited'; import { Link } from '../../../components/helpers'; import envData from '../../../../config/env.json'; diff --git a/client/src/templates/Introduction/components/legacy-links.tsx b/client/src/templates/Introduction/components/legacy-links.tsx index 9dd23316c6a..41a12ebc4be 100644 --- a/client/src/templates/Introduction/components/legacy-links.tsx +++ b/client/src/templates/Introduction/components/legacy-links.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Callout } from '@freecodecamp/ui'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { isRelationalDbCert, isExamCert } from '../../../utils/is-a-cert'; import { CodeAllyDown } from '../../../components/growth-book/codeally-down'; diff --git a/client/src/templates/Introduction/components/super-block-accordion.test.tsx b/client/src/templates/Introduction/components/super-block-accordion.test.tsx index 5ccea043323..706f851af59 100644 --- a/client/src/templates/Introduction/components/super-block-accordion.test.tsx +++ b/client/src/templates/Introduction/components/super-block-accordion.test.tsx @@ -1,12 +1,9 @@ import React from 'react'; import { render, screen, within } from '@testing-library/react'; import { describe, it, expect } from 'vitest'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { SuperBlockAccordion } from './super-block-accordion'; -import { - BlockLabel, - BlockLayouts -} from '../../../../../shared-dist/config/blocks'; +import { BlockLabel, BlockLayouts } from '@freecodecamp/shared/config/blocks'; const mockStructure = { superBlock: SuperBlocks.RespWebDesign, diff --git a/client/src/templates/Introduction/components/super-block-accordion.tsx b/client/src/templates/Introduction/components/super-block-accordion.tsx index 376ab32f5fa..9534fa80253 100644 --- a/client/src/templates/Introduction/components/super-block-accordion.tsx +++ b/client/src/templates/Introduction/components/super-block-accordion.tsx @@ -3,18 +3,15 @@ import { useTranslation } from 'react-i18next'; // TODO: Add this component to freecodecamp/ui and remove this dependency import { Disclosure } from '@headlessui/react'; -import { SuperBlocks } from '../../../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import DropDown from '../../../assets/icons/dropdown'; import type { ChapterBasedSuperBlockStructure } from '../../../redux/prop-types'; import { ChapterIcon } from '../../../assets/chapter-icon'; -import { type Chapter } from '../../../../../shared-dist/config/chapters'; +import { type Chapter } from '@freecodecamp/shared/config/chapters'; import { Link } from '../../../components/helpers'; -import { - BlockLayouts, - BlockLabel -} from '../../../../../shared-dist/config/blocks'; -import { FsdChapters } from '../../../../../shared-dist/config/chapters'; -import { type Module } from '../../../../../shared-dist/config/modules'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; +import { FsdChapters } from '@freecodecamp/shared/config/chapters'; +import { type Module } from '@freecodecamp/shared/config/modules'; import envData from '../../../../config/env.json'; import Block from './block'; import CheckMark from './check-mark'; diff --git a/client/src/templates/Introduction/components/super-block-intro.tsx b/client/src/templates/Introduction/components/super-block-intro.tsx index a5f861da63a..951944b17c9 100644 --- a/client/src/templates/Introduction/components/super-block-intro.tsx +++ b/client/src/templates/Introduction/components/super-block-intro.tsx @@ -4,7 +4,7 @@ import { Callout, Spacer, Container, Row, Col } from '@freecodecamp/ui'; import { archivedSuperBlocks, SuperBlocks -} from '../../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import { SuperBlockIcon } from '../../../assets/superblock-icon'; import { Link } from '../../../components/helpers'; import CapIcon from '../../../assets/icons/cap'; diff --git a/client/src/templates/Introduction/components/super-block-map.tsx b/client/src/templates/Introduction/components/super-block-map.tsx index 162c4404a5f..e69a55124c4 100644 --- a/client/src/templates/Introduction/components/super-block-map.tsx +++ b/client/src/templates/Introduction/components/super-block-map.tsx @@ -6,7 +6,7 @@ import { certificationCollectionSuperBlocks, chapterBasedSuperBlocks, SuperBlocks -} from '../../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import type { CertTitle } from '../../../../config/cert-and-project-map'; import type { ChapterBasedSuperBlockStructure, @@ -15,14 +15,14 @@ import type { import type { BlockLabel, BlockLayouts -} from '../../../../../shared-dist/config/blocks'; +} from '@freecodecamp/shared/config/blocks'; import { SuperBlockIcon } from '../../../assets/superblock-icon'; import { Link } from '../../../components/helpers'; import { certSlugTypeMap, certificationRequirements, superBlockToCertMap -} from '../../../../../shared-dist/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; import CheckMark from './check-mark'; import Block from './block'; diff --git a/client/src/templates/Introduction/super-block-intro.test.tsx b/client/src/templates/Introduction/super-block-intro.test.tsx index 87b7b7c4fea..577d59283de 100644 --- a/client/src/templates/Introduction/super-block-intro.test.tsx +++ b/client/src/templates/Introduction/super-block-intro.test.tsx @@ -144,11 +144,8 @@ vi.mock('../../components/helpers', () => ({ ) })); -import { - BlockLabel, - BlockLayouts -} from '../../../../shared-dist/config/blocks'; -import { SuperBlocks } from '../../../../shared-dist/config/curriculum'; +import { BlockLabel, BlockLayouts } from '@freecodecamp/shared/config/blocks'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import SuperBlockIntroductionPage from './super-block-intro'; type ChallengeNode = { diff --git a/client/src/templates/Introduction/super-block-intro.tsx b/client/src/templates/Introduction/super-block-intro.tsx index 505e002cccb..03909f6ea9b 100644 --- a/client/src/templates/Introduction/super-block-intro.tsx +++ b/client/src/templates/Introduction/super-block-intro.tsx @@ -15,7 +15,7 @@ import { useFeatureValue } from '@growthbook/growthbook-react'; import { SuperBlocks, certificationCollectionSuperBlocks -} from '../../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import DonateModal from '../../components/Donation/donation-modal'; import Login from '../../components/Header/components/login'; import Map from '../../components/Map'; @@ -34,11 +34,8 @@ import type { ChapterBasedSuperBlockStructure } from '../../redux/prop-types'; import { CertTitle, liveCerts } from '../../../config/cert-and-project-map'; -import { superBlockToCertMap } from '../../../../shared-dist/config/certification-settings'; -import { - BlockLayouts, - BlockLabel -} from '../../../../shared-dist/config/blocks'; +import { superBlockToCertMap } from '@freecodecamp/shared/config/certification-settings'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; import LegacyLinks from './components/legacy-links'; import HelpTranslate from './components/help-translate'; import SuperBlockIntro from './components/super-block-intro'; diff --git a/client/src/utils/__fixtures__/completed-challenges.ts b/client/src/utils/__fixtures__/completed-challenges.ts index 4263cc1e7da..bd026dad4e7 100644 --- a/client/src/utils/__fixtures__/completed-challenges.ts +++ b/client/src/utils/__fixtures__/completed-challenges.ts @@ -1,5 +1,5 @@ import { challengeFiles } from '../../../utils/__fixtures__/challenges'; -import { challengeTypes } from '../../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; const baseChallenge = { id: '1', diff --git a/client/src/utils/ajax.ts b/client/src/utils/ajax.ts index 4f927660305..57cb79e522c 100644 --- a/client/src/utils/ajax.ts +++ b/client/src/utils/ajax.ts @@ -13,7 +13,7 @@ import type { SurveyResults, User } from '../redux/prop-types'; -import { DonationDuration } from '../../../shared-dist/config/donation-settings'; +import { DonationDuration } from '@freecodecamp/shared/config/donation-settings'; const { apiLocation } = envData; diff --git a/client/src/utils/curriculum-layout.ts b/client/src/utils/curriculum-layout.ts index 92bcd9ac951..5ed07013c28 100644 --- a/client/src/utils/curriculum-layout.ts +++ b/client/src/utils/curriculum-layout.ts @@ -1,4 +1,4 @@ -import { challengeTypes } from '../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; // Show a single project in a certification layout diff --git a/client/src/utils/get-completion-percentage.test.ts b/client/src/utils/get-completion-percentage.test.ts index 32ea874f708..d1174e413f7 100644 --- a/client/src/utils/get-completion-percentage.test.ts +++ b/client/src/utils/get-completion-percentage.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; import type { AllChallengesInfo, ChallengeNode } from '../redux/prop-types'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { getCompletedPercentage, getCompletedChallengesInBlock, diff --git a/client/src/utils/is-a-cert.ts b/client/src/utils/is-a-cert.ts index c6992b5ef5d..423ffdff4da 100644 --- a/client/src/utils/is-a-cert.ts +++ b/client/src/utils/is-a-cert.ts @@ -1,4 +1,4 @@ -import { SuperBlocks } from '../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; export function isRelationalDbCert(superBlock: string): boolean { return superBlock === String(SuperBlocks.RelationalDb); diff --git a/client/src/utils/math-jax.ts b/client/src/utils/math-jax.ts index f1a2a0e388b..5c8393e4eaf 100644 --- a/client/src/utils/math-jax.ts +++ b/client/src/utils/math-jax.ts @@ -1,4 +1,4 @@ -import { SuperBlocks } from '../../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { scriptLoader } from './script-loaders'; export const mathJaxSrc = diff --git a/client/src/utils/path-parsers.ts b/client/src/utils/path-parsers.ts index 407bfdbe044..e3ba77f47f4 100644 --- a/client/src/utils/path-parsers.ts +++ b/client/src/utils/path-parsers.ts @@ -1,5 +1,5 @@ import { WindowLocation } from '@gatsbyjs/reach-router'; -import { i18nConstants } from '../../../shared-dist/config/constants'; +import { i18nConstants } from '@freecodecamp/shared/config/constants'; const splitPath = (pathname: string): string[] => pathname.split('/').filter(x => x); diff --git a/client/src/utils/solution-display-type.ts b/client/src/utils/solution-display-type.ts index 7ec92065c2a..3b8b0e11d24 100644 --- a/client/src/utils/solution-display-type.ts +++ b/client/src/utils/solution-display-type.ts @@ -1,5 +1,5 @@ import type { CompletedChallenge } from '../redux/prop-types'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { hasProtocolRE } from '.'; type DisplayType = diff --git a/client/tools/create-env.ts b/client/tools/create-env.ts index 42acfe3a899..a92de49496f 100644 --- a/client/tools/create-env.ts +++ b/client/tools/create-env.ts @@ -2,7 +2,7 @@ import { spawn } from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; -import { availableLangs, Languages } from '../../shared-dist/config/i18n'; +import { availableLangs, Languages } from '@freecodecamp/shared/config/i18n'; import env from './read-env'; const configPath = path.resolve(__dirname, '../config'); @@ -14,7 +14,7 @@ function checkClientLocale() { if (!availableLangs.client.includes(process.env.CLIENT_LOCALE as Languages)) { throw Error(` - CLIENT_LOCALE, ${process.env.CLIENT_LOCALE}, is not an available language in shared-dist/config/i18n.ts + CLIENT_LOCALE, ${process.env.CLIENT_LOCALE}, is not an available language in packages/shared/src/config/i18n.ts `); } @@ -30,7 +30,7 @@ function checkCurriculumLocale() { ) { throw Error(` - CURRICULUM_LOCALE, ${process.env.CURRICULUM_LOCALE}, is not an available language in shared-dist/config/i18n.ts + CURRICULUM_LOCALE, ${process.env.CURRICULUM_LOCALE}, is not an available language in packages/shared/src/config/i18n.ts `); } diff --git a/client/tools/external-curriculum/build-external-curricula-data-v1.test.ts b/client/tools/external-curriculum/build-external-curricula-data-v1.test.ts index 1e3b8859410..784309ced45 100644 --- a/client/tools/external-curriculum/build-external-curricula-data-v1.test.ts +++ b/client/tools/external-curriculum/build-external-curricula-data-v1.test.ts @@ -9,7 +9,7 @@ import { SuperBlocks, SuperBlockStage, superBlockStages -} from '../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import { superblockSchemaValidator, availableSuperBlocksValidator diff --git a/client/tools/external-curriculum/build-external-curricula-data-v1.ts b/client/tools/external-curriculum/build-external-curricula-data-v1.ts index 28d442b7581..da83012d01b 100644 --- a/client/tools/external-curriculum/build-external-curricula-data-v1.ts +++ b/client/tools/external-curriculum/build-external-curricula-data-v1.ts @@ -1,8 +1,8 @@ import { mkdirSync, writeFileSync, readFileSync } from 'fs'; import { resolve, dirname } from 'path'; import { omit } from 'lodash'; -import { submitTypes } from '../../../shared-dist/config/challenge-types'; -import { SuperBlocks } from '../../../shared-dist/config/curriculum'; +import { submitTypes } from '@freecodecamp/shared/config/challenge-types'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { patchBlock } from './patches'; export type CurriculumIntros = { diff --git a/client/tools/external-curriculum/build-external-curricula-data-v2.test.ts b/client/tools/external-curriculum/build-external-curricula-data-v2.test.ts index 1e34a74b299..974b4108349 100644 --- a/client/tools/external-curriculum/build-external-curricula-data-v2.test.ts +++ b/client/tools/external-curriculum/build-external-curricula-data-v2.test.ts @@ -9,7 +9,7 @@ import { SuperBlocks, SuperBlockStage, superBlockStages -} from '../../../shared-dist/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; import { superblockSchemaValidator, availableSuperBlocksValidator diff --git a/client/tools/external-curriculum/build-external-curricula-data-v2.ts b/client/tools/external-curriculum/build-external-curricula-data-v2.ts index 28febd0c7a0..d926eff7c0c 100644 --- a/client/tools/external-curriculum/build-external-curricula-data-v2.ts +++ b/client/tools/external-curriculum/build-external-curricula-data-v2.ts @@ -1,13 +1,13 @@ import { mkdirSync, writeFileSync, readFileSync } from 'fs'; import { resolve, dirname } from 'path'; import { omit } from 'lodash'; -import { submitTypes } from '../../../shared-dist/config/challenge-types'; +import { submitTypes } from '@freecodecamp/shared/config/challenge-types'; import { type ChallengeNode } from '../../src/redux/prop-types'; import { SuperBlocks, chapterBasedSuperBlocks -} from '../../../shared-dist/config/curriculum'; -import type { Chapter } from '../../../shared-dist/config/chapters'; +} from '@freecodecamp/shared/config/curriculum'; +import type { Chapter } from '@freecodecamp/shared/config/chapters'; import { getSuperblockStructure } from '../../../curriculum/src/file-handler'; import { patchBlock } from './patches'; import { diff --git a/client/tools/external-curriculum/build.ts b/client/tools/external-curriculum/build.ts index 225beadfcbb..243b3183869 100644 --- a/client/tools/external-curriculum/build.ts +++ b/client/tools/external-curriculum/build.ts @@ -1,7 +1,7 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; -const CURRICULUM_PATH = '../../../shared-dist/config/curriculum.json'; +const CURRICULUM_PATH = '../../../curriculum/generated/curriculum.json'; // const __dirname = dirname(fileURLToPath(import.meta.url)); // Curriculum is read using fs, because it is too large for VSCode's LSP to handle type inference which causes annoying behavior. const curriculum = JSON.parse( diff --git a/client/tools/external-curriculum/external-data-schema-v1.ts b/client/tools/external-curriculum/external-data-schema-v1.ts index 95a54480273..c93be59251b 100644 --- a/client/tools/external-curriculum/external-data-schema-v1.ts +++ b/client/tools/external-curriculum/external-data-schema-v1.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { chapterBasedSuperBlocks } from '../../../shared-dist/config/curriculum'; +import { chapterBasedSuperBlocks } from '@freecodecamp/shared/config/curriculum'; const blockSchema = Joi.object({}).keys({ desc: Joi.array().min(1), diff --git a/client/tools/external-curriculum/external-data-schema-v2.ts b/client/tools/external-curriculum/external-data-schema-v2.ts index af5d945ffe0..aa2228914f4 100644 --- a/client/tools/external-curriculum/external-data-schema-v2.ts +++ b/client/tools/external-curriculum/external-data-schema-v2.ts @@ -1,5 +1,5 @@ import Joi from 'joi'; -import { chapterBasedSuperBlocks } from '../../../shared-dist/config/curriculum'; +import { chapterBasedSuperBlocks } from '@freecodecamp/shared/config/curriculum'; const slugRE = new RegExp('^[a-z0-9-]+$'); diff --git a/client/tools/generate-search-placeholder.ts b/client/tools/generate-search-placeholder.ts index b1201c96b1f..0d5e6c0c513 100644 --- a/client/tools/generate-search-placeholder.ts +++ b/client/tools/generate-search-placeholder.ts @@ -11,7 +11,7 @@ import { environment } from '../config/env.json'; import { newsIndex } from '../src/utils/algolia-locale-setup'; -import { i18nextCodes } from '../../shared-dist/config/i18n'; +import { i18nextCodes } from '@freecodecamp/shared/config/i18n'; const i18nextCode = i18nextCodes[clientLocale as keyof typeof i18nextCodes]; diff --git a/client/utils/gatsby/challenge-page-creator.js b/client/utils/gatsby/challenge-page-creator.js index 35b2f9bfbf7..eccfd85e56d 100644 --- a/client/utils/gatsby/challenge-page-creator.js +++ b/client/utils/gatsby/challenge-page-creator.js @@ -1,5 +1,5 @@ const path = require('path'); -const { viewTypes } = require('../../../shared-dist/config/challenge-types'); +const { viewTypes } = require('@freecodecamp/shared/config/challenge-types'); const backend = path.resolve( __dirname, diff --git a/client/utils/index.ts b/client/utils/index.ts index fa415e82e3f..e0cd1b9c690 100644 --- a/client/utils/index.ts +++ b/client/utils/index.ts @@ -1,4 +1,4 @@ -import { Certification } from '../../shared-dist/config/certification-settings'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; const idToPath = new Map( Object.entries({ diff --git a/curriculum/.gitignore b/curriculum/.gitignore new file mode 100644 index 00000000000..86d4c2dd380 --- /dev/null +++ b/curriculum/.gitignore @@ -0,0 +1 @@ +generated diff --git a/curriculum/package.json b/curriculum/package.json index 31ad9fff23e..a55260869e3 100644 --- a/curriculum/package.json +++ b/curriculum/package.json @@ -18,9 +18,9 @@ "homepage": "https://github.com/freeCodeCamp/freeCodeCamp#readme", "author": "freeCodeCamp ", "scripts": { - "audit-challenges": "pnpm -w run compile:ts && tsx ./src/challenge-auditor/index.ts", + "audit-challenges": "pnpm -w turbo compile && tsx ./src/challenge-auditor/index.ts", "build": "tsx ./src/generate/build-curriculum", - "compile": "tsc --build --clean && tsc --build", + "compile": "tsc", "create-empty-steps": "CALLING_DIR=$INIT_CWD tsx --tsconfig ../tsconfig.json ../tools/challenge-helper-scripts/create-empty-steps", "create-next-challenge": "CALLING_DIR=$INIT_CWD tsx --tsconfig ../tsconfig.json ../tools/challenge-helper-scripts/create-next-challenge", "create-this-challenge": "CALLING_DIR=$INIT_CWD tsx --tsconfig ../tsconfig.json ../tools/challenge-helper-scripts/create-this-challenge", @@ -48,6 +48,7 @@ "@babel/core": "7.23.7", "@babel/register": "7.23.7", "@freecodecamp/eslint-config": "workspace:*", + "@freecodecamp/shared": "workspace:*", "@total-typescript/ts-reset": "^0.6.1", "@types/debug": "^4.1.12", "@types/js-yaml": "4.0.5", diff --git a/curriculum/schema/challenge-schema.js b/curriculum/schema/challenge-schema.js index 8b49f0e00b5..0abc7d5b270 100644 --- a/curriculum/schema/challenge-schema.js +++ b/curriculum/schema/challenge-schema.js @@ -1,13 +1,15 @@ const Joi = require('joi'); Joi.objectId = require('joi-objectid')(Joi); -const { challengeTypes } = require('../../shared-dist/config/challenge-types'); +const { + challengeTypes +} = require('@freecodecamp/shared/config/challenge-types'); const { chapterBasedSuperBlocks, catalogSuperBlocks, languageSuperBlocks, SuperBlocks -} = require('../../shared-dist/config/curriculum'); +} = require('@freecodecamp/shared/config/curriculum'); const { availableCharacters, availableBackgrounds, diff --git a/curriculum/src/build-curriculum.test.js b/curriculum/src/build-curriculum.test.js index 6f9585be604..4cd8113f2b8 100644 --- a/curriculum/src/build-curriculum.test.js +++ b/curriculum/src/build-curriculum.test.js @@ -1,7 +1,7 @@ import path from 'node:path'; import { describe, it, expect, vi } from 'vitest'; -import { SuperBlocks } from '../../shared/config/curriculum.js'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { createCommentMap, addBlockStructure, diff --git a/curriculum/src/build-curriculum.ts b/curriculum/src/build-curriculum.ts index 7c152458b4e..ad61d43a0ac 100644 --- a/curriculum/src/build-curriculum.ts +++ b/curriculum/src/build-curriculum.ts @@ -5,7 +5,7 @@ import { isEmpty, isUndefined } from 'lodash'; import debug from 'debug'; import type { CommentDictionary } from '../../tools/challenge-parser/translation-parser/index.js'; -import { SuperBlocks } from '../../shared-dist/config/curriculum.js'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { SuperblockCreator, BlockCreator, diff --git a/curriculum/src/build-superblock.test.js b/curriculum/src/build-superblock.test.js index 9ff38f2fd50..1eb8145079f 100644 --- a/curriculum/src/build-superblock.test.js +++ b/curriculum/src/build-superblock.test.js @@ -1,5 +1,5 @@ import { describe, test, expect, vi } from 'vitest'; -import { isPoly } from '../../shared-dist/utils/polyvinyl.js'; +import { isPoly } from '@freecodecamp/shared/utils/polyvinyl'; import { validateChallenges, buildBlock, diff --git a/curriculum/src/build-superblock.ts b/curriculum/src/build-superblock.ts index 1ddae448077..5d6e48c6e75 100644 --- a/curriculum/src/build-superblock.ts +++ b/curriculum/src/build-superblock.ts @@ -4,15 +4,15 @@ import { isEmpty } from 'lodash'; import debug from 'debug'; import { parseMD } from '../../tools/challenge-parser/parser'; -import { createPoly } from '../../shared-dist/utils/polyvinyl'; -import { isAuditedSuperBlock } from '../../shared-dist/utils/is-audited'; +import { createPoly } from '@freecodecamp/shared/utils/polyvinyl'; +import { isAuditedSuperBlock } from '@freecodecamp/shared/utils/is-audited'; import { CommentDictionary, translateCommentsInChallenge } from '../../tools/challenge-parser/translation-parser'; -import { SuperBlocks } from '../../shared-dist/config/curriculum'; -import type { Chapter } from '../../shared-dist/config/chapters'; -import { Certification } from '../../shared-dist/config/certification-settings'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; +import type { Chapter } from '@freecodecamp/shared/config/chapters'; +import { Certification } from '@freecodecamp/shared/config/certification-settings'; import { getSuperOrder } from './super-order.js'; import type { BlockStructure, diff --git a/curriculum/src/challenge-auditor/index.ts b/curriculum/src/challenge-auditor/index.ts index ae7e6c25013..d695af17d54 100644 --- a/curriculum/src/challenge-auditor/index.ts +++ b/curriculum/src/challenge-auditor/index.ts @@ -1,11 +1,11 @@ import { flatten } from 'lodash/fp'; -import { availableLangs } from '../../../shared/config/i18n'; -import { getChallengesForLang } from '../get-challenges'; +import { availableLangs } from '@freecodecamp/shared/config/i18n'; +import { getChallengesForLang } from '../../../curriculum/src/get-challenges'; import { SuperBlocks, getAuditedSuperBlocks -} from '../../../shared/config/curriculum'; +} from '@freecodecamp/shared/config/curriculum'; // TODO: re-organise the types to a common 'types' folder that can be shared // between the workspaces so we don't have to declare ChallengeNode here and in diff --git a/curriculum/src/config.ts b/curriculum/src/config.ts index 48f48efd8ec..208f5841b0a 100644 --- a/curriculum/src/config.ts +++ b/curriculum/src/config.ts @@ -1,7 +1,7 @@ import { resolve } from 'path'; import { config } from 'dotenv'; -import { availableLangs } from '../../shared-dist/config/i18n.js'; +import { availableLangs } from '@freecodecamp/shared/config/i18n'; config({ path: resolve(__dirname, '../../.env') }); diff --git a/curriculum/src/file-handler.ts b/curriculum/src/file-handler.ts index 41711633cac..fc248f7b11d 100644 --- a/curriculum/src/file-handler.ts +++ b/curriculum/src/file-handler.ts @@ -5,13 +5,13 @@ import { mkdir, writeFile } from 'node:fs/promises'; import { fileURLToPath } from 'node:url'; import debug from 'debug'; -import type { Chapter } from '../../shared-dist/config/chapters.js'; -import type { BlockLabel } from '../../shared-dist/config/blocks.js'; +import type { Chapter } from '@freecodecamp/shared/config/chapters'; +import type { BlockLabel } from '@freecodecamp/shared/config/blocks'; import type { SuperBlocks, ChallengeLang -} from '../../shared-dist/config/curriculum.js'; -import type { Certification } from '../../shared-dist/config/certification-settings.js'; +} from '@freecodecamp/shared/config/curriculum'; +import type { Certification } from '@freecodecamp/shared/config/certification-settings'; const log = debug('fcc:file-handler'); diff --git a/curriculum/src/generate/build-curriculum.ts b/curriculum/src/generate/build-curriculum.ts index f0270cb3553..38973f25c61 100644 --- a/curriculum/src/generate/build-curriculum.ts +++ b/curriculum/src/generate/build-curriculum.ts @@ -3,10 +3,11 @@ import path from 'path'; import { getChallengesForLang } from '../get-challenges'; -const globalConfigPath = path.resolve(__dirname, '../../../shared-dist/config'); +const globalConfigPath = path.resolve(__dirname, '../../generated/'); void getChallengesForLang('english') .then(JSON.stringify) .then(json => { + fs.mkdirSync(globalConfigPath, { recursive: true }); fs.writeFileSync(`${globalConfigPath}/curriculum.json`, json); }); diff --git a/curriculum/src/get-challenges.ts b/curriculum/src/get-challenges.ts index 48acdf74cef..7d282a9b6f3 100644 --- a/curriculum/src/get-challenges.ts +++ b/curriculum/src/get-challenges.ts @@ -2,7 +2,7 @@ import { access as _access, constants } from 'fs'; import { resolve, join } from 'path'; import { promisify } from 'util'; -import { availableLangs } from '../../shared-dist/config/i18n.js'; +import { availableLangs } from '@freecodecamp/shared/config/i18n'; import { buildCurriculum } from './build-curriculum.js'; import { curriculumFilter } from './config.js'; import type { Filter } from './filter.js'; diff --git a/curriculum/src/super-order.test.ts b/curriculum/src/super-order.test.ts index f0e427166ee..8e4d805b4df 100644 --- a/curriculum/src/super-order.test.ts +++ b/curriculum/src/super-order.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { SuperBlocks } from '../../shared-dist/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { createSuperOrder, getSuperOrder } from './super-order.js'; const mockSuperBlocks = [ diff --git a/curriculum/src/super-order.ts b/curriculum/src/super-order.ts index 2cd40068440..8b31547329b 100644 --- a/curriculum/src/super-order.ts +++ b/curriculum/src/super-order.ts @@ -1,4 +1,4 @@ -import { generateSuperBlockList } from '../../shared-dist/config/curriculum.js'; +import { generateSuperBlockList } from '@freecodecamp/shared/config/curriculum'; import { SHOW_UPCOMING_CHANGES } from './config.js'; export function createSuperOrder(superBlocks: string[]) { diff --git a/curriculum/src/test/test-challenges.js b/curriculum/src/test/test-challenges.js index a1e763c4158..f04746d1df0 100644 --- a/curriculum/src/test/test-challenges.js +++ b/curriculum/src/test/test-challenges.js @@ -6,8 +6,8 @@ import lodash from 'lodash'; import { challengeTypes, hasNoSolution -} from '../../../shared/config/challenge-types'; -import { getLines } from '../../../shared/utils/get-lines'; +} from '@freecodecamp/shared/config/challenge-types'; +import { getLines } from '@freecodecamp/shared/utils/get-lines'; import { prefixDoctype } from '../../../client/src/templates/Challenges/utils/frame'; import { getChallengesForLang } from '../get-challenges.js'; diff --git a/curriculum/src/test/utils/sort-challenges.test.js b/curriculum/src/test/utils/sort-challenges.test.js index ab771e6173b..c447e21bd98 100644 --- a/curriculum/src/test/utils/sort-challenges.test.js +++ b/curriculum/src/test/utils/sort-challenges.test.js @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { shuffleArray } from '../../../../shared-dist/utils/shuffle-array.js'; +import { shuffleArray } from '@freecodecamp/shared/utils/shuffle-array'; import { sortChallenges } from './sort-challenges.js'; const challenges = [ diff --git a/curriculum/tsconfig.json b/curriculum/tsconfig.json index 427752c7a97..8eab360a96a 100644 --- a/curriculum/tsconfig.json +++ b/curriculum/tsconfig.json @@ -1,5 +1,4 @@ { - "references": [{ "path": "../shared/tsconfig.json" }], "compilerOptions": { "rootDir": "./src", "outDir": "./dist", diff --git a/docker/api/Dockerfile b/docker/api/Dockerfile index 60eab7c98af..f0950cbcd39 100644 --- a/docker/api/Dockerfile +++ b/docker/api/Dockerfile @@ -9,7 +9,7 @@ WORKDIR /home/node/build COPY --chown=node:node *.* . COPY --chown=node:node api/ api/ -COPY --chown=node:node shared/ shared/ +COPY --chown=node:node packages/shared/ packages/shared/ COPY --chown=node:node tools/ tools/ COPY --chown=node:node curriculum/ curriculum/ # TODO: AFAIK it's just the intro translations. Those should be folded into the @@ -27,7 +27,7 @@ RUN cd api && pnpm prisma generate ARG SHOW_UPCOMING_CHANGES=false ENV SHOW_UPCOMING_CHANGES=$SHOW_UPCOMING_CHANGES -RUN pnpm compile:ts +RUN pnpm turbo compile RUN pnpm build:curriculum RUN pnpm -F=api build @@ -38,13 +38,14 @@ WORKDIR /home/node/build COPY --chown=node:node pnpm*.yaml . COPY --chown=node:node package.json . COPY --chown=node:node api/ api/ +COPY --chown=node:node packages/shared/ packages/shared/ RUN npm i -g pnpm@10 # Weirdly this config does not seem necessary for the new api (the same number # of deps are installed in both cases), but I'm including it just for # consistency. RUN pnpm config set dedupe-peer-dependents false -RUN pnpm install --prod --ignore-scripts -F=api --frozen-lockfile +RUN pnpm install --prod --ignore-scripts -F=api -F=packages/shared --frozen-lockfile RUN cd api && npx prisma@$(jq -r '.devDependencies.prisma' < package.json) generate FROM node:22-bookworm @@ -52,9 +53,11 @@ USER node WORKDIR /home/node/fcc COPY --from=builder --chown=node:node /home/node/build/api/dist/ ./ COPY --from=builder --chown=node:node /home/node/build/api/package.json api/ -COPY --from=builder --chown=node:node /home/node/build/shared-dist/config/curriculum.json shared-dist/config/ +COPY --from=builder --chown=node:node /home/node/build/curriculum/generated/curriculum.json curriculum/generated/ +COPY --from=builder --chown=node:node /home/node/build/packages/shared/ packages/shared/ COPY --from=deps --chown=node:node /home/node/build/node_modules/ node_modules/ COPY --from=deps --chown=node:node /home/node/build/api/node_modules/ api/node_modules/ +# packages/shared has no prod dependencies, so no need to copy them CMD ["node", "api/src/server.js"] diff --git a/e2e/archive.spec.ts b/e2e/archive.spec.ts index 782b10d07b0..538303a615e 100644 --- a/e2e/archive.spec.ts +++ b/e2e/archive.spec.ts @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; import intro from '../client/i18n/locales/english/intro.json'; -import { SuperBlocks } from '../shared/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; const archivedSuperBlocks = [ intro[SuperBlocks.RespWebDesignNew].title, diff --git a/e2e/header.spec.ts b/e2e/header.spec.ts index f467196a027..8543c1c0da3 100644 --- a/e2e/header.spec.ts +++ b/e2e/header.spec.ts @@ -1,7 +1,11 @@ import { execSync } from 'child_process'; import { test, expect } from '@playwright/test'; import translations from '../client/i18n/locales/english/translations.json'; -import { availableLangs, hiddenLangs, LangNames } from '../shared/config/i18n'; +import { + availableLangs, + hiddenLangs, + LangNames +} from '@freecodecamp/shared/config/i18n'; import links from '../client/i18n/locales/english/links.json'; const headerComponentElements = { diff --git a/e2e/landing.spec.ts b/e2e/landing.spec.ts index 9793ecf902f..fbec0387f52 100644 --- a/e2e/landing.spec.ts +++ b/e2e/landing.spec.ts @@ -1,7 +1,7 @@ import { expect, Page, test } from '@playwright/test'; import intro from '../client/i18n/locales/english/intro.json'; import translations from '../client/i18n/locales/english/translations.json'; -import { SuperBlocks } from '../shared/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { addGrowthbookCookie } from './utils/add-growthbook-cookie'; const landingPageElements = { diff --git a/e2e/package.json b/e2e/package.json index c8dc4e92526..b4ddefa4167 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -11,6 +11,7 @@ "packageManager": "pnpm@10.20.0", "devDependencies": { "@freecodecamp/eslint-config": "workspace:*", + "@freecodecamp/shared": "workspace:*", "eslint": "^9.39.1" } } diff --git a/e2e/projects.spec.ts b/e2e/projects.spec.ts index dcdd9502bb2..e829ecf7ba2 100644 --- a/e2e/projects.spec.ts +++ b/e2e/projects.spec.ts @@ -1,6 +1,6 @@ import { execSync } from 'child_process'; import { test, expect, Page } from '@playwright/test'; -import { SuperBlocks } from '../shared/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import translations from '../client/i18n/locales/english/translations.json'; import tributePage from './fixtures/tribute-page.json'; import curriculum from './fixtures/js-ads-projects.json'; diff --git a/e2e/seo.spec.ts b/e2e/seo.spec.ts index 1393bcc48f9..c82ad5ab4ed 100644 --- a/e2e/seo.spec.ts +++ b/e2e/seo.spec.ts @@ -1,5 +1,5 @@ import { test, expect } from '@playwright/test'; -import { SuperBlocks } from '../shared/config/curriculum'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import metaTags from '../client/i18n/locales/english/meta-tags.json'; interface StructuredData { diff --git a/e2e/settings.spec.ts b/e2e/settings.spec.ts index df9bbb6d717..a256d131483 100644 --- a/e2e/settings.spec.ts +++ b/e2e/settings.spec.ts @@ -5,7 +5,7 @@ import translations from '../client/i18n/locales/english/translations.json'; import { currentCertifications, legacyCertifications as legacyCerts -} from '../shared/config/certification-settings'; +} from '@freecodecamp/shared/config/certification-settings'; import { alertToBeVisible } from './utils/alerts'; const settingsTestIds = { diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index e7e135971e3..e75c328c62e 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -1,7 +1,9 @@ { "compilerOptions": { "target": "es5", - "lib": ["es5", "dom", "ES2017"] + "lib": ["es5", "dom", "ES2017"], + "module": "node16", + "moduleResolution": "node16" }, "extends": "../tsconfig-base.json" } diff --git a/knip.jsonc b/knip.jsonc index 56bf643cd4b..1706ec309ae 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -1,6 +1,6 @@ { "$schema": "https://cdn.jsdelivr.net/npm/knip@5/schema.json", - "ignoreBinaries": ["compile:ts", "install-puppeteer", "pm2"], + "ignoreBinaries": ["compile", "install-puppeteer", "pm2"], "workspaces": { ".": { "playwright": ["playwright.config.ts"], diff --git a/package.json b/package.json index beb3cfb44cf..af0203520c7 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "scripts": { "audit-challenges": "cd curriculum && pnpm audit-challenges", "analyze-bundle": "webpack-bundle-analyzer", - "prebuild": "npm-run-all compile:ts", + "prebuild": "turbo compile", "build": "npm-run-all -p build:*", "build-workers": "cd ./client && pnpm run prebuild", "build:client": "cd ./client && pnpm run build", @@ -34,13 +34,12 @@ "clean-and-develop": "pnpm run clean && pnpm install && pnpm run develop", "clean:api": "cd api && pnpm clean", "clean:client": "cd ./client && pnpm run clean", - "clean:curriculum": "rm -rf ./shared-dist/config/curriculum.json", + "clean:curriculum": "rm -rf ./curriculum/generated/curriculum.json", "clean:packages": "find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +", - "compile:ts": "tsc --build --clean curriculum && tsc --build curriculum", "create-new-project": "cd ./tools/challenge-helper-scripts/ && pnpm run create-project", "create-new-language-block": "cd ./tools/challenge-helper-scripts/ && pnpm run create-language-block", "create-new-quiz": "cd ./tools/challenge-helper-scripts/ && pnpm run create-quiz", - "predevelop": "npm-run-all -p compile:ts -s build:curriculum", + "predevelop": "turbo compile && pnpm build:curriculum", "develop": "npm-run-all -p develop:*", "develop:client": "cd ./client && pnpm run develop", "develop:api": "cd ./api && pnpm run develop", @@ -53,10 +52,10 @@ "lint-root": "pnpm npm-run-all lint:*", "lint": "turbo lint && turbo lint-root", "lint:challenges": "cd ./curriculum && pnpm run lint-challenges", - "lint:ts": "tsc && tsc -p shared && tsc -p api && tsc -p client && tsc -p curriculum && tsc -p e2e && tsc -p tools/challenge-helper-scripts", + "lint:ts": "tsc && tsc -p packages/shared && tsc -p api && tsc -p client && tsc -p curriculum && tsc -p e2e && tsc -p tools/challenge-helper-scripts", "lint:prettier": "prettier --list-different .", "lint:css": "stylelint '**/*.css'", - "preseed": "npm-run-all compile:ts", + "preseed": "turbo compile", "playwright:install-build-tools": "npx playwright install --with-deps", "rename-challenges": "tsx tools/challenge-helper-scripts/rename-challenge-files.ts", "seed": "pnpm seed:surveys && pnpm seed:exams && DEBUG=fcc:* node ./tools/scripts/seed/seed-demo-user", @@ -68,15 +67,15 @@ "seed:ms-username": "DEBUG=fcc:* node ./tools/scripts/seed/seed-ms-username", "serve:client": "cd ./client && pnpm run serve", "serve:client-ci": "cd ./client && pnpm run serve-ci", - "start": "npm-run-all compile:ts -p develop:server serve:client", - "test": "NODE_OPTIONS='--max-old-space-size=7168' run-s compile:ts build:curriculum build-workers test:**", + "start": "turbo compile && npm-run-all -p develop:server serve:client", + "test": "turbo compile && NODE_OPTIONS='--max-old-space-size=7168' run-s build:curriculum build-workers test:**", "test:api": "cd api && pnpm test", "test:tools:challenge-helper-scripts": "cd ./tools/challenge-helper-scripts && pnpm test run", "test:tools:scripts-lint": "cd ./tools/scripts/lint && pnpm test run", "test:tools:challenge-parser": "cd ./tools/challenge-parser && pnpm test run", "test:curriculum:content": "cd ./curriculum && pnpm test-content", "test:curriculum:tooling": "cd ./curriculum && pnpm test-tooling", - "test:shared": "cd ./shared && pnpm vitest run", + "test:shared": "cd ./packages/shared && pnpm vitest run", "test:client": "cd ./client && pnpm test run", "prepare": "husky", "playwright:run": "pnpm -F e2e run playwright:run", @@ -88,6 +87,7 @@ }, "devDependencies": { "@freecodecamp/eslint-config": "workspace:*", + "@freecodecamp/shared": "workspace:*", "@playwright/test": "^1.47.1", "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", diff --git a/packages/shared/.gitignore b/packages/shared/.gitignore new file mode 100644 index 00000000000..1521c8b7652 --- /dev/null +++ b/packages/shared/.gitignore @@ -0,0 +1 @@ +dist diff --git a/shared/.lintstagedrc.mjs b/packages/shared/.lintstagedrc.mjs similarity index 100% rename from shared/.lintstagedrc.mjs rename to packages/shared/.lintstagedrc.mjs diff --git a/shared/eslint.config.js b/packages/shared/eslint.config.js similarity index 100% rename from shared/eslint.config.js rename to packages/shared/eslint.config.js diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 00000000000..d9db073b3e0 --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,96 @@ +{ + "name": "@freecodecamp/shared", + "version": "0.0.1", + "author": "freeCodeCamp ", + "license": "BSD-3-Clause", + "description": "Config and utils used in multiple workspaces", + "private": false, + "engines": { + "node": ">=16", + "pnpm": ">=10" + }, + "scripts": { + "test": "vitest", + "compile": "tsdown --format cjs --format esm", + "lint": "eslint --max-warnings 0" + }, + "type": "module", + "exports": { + "./config/blocks": { + "import": "./dist/config/blocks.mjs", + "require": "./dist/config/blocks.cjs" + }, + "./config/catalog": { + "import": "./dist/config/catalog.mjs", + "require": "./dist/config/catalog.cjs" + }, + "./config/certification-settings": { + "import": "./dist/config/certification-settings.mjs", + "require": "./dist/config/certification-settings.cjs" + }, + "./config/challenge-types": { + "import": "./dist/config/challenge-types.mjs", + "require": "./dist/config/challenge-types.cjs" + }, + "./config/chapters": { + "import": "./dist/config/chapters.mjs", + "require": "./dist/config/chapters.cjs" + }, + "./config/constants": { + "import": "./dist/config/constants.mjs", + "require": "./dist/config/constants.cjs" + }, + "./config/curriculum": { + "import": "./dist/config/curriculum.mjs", + "require": "./dist/config/curriculum.cjs" + }, + "./config/donation-settings": { + "import": "./dist/config/donation-settings.mjs", + "require": "./dist/config/donation-settings.cjs" + }, + "./config/i18n": { + "import": "./dist/config/i18n.mjs", + "require": "./dist/config/i18n.cjs" + }, + "./config/modules": { + "import": "./dist/config/modules.mjs", + "require": "./dist/config/modules.cjs" + }, + "./utils/get-lines": { + "import": "./dist/utils/get-lines.mjs", + "require": "./dist/utils/get-lines.cjs" + }, + "./utils/is-audited": { + "import": "./dist/utils/is-audited.mjs", + "require": "./dist/utils/is-audited.cjs" + }, + "./utils/polyvinyl": { + "import": "./dist/utils/polyvinyl.mjs", + "require": "./dist/utils/polyvinyl.cjs" + }, + "./utils/shuffle-array": { + "import": "./dist/utils/shuffle-array.mjs", + "require": "./dist/utils/shuffle-array.cjs" + }, + "./utils/validate": { + "import": "./dist/utils/validate.mjs", + "require": "./dist/utils/validate.cjs" + }, + "./package.json": "./package.json" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/freeCodeCamp/freeCodeCamp.git" + }, + "bugs": { + "url": "https://github.com/freeCodeCamp/freeCodeCamp/issues" + }, + "homepage": "https://github.com/freeCodeCamp/freeCodeCamp#readme", + "devDependencies": { + "@freecodecamp/eslint-config": "workspace:*", + "@vitest/ui": "^3.2.4", + "eslint": "^9.39.1", + "tsdown": "^0.16.7", + "vitest": "^3.2.4" + } +} diff --git a/shared/config/blocks.ts b/packages/shared/src/config/blocks.ts similarity index 100% rename from shared/config/blocks.ts rename to packages/shared/src/config/blocks.ts diff --git a/shared/config/catalog.test.ts b/packages/shared/src/config/catalog.test.ts similarity index 100% rename from shared/config/catalog.test.ts rename to packages/shared/src/config/catalog.test.ts diff --git a/shared/config/catalog.ts b/packages/shared/src/config/catalog.ts similarity index 100% rename from shared/config/catalog.ts rename to packages/shared/src/config/catalog.ts diff --git a/shared/config/certification-settings.test.ts b/packages/shared/src/config/certification-settings.test.ts similarity index 100% rename from shared/config/certification-settings.test.ts rename to packages/shared/src/config/certification-settings.test.ts diff --git a/shared/config/certification-settings.ts b/packages/shared/src/config/certification-settings.ts similarity index 100% rename from shared/config/certification-settings.ts rename to packages/shared/src/config/certification-settings.ts diff --git a/shared/config/challenge-types.ts b/packages/shared/src/config/challenge-types.ts similarity index 100% rename from shared/config/challenge-types.ts rename to packages/shared/src/config/challenge-types.ts diff --git a/shared/config/chapters.ts b/packages/shared/src/config/chapters.ts similarity index 100% rename from shared/config/chapters.ts rename to packages/shared/src/config/chapters.ts diff --git a/shared/config/constants.test.ts b/packages/shared/src/config/constants.test.ts similarity index 100% rename from shared/config/constants.test.ts rename to packages/shared/src/config/constants.test.ts diff --git a/shared/config/constants.ts b/packages/shared/src/config/constants.ts similarity index 100% rename from shared/config/constants.ts rename to packages/shared/src/config/constants.ts diff --git a/shared/config/curriculum.test.ts b/packages/shared/src/config/curriculum.test.ts similarity index 100% rename from shared/config/curriculum.test.ts rename to packages/shared/src/config/curriculum.test.ts diff --git a/shared/config/curriculum.ts b/packages/shared/src/config/curriculum.ts similarity index 100% rename from shared/config/curriculum.ts rename to packages/shared/src/config/curriculum.ts diff --git a/shared/config/donation-settings.ts b/packages/shared/src/config/donation-settings.ts similarity index 100% rename from shared/config/donation-settings.ts rename to packages/shared/src/config/donation-settings.ts diff --git a/shared/config/i18n.ts b/packages/shared/src/config/i18n.ts similarity index 100% rename from shared/config/i18n.ts rename to packages/shared/src/config/i18n.ts diff --git a/shared/config/modules.ts b/packages/shared/src/config/modules.ts similarity index 100% rename from shared/config/modules.ts rename to packages/shared/src/config/modules.ts diff --git a/shared/utils/get-lines.test.ts b/packages/shared/src/utils/get-lines.test.ts similarity index 100% rename from shared/utils/get-lines.test.ts rename to packages/shared/src/utils/get-lines.test.ts diff --git a/shared/utils/get-lines.ts b/packages/shared/src/utils/get-lines.ts similarity index 100% rename from shared/utils/get-lines.ts rename to packages/shared/src/utils/get-lines.ts diff --git a/shared/utils/is-audited.ts b/packages/shared/src/utils/is-audited.ts similarity index 100% rename from shared/utils/is-audited.ts rename to packages/shared/src/utils/is-audited.ts diff --git a/shared/utils/polyvinyl.test.ts b/packages/shared/src/utils/polyvinyl.test.ts similarity index 100% rename from shared/utils/polyvinyl.test.ts rename to packages/shared/src/utils/polyvinyl.test.ts diff --git a/shared/utils/polyvinyl.ts b/packages/shared/src/utils/polyvinyl.ts similarity index 100% rename from shared/utils/polyvinyl.ts rename to packages/shared/src/utils/polyvinyl.ts diff --git a/shared/utils/shuffle-array.ts b/packages/shared/src/utils/shuffle-array.ts similarity index 100% rename from shared/utils/shuffle-array.ts rename to packages/shared/src/utils/shuffle-array.ts diff --git a/shared/utils/validate.test.ts b/packages/shared/src/utils/validate.test.ts similarity index 100% rename from shared/utils/validate.test.ts rename to packages/shared/src/utils/validate.test.ts diff --git a/shared/utils/validate.ts b/packages/shared/src/utils/validate.ts similarity index 100% rename from shared/utils/validate.ts rename to packages/shared/src/utils/validate.ts diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json new file mode 100644 index 00000000000..023060dbc1e --- /dev/null +++ b/packages/shared/tsconfig.json @@ -0,0 +1,10 @@ +{ + "include": ["src"], + "extends": "../../tsconfig-base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "noEmit": false + } +} diff --git a/packages/shared/tsdown.config.js b/packages/shared/tsdown.config.js new file mode 100644 index 00000000000..6d9efc8039a --- /dev/null +++ b/packages/shared/tsdown.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'tsdown'; + +export default defineConfig({ + entry: ['src/**/*.ts', '!src/**/*.test.ts'], + exports: true, + dts: true +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b69056ae238..2151b921c03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@freecodecamp/eslint-config': specifier: workspace:* version: link:packages/eslint-config + '@freecodecamp/shared': + specifier: workspace:* + version: link:packages/shared '@playwright/test': specifier: ^1.47.1 version: 1.52.0 @@ -116,6 +119,9 @@ importers: '@fastify/type-provider-typebox': specifier: 6.1.0 version: 6.1.0(typebox@1.0.77) + '@freecodecamp/shared': + specifier: workspace:* + version: link:../packages/shared '@growthbook/growthbook': specifier: 1.6.2 version: 1.6.2 @@ -541,6 +547,9 @@ importers: '@freecodecamp/eslint-config': specifier: workspace:* version: link:../packages/eslint-config + '@freecodecamp/shared': + specifier: workspace:* + version: link:../packages/shared '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.8.0(vitest@4.0.15) @@ -692,6 +701,9 @@ importers: '@freecodecamp/eslint-config': specifier: workspace:* version: link:../packages/eslint-config + '@freecodecamp/shared': + specifier: workspace:* + version: link:../packages/shared '@total-typescript/ts-reset': specifier: ^0.6.1 version: 0.6.1 @@ -709,7 +721,7 @@ importers: version: 4.0.2 '@typescript/vfs-1.6.1': specifier: npm:@typescript/vfs@1.6.1 - version: '@typescript/vfs@1.6.1(typescript@5.7.3)' + version: '@typescript/vfs@1.6.1(typescript@5.9.3)' '@vitest/ui': specifier: ^4.0.15 version: 4.0.15(vitest@4.0.15) @@ -748,7 +760,7 @@ importers: version: 0.5.2 puppeteer: specifier: 22.12.1 - version: 22.12.1(typescript@5.7.3) + version: 22.12.1(typescript@5.9.3) sirv: specifier: ^3.0.2 version: 3.0.2 @@ -760,13 +772,16 @@ importers: version: typescript@5.9.2 vitest: specifier: ^4.0.15 - version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.7.3))(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.9.3))(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1) e2e: devDependencies: '@freecodecamp/eslint-config': specifier: workspace:* version: link:../packages/eslint-config + '@freecodecamp/shared': + specifier: workspace:* + version: link:../packages/shared eslint: specifier: ^9.39.1 version: 9.39.2(jiti@2.6.1) @@ -831,17 +846,20 @@ importers: specifier: ^8.47.0 version: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3) - shared: + packages/shared: devDependencies: '@freecodecamp/eslint-config': specifier: workspace:* - version: link:../packages/eslint-config + version: link:../eslint-config '@vitest/ui': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) eslint: specifier: ^9.39.1 version: 9.39.2(jiti@2.6.1) + tsdown: + specifier: ^0.16.7 + version: 0.16.8(typescript@5.9.3) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.9.3))(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1) @@ -934,6 +952,9 @@ importers: '@freecodecamp/eslint-config': specifier: workspace:* version: link:../../packages/eslint-config + '@freecodecamp/shared': + specifier: workspace:* + version: link:../../packages/shared '@total-typescript/ts-reset': specifier: ^0.6.1 version: 0.6.1 @@ -2625,12 +2646,21 @@ packages: '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/wasi-threads@1.0.2': resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2': resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} engines: {node: '>=10.0.0'} @@ -3770,6 +3800,9 @@ packages: '@napi-rs/wasm-runtime@0.2.10': resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -3986,6 +4019,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@oxc-project/types@0.108.0': + resolution: {integrity: sha512-7lf13b2IA/kZO6xgnIZA88sq3vwrxWk+2vxf6cc+omwYCRTiA5e63Beqf3fz/v8jEviChWWmFYBwzfSeyrsj7Q==} + + '@oxc-project/types@0.99.0': + resolution: {integrity: sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==} + '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -4075,6 +4114,9 @@ packages: engines: {node: '>=18'} hasBin: true + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -4272,13 +4314,179 @@ packages: resolution: {integrity: sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==} engines: {node: '>=14.0.0'} + '@rolldown/binding-android-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-android-arm64@1.0.0-beta.60': + resolution: {integrity: sha512-hOW6iQXtpG4uCW1zGK56+KhEXGttSkTp2ykncW/nkOIF/jOKTqbM944Q73HVeMXP1mPRvE2cZwNp3xeLIeyIGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-MmKeoLnKu1d9j6r19K8B+prJnIZ7u+zQ+zGQ3YHXGnr41rzE3eqQLovlkvoZnRoxDGPA4ps0pGiwXy6YE3lJyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.60': + resolution: {integrity: sha512-vyDA4HXY2mP8PPtl5UE17uGPxUNG4m1wkfa3kAkR8JWrFbarV97UmLq22IWrNhtBPa89xqerzLK8KoVmz5JqCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.52': + resolution: {integrity: sha512-qpHedvQBmIjT8zdnjN3nWPR2qjQyJttbXniCEKKdHeAbZG9HyNPBUzQF7AZZGwmS9coQKL+hWg9FhWzh2dZ2IA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.60': + resolution: {integrity: sha512-WnxyqxAKP2BsxouwGY/RCF5UFw/LA4QOHhJ7VEl+UCelHokiwqNHRbryLAyRy3TE1FZ5eae+vAFcaetAu/kWLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.52': + resolution: {integrity: sha512-dDp7WbPapj/NVW0LSiH/CLwMhmLwwKb3R7mh2kWX+QW85X1DGVnIEyKh9PmNJjB/+suG1dJygdtdNPVXK1hylg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.60': + resolution: {integrity: sha512-JtyWJ+zXOHof5gOUYwdTWI2kL6b8q9eNwqB/oD4mfUFaC/COEB2+47JMhcq78dey9Ahmec3DZKRDZPRh9hNAMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': + resolution: {integrity: sha512-9e4l6vy5qNSliDPqNfR6CkBOAx6PH7iDV4OJiEJzajajGrVy8gc/IKKJUsoE52G8ud8MX6r3PMl97NfwgOzB7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.60': + resolution: {integrity: sha512-LrMoKqpHx+kCaNSk84iSBd4yVOymLIbxJQtvFjDN2CjQraownR+IXcwYDblFcj9ivmS54T3vCboXBbm3s1zbPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': + resolution: {integrity: sha512-V48oDR84feRU2KRuzpALp594Uqlx27+zFsT6+BgTcXOtu7dWy350J1G28ydoCwKB+oxwsRPx2e7aeQnmd3YJbQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.60': + resolution: {integrity: sha512-sqI+Vdx1gmXJMsXN3Fsewm3wlt7RHvRs1uysSp//NLsCoh9ZFEUr4ZzGhWKOg6Rvf+njNu/vCsz96x7wssLejQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': + resolution: {integrity: sha512-ENLmSQCWqSA/+YN45V2FqTIemg7QspaiTjlm327eUAMeOLdqmSOVVyrQexJGNTQ5M8sDYCgVAig2Kk01Ggmqaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.60': + resolution: {integrity: sha512-8xlqGLDtTP8sBfYwneTDu8+PRm5reNEHAuI/+6WPy9y350ls0KTFd3EJCOWEXWGW0F35ko9Fn9azmurBTjqOrQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': + resolution: {integrity: sha512-klahlb2EIFltSUubn/VLjuc3qxp1E7th8ukayPfdkcKvvYcQ5rJztgx8JsJSuAKVzKtNTqUGOhy4On71BuyV8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.60': + resolution: {integrity: sha512-iR4nhVouVZK1CiGGGyz+prF5Lw9Lmz30Rl36Hajex+dFVFiegka604zBwzTp5Tl0BZnr50ztnVJ30tGrBhDr8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': + resolution: {integrity: sha512-UuA+JqQIgqtkgGN2c/AQ5wi8M6mJHrahz/wciENPTeI6zEIbbLGoth5XN+sQe2pJDejEVofN9aOAp0kaazwnVg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.60': + resolution: {integrity: sha512-HbfNcqNeqxFjSMf1Kpe8itr2e2lr0Bm6HltD2qXtfU91bSSikVs9EWsa1ThshQ1v2ZvxXckGjlVLtah6IoslPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': + resolution: {integrity: sha512-1BNQW8u4ro8bsN1+tgKENJiqmvc+WfuaUhXzMImOVSMw28pkBKdfZtX2qJPADV3terx+vNJtlsgSGeb3+W6Jiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.60': + resolution: {integrity: sha512-BiiamFcgTJ+ZFOUIMO9AHXUo9WXvHVwGfSrJ+Sv0AsTd2w3VN7dJGiH3WRcxKFetljJHWvGbM4fdpY5lf6RIvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': + resolution: {integrity: sha512-K/p7clhCqJOQpXGykrFaBX2Dp9AUVIDHGc+PtFGBwg7V+mvBTv/tsm3LC3aUmH02H2y3gz4y+nUTQ0MLpofEEg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.60': + resolution: {integrity: sha512-6roXGbHMdR2ucnxXuwbmQvk8tuYl3VGu0yv13KxspyKBxxBd4RS6iykzLD6mX2gMUHhfX8SVWz7n/62gfyKHow==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-a4EkXBtnYYsKipjS7QOhEBM4bU5IlR9N1hU+JcVEVeuTiaslIyhWVKsvf7K2YkQHyVAJ+7/A9BtrGqORFcTgng==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.60': + resolution: {integrity: sha512-JBOm8/DC/CKnHyMHoJFdvzVHxUixid4dGkiTqGflxOxO43uSJMpl77pSPXvzwZ/VXwqblU2V0/PanyCBcRLowQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-5ZXcYyd4GxPA6QfbGrNcQjmjbuLGvfz6728pZMsQvGHI+06LT06M6TPtXvFvLgXtexc+OqvFe1yAIXJU1gob/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': + resolution: {integrity: sha512-tzpnRQXJrSzb8Z9sm97UD3cY0toKOImx+xRKsDLX4zHaAlRXWh7jbaKBePJXEN7gNw7Nm03PBNwphdtA8KSUYQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.60': + resolution: {integrity: sha512-MKF0B823Efp+Ot8KsbwIuGhKH58pf+2rSM6VcqyNMlNBHheOM0Gf7JmEu+toc1jgN6fqjH7Et+8hAzsLVkIGfA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.52': + resolution: {integrity: sha512-/L0htLJZbaZFL1g9OHOblTxbCYIGefErJjtYOwgl9ZqNx27P3L0SDfjhhHIss32gu5NWgnxuT2a2Hnnv6QGHKA==} + + '@rolldown/pluginutils@1.0.0-beta.60': + resolution: {integrity: sha512-Jz4aqXRPVtqkH1E3jRDzLO5cgN5JwW+WG0wXGE4NiJd25nougv/AHzxmKCzmVQUYnxLmTM0M4wrZp+LlC2FKLg==} + '@rollup/rollup-android-arm-eabi@4.46.2': resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] @@ -4287,8 +4495,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] @@ -4297,8 +4505,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] @@ -4307,8 +4515,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] @@ -4317,8 +4525,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] @@ -4327,8 +4535,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] @@ -4337,8 +4545,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] @@ -4347,8 +4555,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] @@ -4357,8 +4565,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] @@ -4367,18 +4575,13 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] @@ -4392,13 +4595,8 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] @@ -4407,8 +4605,8 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] @@ -4417,8 +4615,8 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] @@ -4427,8 +4625,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] @@ -4437,8 +4635,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] @@ -4447,18 +4645,13 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] @@ -4467,8 +4660,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] @@ -4477,13 +4670,13 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] @@ -4492,8 +4685,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -4996,6 +5189,9 @@ packages: '@turist/time@0.0.2': resolution: {integrity: sha512-qLOvfmlG2vCVw5fo/oz8WAZYlpe5a5OurgTj3diIxJCdjRHpapC+vQCz3er9LV79Vcat+DifBjeAhOAdmndtDQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -5967,6 +6163,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -6091,6 +6291,10 @@ packages: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -6343,6 +6547,9 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + birpc@4.0.0: + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -6684,6 +6891,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} @@ -7443,6 +7654,10 @@ packages: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + engines: {node: '>=0.3.1'} + diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -7534,6 +7749,15 @@ packages: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + dts-resolver@2.1.3: + resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} + engines: {node: '>=20.19.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -8622,6 +8846,9 @@ packages: get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -8943,6 +9170,9 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookified@1.7.1: resolution: {integrity: sha512-OXcdHsXeOiD7OJ5zvWj8Oy/6RCdLwntAX+wUrfemNcMGn6sux4xbEHi2QXwqePYhjQ/yvxxq2MvCRirdlHscBw==} @@ -11830,6 +12060,9 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} + query-string@6.14.0: resolution: {integrity: sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==} engines: {node: '>=6'} @@ -12136,6 +12369,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} @@ -12425,6 +12662,35 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + rolldown-plugin-dts@0.18.4: + resolution: {integrity: sha512-7UpdiICFd/BhdjKtDPeakCFRk6pbkTGFe0Z6u01egt4c8aoO+JoPGF1Smc+JRuCH2s5j5hBdteBi0e10G0xQdQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@ts-macro/tsc': ^0.3.6 + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.51 + typescript: ^5.0.0 + vue-tsc: ~3.1.0 + peerDependenciesMeta: + '@ts-macro/tsc': + optional: true + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.52: + resolution: {integrity: sha512-Hbnpljue+JhMJrlOjQ1ixp9me7sUec7OjFvS+A1Qm8k8Xyxmw3ZhxFu7LlSXW1s9AX3POE9W9o2oqCEeR5uDmg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rolldown@1.0.0-beta.60: + resolution: {integrity: sha512-YYgpv7MiTp9LdLj1fzGzCtij8Yi2OKEc3HQtfbIxW4yuSgpQz9518I69U72T5ErPA/ATOXqlcisiLrWy+5V9YA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -12435,8 +12701,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -13464,6 +13730,31 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsdown@0.16.8: + resolution: {integrity: sha512-6ANw9mgU9kk7SvTBKvpDu/DVJeAFECiLUSeL5M7f5Nm5H97E7ybxmXT4PQ23FySYn32y6OzjoAH/lsWCbGzfLA==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + '@vitejs/devtools': ^0.0.0-alpha.18 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + '@vitejs/devtools': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -13667,6 +13958,9 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + unconfig-core@7.4.2: + resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==} + undeclared-identifiers@1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true @@ -13830,6 +14124,16 @@ packages: unrs-resolver@1.7.8: resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} + unrun@0.2.25: + resolution: {integrity: sha512-ZOr5uQL+JlcUT8hZsQbtuUgb1zzcFx3juhXyLSsciaWa3DW1ldMY9r4KSF3+k/LR1Evj2ggAZo1usK4/knBjMQ==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true + unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} @@ -14713,7 +15017,7 @@ snapshots: '@aws-crypto/sha256-js': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 + '@aws-sdk/types': 3.965.0 '@aws-sdk/util-locate-window': 3.965.2 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -14732,7 +15036,7 @@ snapshots: '@aws-crypto/sha256-js@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.521.0 + '@aws-sdk/types': 3.965.0 tslib: 1.14.1 optional: true @@ -14753,7 +15057,7 @@ snapshots: '@aws-crypto/util@3.0.0': dependencies: - '@aws-sdk/types': 3.521.0 + '@aws-sdk/types': 3.965.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 optional: true @@ -15626,7 +15930,7 @@ snapshots: '@babel/types': 7.28.6 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -17508,7 +17812,7 @@ snapshots: '@babel/parser': 7.28.6 '@babel/template': 7.28.6 '@babel/types': 7.28.6 - debug: 4.4.3 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17712,16 +18016,32 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.8.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.2.2)': dependencies: cosmiconfig: 7.0.0 @@ -18635,7 +18955,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.31': dependencies: @@ -18747,6 +19067,13 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@napi-rs/wasm-runtime@1.1.1': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -19016,6 +19343,10 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@oxc-project/types@0.108.0': {} + + '@oxc-project/types@0.99.0': {} + '@pinojs/redact@0.4.0': {} '@pkgr/core@0.1.2': {} @@ -19108,6 +19439,10 @@ snapshots: - bare-buffer - supports-color + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-collection@1.1.7(@types/react-dom@17.0.19)(@types/react@17.0.83)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': @@ -19288,70 +19623,156 @@ snapshots: '@remix-run/router@1.11.0': {} + '@rolldown/binding-android-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-android-arm64@1.0.0-beta.60': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.60': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.60': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.60': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.60': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.60': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.60': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.60': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.60': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.60': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.60': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.60': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.60': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.52': {} + + '@rolldown/pluginutils@1.0.0-beta.60': {} + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm-eabi@4.55.1': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.55.1': + '@rollup/rollup-android-arm64@4.54.0': optional: true '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.55.1': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.55.1': + '@rollup/rollup-darwin-x64@4.54.0': optional: true '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.55.1': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.55.1': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.1': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.1': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.1': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.1': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true '@rollup/rollup-linux-loongarch64-gnu@4.46.2': @@ -19360,67 +19781,61 @@ snapshots: '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.1': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.1': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.1': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.1': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.1': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.55.1': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true - '@rollup/rollup-openbsd-x64@4.55.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.55.1': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.1': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.1': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.1': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.1': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@rtsao/scc@1.1.0': {} @@ -20190,6 +20605,11 @@ snapshots: '@turist/time@0.0.2': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -20700,7 +21120,7 @@ snapshots: '@types/yoga-layout@1.9.2': {} - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2)': + '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2)': dependencies: '@typescript-eslint/experimental-utils': 4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) '@typescript-eslint/parser': 4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) @@ -20861,13 +21281,6 @@ snapshots: '@typescript-eslint/types': 8.47.0 eslint-visitor-keys: 4.2.1 - '@typescript/vfs@1.6.1(typescript@5.7.3)': - dependencies: - debug: 4.3.4(supports-color@8.1.1) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - '@typescript/vfs@1.6.1(typescript@5.9.2)': dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -20875,6 +21288,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript/vfs@1.6.1(typescript@5.9.3)': + dependencies: + debug: 4.3.4(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@uiw/react-codemirror@3.2.10(@babel/runtime@7.27.3)(codemirror@5.65.16)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.27.3 @@ -21022,6 +21442,16 @@ snapshots: optionalDependencies: msw: 2.12.7(@types/node@24.10.4)(typescript@5.7.3) vite: 7.3.1(@types/node@24.10.4)(jiti@2.6.1)(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1) + optional: true + + '@vitest/mocker@4.0.15(msw@2.12.7(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.4)(jiti@2.6.1)(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 4.0.15 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.7(@types/node@24.10.4)(typescript@5.9.3) + vite: 7.3.1(@types/node@24.10.4)(jiti@2.6.1)(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -21349,6 +21779,8 @@ snapshots: ansi-styles@6.2.3: {} + ansis@4.2.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -21489,6 +21921,11 @@ snapshots: assign-symbols@1.0.0: {} + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.28.6 + pathe: 2.0.3 + ast-types-flow@0.0.8: {} ast-types@0.13.4: @@ -21838,6 +22275,8 @@ snapshots: binary-extensions@2.2.0: {} + birpc@4.0.0: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -22354,6 +22793,10 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + chrome-trace-event@1.0.3: {} chromium-bidi@0.5.24(devtools-protocol@0.0.1299070): @@ -22701,6 +23144,15 @@ snapshots: optionalDependencies: typescript: 5.9.2 + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + create-ecdh@4.0.4: dependencies: bn.js: 4.12.0 @@ -23194,6 +23646,8 @@ snapshots: diff@5.1.0: {} + diff@8.0.3: {} + diffie-hellman@5.0.3: dependencies: bn.js: 4.12.0 @@ -23290,6 +23744,8 @@ snapshots: dotenv@8.6.0: {} + dts-resolver@2.1.3: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -23695,13 +24151,13 @@ snapshots: eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.37.4(eslint@7.32.0))(eslint@7.32.0)(typescript@5.2.2): dependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) '@typescript-eslint/parser': 4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) babel-eslint: 10.1.0(eslint@9.39.2(jiti@2.6.1)) confusing-browser-globals: 1.0.11 eslint: 7.32.0 eslint-plugin-flowtype: 5.10.0(eslint@7.32.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.4(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 4.6.0(eslint@9.39.2(jiti@2.6.1)) @@ -23731,7 +24187,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: @@ -23785,7 +24241,7 @@ snapshots: - typescript - utf-8-validate - eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -23796,7 +24252,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -24990,7 +25446,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 '@pmmmwh/react-refresh-webpack-plugin': 0.4.3(react-refresh@0.9.0)(webpack@5.90.3) '@types/http-proxy': 1.17.12 - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) '@typescript-eslint/parser': 4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2) '@vercel/webpack-asset-relocator-loader': 1.7.3 address: 1.1.2 @@ -25029,7 +25485,7 @@ snapshots: eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@9.39.2(jiti@2.6.1)))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.37.4(eslint@7.32.0))(eslint@7.32.0)(typescript@5.2.2) eslint-plugin-flowtype: 5.10.0(eslint@7.32.0) eslint-plugin-graphql: 4.0.0(@types/node@24.10.4)(graphql@15.8.0)(typescript@5.2.2) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.2.2))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.4(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 4.6.0(eslint@9.39.2(jiti@2.6.1)) @@ -25208,6 +25664,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -25649,6 +26109,8 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hookable@5.5.3: {} + hookified@1.7.1: {} hosted-git-info@2.8.9: {} @@ -29000,10 +29462,10 @@ snapshots: - supports-color - utf-8-validate - puppeteer@22.12.1(typescript@5.7.3): + puppeteer@22.12.1(typescript@5.9.3): dependencies: '@puppeteer/browsers': 2.2.3 - cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1299070 puppeteer-core: 22.12.1 transitivePeerDependencies: @@ -29072,6 +29534,8 @@ snapshots: qs@6.5.3: {} + quansync@1.0.0: {} + query-string@6.14.0: dependencies: decode-uri-component: 0.2.2 @@ -29446,6 +29910,8 @@ snapshots: readdirp@4.1.2: {} + readdirp@5.0.0: {} + real-require@0.2.0: {} rechoir@0.6.2: @@ -29807,6 +30273,62 @@ snapshots: hash-base: 3.1.0 inherits: 2.0.4 + rolldown-plugin-dts@0.18.4(rolldown@1.0.0-beta.52)(typescript@5.9.3): + dependencies: + '@babel/generator': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + ast-kit: 2.2.0 + birpc: 4.0.0 + dts-resolver: 2.1.3 + get-tsconfig: 4.13.0 + magic-string: 0.30.21 + obug: 2.1.1 + rolldown: 1.0.0-beta.52 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - oxc-resolver + + rolldown@1.0.0-beta.52: + dependencies: + '@oxc-project/types': 0.99.0 + '@rolldown/pluginutils': 1.0.0-beta.52 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.52 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.52 + '@rolldown/binding-darwin-x64': 1.0.0-beta.52 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.52 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.52 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.52 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.52 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.52 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.52 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.52 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.52 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.52 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52 + + rolldown@1.0.0-beta.60: + dependencies: + '@oxc-project/types': 0.108.0 + '@rolldown/pluginutils': 1.0.0-beta.60 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.60 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.60 + '@rolldown/binding-darwin-x64': 1.0.0-beta.60 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.60 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.60 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.60 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.60 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.60 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.60 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.60 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.60 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.60 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.60 + rollup@3.29.4: optionalDependencies: fsevents: 2.3.3 @@ -29837,35 +30359,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 - rollup@4.55.1: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: @@ -31084,6 +31603,32 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsdown@0.16.8(typescript@5.9.3): + dependencies: + ansis: 4.2.0 + cac: 6.7.14 + chokidar: 5.0.0 + diff: 8.0.3 + empathic: 2.0.0 + hookable: 5.5.3 + obug: 2.1.1 + rolldown: 1.0.0-beta.52 + rolldown-plugin-dts: 0.18.4(rolldown@1.0.0-beta.52)(typescript@5.9.3) + semver: 7.7.3 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig-core: 7.4.2 + unrun: 0.2.25 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - synckit + - vue-tsc + tslib@1.14.1: {} tslib@2.0.3: {} @@ -31247,8 +31792,7 @@ snapshots: typescript@5.9.2: {} - typescript@5.9.3: - optional: true + typescript@5.9.3: {} uc.micro@2.0.0: {} @@ -31268,6 +31812,11 @@ snapshots: unc-path-regex@0.1.2: {} + unconfig-core@7.4.2: + dependencies: + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + undeclared-identifiers@1.1.3: dependencies: acorn-node: 1.8.2 @@ -31495,6 +32044,10 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 + unrun@0.2.25: + dependencies: + rolldown: 1.0.0-beta.60 + unset-value@1.0.0: dependencies: has-value: 0.3.1 @@ -31727,7 +32280,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 20.12.8 @@ -31743,7 +32296,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.4 @@ -31903,10 +32456,10 @@ snapshots: - tsx - yaml - vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.7.3))(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.4)(@vitest/ui@4.0.15)(jiti@2.6.1)(jsdom@16.7.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.9.3))(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(msw@2.12.7(@types/node@24.10.4)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.4)(jiti@2.6.1)(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.15(msw@2.12.7(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.4)(jiti@2.6.1)(terser@5.28.1)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/pretty-format': 4.0.15 '@vitest/runner': 4.0.15 '@vitest/snapshot': 4.0.15 diff --git a/shared/package.json b/shared/package.json deleted file mode 100644 index c2b9bf5a64e..00000000000 --- a/shared/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@freecodecamp/shared", - "version": "0.0.1", - "author": "freeCodeCamp ", - "license": "BSD-3-Clause", - "description": "Config and utils used in multiple workspaces", - "private": false, - "engines": { - "node": ">=16", - "pnpm": ">=10" - }, - "scripts": { - "test": "vitest", - "compile": "tsc", - "lint": "eslint --max-warnings 0" - }, - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/freeCodeCamp/freeCodeCamp.git" - }, - "bugs": { - "url": "https://github.com/freeCodeCamp/freeCodeCamp/issues" - }, - "homepage": "https://github.com/freeCodeCamp/freeCodeCamp#readme", - "devDependencies": { - "@freecodecamp/eslint-config": "workspace:*", - "@vitest/ui": "^3.2.4", - "eslint": "^9.39.1", - "vitest": "^3.2.4" - } -} diff --git a/shared/tsconfig.json b/shared/tsconfig.json deleted file mode 100644 index d1c72a2c785..00000000000 --- a/shared/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "include": ["**/*.ts", "**/*.test.ts"], - "extends": "../tsconfig-base.json", - "compilerOptions": { - "outDir": "../shared-dist", - "composite": true, - "noEmit": false, - "module": "CommonJS" - } -} diff --git a/tools/challenge-editor/api/package.json b/tools/challenge-editor/api/package.json index f5a6b5ce8f3..066c4ca2580 100644 --- a/tools/challenge-editor/api/package.json +++ b/tools/challenge-editor/api/package.json @@ -16,8 +16,8 @@ "gray-matter": "4.0.3" }, "devDependencies": { - "@total-typescript/ts-reset": "^0.6.1", "@freecodecamp/eslint-config": "workspace:*", + "@total-typescript/ts-reset": "^0.6.1", "@types/cors": "^2.8.13", "@types/express": "4.17.21", "dotenv": "16.4.5", diff --git a/tools/challenge-editor/api/utils/get-blocks.ts b/tools/challenge-editor/api/utils/get-blocks.ts index bbcf094d18c..586c6c33b0f 100644 --- a/tools/challenge-editor/api/utils/get-blocks.ts +++ b/tools/challenge-editor/api/utils/get-blocks.ts @@ -1,7 +1,7 @@ import { readFile } from 'fs/promises'; import { join } from 'path'; -import { chapterBasedSuperBlocks } from '../../../../shared/config/curriculum'; +import { chapterBasedSuperBlocks } from '../../../../packages/shared/src/config/curriculum'; import { SUPERBLOCK_META_DIR, BLOCK_META_DIR, diff --git a/tools/challenge-helper-scripts/create-language-block.ts b/tools/challenge-helper-scripts/create-language-block.ts index 579f0e7e4af..1d8f4e67e27 100644 --- a/tools/challenge-helper-scripts/create-language-block.ts +++ b/tools/challenge-helper-scripts/create-language-block.ts @@ -8,9 +8,9 @@ import { SuperBlocks, languageSuperBlocks, chapterBasedSuperBlocks -} from '../../shared-dist/config/curriculum.js'; +} from '@freecodecamp/shared/config/curriculum'; -import { BlockLayouts, BlockLabel } from '../../shared-dist/config/blocks.js'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; import { getContentConfig, writeBlockStructure, diff --git a/tools/challenge-helper-scripts/create-project.ts b/tools/challenge-helper-scripts/create-project.ts index 5c4fe4cf1f6..516d4665b2d 100644 --- a/tools/challenge-helper-scripts/create-project.ts +++ b/tools/challenge-helper-scripts/create-project.ts @@ -7,8 +7,8 @@ import { ObjectId } from 'bson'; import { SuperBlocks, chapterBasedSuperBlocks -} from '../../shared-dist/config/curriculum.js'; -import { BlockLayouts, BlockLabel } from '../../shared-dist/config/blocks.js'; +} from '@freecodecamp/shared/config/curriculum'; +import { BlockLayouts, BlockLabel } from '@freecodecamp/shared/config/blocks'; import { createBlockFolder, writeBlockStructure diff --git a/tools/challenge-helper-scripts/create-quiz.ts b/tools/challenge-helper-scripts/create-quiz.ts index 62eff444376..911f7a2462c 100644 --- a/tools/challenge-helper-scripts/create-quiz.ts +++ b/tools/challenge-helper-scripts/create-quiz.ts @@ -4,7 +4,7 @@ import { prompt } from 'inquirer'; import { format } from 'prettier'; import { ObjectId } from 'bson'; -import { SuperBlocks } from '../../shared-dist/config/curriculum.js'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { createBlockFolder, writeBlockStructure diff --git a/tools/challenge-helper-scripts/helpers/get-input-type.ts b/tools/challenge-helper-scripts/helpers/get-input-type.ts index 3cd199e55c0..c95f8f20aad 100644 --- a/tools/challenge-helper-scripts/helpers/get-input-type.ts +++ b/tools/challenge-helper-scripts/helpers/get-input-type.ts @@ -1,6 +1,6 @@ import { prompt } from 'inquirer'; -import { ChallengeLang } from '../../../shared-dist/config/curriculum.js'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types.js'; +import { ChallengeLang } from '@freecodecamp/shared/config/curriculum'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; export const getInputType = async ( challengeType: string, diff --git a/tools/challenge-helper-scripts/helpers/get-lang-from-superblock.ts b/tools/challenge-helper-scripts/helpers/get-lang-from-superblock.ts index 611860f34a5..69a08ede9a3 100644 --- a/tools/challenge-helper-scripts/helpers/get-lang-from-superblock.ts +++ b/tools/challenge-helper-scripts/helpers/get-lang-from-superblock.ts @@ -2,7 +2,7 @@ import { ChallengeLang, SuperBlocks, superBlockToSpeechLang -} from '../../../shared-dist/config/curriculum.js'; +} from '@freecodecamp/shared/config/curriculum'; export const getLangFromSuperBlock = ( superBlock: SuperBlocks diff --git a/tools/challenge-helper-scripts/helpers/new-challenge-prompts.ts b/tools/challenge-helper-scripts/helpers/new-challenge-prompts.ts index d5d989f8226..9b8a3f346c2 100644 --- a/tools/challenge-helper-scripts/helpers/new-challenge-prompts.ts +++ b/tools/challenge-helper-scripts/helpers/new-challenge-prompts.ts @@ -1,5 +1,5 @@ import { prompt } from 'inquirer'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { getLastStep } from './get-last-step-file-number.js'; export const newChallengePrompts = async (): Promise<{ diff --git a/tools/challenge-helper-scripts/helpers/new-task-prompts.ts b/tools/challenge-helper-scripts/helpers/new-task-prompts.ts index bea62a69626..312081d325a 100644 --- a/tools/challenge-helper-scripts/helpers/new-task-prompts.ts +++ b/tools/challenge-helper-scripts/helpers/new-task-prompts.ts @@ -1,5 +1,5 @@ import { prompt } from 'inquirer'; -import { challengeTypes } from '../../../shared-dist/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; const taskChallenges = [ challengeTypes.multipleChoice, diff --git a/tools/challenge-helper-scripts/helpers/parse-json.ts b/tools/challenge-helper-scripts/helpers/parse-json.ts index 0cefdeb2324..f81b8bf490d 100644 --- a/tools/challenge-helper-scripts/helpers/parse-json.ts +++ b/tools/challenge-helper-scripts/helpers/parse-json.ts @@ -1,6 +1,6 @@ import fs from 'fs/promises'; -import { SuperBlocks } from '../../../shared-dist/config/curriculum.js'; +import { SuperBlocks } from '@freecodecamp/shared/config/curriculum'; import { withTrace } from './utils.js'; export type BlockInfo = { diff --git a/tools/challenge-helper-scripts/helpers/project-metadata.ts b/tools/challenge-helper-scripts/helpers/project-metadata.ts index ae3b66c5670..44d5c49ba88 100644 --- a/tools/challenge-helper-scripts/helpers/project-metadata.ts +++ b/tools/challenge-helper-scripts/helpers/project-metadata.ts @@ -3,7 +3,7 @@ import { getBlockStructure, writeBlockStructure } from '../../../curriculum/src/file-handler.js'; -import type { BlockLabel } from '../../../shared-dist/config/blocks.js'; +import type { BlockLabel } from '@freecodecamp/shared/config/blocks'; import { getProjectPath } from './get-project-info.js'; export type Meta = { diff --git a/tools/challenge-helper-scripts/package.json b/tools/challenge-helper-scripts/package.json index 7bce431a1de..eef40574cd1 100644 --- a/tools/challenge-helper-scripts/package.json +++ b/tools/challenge-helper-scripts/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@freecodecamp/eslint-config": "workspace:*", "@total-typescript/ts-reset": "^0.6.1", + "@freecodecamp/shared": "workspace:*", "@types/glob": "^8.0.1", "@types/inquirer": "^8.2.5", "@vitest/ui": "^3.2.4", diff --git a/tools/challenge-helper-scripts/utils.ts b/tools/challenge-helper-scripts/utils.ts index 0aa109bb608..80c0464067f 100644 --- a/tools/challenge-helper-scripts/utils.ts +++ b/tools/challenge-helper-scripts/utils.ts @@ -4,7 +4,7 @@ import { ObjectId } from 'bson'; import matter from 'gray-matter'; import { uniq } from 'lodash'; -import { challengeTypes } from '../../shared-dist/config/challenge-types.js'; +import { challengeTypes } from '@freecodecamp/shared/config/challenge-types'; import { parseCurriculumStructure } from '../../curriculum/src/build-curriculum.js'; import { parseMDSync } from '../challenge-parser/parser/index.js'; import { getMetaData, updateMetaData } from './helpers/project-metadata.js'; diff --git a/turbo.json b/turbo.json index 06ddb3679e2..443cae5aec4 100644 --- a/turbo.json +++ b/turbo.json @@ -1,9 +1,7 @@ { "$schema": "https://turborepo.com/schema.json", "tasks": { - "lint": { - "dependsOn": ["@freecodecamp/shared#compile"] - }, + "lint": { "dependsOn": ["compile"] }, "@freecodecamp/client#lint": { "dependsOn": [ "@freecodecamp/curriculum#compile", @@ -27,7 +25,7 @@ "@freecodecamp/curriculum#build" ] }, - "compile": {}, + "compile": { "dependsOn": ["^compile"] }, "create:trending": { "cache": false }, "create:env": { "dependsOn": ["@freecodecamp/curriculum#compile"] }, "build": { "dependsOn": ["compile"] },