[web] misc: revert to 2025-04-08
This commit is contained in:
parent
0179f5f699
commit
e520961184
|
|
@ -1,17 +1,30 @@
|
|||
# Web
|
||||
## Getting Started
|
||||
|
||||
This
|
||||
|
||||
## Development
|
||||
|
||||
First, install Turborepo globally. Even though `turbo` is installed globally, when any global `turbo` commands are run from the terminal, it [uses the local version](https://turborepo.com/docs/crafting-your-repository/running-tasks#using-global-turbo) specified in `package.json` located at repo's root.
|
||||
First, run the development server:
|
||||
|
||||
```bash
|
||||
pnpm install turbo --global
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Run the development server using Turborepo. The reason we use Turborepo to run the development command as opposed to `pnpm dev` is because the app might depend on other monorepo packages in and they have to be built before the Next.js app can run:
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
|
||||
```bash
|
||||
turbo dev
|
||||
```
|
||||
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
|
||||
|
||||
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
|
||||
|
||||
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js, take a look at the following resources:
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn/foundations/about-nextjs) - an interactive Next.js tutorial.
|
||||
|
||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
||||
|
||||
## Deploy on Vercel
|
||||
|
||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_source=github.com&utm_medium=referral&utm_campaign=turborepo-readme) from the creators of Next.js.
|
||||
|
||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
// @ts-check
|
||||
|
||||
import config from './src/content/contentlayerConfig';
|
||||
|
||||
export default config;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
const ignoreDirs = ['dist/', 'node_modules/', 'scripts/'];
|
||||
|
||||
/** @type {Config.InitialOptions} */
|
||||
module.exports = {
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'jsdom',
|
||||
verbose: false,
|
||||
silent: true,
|
||||
// transform: {
|
||||
// '^.+\\.[t]sx?$': 'ts-jest',
|
||||
// },
|
||||
// transformIgnorePatterns: ['<rootDir>/node_modules/'],
|
||||
testPathIgnorePatterns: ignoreDirs,
|
||||
coveragePathIgnorePatterns: ignoreDirs,
|
||||
coverageDirectory: '<rootDir>/coverage/',
|
||||
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
||||
};
|
||||
|
|
@ -9,47 +9,12 @@ export default {
|
|||
name: 'app',
|
||||
paths: [
|
||||
{
|
||||
source: './src/locales/raw/en-US.json',
|
||||
target: './src/locales/raw/{locale}.json',
|
||||
source: './src/locales/en-US.json',
|
||||
target: './src/locales/{locale}.json',
|
||||
},
|
||||
],
|
||||
plugin: 'json',
|
||||
},
|
||||
{
|
||||
name: 'interviews-listing-bottom-content',
|
||||
paths: [
|
||||
{
|
||||
source:
|
||||
'./src/content/interviews/listing-bottom-content/**/en-US.mdx',
|
||||
target:
|
||||
'./src/content/interviews/listing-bottom-content/**/{locale}.mdx',
|
||||
},
|
||||
],
|
||||
plugin: 'mdx',
|
||||
},
|
||||
{
|
||||
name: 'interviews-study-list',
|
||||
paths: [
|
||||
{
|
||||
source: './src/content/interviews/study-list/**/en-US.mdx',
|
||||
target: './src/content/interviews/study-list/**/{locale}.mdx',
|
||||
},
|
||||
],
|
||||
plugin: [
|
||||
'mdx',
|
||||
{
|
||||
frontmatterExcludedKeys: [
|
||||
'access',
|
||||
'customHref',
|
||||
'logoUrl',
|
||||
'questionHashes',
|
||||
'ranking',
|
||||
'schedule',
|
||||
'topics',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
localeConfig: {
|
||||
source: 'en-US',
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// @ts-check
|
||||
|
||||
import allInterviewsStudyListMetadata from './.contentlayer/generated/InterviewsStudyList/_index.json' with { type: 'json' };
|
||||
import allProjectsChallengeMetadata from './.contentlayer/generated/ProjectsChallengeMetadata/_index.json' with { type: 'json' };
|
||||
import allProjectsSkillMetadata from './.contentlayer/generated/ProjectsSkillMetadata/_index.json' with { type: 'json' };
|
||||
import allProjectsTrackMetadata from './.contentlayer/generated/ProjectsTrackMetadata/_index.json' with { type: 'json' };
|
||||
import codingQuestionsList from './src/__generated__/questions/coding/list.en-US.json' with { type: 'json' };
|
||||
import i18nConfig from './src/next-i18nostic/config.json' with { type: 'json' };
|
||||
import allInterviewsStudyListMetadata from './.contentlayer/generated/InterviewsStudyList/_index.json' assert { type: 'json' };
|
||||
import allProjectsChallengeMetadata from './.contentlayer/generated/ProjectsChallengeMetadata/_index.json' assert { type: 'json' };
|
||||
import allProjectsSkillMetadata from './.contentlayer/generated/ProjectsSkillMetadata/_index.json' assert { type: 'json' };
|
||||
import allProjectsTrackMetadata from './.contentlayer/generated/ProjectsTrackMetadata/_index.json' assert { type: 'json' };
|
||||
import codingQuestionsList from './src/__generated__/questions/coding/list.en-US.json' assert { type: 'json' };
|
||||
import i18nConfig from './src/next-i18nostic/config.json' assert { type: 'json' };
|
||||
|
||||
const priority = 0.7;
|
||||
const changefreq = 'daily';
|
||||
|
|
@ -68,33 +68,34 @@ export default {
|
|||
'/interviews/pricing',
|
||||
'/interviews/testimonials',
|
||||
'/interviews/faq',
|
||||
'/interviews/roadmap',
|
||||
// Interviews / Dashboard
|
||||
'/interviews/get-started',
|
||||
// Interviews / Formats
|
||||
'/questions',
|
||||
'/questions/formats/algo-coding',
|
||||
'/questions/formats/javascript-functions',
|
||||
'/questions/formats/ui-coding',
|
||||
'/questions/formats/system-design',
|
||||
'/questions/formats/quiz',
|
||||
'/questions/algo',
|
||||
'/questions/javascript',
|
||||
'/questions/user-interface',
|
||||
'/questions/system-design',
|
||||
'/questions/quiz',
|
||||
// Interviews / Languages
|
||||
'/questions/html-interview-questions',
|
||||
'/questions/css-interview-questions',
|
||||
'/questions/javascript-interview-questions',
|
||||
'/questions/typescript-interview-questions',
|
||||
'/questions/html',
|
||||
'/questions/css',
|
||||
'/questions/js',
|
||||
'/questions/ts',
|
||||
// Interviews / Frameworks
|
||||
'/questions/react-interview-questions',
|
||||
'/questions/vue-interview-questions',
|
||||
'/questions/angular-interview-questions',
|
||||
'/questions/svelte-interview-questions',
|
||||
'/questions/react',
|
||||
'/questions/vue',
|
||||
'/questions/angular',
|
||||
'/questions/svelte',
|
||||
'/questions/vanilla',
|
||||
// Interviews / Study Lists
|
||||
...allInterviewsStudyListMetadata.map(({ href }) => href),
|
||||
'/interviews/focus-areas',
|
||||
'/interviews/study-plans',
|
||||
'/interviews/company',
|
||||
...allInterviewsStudyListMetadata.map(({ href }) => href),
|
||||
'/interviews/roadmap',
|
||||
// Interviews / Questions
|
||||
...codingQuestionsList.map(({ metadata }) => metadata.href),
|
||||
...codingQuestionsList.map(({ href }) => href),
|
||||
// Projects
|
||||
'/projects',
|
||||
'/projects/pricing',
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import remarkSlug from 'remark-slug';
|
|||
import remarkExtractToc from '@stefanprobst/remark-extract-toc';
|
||||
import remarkExtractTocExport from '@stefanprobst/remark-extract-toc/mdx';
|
||||
import nextMDX from '@next/mdx';
|
||||
import remarkAlerts from '@gfe/remark-alerts';
|
||||
import { redirects } from './src/routing/redirects.js';
|
||||
|
||||
const withMDX = nextMDX({
|
||||
extension: /\.mdx?$/,
|
||||
|
|
@ -20,7 +18,6 @@ const withMDX = nextMDX({
|
|||
remarkPlugins: [
|
||||
remarkGfm,
|
||||
remarkFrontmatter,
|
||||
remarkAlerts,
|
||||
remarkMdxFrontmatter,
|
||||
remarkSlug,
|
||||
remarkExtractToc,
|
||||
|
|
@ -45,12 +42,247 @@ const nextConfig = {
|
|||
'@sparticuz/chromium',
|
||||
],
|
||||
},
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
transpilePackages: ['next-i18nostic'],
|
||||
async redirects() {
|
||||
return redirects;
|
||||
return [
|
||||
{
|
||||
source: '/pricing',
|
||||
destination: '/interviews/pricing',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/payment/success',
|
||||
destination: '/interviews/payment/success',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/get-started',
|
||||
destination: '/interviews/get-started',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare',
|
||||
destination: '/interviews/dashboard',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/coding',
|
||||
destination: '/questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/quiz',
|
||||
destination: '/questions/quiz',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/system-design',
|
||||
destination: '/questions/system-design',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/behavioral',
|
||||
destination: '/behavioral-interview-playbook',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/quiz/css/:path*',
|
||||
destination: '/questions/quiz/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/quiz/html/:path*',
|
||||
destination: '/questions/quiz/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/quiz/javascript/:path*',
|
||||
destination: '/questions/quiz/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
// Formats
|
||||
{
|
||||
source: '/questions/coding',
|
||||
destination: '/questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js',
|
||||
destination: '/questions/formats/javascript-functions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/javascript',
|
||||
destination: '/questions/formats/javascript-functions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/user-interface',
|
||||
destination: '/questions/formats/ui-coding',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/ui-coding',
|
||||
destination: '/questions/formats/ui-coding',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/algo',
|
||||
destination: '/questions/formats/algo-coding',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js',
|
||||
destination: '/questions/javascript-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js/coding',
|
||||
destination: '/questions/javascript-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js/quiz',
|
||||
destination: '/questions/javascript-interview-questions/quiz',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js/coding/data-structures-algorithms',
|
||||
destination: '/questions/javascript-interview-questions/algo-coding',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js/coding/user-interface',
|
||||
destination: '/questions/javascript-interview-questions/ui-coding',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/js/coding/utilities',
|
||||
destination:
|
||||
'/questions/javascript-interview-questions/javascript-functions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/html',
|
||||
destination: '/questions/html-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/html/coding',
|
||||
destination: '/questions/html-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/html/quiz',
|
||||
destination: '/questions/html-interview-questions/quiz',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/css',
|
||||
destination: '/questions/css-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/css/coding',
|
||||
destination: '/questions/css-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/css/quiz',
|
||||
destination: '/questions/css-interview-questions/quiz',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/ts',
|
||||
destination: '/questions/typescript-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/react',
|
||||
destination: '/questions/react-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/vanilla',
|
||||
destination: '/questions/vanilla-javascript-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/svelte',
|
||||
destination: '/questions/svelte-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/angular',
|
||||
destination: '/questions/angular-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/questions/vue',
|
||||
destination: '/questions/vue-interview-questions',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/study-plans',
|
||||
destination: '/interviews/study-plans',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/one-week',
|
||||
destination: '/interviews/study-plans/one-week',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/one-month',
|
||||
destination: '/interviews/study-plans/one-month',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/prepare/three-months',
|
||||
destination: '/interviews/study-plans/three-months',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/focus-areas',
|
||||
destination: '/interviews/focus-areas',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/focus-areas/:path*',
|
||||
destination: '/interviews/focus-areas/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/system-design',
|
||||
destination: '/front-end-system-design-playbook',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/system-design/:path*',
|
||||
destination: '/front-end-system-design-playbook/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/front-end-interview-guidebook',
|
||||
destination: '/front-end-interview-playbook',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/front-end-interview-guidebook/:path*',
|
||||
destination: '/front-end-interview-playbook/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/behavioral-interview-guidebook',
|
||||
destination: '/behavioral-interview-playbook',
|
||||
permanent: false,
|
||||
},
|
||||
{
|
||||
source: '/behavioral-interview-guidebook/:path*',
|
||||
destination: '/behavioral-interview-playbook/:path*',
|
||||
permanent: false,
|
||||
},
|
||||
];
|
||||
},
|
||||
async headers() {
|
||||
return [
|
||||
|
|
|
|||
|
|
@ -4,81 +4,72 @@
|
|||
"type": "module",
|
||||
"scripts": {
|
||||
"check": "npm run tsc && npm run lint",
|
||||
"build": "npm run gen:all && next build && npm run sitemap && npm run upload-cdn",
|
||||
"cl": "contentlayer build",
|
||||
"dev": "next dev --turbo",
|
||||
"dev:wp": "next dev",
|
||||
"dev:gen": "concurrently -n gfe,next -c green,blue -k \"npm run gen:watch\" \"next dev\"",
|
||||
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,md,mdx}\"",
|
||||
"build": "npm run gen:all && next build && npm run sitemap",
|
||||
"sitemap": "next-sitemap",
|
||||
"start": "next start",
|
||||
"lint": "eslint src --fix",
|
||||
"eslint": "eslint src",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"test:ui": "vitest --ui",
|
||||
"test": "jest",
|
||||
"tsc": "tsc",
|
||||
"db:projects-sync": "tsx ./src/scripts/projects-challenges-sync.ts",
|
||||
"transform": "jscodeshift -t ./transforms/transform.ts --parser=tsx",
|
||||
"db:projects-sync": "ts-node --esm --experimentalSpecifierResolution node ./src/scripts/projects-challenges-sync.ts",
|
||||
"gen": "cross-env NODE_ENV=production tsx ./src/scripts/questions-gen-cli.ts",
|
||||
"gen:watch": "npm run gen:all && NODE_ENV=production tsx ./src/scripts/questions-watcher.ts",
|
||||
"//": "TODO: make gen:ts faster and use it somewhere",
|
||||
"gen:ts": "ts-node --esm --experimentalSpecifierResolution node ./src/scripts/questions-javascript-preprocess.ts",
|
||||
"gen:all": "npm run gen:clean && npm run gen",
|
||||
"gen:clean": "rimraf src/__generated__",
|
||||
"postinstall": "prisma generate",
|
||||
"i18n": "npm run i18n:extract && npm run i18n:translate && npm run i18n:compile",
|
||||
"i18n:extract": "formatjs extract \"src/**/*.ts*\" --ignore=\"**/*.d.ts\" --out-file src/locales/raw/en-US.json",
|
||||
"i18n:compile": "formatjs compile-folder --ast src/locales/raw src/locales/compiled",
|
||||
"i18n:translate": "langnostic translate",
|
||||
"i18n:transform": "jscodeshift -t ./transforms/transform.ts --parser=tsx",
|
||||
"ppp": "tsx ./src/scripts/ppp-update.ts",
|
||||
"screenshot": "tsx ./src/scripts/screenshot.ts",
|
||||
"i18n": "langnostic translate",
|
||||
"i18n:extract": "formatjs extract \"src/**/*.ts*\" --ignore=\"**/*.d.ts\" --out-file src/locales/en-US.json",
|
||||
"ppp": "ts-node --esm --experimentalSpecifierResolution node ./src/scripts/ppp-update.ts",
|
||||
"screenshot": "ts-node --esm --experimentalSpecifierResolution node ./src/scripts/screenshot.ts",
|
||||
"supabase": "supabase gen types typescript --project-id vaqybtnqyonvlwtskzmv --schema public > src/supabase/database.types.ts && pnpm eslint \"src/supabase/database.types.ts\" --no-ignore --fix",
|
||||
"intl:js": "ts-node --esm --experimentalSpecifierResolution node ./src/scripts/questions-javascript-intl.ts",
|
||||
"prisma": "prisma",
|
||||
"prisma:migrate": "dotenv -e .env.development.local -- prisma migrate dev",
|
||||
"prisma:deploy": "dotenv -e .env.production.local -- prisma migrate deploy",
|
||||
"upload-cdn": "tsx ./src/scripts/upload-cdn.ts"
|
||||
"prisma:deploy": "dotenv -e .env.production.local -- prisma migrate deploy"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.787.0",
|
||||
"@axiomhq/js": "^1.0.0",
|
||||
"@codesandbox/sandpack-client": "2.13.8",
|
||||
"@codesandbox/sandpack-react": "2.13.8",
|
||||
"@formatjs/intl": "^3.1.6",
|
||||
"@formatjs/intl-localematcher": "^0.6.1",
|
||||
"@gfe/remark-alerts": "workspace:^",
|
||||
"@hookform/resolvers": "^5.0.1",
|
||||
"@lexical/code": "^0.30.0",
|
||||
"@lexical/headless": "^0.30.0",
|
||||
"@lexical/link": "^0.30.0",
|
||||
"@lexical/list": "^0.30.0",
|
||||
"@lexical/markdown": "^0.30.0",
|
||||
"@lexical/react": "^0.30.0",
|
||||
"@lexical/rich-text": "^0.30.0",
|
||||
"@lexical/selection": "^0.30.0",
|
||||
"@lexical/utils": "^0.30.0",
|
||||
"@formatjs/intl": "^2.9.9",
|
||||
"@formatjs/intl-localematcher": "^0.2.32",
|
||||
"@hookform/resolvers": "^3.3.2",
|
||||
"@lexical/code": "^0.13.1",
|
||||
"@lexical/headless": "^0.13.1",
|
||||
"@lexical/link": "^0.13.1",
|
||||
"@lexical/list": "^0.13.1",
|
||||
"@lexical/markdown": "^0.13.1",
|
||||
"@lexical/react": "^0.13.1",
|
||||
"@lexical/rich-text": "^0.13.1",
|
||||
"@lexical/selection": "^0.13.1",
|
||||
"@lexical/utils": "^0.13.1",
|
||||
"@mdx-js/react": "^2.3.0",
|
||||
"@monaco-editor/react": "^4.7.0",
|
||||
"@next/eslint-plugin-next": "14.2.15",
|
||||
"@monaco-editor/react": "^4.5.1",
|
||||
"@next/mdx": "14.2.15",
|
||||
"@number-flow/react": "^0.5.9",
|
||||
"@octokit/core": "^6.1.5",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^14.0.0",
|
||||
"@prisma/client": "6.6.0",
|
||||
"@prisma/nextjs-monorepo-workaround-plugin": "6.6.0",
|
||||
"@radix-ui/react-accordion": "^1.2.8",
|
||||
"@radix-ui/react-avatar": "^1.1.7",
|
||||
"@radix-ui/react-dialog": "^1.1.11",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.12",
|
||||
"@radix-ui/react-hover-card": "^1.1.11",
|
||||
"@radix-ui/react-popover": "^1.1.11",
|
||||
"@radix-ui/react-radio-group": "^1.3.4",
|
||||
"@radix-ui/react-scroll-area": "^1.2.6",
|
||||
"@radix-ui/react-slider": "^1.3.2",
|
||||
"@radix-ui/react-switch": "^1.2.2",
|
||||
"@radix-ui/react-tabs": "^1.1.9",
|
||||
"@radix-ui/react-toast": "^1.2.11",
|
||||
"@radix-ui/react-tooltip": "^1.2.4",
|
||||
"@react-email/components": "^0.0.36",
|
||||
"@sparticuz/chromium": "^133.0.0",
|
||||
"@number-flow/react": "^0.5.5",
|
||||
"@prisma/client": "5.7.0",
|
||||
"@prisma/nextjs-monorepo-workaround-plugin": "^5.19.1",
|
||||
"@radix-ui/react-accordion": "^1.1.2",
|
||||
"@radix-ui/react-avatar": "^1.0.4",
|
||||
"@radix-ui/react-dialog": "^1.0.5",
|
||||
"@radix-ui/react-dropdown-menu": "^2.0.6",
|
||||
"@radix-ui/react-hover-card": "^1.0.7",
|
||||
"@radix-ui/react-popover": "^1.0.7",
|
||||
"@radix-ui/react-radio-group": "^1.1.3",
|
||||
"@radix-ui/react-scroll-area": "^1.1.0",
|
||||
"@radix-ui/react-slider": "^1.1.2",
|
||||
"@radix-ui/react-switch": "^1.1.0",
|
||||
"@radix-ui/react-tabs": "^1.0.4",
|
||||
"@radix-ui/react-toast": "^1.1.5",
|
||||
"@radix-ui/react-tooltip": "^1.0.7",
|
||||
"@react-email/components": "^0.0.12",
|
||||
"@sparticuz/chromium": "^123.0.0",
|
||||
"@stefanprobst/remark-extract-toc": "^2.2.0",
|
||||
"@supabase/auth-helpers-nextjs": "^0.6.1",
|
||||
"@supabase/auth-helpers-react": "^0.3.1",
|
||||
|
|
@ -88,62 +79,59 @@
|
|||
"@trpc/react-query": "^10.18.0",
|
||||
"@trpc/server": "^10.18.0",
|
||||
"@types/ua-parser-js": "^0.7.39",
|
||||
"@upstash/qstash": "^2.7.23",
|
||||
"@upstash/redis": "^1.34.8",
|
||||
"@upstash/qstash": "^2.7.19",
|
||||
"@upstash/redis": "^1.34.3",
|
||||
"@use-gesture/react": "^10.3.1",
|
||||
"chrome-launcher": "^1.1.1",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clean-set": "^1.1.2",
|
||||
"clsx": "^2.1.1",
|
||||
"console-feed": "3.8.0",
|
||||
"clsx": "^2.0.0",
|
||||
"console-feed": "3.3.0",
|
||||
"contentlayer": "^0.3.4",
|
||||
"cors": "^2.8.5",
|
||||
"date-fns": "^4.1.0",
|
||||
"date-fns": "^2.30.0",
|
||||
"esbuild": "^0.17.8",
|
||||
"eslint": "^9.26.0",
|
||||
"eslint-plugin-formatjs": "^5.3.1",
|
||||
"framer-motion": "^9.0.4",
|
||||
"fuse.js": "^7.1.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"jose": "^5.2.0",
|
||||
"js-cookie": "^3.0.1",
|
||||
"jscodeshift": "^17.3.0",
|
||||
"lexical": "^0.30.0",
|
||||
"jscodeshift": "^17.1.2",
|
||||
"lexical": "^0.13.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mdx-bundler": "^9.2.1",
|
||||
"micro": "^9.4.1",
|
||||
"mitt": "^3.0.0",
|
||||
"monaco-editor": "^0.40.0",
|
||||
"monaco-themes": "^0.4.3",
|
||||
"monaco-vim": "^0.4.2",
|
||||
"motion": "^12.8.0",
|
||||
"negotiator": "^1.0.0",
|
||||
"negotiator": "^0.6.3",
|
||||
"next": "14.2.15",
|
||||
"next-contentlayer": "^0.3.4",
|
||||
"next-seo": "^6.6.0",
|
||||
"node-mailjet": "^6.0.8",
|
||||
"node-mailjet": "^6.0.5",
|
||||
"nullthrows": "^1.1.1",
|
||||
"nuqs": "^2.4.3",
|
||||
"prettier": "3.5.3",
|
||||
"prettier-plugin-svelte": "^3.3.3",
|
||||
"nuqs": "^2.2.3",
|
||||
"octokit": "^3.1.2",
|
||||
"prettier": "^3.3.2",
|
||||
"prettier-plugin-svelte": "^3.2.5",
|
||||
"prism-react-renderer": "^2.4.0",
|
||||
"prisma": "6.6.0",
|
||||
"puppeteer-core": "^24.7.1",
|
||||
"raw-body": "^3.0.0",
|
||||
"prisma": "5.7.0",
|
||||
"puppeteer-core": "^22.6.0",
|
||||
"react": "^18.2.0",
|
||||
"react-advanced-cropper": "^0.20.1",
|
||||
"react-circular-progressbar": "^2.2.0",
|
||||
"react-advanced-cropper": "^0.19.4",
|
||||
"react-circular-progressbar": "^2.1.0",
|
||||
"react-compare-image": "^3.4.0",
|
||||
"react-dnd": "^16.0.1",
|
||||
"react-dnd-html5-backend": "^16.0.1",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-dropzone": "^14.3.8",
|
||||
"react-hook-form": "^7.56.1",
|
||||
"react-icons": "5.4.0",
|
||||
"react-intl": "^7.1.11",
|
||||
"react-hook-form": "^7.47.0",
|
||||
"react-icons": "5.3.0",
|
||||
"react-intl": "^6.2.8",
|
||||
"react-merge-refs": "^2.1.1",
|
||||
"react-resizable-panels": "^2.1.8",
|
||||
"react-select": "^5.10.1",
|
||||
"react-use": "^17.6.0",
|
||||
"react-resizable-panels": "^0.0.55",
|
||||
"react-select": "^5.8.0",
|
||||
"react-use": "^17.5.1",
|
||||
"reading-time": "^1.5.0",
|
||||
"remark-frontmatter": "^4.0.1",
|
||||
"remark-gfm": "^3.0.1",
|
||||
|
|
@ -152,64 +140,63 @@
|
|||
"remark-slug": "^7.0.1",
|
||||
"server-only": "^0.0.1",
|
||||
"stripe": "14.19.0",
|
||||
"superjson": "^2.2.2",
|
||||
"superjson": "^2.2.1",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"ua-parser-js": "^1.0.38",
|
||||
"unified": "10.1.2",
|
||||
"usehooks-ts": "^3.1.1",
|
||||
"uuid": "^11.1.0",
|
||||
"virtua": "^0.40.4",
|
||||
"zod": "^3.24.3"
|
||||
"usehooks-ts": "^2.9.1",
|
||||
"uuid": "^9.0.0",
|
||||
"zod": "^3.21.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@formatjs/cli": "^6.6.4",
|
||||
"@gfe/eslint-config": "workspace:*",
|
||||
"@gfe/typescript-config": "workspace:*",
|
||||
"@jest/globals": "^29.7.0",
|
||||
"@mdx-js/loader": "^2.3.0",
|
||||
"@tailwindcss/container-queries": "^0.1.1",
|
||||
"@tailwindcss/forms": "^0.5.10",
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"@tailwindcss/forms": "^0.5.7",
|
||||
"@tailwindcss/typography": "^0.5.10",
|
||||
"@types/cookie": "^0.5.1",
|
||||
"@types/cors": "^2.8.13",
|
||||
"@types/gtag.js": "^0.0.12",
|
||||
"@types/jest": "^29.4.1",
|
||||
"@types/js-cookie": "^3.0.3",
|
||||
"@types/jscodeshift": "^17.3.0",
|
||||
"@types/jscodeshift": "^0.12.0",
|
||||
"@types/jsonwebtoken": "^9.0.3",
|
||||
"@types/lodash-es": "^4.17.6",
|
||||
"@types/mdast": "^4.0.4",
|
||||
"@types/mdx": "^2.0.3",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/negotiator": "^0.6.3",
|
||||
"@types/negotiator": "^0.6.1",
|
||||
"@types/node": "22.15.0",
|
||||
"@types/react": "18.0.28",
|
||||
"@types/react-dom": "18.0.11",
|
||||
"@types/resemblejs": "^4.1.3",
|
||||
"@types/strip-comments": "^2.0.1",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@vitejs/plugin-react": "^4.4.1",
|
||||
"@vitest/ui": "^3.1.2",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"chalk": "^5.4.1",
|
||||
"chokidar": "^4.0.3",
|
||||
"concurrently": "^9.1.2",
|
||||
"@types/uuid": "^9.0.1",
|
||||
"@types/webpack-env": "^1.18.0",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"chalk": "^5.2.0",
|
||||
"chokidar": "^3.5.3",
|
||||
"concurrently": "^7.6.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.5.0",
|
||||
"dotenv-cli": "^8.0.0",
|
||||
"dotenv-cli": "^7.3.0",
|
||||
"encoding": "^0.1.13",
|
||||
"globby": "^14.1.0",
|
||||
"eslint": "^9.26.0",
|
||||
"eslint-plugin-formatjs": "^5.3.1",
|
||||
"globby": "^13.2.2",
|
||||
"jest": "^29.5.0",
|
||||
"langnostic": "workspace:^",
|
||||
"mime-types": "^3.0.1",
|
||||
"next-sitemap": "^3.1.52",
|
||||
"postcss": "^8.5.3",
|
||||
"prettier-plugin-tailwindcss": "0.6.11",
|
||||
"rimraf": "^6.0.1",
|
||||
"postcss": "^8.4.21",
|
||||
"prettier-plugin-tailwindcss": "^0.5.9",
|
||||
"rimraf": "^4.4.1",
|
||||
"slugify": "^1.6.5",
|
||||
"strip-comments": "^2.0.1",
|
||||
"supabase": "^1.115.5",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"tsx": "^4.19.3",
|
||||
"typescript": "5.8.3",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"vitest": "^3.1.2"
|
||||
"tailwindcss": "^3.4.13",
|
||||
"ts-jest": "^29.1.1",
|
||||
"ts-node": "^10.9.2",
|
||||
"tsx": "^4.7.1",
|
||||
"typescript": "5.8.3"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
52
apps/web/src/__generated__/questions/algo/array-balanced-brackets/en-US.json
generated
Normal file
52
apps/web/src/__generated__/questions/algo/array-balanced-brackets/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1722729600,
|
||||
"difficulty": "easy",
|
||||
"duration": 25,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-balanced-brackets",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-balanced-brackets",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array",
|
||||
"stack"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718409600,
|
||||
"difficulty": "easy",
|
||||
"duration": 15,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-find-duplicate",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-find-duplicate",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
51
apps/web/src/__generated__/questions/algo/array-find-missing-number-in-sequence/en-US.json
generated
Normal file
51
apps/web/src/__generated__/questions/algo/array-find-missing-number-in-sequence/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718928000,
|
||||
"difficulty": "easy",
|
||||
"duration": 15,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-find-missing-number-in-sequence",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-find-missing-number-in-sequence",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
51
apps/web/src/__generated__/questions/algo/array-maximum-product-contiguous/en-US.json
generated
Normal file
51
apps/web/src/__generated__/questions/algo/array-maximum-product-contiguous/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718236800,
|
||||
"difficulty": "medium",
|
||||
"duration": 30,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-maximum-product-contiguous",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-maximum-product-contiguous",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
51
apps/web/src/__generated__/questions/algo/array-maximum-sum-contiguous/en-US.json
generated
Normal file
51
apps/web/src/__generated__/questions/algo/array-maximum-sum-contiguous/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718841600,
|
||||
"difficulty": "medium",
|
||||
"duration": 25,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-maximum-sum-contiguous",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-maximum-sum-contiguous",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
52
apps/web/src/__generated__/questions/algo/array-most-common-elements/en-US.json
generated
Normal file
52
apps/web/src/__generated__/questions/algo/array-most-common-elements/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1724889600,
|
||||
"difficulty": "medium",
|
||||
"duration": 35,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-most-common-elements",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-most-common-elements",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array",
|
||||
"heap"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
51
apps/web/src/__generated__/questions/algo/array-product-excluding-current/en-US.json
generated
Normal file
51
apps/web/src/__generated__/questions/algo/array-product-excluding-current/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718496000,
|
||||
"difficulty": "medium",
|
||||
"duration": 15,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-product-excluding-current",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-product-excluding-current",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1720828800,
|
||||
"difficulty": "medium",
|
||||
"duration": 45,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-reachable-end",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-reachable-end",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array",
|
||||
"dynamic-programming",
|
||||
"greedy"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718928000,
|
||||
"difficulty": "medium",
|
||||
"duration": 30,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-rotated-find",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-rotated-find",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array",
|
||||
"binary-search"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
52
apps/web/src/__generated__/questions/algo/array-smallest-in-rotated/en-US.json
generated
Normal file
52
apps/web/src/__generated__/questions/algo/array-smallest-in-rotated/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1718928000,
|
||||
"difficulty": "medium",
|
||||
"duration": 25,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/array-smallest-in-rotated",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "array-smallest-in-rotated",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"array",
|
||||
"binary-search"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
53
apps/web/src/__generated__/questions/algo/binary-search-tree-kth-smallest/en-US.json
generated
Normal file
53
apps/web/src/__generated__/questions/algo/binary-search-tree-kth-smallest/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1724284800,
|
||||
"difficulty": "medium",
|
||||
"duration": 35,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-search-tree-kth-smallest",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-search-tree-kth-smallest",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"binary-search-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
53
apps/web/src/__generated__/questions/algo/binary-search-tree-lowest-common-ancestor/en-US.json
generated
Normal file
53
apps/web/src/__generated__/questions/algo/binary-search-tree-lowest-common-ancestor/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1724284800,
|
||||
"difficulty": "medium",
|
||||
"duration": 35,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-search-tree-lowest-common-ancestor",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-search-tree-lowest-common-ancestor",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"binary-search-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
53
apps/web/src/__generated__/questions/algo/binary-search-tree-validate/en-US.json
generated
Normal file
53
apps/web/src/__generated__/questions/algo/binary-search-tree-validate/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1724284800,
|
||||
"difficulty": "medium",
|
||||
"duration": 35,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-search-tree-validate",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-search-tree-validate",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"binary-search-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,32 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": null,
|
||||
"companies": [],
|
||||
"created": 1745539200,
|
||||
"difficulty": "medium",
|
||||
"duration": 15,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-search-tree",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [
|
||||
"heap",
|
||||
"binary-search"
|
||||
],
|
||||
"slug": "binary-search-tree",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"binary-search-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
"files": {
|
||||
"/package.json": "{\n \"name\": \"@gfe-questions/binary-search-tree\",\n \"version\": \"0.0.1\",\n \"main\": \"/src/binary-search-tree.ts\",\n \"devDependencies\": {\n \"@types/jest\": \"29.5.0\",\n \"typescript\": \"5.0.2\"\n }\n}\n",
|
||||
"/tsconfig.json": "{\n \"include\": [\"./**/*\"],\n \"compilerOptions\": {\n \"strict\": true,\n \"esModuleInterop\": true,\n \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n \"jsx\": \"react-jsx\",\n \"target\": \"es2020\"\n }\n}\n",
|
||||
"/src/binary-search-tree.run.test.ts": "import BST from './binary-search-tree';\n\ndescribe('BST', () => {\n test('constructor', () => {\n const bst = new BST();\n expect(bst instanceof BST).toBeTruthy();\n });\n\n test('insert and search', () => {\n const bst = new BST();\n bst.insert(100);\n expect(bst.search(100)).toBeTruthy();\n bst.insert(200);\n expect(bst.search(200)).toBeTruthy();\n bst.insert(50);\n expect(bst.search(50)).toBeTruthy();\n expect(bst.search(250)).toBeFalsy();\n });\n\n test('delete', () => {\n const bst = new BST();\n bst.insert(300);\n bst.insert(100);\n bst.insert(200);\n bst.insert(50);\n bst.delete(100);\n expect(bst.search(100)).toBeFalsy();\n expect(bst.search(300)).toBeTruthy();\n expect(bst.search(200)).toBeTruthy();\n bst.delete(300);\n expect(bst.search(300)).toBeFalsy();\n expect(bst.search(50)).toBeTruthy();\n });\n});\n",
|
||||
"/src/binary-search-tree.submit.test.ts": "import BST from './binary-search-tree';\n\ndescribe('BST', () => {\n test('constructor', () => {\n const bst = new BST();\n expect(bst instanceof BST).toBeTruthy();\n expect(bst.root).toBeNull();\n });\n\n test('insert and search', () => {\n const bst = new BST();\n bst.insert(100);\n expect(bst.search(100)).toBeTruthy();\n bst.insert(200);\n expect(bst.search(200)).toBeTruthy();\n bst.insert(50);\n expect(bst.search(50)).toBeTruthy();\n });\n\n test('delete leaf node', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(70);\n bst.delete(30);\n expect(bst.search(30)).toBeFalsy();\n expect(bst.root?.left).toBeNull();\n });\n\n test('delete node with one child', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(20);\n bst.delete(30);\n expect(bst.search(30)).toBeFalsy();\n expect(bst.root?.left?.value).toBe(20);\n });\n\n test('delete node with two children', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(70);\n bst.insert(20);\n bst.insert(40);\n bst.delete(30);\n expect(bst.search(30)).toBeFalsy();\n expect(bst.root?.left?.value).not.toBe(30);\n });\n\n test('delete root node', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(70);\n bst.delete(50);\n expect(bst.search(50)).toBeFalsy();\n expect(bst.root?.value).not.toBe(50);\n });\n\n test('insert many and test structure', () => {\n const bst = new BST();\n const values = [50, 30, 70, 20, 40, 60, 80];\n values.forEach((value) => bst.insert(value));\n expect(bst.root?.value).toBe(50);\n expect(bst.root?.left?.value).toBe(30);\n expect(bst.root?.right?.value).toBe(70);\n expect(bst.root?.left?.left?.value).toBe(20);\n expect(bst.root?.left?.right?.value).toBe(40);\n expect(bst.root?.right?.left?.value).toBe(60);\n expect(bst.root?.right?.right?.value).toBe(80);\n });\n\n test('search non-existent value', () => {\n const bst = new BST();\n bst.insert(50);\n expect(bst.search(100)).toBeFalsy();\n });\n\n test('complex insert and delete sequence', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(70);\n bst.insert(20);\n bst.insert(40);\n bst.insert(60);\n bst.insert(80);\n bst.delete(70);\n expect(bst.search(70)).toBeFalsy();\n bst.delete(50);\n expect(bst.search(50)).toBeFalsy();\n bst.insert(35);\n bst.insert(45);\n expect(bst.search(35)).toBeTruthy();\n expect(bst.search(45)).toBeTruthy();\n });\n\n test('delete on empty BST', () => {\n const bst = new BST();\n bst.delete(100);\n expect(bst.root).toBeNull();\n });\n\n test('maintaining state after multiple operations', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(60);\n bst.delete(50);\n bst.insert(55);\n bst.insert(65);\n expect(bst.search(55)).toBeTruthy();\n expect(bst.search(65)).toBeTruthy();\n bst.delete(65);\n expect(bst.search(65)).toBeFalsy();\n });\n\n test('integration test of operations', () => {\n const bst = new BST();\n bst.insert(50);\n bst.insert(30);\n bst.insert(70);\n bst.insert(20);\n bst.insert(60);\n bst.insert(80);\n bst.insert(40);\n bst.delete(50);\n expect(bst.search(50)).toBeFalsy();\n bst.insert(55);\n expect(bst.search(55)).toBeTruthy();\n bst.delete(55);\n expect(bst.search(55)).toBeFalsy();\n });\n});\n",
|
||||
"/src/binary-search-tree.ts": "class Node<T> {\n value: number | null;\n left: Node<T> | null;\n right: Node<T> | null;\n\n constructor(value: number | null = null) {\n this.value = value;\n this.left = null;\n this.right = null;\n }\n}\n\nexport default class BinarySearchTree<T> {\n root: Node<T> | null;\n\n constructor() {\n this.root = null;\n }\n\n /**\n * Inserts a new value into the BST while maintaining BST properties.\n * @param value The value to be inserted into the BST.\n */\n insert(value: number): void {\n const newNode = new Node(value);\n if (this.root === null) {\n this.root = newNode;\n return;\n }\n\n let currentNode: Node<T> | null = this.root;\n let parent: Node<T> | null = null;\n while (currentNode) {\n parent = currentNode;\n if (value < currentNode.value!) {\n currentNode = currentNode.left;\n } else {\n currentNode = currentNode.right;\n }\n }\n\n if (parent && value < parent.value!) {\n parent.left = newNode;\n } else if (parent) {\n parent.right = newNode;\n }\n }\n\n /**\n * Searches for a value in the BST. Returns true if the value exists, false otherwise.\n * @param value The value to search for.\n * @return True if the value is found, false otherwise.\n */\n search(value: number): boolean {\n let currentNode = this.root;\n while (currentNode) {\n if (value === currentNode.value) {\n return true;\n }\n currentNode =\n value < currentNode.value! ? currentNode.left : currentNode.right;\n }\n return false;\n }\n\n /**\n * Deletes a value from the BST, if it exists, while maintaining BST properties.\n * @param value The value to be deleted from the BST.\n */\n delete(value: number): void {\n let currentNode = this.root;\n let parent: Node<T> | null = null;\n\n // Find the node and its parent.\n while (currentNode && currentNode.value !== value) {\n parent = currentNode;\n if (value < currentNode.value!) {\n currentNode = currentNode.left;\n } else {\n currentNode = currentNode.right;\n }\n }\n\n if (!currentNode) {\n return; // Node not found.\n }\n\n // Node has two children.\n if (currentNode.left && currentNode.right) {\n let successor = currentNode.right;\n let successorParent = currentNode;\n\n // Find the node with the smallest value in the right subtree and take note of its parent.\n while (successor.left) {\n successorParent = successor;\n successor = successor.left;\n }\n\n currentNode.value = successor.value; // Replace value.\n currentNode = successor; // Move pointer to successor, which will be deleted.\n parent = successorParent;\n }\n\n // Node has one or zero children.\n let child = currentNode.left ? currentNode.left : currentNode.right;\n\n // If the node to be deleted is the root node.\n if (!parent) {\n this.root = child;\n } else {\n if (parent.left === currentNode) {\n parent.left = child;\n } else {\n parent.right = child;\n }\n }\n }\n}\n"
|
||||
},
|
||||
"skeleton": {
|
||||
"js": "export default class BinarySearchTree {\n constructor() {\n throw 'Not implemented!';\n }\n\n /**\n * Inserts a new value into the BST while maintaining BST properties.\n * @param {*} value The value to be inserted into the BST.\n */\n insert(value) {\n throw 'Not implemented!';\n }\n\n /**\n * Searches for a value in the BST. Returns true if the value exists, false otherwise.\n * @param {*} value The value to search for.\n * @return {boolean} True if the value is found, false otherwise.\n */\n search(value) {\n throw 'Not implemented!';\n }\n\n /**\n * Deletes a value from the BST, if it exists, while maintaining BST properties.\n * @param {*} value The value to be deleted from the BST.\n */\n delete(value) {\n throw 'Not implemented!';\n }\n}",
|
||||
"ts": "export default class BinarySearchTree<T> {\n constructor() {\n throw 'Not implemented!';\n }\n\n /**\n * Inserts a new value into the BST while maintaining BST properties.\n * @param value The value to be inserted into the BST.\n */\n insert(value: number): void {\n throw 'Not implemented!';\n }\n\n /**\n * Searches for a value in the BST. Returns true if the value exists, false otherwise.\n * @param value The value to search for.\n * @return True if the value is found, false otherwise.\n */\n search(value: number): boolean {\n throw 'Not implemented!';\n }\n\n /**\n * Deletes a value from the BST, if it exists, while maintaining BST properties.\n * @param value The value to be deleted from the BST.\n */\n delete(value: number): void {\n throw 'Not implemented!';\n }\n}"
|
||||
},
|
||||
"workspace": {
|
||||
"main": "/src/binary-search-tree.ts",
|
||||
"run": "/src/binary-search-tree.run.test.ts",
|
||||
"submit": "/src/binary-search-tree.submit.test.ts"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": null,
|
||||
"companies": [],
|
||||
"created": 1671667200,
|
||||
"difficulty": "medium",
|
||||
"duration": 15,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-search",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [
|
||||
"selection-sort",
|
||||
"quick-sort",
|
||||
"merge-sort",
|
||||
"depth-first-search",
|
||||
"breadth-first-search"
|
||||
],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-search",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-search",
|
||||
"sorting"
|
||||
]
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
"files": {
|
||||
"/package.json": "{\n \"name\": \"@gfe-questions/binary-search\",\n \"version\": \"0.0.1\",\n \"main\": \"/src/binary-search.ts\",\n \"devDependencies\": {\n \"@types/jest\": \"29.5.0\",\n \"typescript\": \"5.0.2\"\n }\n}\n",
|
||||
"/tsconfig.json": "{\n \"include\": [\"./**/*\"],\n \"compilerOptions\": {\n \"strict\": true,\n \"esModuleInterop\": true,\n \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n \"jsx\": \"react-jsx\",\n \"target\": \"es2020\"\n }\n}\n",
|
||||
"/src/binary-search.run.test.ts": "import binarySearch from './binary-search';\n\ndescribe('binarySearch', () => {\n test('target value', () => {\n expect(binarySearch([1, 2, 3, 10, 11, 20], 2)).toBe(1);\n });\n\n test('boundary value', () => {\n expect(binarySearch([1, 2, 3, 10, 11, 20], 20)).toBe(5);\n });\n\n test('non-existent value', () => {\n expect(binarySearch([1, 2, 3, 10, 11, 20], 9)).toBe(-1);\n });\n});\n",
|
||||
"/src/binary-search.submit.test.ts": "import binarySearch from './binary-search';\n\ndescribe('binarySearch', () => {\n test('empty', () => {\n expect(binarySearch([], 1)).toBe(-1);\n });\n\n test('one element', () => {\n expect(binarySearch([1], 1)).toBe(0);\n expect(binarySearch([1], 2)).toBe(-1);\n });\n\n test('two elements', () => {\n expect(binarySearch([1, 4], 1)).toBe(0);\n expect(binarySearch([1, 4], 4)).toBe(1);\n expect(binarySearch([1, 4], 5)).toBe(-1);\n });\n\n test('more than two elements', () => {\n expect(binarySearch([1, 2, 3, 10, 11, 20], 1)).toBe(0);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 2)).toBe(1);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 3)).toBe(2);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 10)).toBe(3);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 9)).toBe(-1);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 4)).toBe(-1);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 0)).toBe(-1);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 21)).toBe(-1);\n });\n\n test('boundary values', () => {\n expect(binarySearch([1, 2, 3, 10, 11, 20], 1)).toBe(0);\n expect(binarySearch([1, 2, 3, 10, 11, 20], 20)).toBe(5);\n });\n});\n",
|
||||
"/src/binary-search.ts": "export default function binarySearch(\n arr: Array<number>,\n target: number,\n): number {\n // Initialize the left and right indices of the array\n let left = 0;\n let right = arr.length - 1;\n\n // Keep searching until the left and right indices meet.\n while (left <= right) {\n // Calculate the mid index to retrieve the mid element later.\n const mid = Math.floor((left + right) / 2);\n\n if (target < arr[mid]) {\n // If the target element is less than the middle element,\n // search the left half of the array.\n // Adjust the right index so the next loop iteration\n // searches the left side.\n right = mid - 1;\n } else if (target > arr[mid]) {\n // If the target element is greater than the middle element,\n // search the right half of the array.\n // Adjust the left index so the next loop iteration\n // searches the left side.\n left = mid + 1;\n } else {\n // If the target element is equal to the middle element,\n // return the index of the middle element.\n return mid;\n }\n }\n\n // If the element is not found, return -1.\n return -1;\n}\n"
|
||||
},
|
||||
"skeleton": {
|
||||
"js": "/**\n * @param {Array<number>} arr The input integer array to be searched.\n * @param {number} target The target integer to search within the array.\n * @return {number} The index of target element in the array, or -1 if not found.\n */\nexport default function binarySearch(arr, target) {\n throw 'Not implemented!';\n}",
|
||||
"ts": "/**\n * @param arr The input integer array to be searched.\n * @param target The target integer to search within the array.\n * @return The index of target element in the array, or -1 if not found.\n */\nexport default function binarySearch(\n arr: Array<number>,\n target: number,\n): number {\n throw 'Not implemented!';\n}"
|
||||
},
|
||||
"workspace": {
|
||||
"main": "/src/binary-search.ts",
|
||||
"run": "/src/binary-search.run.test.ts",
|
||||
"submit": "/src/binary-search.submit.test.ts"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1723161600,
|
||||
"difficulty": "easy",
|
||||
"duration": 25,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-tree-equal",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-tree-equal",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1723766400,
|
||||
"difficulty": "easy",
|
||||
"duration": 20,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-tree-flip",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-tree-flip",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
52
apps/web/src/__generated__/questions/algo/binary-tree-level-order-traversal/en-US.json
generated
Normal file
52
apps/web/src/__generated__/questions/algo/binary-tree-level-order-traversal/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"access": "standard",
|
||||
"author": "hiten",
|
||||
"companies": [],
|
||||
"created": 1723161600,
|
||||
"difficulty": "medium",
|
||||
"duration": 25,
|
||||
"featured": false,
|
||||
"format": "algo",
|
||||
"frameworkDefault": null,
|
||||
"frameworks": [],
|
||||
"href": "/questions/algo/binary-tree-level-order-traversal",
|
||||
"importance": "low",
|
||||
"languages": [
|
||||
"js",
|
||||
"ts"
|
||||
],
|
||||
"nextQuestions": [],
|
||||
"published": true,
|
||||
"ranking": 100,
|
||||
"similarQuestions": [],
|
||||
"slug": "binary-tree-level-order-traversal",
|
||||
"subtitle": null,
|
||||
"topics": [
|
||||
"binary-tree",
|
||||
"tree"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
53
apps/web/src/__generated__/questions/algo/binary-tree-maximum-depth/en-US.json
generated
Normal file
53
apps/web/src/__generated__/questions/algo/binary-tree-maximum-depth/en-US.json
generated
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue