From cd453e5ad0d385bece00e9b83906ce8eecf29f35 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 21 Sep 2024 02:23:15 +0600 Subject: [PATCH] wip: migrate authors --- .astro/astro/content.d.ts | 2071 +++++++++++++++++ .astro/types.d.ts | 1 + src/components/GuideListItem.astro | 2 +- src/content/author.ts | 23 + src/content/authors/ebrahim-bharmal.md | 8 + src/content/authors/ekene.md | 13 + src/content/authors/fernando.md | 11 + src/content/authors/jesse-li.md | 9 + src/content/authors/kamran.md | 16 + src/content/authors/peter-thaleikis.md | 9 + src/content/authors/william.md | 12 + src/content/config.ts | 9 + src/content/guide.ts | 25 + .../guides/asymptotic-notation.md | 0 ...er-blocking-javascript-with-async-defer.md | 0 .../guides/backend-developer-skills.md | 0 .../guides/backend-developer-tools.md | 0 .../guides/backend-languages.md | 0 .../guides/backend-project-ideas.md | 0 .../guides/backend-technologies.md | 0 .../guides/basic-authentication.md | 0 .../guides/basics-of-authentication.md | 0 .../guides/big-o-notation.md | 0 .../guides/character-encodings.md | 0 src/{data => content}/guides/ci-cd.md | 0 ...istency-patterns-in-distributed-systems.md | 0 .../guides/design-patterns-for-humans.md | 0 .../guides/devops-career-path.md | 0 .../guides/devops-engineer.md | 0 src/{data => content}/guides/devops-skills.md | 0 src/{data => content}/guides/devops-vs-sre.md | 0 .../guides/dhcp-in-one-picture.md | 0 .../guides/dns-in-one-picture.md | 0 .../guides/free-resources-to-learn-llms.md | 0 .../guides/frontend-developer-skills.md | 0 .../guides/frontend-languages.md | 0 .../guides/full-stack-developer-skills.md | 0 .../guides/full-stack-vs-software-engineer.md | 0 .../guides/history-of-javascript.md | 0 .../guides/how-to-become-devops-engineer.md | 0 .../how-to-become-frontend-developer.md | 0 .../guides/how-to-setup-a-jump-server.md | 0 .../guides/http-basic-authentication.md | 0 src/{data => content}/guides/http-caching.md | 0 .../guides/introduction-to-llms.md | 0 .../guides/java-developer-skills.md | 0 .../guides/journey-to-http2.md | 0 .../guides/jwt-authentication.md | 0 .../guides/levels-of-seniority.md | 0 src/{data => content}/guides/oauth.md | 0 src/{data => content}/guides/proxy-servers.md | 0 .../guides/random-numbers.md | 0 .../guides/scaling-databases.md | 0 .../guides/session-authentication.md | 0 .../guides/session-based-authentication.md | 0 .../setup-and-auto-renew-ssl-certificates.md | 0 .../guides/single-command-database-setup.md | 0 .../guides/ssl-tls-https-ssh.md | 0 src/{data => content}/guides/sso.md | 0 .../guides/token-authentication.md | 0 .../guides/torrent-client.md | 0 .../guides/unfamiliar-codebase.md | 0 .../guides/what-are-web-vitals.md | 0 .../guides/what-is-internet.md | 0 .../guides/what-is-sli-slo-sla.md | 0 ...it-and-they-will-come-wont-work-anymore.md | 0 src/content/question-group.ts | 32 + .../question-groups/backend/backend.md | 0 .../backend/content/anomaly-detection.md | 0 .../backend/content/api-dependencies.md | 0 .../backend/content/api-endpoint.md | 0 .../backend/content/api-tests.md | 0 .../backend/content/api-versioning.md | 0 .../backend/content/batch-processing.md | 0 .../benefits-drawbacks-microservices.md | 0 .../backend/content/bg-tasks.md | 0 .../backend/content/blue-green-deployment.md | 0 .../backend/content/cache-eviction.md | 0 .../backend/content/cap-theorem.md | 0 .../question-groups/backend/content/ci-cd.md | 0 .../backend/content/containerization.md | 0 .../backend/content/correlation-ids.md | 0 .../backend/content/data-encryption.md | 0 .../backend/content/db-connections.md | 0 .../content/deadlock-db-transaction.md | 0 .../backend/content/debugging-backend.md | 0 .../content/decompose-microservices.md | 0 .../backend/content/distributed-caching.md | 0 .../backend/content/eventual-consistency.md | 0 .../backend/content/fault-tolerance.md | 0 .../backend/content/file-uploads.md | 0 .../backend/content/fulltext-search.md | 0 .../backend/content/gdpr-compliance.md | 0 .../backend/content/high-available-storage.md | 0 .../content/http-request-response-cycle.md | 0 .../backend/content/idempotency.md | 0 .../backend/content/instrument-monitor.md | 0 .../backend/content/iot-streams.md | 0 .../backend/content/load-balanced-session.md | 0 .../backend/content/load-testing-api.md | 0 .../backend/content/long-running.md | 0 .../backend/content/maintainable-code.md | 0 .../backend/content/message-queue.md | 0 .../content/optimistic-vs-pessimistic.md | 0 .../backend/content/protect-sql-injection.md | 0 .../backend/content/rate-limiting.md | 0 .../backend/content/realtime-data-sync.md | 0 .../backend/content/rest-core-principles.md | 0 .../backend/content/reverse-proxy.md | 0 .../backend/content/scale-backend.md | 0 .../backend/content/schema-migrations.md | 0 .../backend/content/secure-api.md | 0 .../backend/content/secure-interservice.md | 0 .../backend/content/session-management.md | 0 .../backend/content/sql-vs-nosql.md | 0 .../question-groups/backend/content/sso.md | 0 .../backend/content/statelessness-http.md | 0 .../backend/content/webhooks.md | 0 .../devops/content/ansible-benefits.md | 0 .../devops/content/auto-scaling.md | 0 .../devops/content/blue-green-deployment.md | 0 .../devops/content/build-pipelines.md | 0 .../devops/content/canary-release.md | 0 .../devops/content/cicd-setup.md | 0 .../devops/content/cluster-health.md | 0 .../devops/content/common-iac-tools.md | 0 .../devops/content/container-consistency.md | 0 .../devops/content/container-vs-vm.md | 0 .../devops/content/continuous-monitoring.md | 0 .../devops/content/data-migration.md | 0 .../devops/content/devsecops.md | 0 .../devops/content/docker-compose.md | 0 .../devops/content/explain-ci-vs-cd.md | 0 .../devops/content/health-monitor.md | 0 .../devops/content/high-availability.md | 0 .../devops/content/iac-concept.md | 0 .../devops/content/implement-logging.md | 0 .../devops/content/kubernetes-components.md | 0 .../devops/content/kubernetes-operators.md | 0 .../devops/content/load-balancer.md | 0 .../devops/content/microservice-challenges.md | 0 .../content/microservice-vs-monolithic.md | 0 .../devops/content/migrate-environment.md | 0 .../devops/content/multi-cloud-kubernetes.md | 0 .../devops/content/multi-cloud.md | 0 .../devops/content/network-configuration.md | 0 .../devops/content/optimize-cicd.md | 0 .../devops/content/orchestration.md | 0 .../devops/content/popular-cicd-tools.md | 0 .../devops/content/purpose-of-cm.md | 0 .../devops/content/reverse-proxy.md | 0 .../devops/content/role-of-devops.md | 0 .../devops/content/scaling-differences.md | 0 .../devops/content/secret-management.md | 0 .../devops/content/serverless-computing.md | 0 .../devops/content/stateful-applications.md | 0 .../devops/content/what-is-devops.md | 0 .../devops/content/what-is-docker.md | 0 .../devops/content/what-is-gitops.md | 0 .../devops/content/what-is-helm-chart.md | 0 .../devops/content/what-is-iac.md | 0 .../devops/content/what-is-kubernetes.md | 0 .../devops/content/what-is-prometheus.md | 0 .../devops/content/what-is-rollback.md | 0 .../devops/content/what-is-service-mesh.md | 0 .../devops/content/what-is-shift-left.md | 0 .../devops/content/what-is-version-control.md | 0 .../devops/content/zero-downtime.md | 0 .../question-groups/devops/devops.md | 0 .../frontend/content/async-ops-js.md | 0 .../frontend/content/block-inline-elems.md | 0 .../frontend/content/box-model.md | 0 .../frontend/content/browser-render.md | 0 .../frontend/content/client-storage.md | 0 .../frontend/content/closures.md | 0 .../frontend/content/critical-css.md | 0 .../question-groups/frontend/content/csp.md | 0 .../frontend/content/css-grid.md | 0 .../frontend/content/css-specificity.md | 0 .../frontend/content/css-variables.md | 0 .../question-groups/frontend/content/dom.md | 0 .../frontend/content/em-vs-rem.md | 0 .../frontend/content/event-delegation.md | 0 .../frontend/content/event-listeners.md | 0 .../frontend/content/event-loop-js.md | 0 .../frontend/content/flexbox-layout.md | 0 .../frontend/content/id-vs-class.md | 0 .../frontend/content/improve-web-perf.md | 0 .../frontend/content/js-promises.md | 0 .../frontend/content/media-queries.md | 0 .../frontend/content/null-vs-undefined.md | 0 .../frontend/content/optimize-assets.md | 0 .../frontend/content/same-origin-policy.md | 0 .../frontend/content/seo-best-practices.md | 0 .../frontend/content/service-workers.md | 0 .../frontend/content/ssr-when.md | 0 .../frontend/content/state-mgmt-spa.md | 0 .../frontend/content/tree-shaking.md | 0 .../question-groups/frontend/content/vdom.md | 0 .../question-groups/frontend/frontend.md | 0 .../content/alert-prompt-confirm.md | 0 .../content/append-child-vs-insert-before.md | 0 .../javascript/content/async-vs-sync.md | 0 .../javascript/content/break-and-continue.md | 0 .../javascript/content/callback-hell.md | 0 .../javascript/content/closure.md | 0 .../javascript/content/comma-operator.md | 0 .../javascript/content/create-element.md | 0 .../javascript/content/custom-event.md | 0 .../javascript/content/debug-javascript.md | 0 .../javascript/content/defer-vs-async.md | 0 .../javascript/content/do-while-loop.md | 0 .../javascript/content/equality-operator.md | 0 .../content/error-in-async-await.md | 0 .../javascript/content/error-in-promise.md | 0 .../javascript/content/event-bubbling.md | 0 .../javascript/content/event-loop.md | 0 .../javascript/content/explicit-binding.md | 0 .../javascript/content/filter-method.md | 0 .../content/finally-block-in-promise.md | 0 .../content/find-unique-array-values.md | 0 .../javascript/content/for-each-method.md | 0 .../javascript/content/heap-and-stack.md | 0 .../javascript/content/hoisting.md | 0 .../javascript/content/iife.md | 0 .../javascript/content/immutable-object.md | 0 .../javascript/content/increment-operator.md | 0 .../javascript/content/infinite-loop.md | 0 .../javascript/content/inheritance.md | 0 .../javascript/content/labelled-statements.md | 0 .../javascript/content/logical-operators.md | 0 .../javascript/content/map-method.md | 0 .../question-groups/javascript/content/map.md | 0 .../javascript/content/measure-dimensions.md | 0 .../javascript/content/merge-arrays.md | 0 .../content/nullish-coalescing-operator.md | 0 .../javascript/content/parse-json.md | 0 .../javascript/content/prevent-default.md | 0 .../content/promise-all-vs-all-settled.md | 0 .../javascript/content/prototype-chain.md | 0 .../javascript/content/query-selector.md | 0 .../javascript/content/reduce-method.md | 0 .../javascript/content/remove-element.md | 0 .../javascript/content/scroll-to-top.md | 0 .../javascript/content/set-interval.md | 0 .../javascript/content/set-timeout.md | 0 .../question-groups/javascript/content/set.md | 0 .../javascript/content/spread-operator.md | 0 .../javascript/content/switch-case.md | 0 .../javascript/content/ternary-operator.md | 0 .../content/variable-number-of-arguments.md | 0 .../question-groups/javascript/javascript.md | 0 .../nodejs/content/commonjs-vs-esm.md | 0 .../nodejs/content/error-handling.md | 0 .../nodejs/content/exit-codes.md | 0 .../nodejs/content/input-from-command-line.md | 0 .../nodejs/content/order-priority.md | 0 .../nodejs/content/process-argv.md | 0 .../nodejs/content/process-cwd-vs-dirname.md | 0 .../nodejs/content/web-server.md | 0 .../question-groups/nodejs/nodejs.md | 0 .../react/content/component-lifecycle.md | 0 .../content/controlled-vs-uncontrolled.md | 0 .../react/content/create-portal.md | 0 .../react/content/custom-hook.md | 0 .../react/content/error-boundaries.md | 0 .../react/content/flush-sync.md | 0 .../react/content/investigate-slow-app.md | 0 .../react/content/lazy-loading.md | 0 .../react/content/pure-components.md | 0 .../react/content/re-renders.md | 0 .../react/content/ref-forwarding.md | 0 .../react/content/render-list.md | 0 .../react/content/strict-mode.md | 0 .../question-groups/react/content/suspense.md | 0 .../react/content/synthetic-events.md | 0 .../react/content/use-transition.md | 0 .../react/content/virtual-dom.md | 0 .../question-groups/react/react.md | 0 src/lib/author.ts | 68 +- src/lib/guide.ts | 81 +- src/lib/question-group.ts | 32 +- src/pages/authors/[authorId].astro | 29 +- src/pages/authors/[authorId].json.ts | 2 +- tsconfig.json | 4 +- 285 files changed, 2299 insertions(+), 158 deletions(-) create mode 100644 .astro/astro/content.d.ts create mode 100644 src/content/author.ts create mode 100644 src/content/authors/ebrahim-bharmal.md create mode 100644 src/content/authors/ekene.md create mode 100644 src/content/authors/fernando.md create mode 100644 src/content/authors/jesse-li.md create mode 100644 src/content/authors/kamran.md create mode 100644 src/content/authors/peter-thaleikis.md create mode 100644 src/content/authors/william.md create mode 100644 src/content/config.ts create mode 100644 src/content/guide.ts rename src/{data => content}/guides/asymptotic-notation.md (100%) rename src/{data => content}/guides/avoid-render-blocking-javascript-with-async-defer.md (100%) rename src/{data => content}/guides/backend-developer-skills.md (100%) rename src/{data => content}/guides/backend-developer-tools.md (100%) rename src/{data => content}/guides/backend-languages.md (100%) rename src/{data => content}/guides/backend-project-ideas.md (100%) rename src/{data => content}/guides/backend-technologies.md (100%) rename src/{data => content}/guides/basic-authentication.md (100%) rename src/{data => content}/guides/basics-of-authentication.md (100%) rename src/{data => content}/guides/big-o-notation.md (100%) rename src/{data => content}/guides/character-encodings.md (100%) rename src/{data => content}/guides/ci-cd.md (100%) rename src/{data => content}/guides/consistency-patterns-in-distributed-systems.md (100%) rename src/{data => content}/guides/design-patterns-for-humans.md (100%) rename src/{data => content}/guides/devops-career-path.md (100%) rename src/{data => content}/guides/devops-engineer.md (100%) rename src/{data => content}/guides/devops-skills.md (100%) rename src/{data => content}/guides/devops-vs-sre.md (100%) rename src/{data => content}/guides/dhcp-in-one-picture.md (100%) rename src/{data => content}/guides/dns-in-one-picture.md (100%) rename src/{data => content}/guides/free-resources-to-learn-llms.md (100%) rename src/{data => content}/guides/frontend-developer-skills.md (100%) rename src/{data => content}/guides/frontend-languages.md (100%) rename src/{data => content}/guides/full-stack-developer-skills.md (100%) rename src/{data => content}/guides/full-stack-vs-software-engineer.md (100%) rename src/{data => content}/guides/history-of-javascript.md (100%) rename src/{data => content}/guides/how-to-become-devops-engineer.md (100%) rename src/{data => content}/guides/how-to-become-frontend-developer.md (100%) rename src/{data => content}/guides/how-to-setup-a-jump-server.md (100%) rename src/{data => content}/guides/http-basic-authentication.md (100%) rename src/{data => content}/guides/http-caching.md (100%) rename src/{data => content}/guides/introduction-to-llms.md (100%) rename src/{data => content}/guides/java-developer-skills.md (100%) rename src/{data => content}/guides/journey-to-http2.md (100%) rename src/{data => content}/guides/jwt-authentication.md (100%) rename src/{data => content}/guides/levels-of-seniority.md (100%) rename src/{data => content}/guides/oauth.md (100%) rename src/{data => content}/guides/proxy-servers.md (100%) rename src/{data => content}/guides/random-numbers.md (100%) rename src/{data => content}/guides/scaling-databases.md (100%) rename src/{data => content}/guides/session-authentication.md (100%) rename src/{data => content}/guides/session-based-authentication.md (100%) rename src/{data => content}/guides/setup-and-auto-renew-ssl-certificates.md (100%) rename src/{data => content}/guides/single-command-database-setup.md (100%) rename src/{data => content}/guides/ssl-tls-https-ssh.md (100%) rename src/{data => content}/guides/sso.md (100%) rename src/{data => content}/guides/token-authentication.md (100%) rename src/{data => content}/guides/torrent-client.md (100%) rename src/{data => content}/guides/unfamiliar-codebase.md (100%) rename src/{data => content}/guides/what-are-web-vitals.md (100%) rename src/{data => content}/guides/what-is-internet.md (100%) rename src/{data => content}/guides/what-is-sli-slo-sla.md (100%) rename src/{data => content}/guides/why-build-it-and-they-will-come-wont-work-anymore.md (100%) create mode 100644 src/content/question-group.ts rename src/{data => content}/question-groups/backend/backend.md (100%) rename src/{data => content}/question-groups/backend/content/anomaly-detection.md (100%) rename src/{data => content}/question-groups/backend/content/api-dependencies.md (100%) rename src/{data => content}/question-groups/backend/content/api-endpoint.md (100%) rename src/{data => content}/question-groups/backend/content/api-tests.md (100%) rename src/{data => content}/question-groups/backend/content/api-versioning.md (100%) rename src/{data => content}/question-groups/backend/content/batch-processing.md (100%) rename src/{data => content}/question-groups/backend/content/benefits-drawbacks-microservices.md (100%) rename src/{data => content}/question-groups/backend/content/bg-tasks.md (100%) rename src/{data => content}/question-groups/backend/content/blue-green-deployment.md (100%) rename src/{data => content}/question-groups/backend/content/cache-eviction.md (100%) rename src/{data => content}/question-groups/backend/content/cap-theorem.md (100%) rename src/{data => content}/question-groups/backend/content/ci-cd.md (100%) rename src/{data => content}/question-groups/backend/content/containerization.md (100%) rename src/{data => content}/question-groups/backend/content/correlation-ids.md (100%) rename src/{data => content}/question-groups/backend/content/data-encryption.md (100%) rename src/{data => content}/question-groups/backend/content/db-connections.md (100%) rename src/{data => content}/question-groups/backend/content/deadlock-db-transaction.md (100%) rename src/{data => content}/question-groups/backend/content/debugging-backend.md (100%) rename src/{data => content}/question-groups/backend/content/decompose-microservices.md (100%) rename src/{data => content}/question-groups/backend/content/distributed-caching.md (100%) rename src/{data => content}/question-groups/backend/content/eventual-consistency.md (100%) rename src/{data => content}/question-groups/backend/content/fault-tolerance.md (100%) rename src/{data => content}/question-groups/backend/content/file-uploads.md (100%) rename src/{data => content}/question-groups/backend/content/fulltext-search.md (100%) rename src/{data => content}/question-groups/backend/content/gdpr-compliance.md (100%) rename src/{data => content}/question-groups/backend/content/high-available-storage.md (100%) rename src/{data => content}/question-groups/backend/content/http-request-response-cycle.md (100%) rename src/{data => content}/question-groups/backend/content/idempotency.md (100%) rename src/{data => content}/question-groups/backend/content/instrument-monitor.md (100%) rename src/{data => content}/question-groups/backend/content/iot-streams.md (100%) rename src/{data => content}/question-groups/backend/content/load-balanced-session.md (100%) rename src/{data => content}/question-groups/backend/content/load-testing-api.md (100%) rename src/{data => content}/question-groups/backend/content/long-running.md (100%) rename src/{data => content}/question-groups/backend/content/maintainable-code.md (100%) rename src/{data => content}/question-groups/backend/content/message-queue.md (100%) rename src/{data => content}/question-groups/backend/content/optimistic-vs-pessimistic.md (100%) rename src/{data => content}/question-groups/backend/content/protect-sql-injection.md (100%) rename src/{data => content}/question-groups/backend/content/rate-limiting.md (100%) rename src/{data => content}/question-groups/backend/content/realtime-data-sync.md (100%) rename src/{data => content}/question-groups/backend/content/rest-core-principles.md (100%) rename src/{data => content}/question-groups/backend/content/reverse-proxy.md (100%) rename src/{data => content}/question-groups/backend/content/scale-backend.md (100%) rename src/{data => content}/question-groups/backend/content/schema-migrations.md (100%) rename src/{data => content}/question-groups/backend/content/secure-api.md (100%) rename src/{data => content}/question-groups/backend/content/secure-interservice.md (100%) rename src/{data => content}/question-groups/backend/content/session-management.md (100%) rename src/{data => content}/question-groups/backend/content/sql-vs-nosql.md (100%) rename src/{data => content}/question-groups/backend/content/sso.md (100%) rename src/{data => content}/question-groups/backend/content/statelessness-http.md (100%) rename src/{data => content}/question-groups/backend/content/webhooks.md (100%) rename src/{data => content}/question-groups/devops/content/ansible-benefits.md (100%) rename src/{data => content}/question-groups/devops/content/auto-scaling.md (100%) rename src/{data => content}/question-groups/devops/content/blue-green-deployment.md (100%) rename src/{data => content}/question-groups/devops/content/build-pipelines.md (100%) rename src/{data => content}/question-groups/devops/content/canary-release.md (100%) rename src/{data => content}/question-groups/devops/content/cicd-setup.md (100%) rename src/{data => content}/question-groups/devops/content/cluster-health.md (100%) rename src/{data => content}/question-groups/devops/content/common-iac-tools.md (100%) rename src/{data => content}/question-groups/devops/content/container-consistency.md (100%) rename src/{data => content}/question-groups/devops/content/container-vs-vm.md (100%) rename src/{data => content}/question-groups/devops/content/continuous-monitoring.md (100%) rename src/{data => content}/question-groups/devops/content/data-migration.md (100%) rename src/{data => content}/question-groups/devops/content/devsecops.md (100%) rename src/{data => content}/question-groups/devops/content/docker-compose.md (100%) rename src/{data => content}/question-groups/devops/content/explain-ci-vs-cd.md (100%) rename src/{data => content}/question-groups/devops/content/health-monitor.md (100%) rename src/{data => content}/question-groups/devops/content/high-availability.md (100%) rename src/{data => content}/question-groups/devops/content/iac-concept.md (100%) rename src/{data => content}/question-groups/devops/content/implement-logging.md (100%) rename src/{data => content}/question-groups/devops/content/kubernetes-components.md (100%) rename src/{data => content}/question-groups/devops/content/kubernetes-operators.md (100%) rename src/{data => content}/question-groups/devops/content/load-balancer.md (100%) rename src/{data => content}/question-groups/devops/content/microservice-challenges.md (100%) rename src/{data => content}/question-groups/devops/content/microservice-vs-monolithic.md (100%) rename src/{data => content}/question-groups/devops/content/migrate-environment.md (100%) rename src/{data => content}/question-groups/devops/content/multi-cloud-kubernetes.md (100%) rename src/{data => content}/question-groups/devops/content/multi-cloud.md (100%) rename src/{data => content}/question-groups/devops/content/network-configuration.md (100%) rename src/{data => content}/question-groups/devops/content/optimize-cicd.md (100%) rename src/{data => content}/question-groups/devops/content/orchestration.md (100%) rename src/{data => content}/question-groups/devops/content/popular-cicd-tools.md (100%) rename src/{data => content}/question-groups/devops/content/purpose-of-cm.md (100%) rename src/{data => content}/question-groups/devops/content/reverse-proxy.md (100%) rename src/{data => content}/question-groups/devops/content/role-of-devops.md (100%) rename src/{data => content}/question-groups/devops/content/scaling-differences.md (100%) rename src/{data => content}/question-groups/devops/content/secret-management.md (100%) rename src/{data => content}/question-groups/devops/content/serverless-computing.md (100%) rename src/{data => content}/question-groups/devops/content/stateful-applications.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-devops.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-docker.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-gitops.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-helm-chart.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-iac.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-kubernetes.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-prometheus.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-rollback.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-service-mesh.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-shift-left.md (100%) rename src/{data => content}/question-groups/devops/content/what-is-version-control.md (100%) rename src/{data => content}/question-groups/devops/content/zero-downtime.md (100%) rename src/{data => content}/question-groups/devops/devops.md (100%) rename src/{data => content}/question-groups/frontend/content/async-ops-js.md (100%) rename src/{data => content}/question-groups/frontend/content/block-inline-elems.md (100%) rename src/{data => content}/question-groups/frontend/content/box-model.md (100%) rename src/{data => content}/question-groups/frontend/content/browser-render.md (100%) rename src/{data => content}/question-groups/frontend/content/client-storage.md (100%) rename src/{data => content}/question-groups/frontend/content/closures.md (100%) rename src/{data => content}/question-groups/frontend/content/critical-css.md (100%) rename src/{data => content}/question-groups/frontend/content/csp.md (100%) rename src/{data => content}/question-groups/frontend/content/css-grid.md (100%) rename src/{data => content}/question-groups/frontend/content/css-specificity.md (100%) rename src/{data => content}/question-groups/frontend/content/css-variables.md (100%) rename src/{data => content}/question-groups/frontend/content/dom.md (100%) rename src/{data => content}/question-groups/frontend/content/em-vs-rem.md (100%) rename src/{data => content}/question-groups/frontend/content/event-delegation.md (100%) rename src/{data => content}/question-groups/frontend/content/event-listeners.md (100%) rename src/{data => content}/question-groups/frontend/content/event-loop-js.md (100%) rename src/{data => content}/question-groups/frontend/content/flexbox-layout.md (100%) rename src/{data => content}/question-groups/frontend/content/id-vs-class.md (100%) rename src/{data => content}/question-groups/frontend/content/improve-web-perf.md (100%) rename src/{data => content}/question-groups/frontend/content/js-promises.md (100%) rename src/{data => content}/question-groups/frontend/content/media-queries.md (100%) rename src/{data => content}/question-groups/frontend/content/null-vs-undefined.md (100%) rename src/{data => content}/question-groups/frontend/content/optimize-assets.md (100%) rename src/{data => content}/question-groups/frontend/content/same-origin-policy.md (100%) rename src/{data => content}/question-groups/frontend/content/seo-best-practices.md (100%) rename src/{data => content}/question-groups/frontend/content/service-workers.md (100%) rename src/{data => content}/question-groups/frontend/content/ssr-when.md (100%) rename src/{data => content}/question-groups/frontend/content/state-mgmt-spa.md (100%) rename src/{data => content}/question-groups/frontend/content/tree-shaking.md (100%) rename src/{data => content}/question-groups/frontend/content/vdom.md (100%) rename src/{data => content}/question-groups/frontend/frontend.md (100%) rename src/{data => content}/question-groups/javascript/content/alert-prompt-confirm.md (100%) rename src/{data => content}/question-groups/javascript/content/append-child-vs-insert-before.md (100%) rename src/{data => content}/question-groups/javascript/content/async-vs-sync.md (100%) rename src/{data => content}/question-groups/javascript/content/break-and-continue.md (100%) rename src/{data => content}/question-groups/javascript/content/callback-hell.md (100%) rename src/{data => content}/question-groups/javascript/content/closure.md (100%) rename src/{data => content}/question-groups/javascript/content/comma-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/create-element.md (100%) rename src/{data => content}/question-groups/javascript/content/custom-event.md (100%) rename src/{data => content}/question-groups/javascript/content/debug-javascript.md (100%) rename src/{data => content}/question-groups/javascript/content/defer-vs-async.md (100%) rename src/{data => content}/question-groups/javascript/content/do-while-loop.md (100%) rename src/{data => content}/question-groups/javascript/content/equality-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/error-in-async-await.md (100%) rename src/{data => content}/question-groups/javascript/content/error-in-promise.md (100%) rename src/{data => content}/question-groups/javascript/content/event-bubbling.md (100%) rename src/{data => content}/question-groups/javascript/content/event-loop.md (100%) rename src/{data => content}/question-groups/javascript/content/explicit-binding.md (100%) rename src/{data => content}/question-groups/javascript/content/filter-method.md (100%) rename src/{data => content}/question-groups/javascript/content/finally-block-in-promise.md (100%) rename src/{data => content}/question-groups/javascript/content/find-unique-array-values.md (100%) rename src/{data => content}/question-groups/javascript/content/for-each-method.md (100%) rename src/{data => content}/question-groups/javascript/content/heap-and-stack.md (100%) rename src/{data => content}/question-groups/javascript/content/hoisting.md (100%) rename src/{data => content}/question-groups/javascript/content/iife.md (100%) rename src/{data => content}/question-groups/javascript/content/immutable-object.md (100%) rename src/{data => content}/question-groups/javascript/content/increment-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/infinite-loop.md (100%) rename src/{data => content}/question-groups/javascript/content/inheritance.md (100%) rename src/{data => content}/question-groups/javascript/content/labelled-statements.md (100%) rename src/{data => content}/question-groups/javascript/content/logical-operators.md (100%) rename src/{data => content}/question-groups/javascript/content/map-method.md (100%) rename src/{data => content}/question-groups/javascript/content/map.md (100%) rename src/{data => content}/question-groups/javascript/content/measure-dimensions.md (100%) rename src/{data => content}/question-groups/javascript/content/merge-arrays.md (100%) rename src/{data => content}/question-groups/javascript/content/nullish-coalescing-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/parse-json.md (100%) rename src/{data => content}/question-groups/javascript/content/prevent-default.md (100%) rename src/{data => content}/question-groups/javascript/content/promise-all-vs-all-settled.md (100%) rename src/{data => content}/question-groups/javascript/content/prototype-chain.md (100%) rename src/{data => content}/question-groups/javascript/content/query-selector.md (100%) rename src/{data => content}/question-groups/javascript/content/reduce-method.md (100%) rename src/{data => content}/question-groups/javascript/content/remove-element.md (100%) rename src/{data => content}/question-groups/javascript/content/scroll-to-top.md (100%) rename src/{data => content}/question-groups/javascript/content/set-interval.md (100%) rename src/{data => content}/question-groups/javascript/content/set-timeout.md (100%) rename src/{data => content}/question-groups/javascript/content/set.md (100%) rename src/{data => content}/question-groups/javascript/content/spread-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/switch-case.md (100%) rename src/{data => content}/question-groups/javascript/content/ternary-operator.md (100%) rename src/{data => content}/question-groups/javascript/content/variable-number-of-arguments.md (100%) rename src/{data => content}/question-groups/javascript/javascript.md (100%) rename src/{data => content}/question-groups/nodejs/content/commonjs-vs-esm.md (100%) rename src/{data => content}/question-groups/nodejs/content/error-handling.md (100%) rename src/{data => content}/question-groups/nodejs/content/exit-codes.md (100%) rename src/{data => content}/question-groups/nodejs/content/input-from-command-line.md (100%) rename src/{data => content}/question-groups/nodejs/content/order-priority.md (100%) rename src/{data => content}/question-groups/nodejs/content/process-argv.md (100%) rename src/{data => content}/question-groups/nodejs/content/process-cwd-vs-dirname.md (100%) rename src/{data => content}/question-groups/nodejs/content/web-server.md (100%) rename src/{data => content}/question-groups/nodejs/nodejs.md (100%) rename src/{data => content}/question-groups/react/content/component-lifecycle.md (100%) rename src/{data => content}/question-groups/react/content/controlled-vs-uncontrolled.md (100%) rename src/{data => content}/question-groups/react/content/create-portal.md (100%) rename src/{data => content}/question-groups/react/content/custom-hook.md (100%) rename src/{data => content}/question-groups/react/content/error-boundaries.md (100%) rename src/{data => content}/question-groups/react/content/flush-sync.md (100%) rename src/{data => content}/question-groups/react/content/investigate-slow-app.md (100%) rename src/{data => content}/question-groups/react/content/lazy-loading.md (100%) rename src/{data => content}/question-groups/react/content/pure-components.md (100%) rename src/{data => content}/question-groups/react/content/re-renders.md (100%) rename src/{data => content}/question-groups/react/content/ref-forwarding.md (100%) rename src/{data => content}/question-groups/react/content/render-list.md (100%) rename src/{data => content}/question-groups/react/content/strict-mode.md (100%) rename src/{data => content}/question-groups/react/content/suspense.md (100%) rename src/{data => content}/question-groups/react/content/synthetic-events.md (100%) rename src/{data => content}/question-groups/react/content/use-transition.md (100%) rename src/{data => content}/question-groups/react/content/virtual-dom.md (100%) rename src/{data => content}/question-groups/react/react.md (100%) diff --git a/.astro/astro/content.d.ts b/.astro/astro/content.d.ts new file mode 100644 index 000000000..7842074fc --- /dev/null +++ b/.astro/astro/content.d.ts @@ -0,0 +1,2071 @@ +declare module 'astro:content' { + interface RenderResult { + Content: import('astro/runtime/server/index.js').AstroComponentFactory; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + } + interface Render { + '.md': Promise; + } + + export interface RenderedContent { + html: string; + metadata?: { + imagePaths: Array; + [key: string]: unknown; + }; + } +} + +declare module 'astro:content' { + type Flatten = T extends { [K: string]: infer U } ? U : never; + + export type CollectionKey = keyof AnyEntryMap; + export type CollectionEntry = Flatten; + + export type ContentCollectionKey = keyof ContentEntryMap; + export type DataCollectionKey = keyof DataEntryMap; + + type AllValuesOf = T extends any ? T[keyof T] : never; + type ValidContentEntrySlug = AllValuesOf< + ContentEntryMap[C] + >['slug']; + + /** @deprecated Use `getEntry` instead. */ + export function getEntryBySlug< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + // Note that this has to accept a regular string too, for SSR + entrySlug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + + /** @deprecated Use `getEntry` instead. */ + export function getDataEntryById( + collection: C, + entryId: E, + ): Promise>; + + export function getCollection>( + collection: C, + filter?: (entry: CollectionEntry) => entry is E, + ): Promise; + export function getCollection( + collection: C, + filter?: (entry: CollectionEntry) => unknown, + ): Promise[]>; + + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >(entry: { + collection: C; + slug: E; + }): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >(entry: { + collection: C; + id: E; + }): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + slug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + collection: C, + id: E, + ): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + + /** Resolve an array of entry references from the same collection */ + export function getEntries( + entries: { + collection: C; + slug: ValidContentEntrySlug; + }[], + ): Promise[]>; + export function getEntries( + entries: { + collection: C; + id: keyof DataEntryMap[C]; + }[], + ): Promise[]>; + + export function render( + entry: AnyEntryMap[C][string], + ): Promise; + + export function reference( + collection: C, + ): import('astro/zod').ZodEffects< + import('astro/zod').ZodString, + C extends keyof ContentEntryMap + ? { + collection: C; + slug: ValidContentEntrySlug; + } + : { + collection: C; + id: keyof DataEntryMap[C]; + } + >; + // Allow generic `string` to avoid excessive type errors in the config + // if `dev` is not running to update as you edit. + // Invalid collection names will be caught at build time. + export function reference( + collection: C, + ): import('astro/zod').ZodEffects; + + type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; + type InferEntrySchema = import('astro/zod').infer< + ReturnTypeOrOriginal['schema']> + >; + + type ContentEntryMap = { + "authors": { +"ebrahim-bharmal.md": { + id: "ebrahim-bharmal.md"; + slug: "ebrahim-bharmal"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"ekene.md": { + id: "ekene.md"; + slug: "ekene"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"fernando.md": { + id: "fernando.md"; + slug: "fernando"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"jesse-li.md": { + id: "jesse-li.md"; + slug: "jesse-li"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"kamran.md": { + id: "kamran.md"; + slug: "kamran"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"peter-thaleikis.md": { + id: "peter-thaleikis.md"; + slug: "peter-thaleikis"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +"william.md": { + id: "william.md"; + slug: "william"; + body: string; + collection: "authors"; + data: InferEntrySchema<"authors"> +} & { render(): Render[".md"] }; +}; +"guides": { +"asymptotic-notation.md": { + id: "asymptotic-notation.md"; + slug: "asymptotic-notation"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"avoid-render-blocking-javascript-with-async-defer.md": { + id: "avoid-render-blocking-javascript-with-async-defer.md"; + slug: "avoid-render-blocking-javascript-with-async-defer"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"backend-developer-skills.md": { + id: "backend-developer-skills.md"; + slug: "backend-developer-skills"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"backend-developer-tools.md": { + id: "backend-developer-tools.md"; + slug: "backend-developer-tools"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"backend-languages.md": { + id: "backend-languages.md"; + slug: "backend-languages"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"backend-project-ideas.md": { + id: "backend-project-ideas.md"; + slug: "backend-project-ideas"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"backend-technologies.md": { + id: "backend-technologies.md"; + slug: "backend-technologies"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"basic-authentication.md": { + id: "basic-authentication.md"; + slug: "basic-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"basics-of-authentication.md": { + id: "basics-of-authentication.md"; + slug: "basics-of-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"big-o-notation.md": { + id: "big-o-notation.md"; + slug: "big-o-notation"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"character-encodings.md": { + id: "character-encodings.md"; + slug: "character-encodings"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"ci-cd.md": { + id: "ci-cd.md"; + slug: "ci-cd"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"consistency-patterns-in-distributed-systems.md": { + id: "consistency-patterns-in-distributed-systems.md"; + slug: "consistency-patterns-in-distributed-systems"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"design-patterns-for-humans.md": { + id: "design-patterns-for-humans.md"; + slug: "design-patterns-for-humans"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"devops-career-path.md": { + id: "devops-career-path.md"; + slug: "devops-career-path"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"devops-engineer.md": { + id: "devops-engineer.md"; + slug: "devops-engineer"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"devops-skills.md": { + id: "devops-skills.md"; + slug: "devops-skills"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"devops-vs-sre.md": { + id: "devops-vs-sre.md"; + slug: "devops-vs-sre"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"dhcp-in-one-picture.md": { + id: "dhcp-in-one-picture.md"; + slug: "dhcp-in-one-picture"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"dns-in-one-picture.md": { + id: "dns-in-one-picture.md"; + slug: "dns-in-one-picture"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"free-resources-to-learn-llms.md": { + id: "free-resources-to-learn-llms.md"; + slug: "free-resources-to-learn-llms"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"frontend-developer-skills.md": { + id: "frontend-developer-skills.md"; + slug: "frontend-developer-skills"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"frontend-languages.md": { + id: "frontend-languages.md"; + slug: "frontend-languages"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"full-stack-developer-skills.md": { + id: "full-stack-developer-skills.md"; + slug: "full-stack-developer-skills"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"full-stack-vs-software-engineer.md": { + id: "full-stack-vs-software-engineer.md"; + slug: "full-stack-vs-software-engineer"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"history-of-javascript.md": { + id: "history-of-javascript.md"; + slug: "history-of-javascript"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"how-to-become-devops-engineer.md": { + id: "how-to-become-devops-engineer.md"; + slug: "how-to-become-devops-engineer"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"how-to-become-frontend-developer.md": { + id: "how-to-become-frontend-developer.md"; + slug: "how-to-become-frontend-developer"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"how-to-setup-a-jump-server.md": { + id: "how-to-setup-a-jump-server.md"; + slug: "how-to-setup-a-jump-server"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"http-basic-authentication.md": { + id: "http-basic-authentication.md"; + slug: "http-basic-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"http-caching.md": { + id: "http-caching.md"; + slug: "http-caching"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"introduction-to-llms.md": { + id: "introduction-to-llms.md"; + slug: "introduction-to-llms"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"java-developer-skills.md": { + id: "java-developer-skills.md"; + slug: "java-developer-skills"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"journey-to-http2.md": { + id: "journey-to-http2.md"; + slug: "journey-to-http2"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"jwt-authentication.md": { + id: "jwt-authentication.md"; + slug: "jwt-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"levels-of-seniority.md": { + id: "levels-of-seniority.md"; + slug: "levels-of-seniority"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"oauth.md": { + id: "oauth.md"; + slug: "oauth"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"proxy-servers.md": { + id: "proxy-servers.md"; + slug: "proxy-servers"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"random-numbers.md": { + id: "random-numbers.md"; + slug: "random-numbers"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"scaling-databases.md": { + id: "scaling-databases.md"; + slug: "scaling-databases"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"session-authentication.md": { + id: "session-authentication.md"; + slug: "session-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"session-based-authentication.md": { + id: "session-based-authentication.md"; + slug: "session-based-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"setup-and-auto-renew-ssl-certificates.md": { + id: "setup-and-auto-renew-ssl-certificates.md"; + slug: "setup-and-auto-renew-ssl-certificates"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"single-command-database-setup.md": { + id: "single-command-database-setup.md"; + slug: "single-command-database-setup"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"ssl-tls-https-ssh.md": { + id: "ssl-tls-https-ssh.md"; + slug: "ssl-tls-https-ssh"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"sso.md": { + id: "sso.md"; + slug: "sso"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"token-authentication.md": { + id: "token-authentication.md"; + slug: "token-authentication"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"torrent-client.md": { + id: "torrent-client.md"; + slug: "torrent-client"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"unfamiliar-codebase.md": { + id: "unfamiliar-codebase.md"; + slug: "unfamiliar-codebase"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"what-are-web-vitals.md": { + id: "what-are-web-vitals.md"; + slug: "what-are-web-vitals"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"what-is-internet.md": { + id: "what-is-internet.md"; + slug: "what-is-internet"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"what-is-sli-slo-sla.md": { + id: "what-is-sli-slo-sla.md"; + slug: "what-is-sli-slo-sla"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +"why-build-it-and-they-will-come-wont-work-anymore.md": { + id: "why-build-it-and-they-will-come-wont-work-anymore.md"; + slug: "why-build-it-and-they-will-come-wont-work-anymore"; + body: string; + collection: "guides"; + data: InferEntrySchema<"guides"> +} & { render(): Render[".md"] }; +}; +"question-groups": { +"backend/backend.md": { + id: "backend/backend.md"; + slug: "backend/backend"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/anomaly-detection.md": { + id: "backend/content/anomaly-detection.md"; + slug: "backend/content/anomaly-detection"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/api-dependencies.md": { + id: "backend/content/api-dependencies.md"; + slug: "backend/content/api-dependencies"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/api-endpoint.md": { + id: "backend/content/api-endpoint.md"; + slug: "backend/content/api-endpoint"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/api-tests.md": { + id: "backend/content/api-tests.md"; + slug: "backend/content/api-tests"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/api-versioning.md": { + id: "backend/content/api-versioning.md"; + slug: "backend/content/api-versioning"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/batch-processing.md": { + id: "backend/content/batch-processing.md"; + slug: "backend/content/batch-processing"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/benefits-drawbacks-microservices.md": { + id: "backend/content/benefits-drawbacks-microservices.md"; + slug: "backend/content/benefits-drawbacks-microservices"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/bg-tasks.md": { + id: "backend/content/bg-tasks.md"; + slug: "backend/content/bg-tasks"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/blue-green-deployment.md": { + id: "backend/content/blue-green-deployment.md"; + slug: "backend/content/blue-green-deployment"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/cache-eviction.md": { + id: "backend/content/cache-eviction.md"; + slug: "backend/content/cache-eviction"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/cap-theorem.md": { + id: "backend/content/cap-theorem.md"; + slug: "backend/content/cap-theorem"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/ci-cd.md": { + id: "backend/content/ci-cd.md"; + slug: "backend/content/ci-cd"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/containerization.md": { + id: "backend/content/containerization.md"; + slug: "backend/content/containerization"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/correlation-ids.md": { + id: "backend/content/correlation-ids.md"; + slug: "backend/content/correlation-ids"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/data-encryption.md": { + id: "backend/content/data-encryption.md"; + slug: "backend/content/data-encryption"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/db-connections.md": { + id: "backend/content/db-connections.md"; + slug: "backend/content/db-connections"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/deadlock-db-transaction.md": { + id: "backend/content/deadlock-db-transaction.md"; + slug: "backend/content/deadlock-db-transaction"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/debugging-backend.md": { + id: "backend/content/debugging-backend.md"; + slug: "backend/content/debugging-backend"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/decompose-microservices.md": { + id: "backend/content/decompose-microservices.md"; + slug: "backend/content/decompose-microservices"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/distributed-caching.md": { + id: "backend/content/distributed-caching.md"; + slug: "backend/content/distributed-caching"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/eventual-consistency.md": { + id: "backend/content/eventual-consistency.md"; + slug: "backend/content/eventual-consistency"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/fault-tolerance.md": { + id: "backend/content/fault-tolerance.md"; + slug: "backend/content/fault-tolerance"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/file-uploads.md": { + id: "backend/content/file-uploads.md"; + slug: "backend/content/file-uploads"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/fulltext-search.md": { + id: "backend/content/fulltext-search.md"; + slug: "backend/content/fulltext-search"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/gdpr-compliance.md": { + id: "backend/content/gdpr-compliance.md"; + slug: "backend/content/gdpr-compliance"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/high-available-storage.md": { + id: "backend/content/high-available-storage.md"; + slug: "backend/content/high-available-storage"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/http-request-response-cycle.md": { + id: "backend/content/http-request-response-cycle.md"; + slug: "backend/content/http-request-response-cycle"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/idempotency.md": { + id: "backend/content/idempotency.md"; + slug: "backend/content/idempotency"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/instrument-monitor.md": { + id: "backend/content/instrument-monitor.md"; + slug: "backend/content/instrument-monitor"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/iot-streams.md": { + id: "backend/content/iot-streams.md"; + slug: "backend/content/iot-streams"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/load-balanced-session.md": { + id: "backend/content/load-balanced-session.md"; + slug: "backend/content/load-balanced-session"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/load-testing-api.md": { + id: "backend/content/load-testing-api.md"; + slug: "backend/content/load-testing-api"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/long-running.md": { + id: "backend/content/long-running.md"; + slug: "backend/content/long-running"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/maintainable-code.md": { + id: "backend/content/maintainable-code.md"; + slug: "backend/content/maintainable-code"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/message-queue.md": { + id: "backend/content/message-queue.md"; + slug: "backend/content/message-queue"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/optimistic-vs-pessimistic.md": { + id: "backend/content/optimistic-vs-pessimistic.md"; + slug: "backend/content/optimistic-vs-pessimistic"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/protect-sql-injection.md": { + id: "backend/content/protect-sql-injection.md"; + slug: "backend/content/protect-sql-injection"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/rate-limiting.md": { + id: "backend/content/rate-limiting.md"; + slug: "backend/content/rate-limiting"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/realtime-data-sync.md": { + id: "backend/content/realtime-data-sync.md"; + slug: "backend/content/realtime-data-sync"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/rest-core-principles.md": { + id: "backend/content/rest-core-principles.md"; + slug: "backend/content/rest-core-principles"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/reverse-proxy.md": { + id: "backend/content/reverse-proxy.md"; + slug: "backend/content/reverse-proxy"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/scale-backend.md": { + id: "backend/content/scale-backend.md"; + slug: "backend/content/scale-backend"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/schema-migrations.md": { + id: "backend/content/schema-migrations.md"; + slug: "backend/content/schema-migrations"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/secure-api.md": { + id: "backend/content/secure-api.md"; + slug: "backend/content/secure-api"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/secure-interservice.md": { + id: "backend/content/secure-interservice.md"; + slug: "backend/content/secure-interservice"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/session-management.md": { + id: "backend/content/session-management.md"; + slug: "backend/content/session-management"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/sql-vs-nosql.md": { + id: "backend/content/sql-vs-nosql.md"; + slug: "backend/content/sql-vs-nosql"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/sso.md": { + id: "backend/content/sso.md"; + slug: "backend/content/sso"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/statelessness-http.md": { + id: "backend/content/statelessness-http.md"; + slug: "backend/content/statelessness-http"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"backend/content/webhooks.md": { + id: "backend/content/webhooks.md"; + slug: "backend/content/webhooks"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/ansible-benefits.md": { + id: "devops/content/ansible-benefits.md"; + slug: "devops/content/ansible-benefits"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/auto-scaling.md": { + id: "devops/content/auto-scaling.md"; + slug: "devops/content/auto-scaling"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/blue-green-deployment.md": { + id: "devops/content/blue-green-deployment.md"; + slug: "devops/content/blue-green-deployment"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/build-pipelines.md": { + id: "devops/content/build-pipelines.md"; + slug: "devops/content/build-pipelines"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/canary-release.md": { + id: "devops/content/canary-release.md"; + slug: "devops/content/canary-release"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/cicd-setup.md": { + id: "devops/content/cicd-setup.md"; + slug: "devops/content/cicd-setup"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/cluster-health.md": { + id: "devops/content/cluster-health.md"; + slug: "devops/content/cluster-health"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/common-iac-tools.md": { + id: "devops/content/common-iac-tools.md"; + slug: "devops/content/common-iac-tools"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/container-consistency.md": { + id: "devops/content/container-consistency.md"; + slug: "devops/content/container-consistency"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/container-vs-vm.md": { + id: "devops/content/container-vs-vm.md"; + slug: "devops/content/container-vs-vm"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/continuous-monitoring.md": { + id: "devops/content/continuous-monitoring.md"; + slug: "devops/content/continuous-monitoring"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/data-migration.md": { + id: "devops/content/data-migration.md"; + slug: "devops/content/data-migration"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/devsecops.md": { + id: "devops/content/devsecops.md"; + slug: "devops/content/devsecops"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/docker-compose.md": { + id: "devops/content/docker-compose.md"; + slug: "devops/content/docker-compose"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/explain-ci-vs-cd.md": { + id: "devops/content/explain-ci-vs-cd.md"; + slug: "devops/content/explain-ci-vs-cd"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/health-monitor.md": { + id: "devops/content/health-monitor.md"; + slug: "devops/content/health-monitor"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/high-availability.md": { + id: "devops/content/high-availability.md"; + slug: "devops/content/high-availability"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/iac-concept.md": { + id: "devops/content/iac-concept.md"; + slug: "devops/content/iac-concept"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/implement-logging.md": { + id: "devops/content/implement-logging.md"; + slug: "devops/content/implement-logging"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/kubernetes-components.md": { + id: "devops/content/kubernetes-components.md"; + slug: "devops/content/kubernetes-components"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/kubernetes-operators.md": { + id: "devops/content/kubernetes-operators.md"; + slug: "devops/content/kubernetes-operators"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/load-balancer.md": { + id: "devops/content/load-balancer.md"; + slug: "devops/content/load-balancer"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/microservice-challenges.md": { + id: "devops/content/microservice-challenges.md"; + slug: "devops/content/microservice-challenges"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/microservice-vs-monolithic.md": { + id: "devops/content/microservice-vs-monolithic.md"; + slug: "devops/content/microservice-vs-monolithic"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/migrate-environment.md": { + id: "devops/content/migrate-environment.md"; + slug: "devops/content/migrate-environment"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/multi-cloud-kubernetes.md": { + id: "devops/content/multi-cloud-kubernetes.md"; + slug: "devops/content/multi-cloud-kubernetes"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/multi-cloud.md": { + id: "devops/content/multi-cloud.md"; + slug: "devops/content/multi-cloud"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/network-configuration.md": { + id: "devops/content/network-configuration.md"; + slug: "devops/content/network-configuration"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/optimize-cicd.md": { + id: "devops/content/optimize-cicd.md"; + slug: "devops/content/optimize-cicd"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/orchestration.md": { + id: "devops/content/orchestration.md"; + slug: "devops/content/orchestration"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/popular-cicd-tools.md": { + id: "devops/content/popular-cicd-tools.md"; + slug: "devops/content/popular-cicd-tools"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/purpose-of-cm.md": { + id: "devops/content/purpose-of-cm.md"; + slug: "devops/content/purpose-of-cm"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/reverse-proxy.md": { + id: "devops/content/reverse-proxy.md"; + slug: "devops/content/reverse-proxy"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/role-of-devops.md": { + id: "devops/content/role-of-devops.md"; + slug: "devops/content/role-of-devops"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/scaling-differences.md": { + id: "devops/content/scaling-differences.md"; + slug: "devops/content/scaling-differences"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/secret-management.md": { + id: "devops/content/secret-management.md"; + slug: "devops/content/secret-management"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/serverless-computing.md": { + id: "devops/content/serverless-computing.md"; + slug: "devops/content/serverless-computing"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/stateful-applications.md": { + id: "devops/content/stateful-applications.md"; + slug: "devops/content/stateful-applications"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-devops.md": { + id: "devops/content/what-is-devops.md"; + slug: "devops/content/what-is-devops"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-docker.md": { + id: "devops/content/what-is-docker.md"; + slug: "devops/content/what-is-docker"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-gitops.md": { + id: "devops/content/what-is-gitops.md"; + slug: "devops/content/what-is-gitops"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-helm-chart.md": { + id: "devops/content/what-is-helm-chart.md"; + slug: "devops/content/what-is-helm-chart"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-iac.md": { + id: "devops/content/what-is-iac.md"; + slug: "devops/content/what-is-iac"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-kubernetes.md": { + id: "devops/content/what-is-kubernetes.md"; + slug: "devops/content/what-is-kubernetes"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-prometheus.md": { + id: "devops/content/what-is-prometheus.md"; + slug: "devops/content/what-is-prometheus"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-rollback.md": { + id: "devops/content/what-is-rollback.md"; + slug: "devops/content/what-is-rollback"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-service-mesh.md": { + id: "devops/content/what-is-service-mesh.md"; + slug: "devops/content/what-is-service-mesh"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-shift-left.md": { + id: "devops/content/what-is-shift-left.md"; + slug: "devops/content/what-is-shift-left"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/what-is-version-control.md": { + id: "devops/content/what-is-version-control.md"; + slug: "devops/content/what-is-version-control"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/content/zero-downtime.md": { + id: "devops/content/zero-downtime.md"; + slug: "devops/content/zero-downtime"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"devops/devops.md": { + id: "devops/devops.md"; + slug: "devops/devops"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/async-ops-js.md": { + id: "frontend/content/async-ops-js.md"; + slug: "frontend/content/async-ops-js"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/block-inline-elems.md": { + id: "frontend/content/block-inline-elems.md"; + slug: "frontend/content/block-inline-elems"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/box-model.md": { + id: "frontend/content/box-model.md"; + slug: "frontend/content/box-model"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/browser-render.md": { + id: "frontend/content/browser-render.md"; + slug: "frontend/content/browser-render"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/client-storage.md": { + id: "frontend/content/client-storage.md"; + slug: "frontend/content/client-storage"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/closures.md": { + id: "frontend/content/closures.md"; + slug: "frontend/content/closures"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/critical-css.md": { + id: "frontend/content/critical-css.md"; + slug: "frontend/content/critical-css"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/csp.md": { + id: "frontend/content/csp.md"; + slug: "frontend/content/csp"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/css-grid.md": { + id: "frontend/content/css-grid.md"; + slug: "frontend/content/css-grid"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/css-specificity.md": { + id: "frontend/content/css-specificity.md"; + slug: "frontend/content/css-specificity"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/css-variables.md": { + id: "frontend/content/css-variables.md"; + slug: "frontend/content/css-variables"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/dom.md": { + id: "frontend/content/dom.md"; + slug: "frontend/content/dom"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/em-vs-rem.md": { + id: "frontend/content/em-vs-rem.md"; + slug: "frontend/content/em-vs-rem"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/event-delegation.md": { + id: "frontend/content/event-delegation.md"; + slug: "frontend/content/event-delegation"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/event-listeners.md": { + id: "frontend/content/event-listeners.md"; + slug: "frontend/content/event-listeners"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/event-loop-js.md": { + id: "frontend/content/event-loop-js.md"; + slug: "frontend/content/event-loop-js"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/flexbox-layout.md": { + id: "frontend/content/flexbox-layout.md"; + slug: "frontend/content/flexbox-layout"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/id-vs-class.md": { + id: "frontend/content/id-vs-class.md"; + slug: "frontend/content/id-vs-class"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/improve-web-perf.md": { + id: "frontend/content/improve-web-perf.md"; + slug: "frontend/content/improve-web-perf"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/js-promises.md": { + id: "frontend/content/js-promises.md"; + slug: "frontend/content/js-promises"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/media-queries.md": { + id: "frontend/content/media-queries.md"; + slug: "frontend/content/media-queries"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/null-vs-undefined.md": { + id: "frontend/content/null-vs-undefined.md"; + slug: "frontend/content/null-vs-undefined"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/optimize-assets.md": { + id: "frontend/content/optimize-assets.md"; + slug: "frontend/content/optimize-assets"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/same-origin-policy.md": { + id: "frontend/content/same-origin-policy.md"; + slug: "frontend/content/same-origin-policy"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/seo-best-practices.md": { + id: "frontend/content/seo-best-practices.md"; + slug: "frontend/content/seo-best-practices"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/service-workers.md": { + id: "frontend/content/service-workers.md"; + slug: "frontend/content/service-workers"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/ssr-when.md": { + id: "frontend/content/ssr-when.md"; + slug: "frontend/content/ssr-when"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/state-mgmt-spa.md": { + id: "frontend/content/state-mgmt-spa.md"; + slug: "frontend/content/state-mgmt-spa"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/tree-shaking.md": { + id: "frontend/content/tree-shaking.md"; + slug: "frontend/content/tree-shaking"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/content/vdom.md": { + id: "frontend/content/vdom.md"; + slug: "frontend/content/vdom"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"frontend/frontend.md": { + id: "frontend/frontend.md"; + slug: "frontend/frontend"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/alert-prompt-confirm.md": { + id: "javascript/content/alert-prompt-confirm.md"; + slug: "javascript/content/alert-prompt-confirm"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/append-child-vs-insert-before.md": { + id: "javascript/content/append-child-vs-insert-before.md"; + slug: "javascript/content/append-child-vs-insert-before"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/async-vs-sync.md": { + id: "javascript/content/async-vs-sync.md"; + slug: "javascript/content/async-vs-sync"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/break-and-continue.md": { + id: "javascript/content/break-and-continue.md"; + slug: "javascript/content/break-and-continue"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/callback-hell.md": { + id: "javascript/content/callback-hell.md"; + slug: "javascript/content/callback-hell"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/closure.md": { + id: "javascript/content/closure.md"; + slug: "javascript/content/closure"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/comma-operator.md": { + id: "javascript/content/comma-operator.md"; + slug: "javascript/content/comma-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/create-element.md": { + id: "javascript/content/create-element.md"; + slug: "javascript/content/create-element"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/custom-event.md": { + id: "javascript/content/custom-event.md"; + slug: "javascript/content/custom-event"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/debug-javascript.md": { + id: "javascript/content/debug-javascript.md"; + slug: "javascript/content/debug-javascript"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/defer-vs-async.md": { + id: "javascript/content/defer-vs-async.md"; + slug: "javascript/content/defer-vs-async"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/do-while-loop.md": { + id: "javascript/content/do-while-loop.md"; + slug: "javascript/content/do-while-loop"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/equality-operator.md": { + id: "javascript/content/equality-operator.md"; + slug: "javascript/content/equality-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/error-in-async-await.md": { + id: "javascript/content/error-in-async-await.md"; + slug: "javascript/content/error-in-async-await"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/error-in-promise.md": { + id: "javascript/content/error-in-promise.md"; + slug: "javascript/content/error-in-promise"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/event-bubbling.md": { + id: "javascript/content/event-bubbling.md"; + slug: "javascript/content/event-bubbling"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/event-loop.md": { + id: "javascript/content/event-loop.md"; + slug: "javascript/content/event-loop"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/explicit-binding.md": { + id: "javascript/content/explicit-binding.md"; + slug: "javascript/content/explicit-binding"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/filter-method.md": { + id: "javascript/content/filter-method.md"; + slug: "javascript/content/filter-method"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/finally-block-in-promise.md": { + id: "javascript/content/finally-block-in-promise.md"; + slug: "javascript/content/finally-block-in-promise"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/find-unique-array-values.md": { + id: "javascript/content/find-unique-array-values.md"; + slug: "javascript/content/find-unique-array-values"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/for-each-method.md": { + id: "javascript/content/for-each-method.md"; + slug: "javascript/content/for-each-method"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/heap-and-stack.md": { + id: "javascript/content/heap-and-stack.md"; + slug: "javascript/content/heap-and-stack"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/hoisting.md": { + id: "javascript/content/hoisting.md"; + slug: "javascript/content/hoisting"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/iife.md": { + id: "javascript/content/iife.md"; + slug: "javascript/content/iife"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/immutable-object.md": { + id: "javascript/content/immutable-object.md"; + slug: "javascript/content/immutable-object"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/increment-operator.md": { + id: "javascript/content/increment-operator.md"; + slug: "javascript/content/increment-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/infinite-loop.md": { + id: "javascript/content/infinite-loop.md"; + slug: "javascript/content/infinite-loop"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/inheritance.md": { + id: "javascript/content/inheritance.md"; + slug: "javascript/content/inheritance"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/labelled-statements.md": { + id: "javascript/content/labelled-statements.md"; + slug: "javascript/content/labelled-statements"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/logical-operators.md": { + id: "javascript/content/logical-operators.md"; + slug: "javascript/content/logical-operators"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/map-method.md": { + id: "javascript/content/map-method.md"; + slug: "javascript/content/map-method"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/map.md": { + id: "javascript/content/map.md"; + slug: "javascript/content/map"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/measure-dimensions.md": { + id: "javascript/content/measure-dimensions.md"; + slug: "javascript/content/measure-dimensions"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/merge-arrays.md": { + id: "javascript/content/merge-arrays.md"; + slug: "javascript/content/merge-arrays"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/nullish-coalescing-operator.md": { + id: "javascript/content/nullish-coalescing-operator.md"; + slug: "javascript/content/nullish-coalescing-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/parse-json.md": { + id: "javascript/content/parse-json.md"; + slug: "javascript/content/parse-json"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/prevent-default.md": { + id: "javascript/content/prevent-default.md"; + slug: "javascript/content/prevent-default"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/promise-all-vs-all-settled.md": { + id: "javascript/content/promise-all-vs-all-settled.md"; + slug: "javascript/content/promise-all-vs-all-settled"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/prototype-chain.md": { + id: "javascript/content/prototype-chain.md"; + slug: "javascript/content/prototype-chain"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/query-selector.md": { + id: "javascript/content/query-selector.md"; + slug: "javascript/content/query-selector"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/reduce-method.md": { + id: "javascript/content/reduce-method.md"; + slug: "javascript/content/reduce-method"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/remove-element.md": { + id: "javascript/content/remove-element.md"; + slug: "javascript/content/remove-element"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/scroll-to-top.md": { + id: "javascript/content/scroll-to-top.md"; + slug: "javascript/content/scroll-to-top"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/set-interval.md": { + id: "javascript/content/set-interval.md"; + slug: "javascript/content/set-interval"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/set-timeout.md": { + id: "javascript/content/set-timeout.md"; + slug: "javascript/content/set-timeout"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/set.md": { + id: "javascript/content/set.md"; + slug: "javascript/content/set"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/spread-operator.md": { + id: "javascript/content/spread-operator.md"; + slug: "javascript/content/spread-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/switch-case.md": { + id: "javascript/content/switch-case.md"; + slug: "javascript/content/switch-case"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/ternary-operator.md": { + id: "javascript/content/ternary-operator.md"; + slug: "javascript/content/ternary-operator"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/content/variable-number-of-arguments.md": { + id: "javascript/content/variable-number-of-arguments.md"; + slug: "javascript/content/variable-number-of-arguments"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"javascript/javascript.md": { + id: "javascript/javascript.md"; + slug: "javascript/javascript"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/commonjs-vs-esm.md": { + id: "nodejs/content/commonjs-vs-esm.md"; + slug: "nodejs/content/commonjs-vs-esm"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/error-handling.md": { + id: "nodejs/content/error-handling.md"; + slug: "nodejs/content/error-handling"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/exit-codes.md": { + id: "nodejs/content/exit-codes.md"; + slug: "nodejs/content/exit-codes"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/input-from-command-line.md": { + id: "nodejs/content/input-from-command-line.md"; + slug: "nodejs/content/input-from-command-line"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/order-priority.md": { + id: "nodejs/content/order-priority.md"; + slug: "nodejs/content/order-priority"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/process-argv.md": { + id: "nodejs/content/process-argv.md"; + slug: "nodejs/content/process-argv"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/process-cwd-vs-dirname.md": { + id: "nodejs/content/process-cwd-vs-dirname.md"; + slug: "nodejs/content/process-cwd-vs-dirname"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/content/web-server.md": { + id: "nodejs/content/web-server.md"; + slug: "nodejs/content/web-server"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"nodejs/nodejs.md": { + id: "nodejs/nodejs.md"; + slug: "nodejs/nodejs"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/component-lifecycle.md": { + id: "react/content/component-lifecycle.md"; + slug: "react/content/component-lifecycle"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/controlled-vs-uncontrolled.md": { + id: "react/content/controlled-vs-uncontrolled.md"; + slug: "react/content/controlled-vs-uncontrolled"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/create-portal.md": { + id: "react/content/create-portal.md"; + slug: "react/content/create-portal"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/custom-hook.md": { + id: "react/content/custom-hook.md"; + slug: "react/content/custom-hook"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/error-boundaries.md": { + id: "react/content/error-boundaries.md"; + slug: "react/content/error-boundaries"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/flush-sync.md": { + id: "react/content/flush-sync.md"; + slug: "react/content/flush-sync"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/investigate-slow-app.md": { + id: "react/content/investigate-slow-app.md"; + slug: "react/content/investigate-slow-app"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/lazy-loading.md": { + id: "react/content/lazy-loading.md"; + slug: "react/content/lazy-loading"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/pure-components.md": { + id: "react/content/pure-components.md"; + slug: "react/content/pure-components"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/re-renders.md": { + id: "react/content/re-renders.md"; + slug: "react/content/re-renders"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/ref-forwarding.md": { + id: "react/content/ref-forwarding.md"; + slug: "react/content/ref-forwarding"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/render-list.md": { + id: "react/content/render-list.md"; + slug: "react/content/render-list"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/strict-mode.md": { + id: "react/content/strict-mode.md"; + slug: "react/content/strict-mode"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/suspense.md": { + id: "react/content/suspense.md"; + slug: "react/content/suspense"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/synthetic-events.md": { + id: "react/content/synthetic-events.md"; + slug: "react/content/synthetic-events"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/use-transition.md": { + id: "react/content/use-transition.md"; + slug: "react/content/use-transition"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/content/virtual-dom.md": { + id: "react/content/virtual-dom.md"; + slug: "react/content/virtual-dom"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +"react/react.md": { + id: "react/react.md"; + slug: "react/react"; + body: string; + collection: "question-groups"; + data: InferEntrySchema<"question-groups"> +} & { render(): Render[".md"] }; +}; +"questions": Record; + + }; + + type DataEntryMap = { + + }; + + type AnyEntryMap = ContentEntryMap & DataEntryMap; + + export type ContentConfig = typeof import("../../src/content/config.js"); +} diff --git a/.astro/types.d.ts b/.astro/types.d.ts index f964fe0cf..9a2a78c18 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -1 +1,2 @@ /// +/// \ No newline at end of file diff --git a/src/components/GuideListItem.astro b/src/components/GuideListItem.astro index fe2073cc4..7b9e278c2 100644 --- a/src/components/GuideListItem.astro +++ b/src/components/GuideListItem.astro @@ -14,7 +14,7 @@ function isQuestionGroupType( } const { guide } = Astro.props; -const { frontmatter, id } = guide; +const { data, id } = guide; let pageUrl = ''; let guideType = ''; diff --git a/src/content/author.ts b/src/content/author.ts new file mode 100644 index 000000000..948b7fd1b --- /dev/null +++ b/src/content/author.ts @@ -0,0 +1,23 @@ +import { defineCollection, z } from 'astro:content'; + +export const authorCollection = defineCollection({ + type: 'content', + schema: z.object({ + name: z.string(), + imageUrl: z.string(), + employment: z + .object({ + title: z.string(), + company: z.string(), + }) + .optional(), + social: z + .object({ + linkedin: z.string().optional(), + twitter: z.string().optional(), + github: z.string().optional(), + website: z.string().optional(), + }) + .optional(), + }), +}); diff --git a/src/content/authors/ebrahim-bharmal.md b/src/content/authors/ebrahim-bharmal.md new file mode 100644 index 000000000..3763d5972 --- /dev/null +++ b/src/content/authors/ebrahim-bharmal.md @@ -0,0 +1,8 @@ +--- +name: 'Ebrahim Bharmal' +imageUrl: '/authors/ebrahimbharmal007.png' +social: + twitter: 'https://twitter.com/BharmalEbrahim' +--- + +Full-stack developer interested in all things web development. \ No newline at end of file diff --git a/src/content/authors/ekene.md b/src/content/authors/ekene.md new file mode 100644 index 000000000..897c9c62f --- /dev/null +++ b/src/content/authors/ekene.md @@ -0,0 +1,13 @@ +--- +name: 'Ekene Eze' +imageUrl: '/authors/ekene-eze.jpg' +employment: + title: 'Author' + company: 'roadmap.sh' +social: + linkedin: 'https://www.linkedin.com/in/ekeneeze/' + twitter: 'https://x.com/kenny_io' + website: 'https://kenny.engineer/' +--- + +Kenny is a Software Engineer and Developer Advocate with over 5 years experience working in DevRel across different functions. Recently as a Senior Developer Experience Engineer at Netlify and leading DevRel teams in others. \ No newline at end of file diff --git a/src/content/authors/fernando.md b/src/content/authors/fernando.md new file mode 100644 index 000000000..8e936f656 --- /dev/null +++ b/src/content/authors/fernando.md @@ -0,0 +1,11 @@ +--- +name: 'Fernando Doglio' +imageUrl: '/authors/fernando.jpeg' +social: + twitter: 'https://twitter.com/deleteman123' + linkedin: 'https://www.linkedin.com/in/fernandodoglio' +--- + +With two decades of experience in Software Development, Fernando Doglio excels in diverse languages like Ruby, Perl, PHP, Python, and JavaScript. He's led teams in crafting scalable architectures for both in-house and cloud infrastructures. + +An author of 8 technical books and over 250 articles, Fernando's current role as a Dev Advocate allows him to blend his passion for coding with content creation, enhancing developer experiences with products through engaging outreach. \ No newline at end of file diff --git a/src/content/authors/jesse-li.md b/src/content/authors/jesse-li.md new file mode 100644 index 000000000..4f7049c52 --- /dev/null +++ b/src/content/authors/jesse-li.md @@ -0,0 +1,9 @@ +--- +name: 'Jesse Li' +imageUrl: '/authors/jesse.png' +social: + twitter: 'https://twitter.com/__jesse_li' + github: 'https://github.com/veggiedefender' +--- + +Jesse has made several [interesting open-source projects](https://github.com/veggiedefender) and wrote some interesting [articles on his blog](https://blog.jse.li/) including the one he wrote on roadmap.sh. \ No newline at end of file diff --git a/src/content/authors/kamran.md b/src/content/authors/kamran.md new file mode 100644 index 000000000..5b80785c4 --- /dev/null +++ b/src/content/authors/kamran.md @@ -0,0 +1,16 @@ +--- +name: 'Kamran Ahmed' +imageUrl: '/authors/kamran.jpeg' +employment: + title: 'Founder' + company: 'roadmap.sh' +social: + linkedin: 'https://www.linkedin.com/in/kamrify' + twitter: 'https://twitter.com/kamrify' + github: 'https://github.com/kamranahmedse' + website: 'https://kamranahmed.info' +--- + +Kamran is the founder of **roadmap.sh**. He has a decade long experience working mostly with startups and scale-ups. Over the years, he has worked with a variety of technologies in a variety of domains and have worn several different hats. He is working full time on roadmap.sh at the moment. + +He is also a Google Developer Expert and a GitHub Star. He is a huge proponent of open-source, and has authored several popular open-source projects. He is [the second most starred developer](https://twitter.com/kamrify/status/1750345095587754382) on GitHub globally. \ No newline at end of file diff --git a/src/content/authors/peter-thaleikis.md b/src/content/authors/peter-thaleikis.md new file mode 100644 index 000000000..635f41a86 --- /dev/null +++ b/src/content/authors/peter-thaleikis.md @@ -0,0 +1,9 @@ +--- +name: 'Peter Thaleikis' +imageUrl: '/authors/peter-thaleikis.png' +social: + twitter: 'https://twitter.com/spekulatius1984' + website: 'https://peterthaleikis.com/' +--- + +Peter Thaleikis a software engineer and business owner. He has been developing web applications since around 2000. Before he started his own software development company [Bring Your Own Ideas Ltd.](https://bringyourownideas.com/), he has been a Lead Developer for multiple organizations. \ No newline at end of file diff --git a/src/content/authors/william.md b/src/content/authors/william.md new file mode 100644 index 000000000..a00699243 --- /dev/null +++ b/src/content/authors/william.md @@ -0,0 +1,12 @@ +--- +name: 'William Imoh' +imageUrl: '/authors/william-imoh.jpg' +employment: + title: 'Author' + company: 'roadmap.sh' +social: + linkedin: 'https://www.linkedin.com/in/william-imoh/' + twitter: 'https://x.com/iChuloo' +--- + +William is a Software Engineer, Developer Advocate and Product Manager turned Entrepreneur. He leads the team at **Hackmamba** and occasionally talks about building performant web experiences. \ No newline at end of file diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 000000000..d5ba9159d --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,9 @@ +import { authorCollection } from './author'; +import { guideCollection } from './guide'; +import { questionGroupCollection } from './question-group'; + +export const collections = { + authors: authorCollection, + guides: guideCollection, + 'question-groups': questionGroupCollection, +}; diff --git a/src/content/guide.ts b/src/content/guide.ts new file mode 100644 index 000000000..90b85fac0 --- /dev/null +++ b/src/content/guide.ts @@ -0,0 +1,25 @@ +import { defineCollection, z } from 'astro:content'; + +export const guideCollection = defineCollection({ + type: 'content', + schema: z.object({ + title: z.string(), + description: z.string(), + authorId: z.string(), + canonicalUrl: z.string().optional(), + excludedBySlug: z.string().optional(), + seo: z.object({ + title: z.string(), + description: z.string(), + ogImageUrl: z.string().optional(), + }), + isNew: z.boolean(), + type: z.enum(['visual', 'textual']), + date: z.date(), + sitemap: z.object({ + priority: z.number(), + changefreq: z.enum(['daily', 'weekly', 'monthly', 'yearly']), + }), + tags: z.array(z.string()).optional(), + }), +}); diff --git a/src/data/guides/asymptotic-notation.md b/src/content/guides/asymptotic-notation.md similarity index 100% rename from src/data/guides/asymptotic-notation.md rename to src/content/guides/asymptotic-notation.md diff --git a/src/data/guides/avoid-render-blocking-javascript-with-async-defer.md b/src/content/guides/avoid-render-blocking-javascript-with-async-defer.md similarity index 100% rename from src/data/guides/avoid-render-blocking-javascript-with-async-defer.md rename to src/content/guides/avoid-render-blocking-javascript-with-async-defer.md diff --git a/src/data/guides/backend-developer-skills.md b/src/content/guides/backend-developer-skills.md similarity index 100% rename from src/data/guides/backend-developer-skills.md rename to src/content/guides/backend-developer-skills.md diff --git a/src/data/guides/backend-developer-tools.md b/src/content/guides/backend-developer-tools.md similarity index 100% rename from src/data/guides/backend-developer-tools.md rename to src/content/guides/backend-developer-tools.md diff --git a/src/data/guides/backend-languages.md b/src/content/guides/backend-languages.md similarity index 100% rename from src/data/guides/backend-languages.md rename to src/content/guides/backend-languages.md diff --git a/src/data/guides/backend-project-ideas.md b/src/content/guides/backend-project-ideas.md similarity index 100% rename from src/data/guides/backend-project-ideas.md rename to src/content/guides/backend-project-ideas.md diff --git a/src/data/guides/backend-technologies.md b/src/content/guides/backend-technologies.md similarity index 100% rename from src/data/guides/backend-technologies.md rename to src/content/guides/backend-technologies.md diff --git a/src/data/guides/basic-authentication.md b/src/content/guides/basic-authentication.md similarity index 100% rename from src/data/guides/basic-authentication.md rename to src/content/guides/basic-authentication.md diff --git a/src/data/guides/basics-of-authentication.md b/src/content/guides/basics-of-authentication.md similarity index 100% rename from src/data/guides/basics-of-authentication.md rename to src/content/guides/basics-of-authentication.md diff --git a/src/data/guides/big-o-notation.md b/src/content/guides/big-o-notation.md similarity index 100% rename from src/data/guides/big-o-notation.md rename to src/content/guides/big-o-notation.md diff --git a/src/data/guides/character-encodings.md b/src/content/guides/character-encodings.md similarity index 100% rename from src/data/guides/character-encodings.md rename to src/content/guides/character-encodings.md diff --git a/src/data/guides/ci-cd.md b/src/content/guides/ci-cd.md similarity index 100% rename from src/data/guides/ci-cd.md rename to src/content/guides/ci-cd.md diff --git a/src/data/guides/consistency-patterns-in-distributed-systems.md b/src/content/guides/consistency-patterns-in-distributed-systems.md similarity index 100% rename from src/data/guides/consistency-patterns-in-distributed-systems.md rename to src/content/guides/consistency-patterns-in-distributed-systems.md diff --git a/src/data/guides/design-patterns-for-humans.md b/src/content/guides/design-patterns-for-humans.md similarity index 100% rename from src/data/guides/design-patterns-for-humans.md rename to src/content/guides/design-patterns-for-humans.md diff --git a/src/data/guides/devops-career-path.md b/src/content/guides/devops-career-path.md similarity index 100% rename from src/data/guides/devops-career-path.md rename to src/content/guides/devops-career-path.md diff --git a/src/data/guides/devops-engineer.md b/src/content/guides/devops-engineer.md similarity index 100% rename from src/data/guides/devops-engineer.md rename to src/content/guides/devops-engineer.md diff --git a/src/data/guides/devops-skills.md b/src/content/guides/devops-skills.md similarity index 100% rename from src/data/guides/devops-skills.md rename to src/content/guides/devops-skills.md diff --git a/src/data/guides/devops-vs-sre.md b/src/content/guides/devops-vs-sre.md similarity index 100% rename from src/data/guides/devops-vs-sre.md rename to src/content/guides/devops-vs-sre.md diff --git a/src/data/guides/dhcp-in-one-picture.md b/src/content/guides/dhcp-in-one-picture.md similarity index 100% rename from src/data/guides/dhcp-in-one-picture.md rename to src/content/guides/dhcp-in-one-picture.md diff --git a/src/data/guides/dns-in-one-picture.md b/src/content/guides/dns-in-one-picture.md similarity index 100% rename from src/data/guides/dns-in-one-picture.md rename to src/content/guides/dns-in-one-picture.md diff --git a/src/data/guides/free-resources-to-learn-llms.md b/src/content/guides/free-resources-to-learn-llms.md similarity index 100% rename from src/data/guides/free-resources-to-learn-llms.md rename to src/content/guides/free-resources-to-learn-llms.md diff --git a/src/data/guides/frontend-developer-skills.md b/src/content/guides/frontend-developer-skills.md similarity index 100% rename from src/data/guides/frontend-developer-skills.md rename to src/content/guides/frontend-developer-skills.md diff --git a/src/data/guides/frontend-languages.md b/src/content/guides/frontend-languages.md similarity index 100% rename from src/data/guides/frontend-languages.md rename to src/content/guides/frontend-languages.md diff --git a/src/data/guides/full-stack-developer-skills.md b/src/content/guides/full-stack-developer-skills.md similarity index 100% rename from src/data/guides/full-stack-developer-skills.md rename to src/content/guides/full-stack-developer-skills.md diff --git a/src/data/guides/full-stack-vs-software-engineer.md b/src/content/guides/full-stack-vs-software-engineer.md similarity index 100% rename from src/data/guides/full-stack-vs-software-engineer.md rename to src/content/guides/full-stack-vs-software-engineer.md diff --git a/src/data/guides/history-of-javascript.md b/src/content/guides/history-of-javascript.md similarity index 100% rename from src/data/guides/history-of-javascript.md rename to src/content/guides/history-of-javascript.md diff --git a/src/data/guides/how-to-become-devops-engineer.md b/src/content/guides/how-to-become-devops-engineer.md similarity index 100% rename from src/data/guides/how-to-become-devops-engineer.md rename to src/content/guides/how-to-become-devops-engineer.md diff --git a/src/data/guides/how-to-become-frontend-developer.md b/src/content/guides/how-to-become-frontend-developer.md similarity index 100% rename from src/data/guides/how-to-become-frontend-developer.md rename to src/content/guides/how-to-become-frontend-developer.md diff --git a/src/data/guides/how-to-setup-a-jump-server.md b/src/content/guides/how-to-setup-a-jump-server.md similarity index 100% rename from src/data/guides/how-to-setup-a-jump-server.md rename to src/content/guides/how-to-setup-a-jump-server.md diff --git a/src/data/guides/http-basic-authentication.md b/src/content/guides/http-basic-authentication.md similarity index 100% rename from src/data/guides/http-basic-authentication.md rename to src/content/guides/http-basic-authentication.md diff --git a/src/data/guides/http-caching.md b/src/content/guides/http-caching.md similarity index 100% rename from src/data/guides/http-caching.md rename to src/content/guides/http-caching.md diff --git a/src/data/guides/introduction-to-llms.md b/src/content/guides/introduction-to-llms.md similarity index 100% rename from src/data/guides/introduction-to-llms.md rename to src/content/guides/introduction-to-llms.md diff --git a/src/data/guides/java-developer-skills.md b/src/content/guides/java-developer-skills.md similarity index 100% rename from src/data/guides/java-developer-skills.md rename to src/content/guides/java-developer-skills.md diff --git a/src/data/guides/journey-to-http2.md b/src/content/guides/journey-to-http2.md similarity index 100% rename from src/data/guides/journey-to-http2.md rename to src/content/guides/journey-to-http2.md diff --git a/src/data/guides/jwt-authentication.md b/src/content/guides/jwt-authentication.md similarity index 100% rename from src/data/guides/jwt-authentication.md rename to src/content/guides/jwt-authentication.md diff --git a/src/data/guides/levels-of-seniority.md b/src/content/guides/levels-of-seniority.md similarity index 100% rename from src/data/guides/levels-of-seniority.md rename to src/content/guides/levels-of-seniority.md diff --git a/src/data/guides/oauth.md b/src/content/guides/oauth.md similarity index 100% rename from src/data/guides/oauth.md rename to src/content/guides/oauth.md diff --git a/src/data/guides/proxy-servers.md b/src/content/guides/proxy-servers.md similarity index 100% rename from src/data/guides/proxy-servers.md rename to src/content/guides/proxy-servers.md diff --git a/src/data/guides/random-numbers.md b/src/content/guides/random-numbers.md similarity index 100% rename from src/data/guides/random-numbers.md rename to src/content/guides/random-numbers.md diff --git a/src/data/guides/scaling-databases.md b/src/content/guides/scaling-databases.md similarity index 100% rename from src/data/guides/scaling-databases.md rename to src/content/guides/scaling-databases.md diff --git a/src/data/guides/session-authentication.md b/src/content/guides/session-authentication.md similarity index 100% rename from src/data/guides/session-authentication.md rename to src/content/guides/session-authentication.md diff --git a/src/data/guides/session-based-authentication.md b/src/content/guides/session-based-authentication.md similarity index 100% rename from src/data/guides/session-based-authentication.md rename to src/content/guides/session-based-authentication.md diff --git a/src/data/guides/setup-and-auto-renew-ssl-certificates.md b/src/content/guides/setup-and-auto-renew-ssl-certificates.md similarity index 100% rename from src/data/guides/setup-and-auto-renew-ssl-certificates.md rename to src/content/guides/setup-and-auto-renew-ssl-certificates.md diff --git a/src/data/guides/single-command-database-setup.md b/src/content/guides/single-command-database-setup.md similarity index 100% rename from src/data/guides/single-command-database-setup.md rename to src/content/guides/single-command-database-setup.md diff --git a/src/data/guides/ssl-tls-https-ssh.md b/src/content/guides/ssl-tls-https-ssh.md similarity index 100% rename from src/data/guides/ssl-tls-https-ssh.md rename to src/content/guides/ssl-tls-https-ssh.md diff --git a/src/data/guides/sso.md b/src/content/guides/sso.md similarity index 100% rename from src/data/guides/sso.md rename to src/content/guides/sso.md diff --git a/src/data/guides/token-authentication.md b/src/content/guides/token-authentication.md similarity index 100% rename from src/data/guides/token-authentication.md rename to src/content/guides/token-authentication.md diff --git a/src/data/guides/torrent-client.md b/src/content/guides/torrent-client.md similarity index 100% rename from src/data/guides/torrent-client.md rename to src/content/guides/torrent-client.md diff --git a/src/data/guides/unfamiliar-codebase.md b/src/content/guides/unfamiliar-codebase.md similarity index 100% rename from src/data/guides/unfamiliar-codebase.md rename to src/content/guides/unfamiliar-codebase.md diff --git a/src/data/guides/what-are-web-vitals.md b/src/content/guides/what-are-web-vitals.md similarity index 100% rename from src/data/guides/what-are-web-vitals.md rename to src/content/guides/what-are-web-vitals.md diff --git a/src/data/guides/what-is-internet.md b/src/content/guides/what-is-internet.md similarity index 100% rename from src/data/guides/what-is-internet.md rename to src/content/guides/what-is-internet.md diff --git a/src/data/guides/what-is-sli-slo-sla.md b/src/content/guides/what-is-sli-slo-sla.md similarity index 100% rename from src/data/guides/what-is-sli-slo-sla.md rename to src/content/guides/what-is-sli-slo-sla.md diff --git a/src/data/guides/why-build-it-and-they-will-come-wont-work-anymore.md b/src/content/guides/why-build-it-and-they-will-come-wont-work-anymore.md similarity index 100% rename from src/data/guides/why-build-it-and-they-will-come-wont-work-anymore.md rename to src/content/guides/why-build-it-and-they-will-come-wont-work-anymore.md diff --git a/src/content/question-group.ts b/src/content/question-group.ts new file mode 100644 index 000000000..3bc632e12 --- /dev/null +++ b/src/content/question-group.ts @@ -0,0 +1,32 @@ +import { defineCollection, z } from 'astro:content'; + +export const questionGroupCollection = defineCollection({ + type: 'content', + schema: z.object({ + order: z.number(), + briefTitle: z.string(), + briefDescription: z.string(), + title: z.string(), + description: z.string(), + isNew: z.boolean(), + authorId: z.string().optional(), + date: z.string().optional(), + seo: z.object({ + title: z.string(), + description: z.string(), + ogImageUrl: z.string().optional(), + keywords: z.array(z.string()), + }), + sitemap: z.object({ + priority: z.number(), + changefreq: z.string(), + }), + questions: z.array( + z.object({ + question: z.string(), + answer: z.string(), + topics: z.array(z.string()), + }), + ), + }), +}); diff --git a/src/data/question-groups/backend/backend.md b/src/content/question-groups/backend/backend.md similarity index 100% rename from src/data/question-groups/backend/backend.md rename to src/content/question-groups/backend/backend.md diff --git a/src/data/question-groups/backend/content/anomaly-detection.md b/src/content/question-groups/backend/content/anomaly-detection.md similarity index 100% rename from src/data/question-groups/backend/content/anomaly-detection.md rename to src/content/question-groups/backend/content/anomaly-detection.md diff --git a/src/data/question-groups/backend/content/api-dependencies.md b/src/content/question-groups/backend/content/api-dependencies.md similarity index 100% rename from src/data/question-groups/backend/content/api-dependencies.md rename to src/content/question-groups/backend/content/api-dependencies.md diff --git a/src/data/question-groups/backend/content/api-endpoint.md b/src/content/question-groups/backend/content/api-endpoint.md similarity index 100% rename from src/data/question-groups/backend/content/api-endpoint.md rename to src/content/question-groups/backend/content/api-endpoint.md diff --git a/src/data/question-groups/backend/content/api-tests.md b/src/content/question-groups/backend/content/api-tests.md similarity index 100% rename from src/data/question-groups/backend/content/api-tests.md rename to src/content/question-groups/backend/content/api-tests.md diff --git a/src/data/question-groups/backend/content/api-versioning.md b/src/content/question-groups/backend/content/api-versioning.md similarity index 100% rename from src/data/question-groups/backend/content/api-versioning.md rename to src/content/question-groups/backend/content/api-versioning.md diff --git a/src/data/question-groups/backend/content/batch-processing.md b/src/content/question-groups/backend/content/batch-processing.md similarity index 100% rename from src/data/question-groups/backend/content/batch-processing.md rename to src/content/question-groups/backend/content/batch-processing.md diff --git a/src/data/question-groups/backend/content/benefits-drawbacks-microservices.md b/src/content/question-groups/backend/content/benefits-drawbacks-microservices.md similarity index 100% rename from src/data/question-groups/backend/content/benefits-drawbacks-microservices.md rename to src/content/question-groups/backend/content/benefits-drawbacks-microservices.md diff --git a/src/data/question-groups/backend/content/bg-tasks.md b/src/content/question-groups/backend/content/bg-tasks.md similarity index 100% rename from src/data/question-groups/backend/content/bg-tasks.md rename to src/content/question-groups/backend/content/bg-tasks.md diff --git a/src/data/question-groups/backend/content/blue-green-deployment.md b/src/content/question-groups/backend/content/blue-green-deployment.md similarity index 100% rename from src/data/question-groups/backend/content/blue-green-deployment.md rename to src/content/question-groups/backend/content/blue-green-deployment.md diff --git a/src/data/question-groups/backend/content/cache-eviction.md b/src/content/question-groups/backend/content/cache-eviction.md similarity index 100% rename from src/data/question-groups/backend/content/cache-eviction.md rename to src/content/question-groups/backend/content/cache-eviction.md diff --git a/src/data/question-groups/backend/content/cap-theorem.md b/src/content/question-groups/backend/content/cap-theorem.md similarity index 100% rename from src/data/question-groups/backend/content/cap-theorem.md rename to src/content/question-groups/backend/content/cap-theorem.md diff --git a/src/data/question-groups/backend/content/ci-cd.md b/src/content/question-groups/backend/content/ci-cd.md similarity index 100% rename from src/data/question-groups/backend/content/ci-cd.md rename to src/content/question-groups/backend/content/ci-cd.md diff --git a/src/data/question-groups/backend/content/containerization.md b/src/content/question-groups/backend/content/containerization.md similarity index 100% rename from src/data/question-groups/backend/content/containerization.md rename to src/content/question-groups/backend/content/containerization.md diff --git a/src/data/question-groups/backend/content/correlation-ids.md b/src/content/question-groups/backend/content/correlation-ids.md similarity index 100% rename from src/data/question-groups/backend/content/correlation-ids.md rename to src/content/question-groups/backend/content/correlation-ids.md diff --git a/src/data/question-groups/backend/content/data-encryption.md b/src/content/question-groups/backend/content/data-encryption.md similarity index 100% rename from src/data/question-groups/backend/content/data-encryption.md rename to src/content/question-groups/backend/content/data-encryption.md diff --git a/src/data/question-groups/backend/content/db-connections.md b/src/content/question-groups/backend/content/db-connections.md similarity index 100% rename from src/data/question-groups/backend/content/db-connections.md rename to src/content/question-groups/backend/content/db-connections.md diff --git a/src/data/question-groups/backend/content/deadlock-db-transaction.md b/src/content/question-groups/backend/content/deadlock-db-transaction.md similarity index 100% rename from src/data/question-groups/backend/content/deadlock-db-transaction.md rename to src/content/question-groups/backend/content/deadlock-db-transaction.md diff --git a/src/data/question-groups/backend/content/debugging-backend.md b/src/content/question-groups/backend/content/debugging-backend.md similarity index 100% rename from src/data/question-groups/backend/content/debugging-backend.md rename to src/content/question-groups/backend/content/debugging-backend.md diff --git a/src/data/question-groups/backend/content/decompose-microservices.md b/src/content/question-groups/backend/content/decompose-microservices.md similarity index 100% rename from src/data/question-groups/backend/content/decompose-microservices.md rename to src/content/question-groups/backend/content/decompose-microservices.md diff --git a/src/data/question-groups/backend/content/distributed-caching.md b/src/content/question-groups/backend/content/distributed-caching.md similarity index 100% rename from src/data/question-groups/backend/content/distributed-caching.md rename to src/content/question-groups/backend/content/distributed-caching.md diff --git a/src/data/question-groups/backend/content/eventual-consistency.md b/src/content/question-groups/backend/content/eventual-consistency.md similarity index 100% rename from src/data/question-groups/backend/content/eventual-consistency.md rename to src/content/question-groups/backend/content/eventual-consistency.md diff --git a/src/data/question-groups/backend/content/fault-tolerance.md b/src/content/question-groups/backend/content/fault-tolerance.md similarity index 100% rename from src/data/question-groups/backend/content/fault-tolerance.md rename to src/content/question-groups/backend/content/fault-tolerance.md diff --git a/src/data/question-groups/backend/content/file-uploads.md b/src/content/question-groups/backend/content/file-uploads.md similarity index 100% rename from src/data/question-groups/backend/content/file-uploads.md rename to src/content/question-groups/backend/content/file-uploads.md diff --git a/src/data/question-groups/backend/content/fulltext-search.md b/src/content/question-groups/backend/content/fulltext-search.md similarity index 100% rename from src/data/question-groups/backend/content/fulltext-search.md rename to src/content/question-groups/backend/content/fulltext-search.md diff --git a/src/data/question-groups/backend/content/gdpr-compliance.md b/src/content/question-groups/backend/content/gdpr-compliance.md similarity index 100% rename from src/data/question-groups/backend/content/gdpr-compliance.md rename to src/content/question-groups/backend/content/gdpr-compliance.md diff --git a/src/data/question-groups/backend/content/high-available-storage.md b/src/content/question-groups/backend/content/high-available-storage.md similarity index 100% rename from src/data/question-groups/backend/content/high-available-storage.md rename to src/content/question-groups/backend/content/high-available-storage.md diff --git a/src/data/question-groups/backend/content/http-request-response-cycle.md b/src/content/question-groups/backend/content/http-request-response-cycle.md similarity index 100% rename from src/data/question-groups/backend/content/http-request-response-cycle.md rename to src/content/question-groups/backend/content/http-request-response-cycle.md diff --git a/src/data/question-groups/backend/content/idempotency.md b/src/content/question-groups/backend/content/idempotency.md similarity index 100% rename from src/data/question-groups/backend/content/idempotency.md rename to src/content/question-groups/backend/content/idempotency.md diff --git a/src/data/question-groups/backend/content/instrument-monitor.md b/src/content/question-groups/backend/content/instrument-monitor.md similarity index 100% rename from src/data/question-groups/backend/content/instrument-monitor.md rename to src/content/question-groups/backend/content/instrument-monitor.md diff --git a/src/data/question-groups/backend/content/iot-streams.md b/src/content/question-groups/backend/content/iot-streams.md similarity index 100% rename from src/data/question-groups/backend/content/iot-streams.md rename to src/content/question-groups/backend/content/iot-streams.md diff --git a/src/data/question-groups/backend/content/load-balanced-session.md b/src/content/question-groups/backend/content/load-balanced-session.md similarity index 100% rename from src/data/question-groups/backend/content/load-balanced-session.md rename to src/content/question-groups/backend/content/load-balanced-session.md diff --git a/src/data/question-groups/backend/content/load-testing-api.md b/src/content/question-groups/backend/content/load-testing-api.md similarity index 100% rename from src/data/question-groups/backend/content/load-testing-api.md rename to src/content/question-groups/backend/content/load-testing-api.md diff --git a/src/data/question-groups/backend/content/long-running.md b/src/content/question-groups/backend/content/long-running.md similarity index 100% rename from src/data/question-groups/backend/content/long-running.md rename to src/content/question-groups/backend/content/long-running.md diff --git a/src/data/question-groups/backend/content/maintainable-code.md b/src/content/question-groups/backend/content/maintainable-code.md similarity index 100% rename from src/data/question-groups/backend/content/maintainable-code.md rename to src/content/question-groups/backend/content/maintainable-code.md diff --git a/src/data/question-groups/backend/content/message-queue.md b/src/content/question-groups/backend/content/message-queue.md similarity index 100% rename from src/data/question-groups/backend/content/message-queue.md rename to src/content/question-groups/backend/content/message-queue.md diff --git a/src/data/question-groups/backend/content/optimistic-vs-pessimistic.md b/src/content/question-groups/backend/content/optimistic-vs-pessimistic.md similarity index 100% rename from src/data/question-groups/backend/content/optimistic-vs-pessimistic.md rename to src/content/question-groups/backend/content/optimistic-vs-pessimistic.md diff --git a/src/data/question-groups/backend/content/protect-sql-injection.md b/src/content/question-groups/backend/content/protect-sql-injection.md similarity index 100% rename from src/data/question-groups/backend/content/protect-sql-injection.md rename to src/content/question-groups/backend/content/protect-sql-injection.md diff --git a/src/data/question-groups/backend/content/rate-limiting.md b/src/content/question-groups/backend/content/rate-limiting.md similarity index 100% rename from src/data/question-groups/backend/content/rate-limiting.md rename to src/content/question-groups/backend/content/rate-limiting.md diff --git a/src/data/question-groups/backend/content/realtime-data-sync.md b/src/content/question-groups/backend/content/realtime-data-sync.md similarity index 100% rename from src/data/question-groups/backend/content/realtime-data-sync.md rename to src/content/question-groups/backend/content/realtime-data-sync.md diff --git a/src/data/question-groups/backend/content/rest-core-principles.md b/src/content/question-groups/backend/content/rest-core-principles.md similarity index 100% rename from src/data/question-groups/backend/content/rest-core-principles.md rename to src/content/question-groups/backend/content/rest-core-principles.md diff --git a/src/data/question-groups/backend/content/reverse-proxy.md b/src/content/question-groups/backend/content/reverse-proxy.md similarity index 100% rename from src/data/question-groups/backend/content/reverse-proxy.md rename to src/content/question-groups/backend/content/reverse-proxy.md diff --git a/src/data/question-groups/backend/content/scale-backend.md b/src/content/question-groups/backend/content/scale-backend.md similarity index 100% rename from src/data/question-groups/backend/content/scale-backend.md rename to src/content/question-groups/backend/content/scale-backend.md diff --git a/src/data/question-groups/backend/content/schema-migrations.md b/src/content/question-groups/backend/content/schema-migrations.md similarity index 100% rename from src/data/question-groups/backend/content/schema-migrations.md rename to src/content/question-groups/backend/content/schema-migrations.md diff --git a/src/data/question-groups/backend/content/secure-api.md b/src/content/question-groups/backend/content/secure-api.md similarity index 100% rename from src/data/question-groups/backend/content/secure-api.md rename to src/content/question-groups/backend/content/secure-api.md diff --git a/src/data/question-groups/backend/content/secure-interservice.md b/src/content/question-groups/backend/content/secure-interservice.md similarity index 100% rename from src/data/question-groups/backend/content/secure-interservice.md rename to src/content/question-groups/backend/content/secure-interservice.md diff --git a/src/data/question-groups/backend/content/session-management.md b/src/content/question-groups/backend/content/session-management.md similarity index 100% rename from src/data/question-groups/backend/content/session-management.md rename to src/content/question-groups/backend/content/session-management.md diff --git a/src/data/question-groups/backend/content/sql-vs-nosql.md b/src/content/question-groups/backend/content/sql-vs-nosql.md similarity index 100% rename from src/data/question-groups/backend/content/sql-vs-nosql.md rename to src/content/question-groups/backend/content/sql-vs-nosql.md diff --git a/src/data/question-groups/backend/content/sso.md b/src/content/question-groups/backend/content/sso.md similarity index 100% rename from src/data/question-groups/backend/content/sso.md rename to src/content/question-groups/backend/content/sso.md diff --git a/src/data/question-groups/backend/content/statelessness-http.md b/src/content/question-groups/backend/content/statelessness-http.md similarity index 100% rename from src/data/question-groups/backend/content/statelessness-http.md rename to src/content/question-groups/backend/content/statelessness-http.md diff --git a/src/data/question-groups/backend/content/webhooks.md b/src/content/question-groups/backend/content/webhooks.md similarity index 100% rename from src/data/question-groups/backend/content/webhooks.md rename to src/content/question-groups/backend/content/webhooks.md diff --git a/src/data/question-groups/devops/content/ansible-benefits.md b/src/content/question-groups/devops/content/ansible-benefits.md similarity index 100% rename from src/data/question-groups/devops/content/ansible-benefits.md rename to src/content/question-groups/devops/content/ansible-benefits.md diff --git a/src/data/question-groups/devops/content/auto-scaling.md b/src/content/question-groups/devops/content/auto-scaling.md similarity index 100% rename from src/data/question-groups/devops/content/auto-scaling.md rename to src/content/question-groups/devops/content/auto-scaling.md diff --git a/src/data/question-groups/devops/content/blue-green-deployment.md b/src/content/question-groups/devops/content/blue-green-deployment.md similarity index 100% rename from src/data/question-groups/devops/content/blue-green-deployment.md rename to src/content/question-groups/devops/content/blue-green-deployment.md diff --git a/src/data/question-groups/devops/content/build-pipelines.md b/src/content/question-groups/devops/content/build-pipelines.md similarity index 100% rename from src/data/question-groups/devops/content/build-pipelines.md rename to src/content/question-groups/devops/content/build-pipelines.md diff --git a/src/data/question-groups/devops/content/canary-release.md b/src/content/question-groups/devops/content/canary-release.md similarity index 100% rename from src/data/question-groups/devops/content/canary-release.md rename to src/content/question-groups/devops/content/canary-release.md diff --git a/src/data/question-groups/devops/content/cicd-setup.md b/src/content/question-groups/devops/content/cicd-setup.md similarity index 100% rename from src/data/question-groups/devops/content/cicd-setup.md rename to src/content/question-groups/devops/content/cicd-setup.md diff --git a/src/data/question-groups/devops/content/cluster-health.md b/src/content/question-groups/devops/content/cluster-health.md similarity index 100% rename from src/data/question-groups/devops/content/cluster-health.md rename to src/content/question-groups/devops/content/cluster-health.md diff --git a/src/data/question-groups/devops/content/common-iac-tools.md b/src/content/question-groups/devops/content/common-iac-tools.md similarity index 100% rename from src/data/question-groups/devops/content/common-iac-tools.md rename to src/content/question-groups/devops/content/common-iac-tools.md diff --git a/src/data/question-groups/devops/content/container-consistency.md b/src/content/question-groups/devops/content/container-consistency.md similarity index 100% rename from src/data/question-groups/devops/content/container-consistency.md rename to src/content/question-groups/devops/content/container-consistency.md diff --git a/src/data/question-groups/devops/content/container-vs-vm.md b/src/content/question-groups/devops/content/container-vs-vm.md similarity index 100% rename from src/data/question-groups/devops/content/container-vs-vm.md rename to src/content/question-groups/devops/content/container-vs-vm.md diff --git a/src/data/question-groups/devops/content/continuous-monitoring.md b/src/content/question-groups/devops/content/continuous-monitoring.md similarity index 100% rename from src/data/question-groups/devops/content/continuous-monitoring.md rename to src/content/question-groups/devops/content/continuous-monitoring.md diff --git a/src/data/question-groups/devops/content/data-migration.md b/src/content/question-groups/devops/content/data-migration.md similarity index 100% rename from src/data/question-groups/devops/content/data-migration.md rename to src/content/question-groups/devops/content/data-migration.md diff --git a/src/data/question-groups/devops/content/devsecops.md b/src/content/question-groups/devops/content/devsecops.md similarity index 100% rename from src/data/question-groups/devops/content/devsecops.md rename to src/content/question-groups/devops/content/devsecops.md diff --git a/src/data/question-groups/devops/content/docker-compose.md b/src/content/question-groups/devops/content/docker-compose.md similarity index 100% rename from src/data/question-groups/devops/content/docker-compose.md rename to src/content/question-groups/devops/content/docker-compose.md diff --git a/src/data/question-groups/devops/content/explain-ci-vs-cd.md b/src/content/question-groups/devops/content/explain-ci-vs-cd.md similarity index 100% rename from src/data/question-groups/devops/content/explain-ci-vs-cd.md rename to src/content/question-groups/devops/content/explain-ci-vs-cd.md diff --git a/src/data/question-groups/devops/content/health-monitor.md b/src/content/question-groups/devops/content/health-monitor.md similarity index 100% rename from src/data/question-groups/devops/content/health-monitor.md rename to src/content/question-groups/devops/content/health-monitor.md diff --git a/src/data/question-groups/devops/content/high-availability.md b/src/content/question-groups/devops/content/high-availability.md similarity index 100% rename from src/data/question-groups/devops/content/high-availability.md rename to src/content/question-groups/devops/content/high-availability.md diff --git a/src/data/question-groups/devops/content/iac-concept.md b/src/content/question-groups/devops/content/iac-concept.md similarity index 100% rename from src/data/question-groups/devops/content/iac-concept.md rename to src/content/question-groups/devops/content/iac-concept.md diff --git a/src/data/question-groups/devops/content/implement-logging.md b/src/content/question-groups/devops/content/implement-logging.md similarity index 100% rename from src/data/question-groups/devops/content/implement-logging.md rename to src/content/question-groups/devops/content/implement-logging.md diff --git a/src/data/question-groups/devops/content/kubernetes-components.md b/src/content/question-groups/devops/content/kubernetes-components.md similarity index 100% rename from src/data/question-groups/devops/content/kubernetes-components.md rename to src/content/question-groups/devops/content/kubernetes-components.md diff --git a/src/data/question-groups/devops/content/kubernetes-operators.md b/src/content/question-groups/devops/content/kubernetes-operators.md similarity index 100% rename from src/data/question-groups/devops/content/kubernetes-operators.md rename to src/content/question-groups/devops/content/kubernetes-operators.md diff --git a/src/data/question-groups/devops/content/load-balancer.md b/src/content/question-groups/devops/content/load-balancer.md similarity index 100% rename from src/data/question-groups/devops/content/load-balancer.md rename to src/content/question-groups/devops/content/load-balancer.md diff --git a/src/data/question-groups/devops/content/microservice-challenges.md b/src/content/question-groups/devops/content/microservice-challenges.md similarity index 100% rename from src/data/question-groups/devops/content/microservice-challenges.md rename to src/content/question-groups/devops/content/microservice-challenges.md diff --git a/src/data/question-groups/devops/content/microservice-vs-monolithic.md b/src/content/question-groups/devops/content/microservice-vs-monolithic.md similarity index 100% rename from src/data/question-groups/devops/content/microservice-vs-monolithic.md rename to src/content/question-groups/devops/content/microservice-vs-monolithic.md diff --git a/src/data/question-groups/devops/content/migrate-environment.md b/src/content/question-groups/devops/content/migrate-environment.md similarity index 100% rename from src/data/question-groups/devops/content/migrate-environment.md rename to src/content/question-groups/devops/content/migrate-environment.md diff --git a/src/data/question-groups/devops/content/multi-cloud-kubernetes.md b/src/content/question-groups/devops/content/multi-cloud-kubernetes.md similarity index 100% rename from src/data/question-groups/devops/content/multi-cloud-kubernetes.md rename to src/content/question-groups/devops/content/multi-cloud-kubernetes.md diff --git a/src/data/question-groups/devops/content/multi-cloud.md b/src/content/question-groups/devops/content/multi-cloud.md similarity index 100% rename from src/data/question-groups/devops/content/multi-cloud.md rename to src/content/question-groups/devops/content/multi-cloud.md diff --git a/src/data/question-groups/devops/content/network-configuration.md b/src/content/question-groups/devops/content/network-configuration.md similarity index 100% rename from src/data/question-groups/devops/content/network-configuration.md rename to src/content/question-groups/devops/content/network-configuration.md diff --git a/src/data/question-groups/devops/content/optimize-cicd.md b/src/content/question-groups/devops/content/optimize-cicd.md similarity index 100% rename from src/data/question-groups/devops/content/optimize-cicd.md rename to src/content/question-groups/devops/content/optimize-cicd.md diff --git a/src/data/question-groups/devops/content/orchestration.md b/src/content/question-groups/devops/content/orchestration.md similarity index 100% rename from src/data/question-groups/devops/content/orchestration.md rename to src/content/question-groups/devops/content/orchestration.md diff --git a/src/data/question-groups/devops/content/popular-cicd-tools.md b/src/content/question-groups/devops/content/popular-cicd-tools.md similarity index 100% rename from src/data/question-groups/devops/content/popular-cicd-tools.md rename to src/content/question-groups/devops/content/popular-cicd-tools.md diff --git a/src/data/question-groups/devops/content/purpose-of-cm.md b/src/content/question-groups/devops/content/purpose-of-cm.md similarity index 100% rename from src/data/question-groups/devops/content/purpose-of-cm.md rename to src/content/question-groups/devops/content/purpose-of-cm.md diff --git a/src/data/question-groups/devops/content/reverse-proxy.md b/src/content/question-groups/devops/content/reverse-proxy.md similarity index 100% rename from src/data/question-groups/devops/content/reverse-proxy.md rename to src/content/question-groups/devops/content/reverse-proxy.md diff --git a/src/data/question-groups/devops/content/role-of-devops.md b/src/content/question-groups/devops/content/role-of-devops.md similarity index 100% rename from src/data/question-groups/devops/content/role-of-devops.md rename to src/content/question-groups/devops/content/role-of-devops.md diff --git a/src/data/question-groups/devops/content/scaling-differences.md b/src/content/question-groups/devops/content/scaling-differences.md similarity index 100% rename from src/data/question-groups/devops/content/scaling-differences.md rename to src/content/question-groups/devops/content/scaling-differences.md diff --git a/src/data/question-groups/devops/content/secret-management.md b/src/content/question-groups/devops/content/secret-management.md similarity index 100% rename from src/data/question-groups/devops/content/secret-management.md rename to src/content/question-groups/devops/content/secret-management.md diff --git a/src/data/question-groups/devops/content/serverless-computing.md b/src/content/question-groups/devops/content/serverless-computing.md similarity index 100% rename from src/data/question-groups/devops/content/serverless-computing.md rename to src/content/question-groups/devops/content/serverless-computing.md diff --git a/src/data/question-groups/devops/content/stateful-applications.md b/src/content/question-groups/devops/content/stateful-applications.md similarity index 100% rename from src/data/question-groups/devops/content/stateful-applications.md rename to src/content/question-groups/devops/content/stateful-applications.md diff --git a/src/data/question-groups/devops/content/what-is-devops.md b/src/content/question-groups/devops/content/what-is-devops.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-devops.md rename to src/content/question-groups/devops/content/what-is-devops.md diff --git a/src/data/question-groups/devops/content/what-is-docker.md b/src/content/question-groups/devops/content/what-is-docker.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-docker.md rename to src/content/question-groups/devops/content/what-is-docker.md diff --git a/src/data/question-groups/devops/content/what-is-gitops.md b/src/content/question-groups/devops/content/what-is-gitops.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-gitops.md rename to src/content/question-groups/devops/content/what-is-gitops.md diff --git a/src/data/question-groups/devops/content/what-is-helm-chart.md b/src/content/question-groups/devops/content/what-is-helm-chart.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-helm-chart.md rename to src/content/question-groups/devops/content/what-is-helm-chart.md diff --git a/src/data/question-groups/devops/content/what-is-iac.md b/src/content/question-groups/devops/content/what-is-iac.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-iac.md rename to src/content/question-groups/devops/content/what-is-iac.md diff --git a/src/data/question-groups/devops/content/what-is-kubernetes.md b/src/content/question-groups/devops/content/what-is-kubernetes.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-kubernetes.md rename to src/content/question-groups/devops/content/what-is-kubernetes.md diff --git a/src/data/question-groups/devops/content/what-is-prometheus.md b/src/content/question-groups/devops/content/what-is-prometheus.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-prometheus.md rename to src/content/question-groups/devops/content/what-is-prometheus.md diff --git a/src/data/question-groups/devops/content/what-is-rollback.md b/src/content/question-groups/devops/content/what-is-rollback.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-rollback.md rename to src/content/question-groups/devops/content/what-is-rollback.md diff --git a/src/data/question-groups/devops/content/what-is-service-mesh.md b/src/content/question-groups/devops/content/what-is-service-mesh.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-service-mesh.md rename to src/content/question-groups/devops/content/what-is-service-mesh.md diff --git a/src/data/question-groups/devops/content/what-is-shift-left.md b/src/content/question-groups/devops/content/what-is-shift-left.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-shift-left.md rename to src/content/question-groups/devops/content/what-is-shift-left.md diff --git a/src/data/question-groups/devops/content/what-is-version-control.md b/src/content/question-groups/devops/content/what-is-version-control.md similarity index 100% rename from src/data/question-groups/devops/content/what-is-version-control.md rename to src/content/question-groups/devops/content/what-is-version-control.md diff --git a/src/data/question-groups/devops/content/zero-downtime.md b/src/content/question-groups/devops/content/zero-downtime.md similarity index 100% rename from src/data/question-groups/devops/content/zero-downtime.md rename to src/content/question-groups/devops/content/zero-downtime.md diff --git a/src/data/question-groups/devops/devops.md b/src/content/question-groups/devops/devops.md similarity index 100% rename from src/data/question-groups/devops/devops.md rename to src/content/question-groups/devops/devops.md diff --git a/src/data/question-groups/frontend/content/async-ops-js.md b/src/content/question-groups/frontend/content/async-ops-js.md similarity index 100% rename from src/data/question-groups/frontend/content/async-ops-js.md rename to src/content/question-groups/frontend/content/async-ops-js.md diff --git a/src/data/question-groups/frontend/content/block-inline-elems.md b/src/content/question-groups/frontend/content/block-inline-elems.md similarity index 100% rename from src/data/question-groups/frontend/content/block-inline-elems.md rename to src/content/question-groups/frontend/content/block-inline-elems.md diff --git a/src/data/question-groups/frontend/content/box-model.md b/src/content/question-groups/frontend/content/box-model.md similarity index 100% rename from src/data/question-groups/frontend/content/box-model.md rename to src/content/question-groups/frontend/content/box-model.md diff --git a/src/data/question-groups/frontend/content/browser-render.md b/src/content/question-groups/frontend/content/browser-render.md similarity index 100% rename from src/data/question-groups/frontend/content/browser-render.md rename to src/content/question-groups/frontend/content/browser-render.md diff --git a/src/data/question-groups/frontend/content/client-storage.md b/src/content/question-groups/frontend/content/client-storage.md similarity index 100% rename from src/data/question-groups/frontend/content/client-storage.md rename to src/content/question-groups/frontend/content/client-storage.md diff --git a/src/data/question-groups/frontend/content/closures.md b/src/content/question-groups/frontend/content/closures.md similarity index 100% rename from src/data/question-groups/frontend/content/closures.md rename to src/content/question-groups/frontend/content/closures.md diff --git a/src/data/question-groups/frontend/content/critical-css.md b/src/content/question-groups/frontend/content/critical-css.md similarity index 100% rename from src/data/question-groups/frontend/content/critical-css.md rename to src/content/question-groups/frontend/content/critical-css.md diff --git a/src/data/question-groups/frontend/content/csp.md b/src/content/question-groups/frontend/content/csp.md similarity index 100% rename from src/data/question-groups/frontend/content/csp.md rename to src/content/question-groups/frontend/content/csp.md diff --git a/src/data/question-groups/frontend/content/css-grid.md b/src/content/question-groups/frontend/content/css-grid.md similarity index 100% rename from src/data/question-groups/frontend/content/css-grid.md rename to src/content/question-groups/frontend/content/css-grid.md diff --git a/src/data/question-groups/frontend/content/css-specificity.md b/src/content/question-groups/frontend/content/css-specificity.md similarity index 100% rename from src/data/question-groups/frontend/content/css-specificity.md rename to src/content/question-groups/frontend/content/css-specificity.md diff --git a/src/data/question-groups/frontend/content/css-variables.md b/src/content/question-groups/frontend/content/css-variables.md similarity index 100% rename from src/data/question-groups/frontend/content/css-variables.md rename to src/content/question-groups/frontend/content/css-variables.md diff --git a/src/data/question-groups/frontend/content/dom.md b/src/content/question-groups/frontend/content/dom.md similarity index 100% rename from src/data/question-groups/frontend/content/dom.md rename to src/content/question-groups/frontend/content/dom.md diff --git a/src/data/question-groups/frontend/content/em-vs-rem.md b/src/content/question-groups/frontend/content/em-vs-rem.md similarity index 100% rename from src/data/question-groups/frontend/content/em-vs-rem.md rename to src/content/question-groups/frontend/content/em-vs-rem.md diff --git a/src/data/question-groups/frontend/content/event-delegation.md b/src/content/question-groups/frontend/content/event-delegation.md similarity index 100% rename from src/data/question-groups/frontend/content/event-delegation.md rename to src/content/question-groups/frontend/content/event-delegation.md diff --git a/src/data/question-groups/frontend/content/event-listeners.md b/src/content/question-groups/frontend/content/event-listeners.md similarity index 100% rename from src/data/question-groups/frontend/content/event-listeners.md rename to src/content/question-groups/frontend/content/event-listeners.md diff --git a/src/data/question-groups/frontend/content/event-loop-js.md b/src/content/question-groups/frontend/content/event-loop-js.md similarity index 100% rename from src/data/question-groups/frontend/content/event-loop-js.md rename to src/content/question-groups/frontend/content/event-loop-js.md diff --git a/src/data/question-groups/frontend/content/flexbox-layout.md b/src/content/question-groups/frontend/content/flexbox-layout.md similarity index 100% rename from src/data/question-groups/frontend/content/flexbox-layout.md rename to src/content/question-groups/frontend/content/flexbox-layout.md diff --git a/src/data/question-groups/frontend/content/id-vs-class.md b/src/content/question-groups/frontend/content/id-vs-class.md similarity index 100% rename from src/data/question-groups/frontend/content/id-vs-class.md rename to src/content/question-groups/frontend/content/id-vs-class.md diff --git a/src/data/question-groups/frontend/content/improve-web-perf.md b/src/content/question-groups/frontend/content/improve-web-perf.md similarity index 100% rename from src/data/question-groups/frontend/content/improve-web-perf.md rename to src/content/question-groups/frontend/content/improve-web-perf.md diff --git a/src/data/question-groups/frontend/content/js-promises.md b/src/content/question-groups/frontend/content/js-promises.md similarity index 100% rename from src/data/question-groups/frontend/content/js-promises.md rename to src/content/question-groups/frontend/content/js-promises.md diff --git a/src/data/question-groups/frontend/content/media-queries.md b/src/content/question-groups/frontend/content/media-queries.md similarity index 100% rename from src/data/question-groups/frontend/content/media-queries.md rename to src/content/question-groups/frontend/content/media-queries.md diff --git a/src/data/question-groups/frontend/content/null-vs-undefined.md b/src/content/question-groups/frontend/content/null-vs-undefined.md similarity index 100% rename from src/data/question-groups/frontend/content/null-vs-undefined.md rename to src/content/question-groups/frontend/content/null-vs-undefined.md diff --git a/src/data/question-groups/frontend/content/optimize-assets.md b/src/content/question-groups/frontend/content/optimize-assets.md similarity index 100% rename from src/data/question-groups/frontend/content/optimize-assets.md rename to src/content/question-groups/frontend/content/optimize-assets.md diff --git a/src/data/question-groups/frontend/content/same-origin-policy.md b/src/content/question-groups/frontend/content/same-origin-policy.md similarity index 100% rename from src/data/question-groups/frontend/content/same-origin-policy.md rename to src/content/question-groups/frontend/content/same-origin-policy.md diff --git a/src/data/question-groups/frontend/content/seo-best-practices.md b/src/content/question-groups/frontend/content/seo-best-practices.md similarity index 100% rename from src/data/question-groups/frontend/content/seo-best-practices.md rename to src/content/question-groups/frontend/content/seo-best-practices.md diff --git a/src/data/question-groups/frontend/content/service-workers.md b/src/content/question-groups/frontend/content/service-workers.md similarity index 100% rename from src/data/question-groups/frontend/content/service-workers.md rename to src/content/question-groups/frontend/content/service-workers.md diff --git a/src/data/question-groups/frontend/content/ssr-when.md b/src/content/question-groups/frontend/content/ssr-when.md similarity index 100% rename from src/data/question-groups/frontend/content/ssr-when.md rename to src/content/question-groups/frontend/content/ssr-when.md diff --git a/src/data/question-groups/frontend/content/state-mgmt-spa.md b/src/content/question-groups/frontend/content/state-mgmt-spa.md similarity index 100% rename from src/data/question-groups/frontend/content/state-mgmt-spa.md rename to src/content/question-groups/frontend/content/state-mgmt-spa.md diff --git a/src/data/question-groups/frontend/content/tree-shaking.md b/src/content/question-groups/frontend/content/tree-shaking.md similarity index 100% rename from src/data/question-groups/frontend/content/tree-shaking.md rename to src/content/question-groups/frontend/content/tree-shaking.md diff --git a/src/data/question-groups/frontend/content/vdom.md b/src/content/question-groups/frontend/content/vdom.md similarity index 100% rename from src/data/question-groups/frontend/content/vdom.md rename to src/content/question-groups/frontend/content/vdom.md diff --git a/src/data/question-groups/frontend/frontend.md b/src/content/question-groups/frontend/frontend.md similarity index 100% rename from src/data/question-groups/frontend/frontend.md rename to src/content/question-groups/frontend/frontend.md diff --git a/src/data/question-groups/javascript/content/alert-prompt-confirm.md b/src/content/question-groups/javascript/content/alert-prompt-confirm.md similarity index 100% rename from src/data/question-groups/javascript/content/alert-prompt-confirm.md rename to src/content/question-groups/javascript/content/alert-prompt-confirm.md diff --git a/src/data/question-groups/javascript/content/append-child-vs-insert-before.md b/src/content/question-groups/javascript/content/append-child-vs-insert-before.md similarity index 100% rename from src/data/question-groups/javascript/content/append-child-vs-insert-before.md rename to src/content/question-groups/javascript/content/append-child-vs-insert-before.md diff --git a/src/data/question-groups/javascript/content/async-vs-sync.md b/src/content/question-groups/javascript/content/async-vs-sync.md similarity index 100% rename from src/data/question-groups/javascript/content/async-vs-sync.md rename to src/content/question-groups/javascript/content/async-vs-sync.md diff --git a/src/data/question-groups/javascript/content/break-and-continue.md b/src/content/question-groups/javascript/content/break-and-continue.md similarity index 100% rename from src/data/question-groups/javascript/content/break-and-continue.md rename to src/content/question-groups/javascript/content/break-and-continue.md diff --git a/src/data/question-groups/javascript/content/callback-hell.md b/src/content/question-groups/javascript/content/callback-hell.md similarity index 100% rename from src/data/question-groups/javascript/content/callback-hell.md rename to src/content/question-groups/javascript/content/callback-hell.md diff --git a/src/data/question-groups/javascript/content/closure.md b/src/content/question-groups/javascript/content/closure.md similarity index 100% rename from src/data/question-groups/javascript/content/closure.md rename to src/content/question-groups/javascript/content/closure.md diff --git a/src/data/question-groups/javascript/content/comma-operator.md b/src/content/question-groups/javascript/content/comma-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/comma-operator.md rename to src/content/question-groups/javascript/content/comma-operator.md diff --git a/src/data/question-groups/javascript/content/create-element.md b/src/content/question-groups/javascript/content/create-element.md similarity index 100% rename from src/data/question-groups/javascript/content/create-element.md rename to src/content/question-groups/javascript/content/create-element.md diff --git a/src/data/question-groups/javascript/content/custom-event.md b/src/content/question-groups/javascript/content/custom-event.md similarity index 100% rename from src/data/question-groups/javascript/content/custom-event.md rename to src/content/question-groups/javascript/content/custom-event.md diff --git a/src/data/question-groups/javascript/content/debug-javascript.md b/src/content/question-groups/javascript/content/debug-javascript.md similarity index 100% rename from src/data/question-groups/javascript/content/debug-javascript.md rename to src/content/question-groups/javascript/content/debug-javascript.md diff --git a/src/data/question-groups/javascript/content/defer-vs-async.md b/src/content/question-groups/javascript/content/defer-vs-async.md similarity index 100% rename from src/data/question-groups/javascript/content/defer-vs-async.md rename to src/content/question-groups/javascript/content/defer-vs-async.md diff --git a/src/data/question-groups/javascript/content/do-while-loop.md b/src/content/question-groups/javascript/content/do-while-loop.md similarity index 100% rename from src/data/question-groups/javascript/content/do-while-loop.md rename to src/content/question-groups/javascript/content/do-while-loop.md diff --git a/src/data/question-groups/javascript/content/equality-operator.md b/src/content/question-groups/javascript/content/equality-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/equality-operator.md rename to src/content/question-groups/javascript/content/equality-operator.md diff --git a/src/data/question-groups/javascript/content/error-in-async-await.md b/src/content/question-groups/javascript/content/error-in-async-await.md similarity index 100% rename from src/data/question-groups/javascript/content/error-in-async-await.md rename to src/content/question-groups/javascript/content/error-in-async-await.md diff --git a/src/data/question-groups/javascript/content/error-in-promise.md b/src/content/question-groups/javascript/content/error-in-promise.md similarity index 100% rename from src/data/question-groups/javascript/content/error-in-promise.md rename to src/content/question-groups/javascript/content/error-in-promise.md diff --git a/src/data/question-groups/javascript/content/event-bubbling.md b/src/content/question-groups/javascript/content/event-bubbling.md similarity index 100% rename from src/data/question-groups/javascript/content/event-bubbling.md rename to src/content/question-groups/javascript/content/event-bubbling.md diff --git a/src/data/question-groups/javascript/content/event-loop.md b/src/content/question-groups/javascript/content/event-loop.md similarity index 100% rename from src/data/question-groups/javascript/content/event-loop.md rename to src/content/question-groups/javascript/content/event-loop.md diff --git a/src/data/question-groups/javascript/content/explicit-binding.md b/src/content/question-groups/javascript/content/explicit-binding.md similarity index 100% rename from src/data/question-groups/javascript/content/explicit-binding.md rename to src/content/question-groups/javascript/content/explicit-binding.md diff --git a/src/data/question-groups/javascript/content/filter-method.md b/src/content/question-groups/javascript/content/filter-method.md similarity index 100% rename from src/data/question-groups/javascript/content/filter-method.md rename to src/content/question-groups/javascript/content/filter-method.md diff --git a/src/data/question-groups/javascript/content/finally-block-in-promise.md b/src/content/question-groups/javascript/content/finally-block-in-promise.md similarity index 100% rename from src/data/question-groups/javascript/content/finally-block-in-promise.md rename to src/content/question-groups/javascript/content/finally-block-in-promise.md diff --git a/src/data/question-groups/javascript/content/find-unique-array-values.md b/src/content/question-groups/javascript/content/find-unique-array-values.md similarity index 100% rename from src/data/question-groups/javascript/content/find-unique-array-values.md rename to src/content/question-groups/javascript/content/find-unique-array-values.md diff --git a/src/data/question-groups/javascript/content/for-each-method.md b/src/content/question-groups/javascript/content/for-each-method.md similarity index 100% rename from src/data/question-groups/javascript/content/for-each-method.md rename to src/content/question-groups/javascript/content/for-each-method.md diff --git a/src/data/question-groups/javascript/content/heap-and-stack.md b/src/content/question-groups/javascript/content/heap-and-stack.md similarity index 100% rename from src/data/question-groups/javascript/content/heap-and-stack.md rename to src/content/question-groups/javascript/content/heap-and-stack.md diff --git a/src/data/question-groups/javascript/content/hoisting.md b/src/content/question-groups/javascript/content/hoisting.md similarity index 100% rename from src/data/question-groups/javascript/content/hoisting.md rename to src/content/question-groups/javascript/content/hoisting.md diff --git a/src/data/question-groups/javascript/content/iife.md b/src/content/question-groups/javascript/content/iife.md similarity index 100% rename from src/data/question-groups/javascript/content/iife.md rename to src/content/question-groups/javascript/content/iife.md diff --git a/src/data/question-groups/javascript/content/immutable-object.md b/src/content/question-groups/javascript/content/immutable-object.md similarity index 100% rename from src/data/question-groups/javascript/content/immutable-object.md rename to src/content/question-groups/javascript/content/immutable-object.md diff --git a/src/data/question-groups/javascript/content/increment-operator.md b/src/content/question-groups/javascript/content/increment-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/increment-operator.md rename to src/content/question-groups/javascript/content/increment-operator.md diff --git a/src/data/question-groups/javascript/content/infinite-loop.md b/src/content/question-groups/javascript/content/infinite-loop.md similarity index 100% rename from src/data/question-groups/javascript/content/infinite-loop.md rename to src/content/question-groups/javascript/content/infinite-loop.md diff --git a/src/data/question-groups/javascript/content/inheritance.md b/src/content/question-groups/javascript/content/inheritance.md similarity index 100% rename from src/data/question-groups/javascript/content/inheritance.md rename to src/content/question-groups/javascript/content/inheritance.md diff --git a/src/data/question-groups/javascript/content/labelled-statements.md b/src/content/question-groups/javascript/content/labelled-statements.md similarity index 100% rename from src/data/question-groups/javascript/content/labelled-statements.md rename to src/content/question-groups/javascript/content/labelled-statements.md diff --git a/src/data/question-groups/javascript/content/logical-operators.md b/src/content/question-groups/javascript/content/logical-operators.md similarity index 100% rename from src/data/question-groups/javascript/content/logical-operators.md rename to src/content/question-groups/javascript/content/logical-operators.md diff --git a/src/data/question-groups/javascript/content/map-method.md b/src/content/question-groups/javascript/content/map-method.md similarity index 100% rename from src/data/question-groups/javascript/content/map-method.md rename to src/content/question-groups/javascript/content/map-method.md diff --git a/src/data/question-groups/javascript/content/map.md b/src/content/question-groups/javascript/content/map.md similarity index 100% rename from src/data/question-groups/javascript/content/map.md rename to src/content/question-groups/javascript/content/map.md diff --git a/src/data/question-groups/javascript/content/measure-dimensions.md b/src/content/question-groups/javascript/content/measure-dimensions.md similarity index 100% rename from src/data/question-groups/javascript/content/measure-dimensions.md rename to src/content/question-groups/javascript/content/measure-dimensions.md diff --git a/src/data/question-groups/javascript/content/merge-arrays.md b/src/content/question-groups/javascript/content/merge-arrays.md similarity index 100% rename from src/data/question-groups/javascript/content/merge-arrays.md rename to src/content/question-groups/javascript/content/merge-arrays.md diff --git a/src/data/question-groups/javascript/content/nullish-coalescing-operator.md b/src/content/question-groups/javascript/content/nullish-coalescing-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/nullish-coalescing-operator.md rename to src/content/question-groups/javascript/content/nullish-coalescing-operator.md diff --git a/src/data/question-groups/javascript/content/parse-json.md b/src/content/question-groups/javascript/content/parse-json.md similarity index 100% rename from src/data/question-groups/javascript/content/parse-json.md rename to src/content/question-groups/javascript/content/parse-json.md diff --git a/src/data/question-groups/javascript/content/prevent-default.md b/src/content/question-groups/javascript/content/prevent-default.md similarity index 100% rename from src/data/question-groups/javascript/content/prevent-default.md rename to src/content/question-groups/javascript/content/prevent-default.md diff --git a/src/data/question-groups/javascript/content/promise-all-vs-all-settled.md b/src/content/question-groups/javascript/content/promise-all-vs-all-settled.md similarity index 100% rename from src/data/question-groups/javascript/content/promise-all-vs-all-settled.md rename to src/content/question-groups/javascript/content/promise-all-vs-all-settled.md diff --git a/src/data/question-groups/javascript/content/prototype-chain.md b/src/content/question-groups/javascript/content/prototype-chain.md similarity index 100% rename from src/data/question-groups/javascript/content/prototype-chain.md rename to src/content/question-groups/javascript/content/prototype-chain.md diff --git a/src/data/question-groups/javascript/content/query-selector.md b/src/content/question-groups/javascript/content/query-selector.md similarity index 100% rename from src/data/question-groups/javascript/content/query-selector.md rename to src/content/question-groups/javascript/content/query-selector.md diff --git a/src/data/question-groups/javascript/content/reduce-method.md b/src/content/question-groups/javascript/content/reduce-method.md similarity index 100% rename from src/data/question-groups/javascript/content/reduce-method.md rename to src/content/question-groups/javascript/content/reduce-method.md diff --git a/src/data/question-groups/javascript/content/remove-element.md b/src/content/question-groups/javascript/content/remove-element.md similarity index 100% rename from src/data/question-groups/javascript/content/remove-element.md rename to src/content/question-groups/javascript/content/remove-element.md diff --git a/src/data/question-groups/javascript/content/scroll-to-top.md b/src/content/question-groups/javascript/content/scroll-to-top.md similarity index 100% rename from src/data/question-groups/javascript/content/scroll-to-top.md rename to src/content/question-groups/javascript/content/scroll-to-top.md diff --git a/src/data/question-groups/javascript/content/set-interval.md b/src/content/question-groups/javascript/content/set-interval.md similarity index 100% rename from src/data/question-groups/javascript/content/set-interval.md rename to src/content/question-groups/javascript/content/set-interval.md diff --git a/src/data/question-groups/javascript/content/set-timeout.md b/src/content/question-groups/javascript/content/set-timeout.md similarity index 100% rename from src/data/question-groups/javascript/content/set-timeout.md rename to src/content/question-groups/javascript/content/set-timeout.md diff --git a/src/data/question-groups/javascript/content/set.md b/src/content/question-groups/javascript/content/set.md similarity index 100% rename from src/data/question-groups/javascript/content/set.md rename to src/content/question-groups/javascript/content/set.md diff --git a/src/data/question-groups/javascript/content/spread-operator.md b/src/content/question-groups/javascript/content/spread-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/spread-operator.md rename to src/content/question-groups/javascript/content/spread-operator.md diff --git a/src/data/question-groups/javascript/content/switch-case.md b/src/content/question-groups/javascript/content/switch-case.md similarity index 100% rename from src/data/question-groups/javascript/content/switch-case.md rename to src/content/question-groups/javascript/content/switch-case.md diff --git a/src/data/question-groups/javascript/content/ternary-operator.md b/src/content/question-groups/javascript/content/ternary-operator.md similarity index 100% rename from src/data/question-groups/javascript/content/ternary-operator.md rename to src/content/question-groups/javascript/content/ternary-operator.md diff --git a/src/data/question-groups/javascript/content/variable-number-of-arguments.md b/src/content/question-groups/javascript/content/variable-number-of-arguments.md similarity index 100% rename from src/data/question-groups/javascript/content/variable-number-of-arguments.md rename to src/content/question-groups/javascript/content/variable-number-of-arguments.md diff --git a/src/data/question-groups/javascript/javascript.md b/src/content/question-groups/javascript/javascript.md similarity index 100% rename from src/data/question-groups/javascript/javascript.md rename to src/content/question-groups/javascript/javascript.md diff --git a/src/data/question-groups/nodejs/content/commonjs-vs-esm.md b/src/content/question-groups/nodejs/content/commonjs-vs-esm.md similarity index 100% rename from src/data/question-groups/nodejs/content/commonjs-vs-esm.md rename to src/content/question-groups/nodejs/content/commonjs-vs-esm.md diff --git a/src/data/question-groups/nodejs/content/error-handling.md b/src/content/question-groups/nodejs/content/error-handling.md similarity index 100% rename from src/data/question-groups/nodejs/content/error-handling.md rename to src/content/question-groups/nodejs/content/error-handling.md diff --git a/src/data/question-groups/nodejs/content/exit-codes.md b/src/content/question-groups/nodejs/content/exit-codes.md similarity index 100% rename from src/data/question-groups/nodejs/content/exit-codes.md rename to src/content/question-groups/nodejs/content/exit-codes.md diff --git a/src/data/question-groups/nodejs/content/input-from-command-line.md b/src/content/question-groups/nodejs/content/input-from-command-line.md similarity index 100% rename from src/data/question-groups/nodejs/content/input-from-command-line.md rename to src/content/question-groups/nodejs/content/input-from-command-line.md diff --git a/src/data/question-groups/nodejs/content/order-priority.md b/src/content/question-groups/nodejs/content/order-priority.md similarity index 100% rename from src/data/question-groups/nodejs/content/order-priority.md rename to src/content/question-groups/nodejs/content/order-priority.md diff --git a/src/data/question-groups/nodejs/content/process-argv.md b/src/content/question-groups/nodejs/content/process-argv.md similarity index 100% rename from src/data/question-groups/nodejs/content/process-argv.md rename to src/content/question-groups/nodejs/content/process-argv.md diff --git a/src/data/question-groups/nodejs/content/process-cwd-vs-dirname.md b/src/content/question-groups/nodejs/content/process-cwd-vs-dirname.md similarity index 100% rename from src/data/question-groups/nodejs/content/process-cwd-vs-dirname.md rename to src/content/question-groups/nodejs/content/process-cwd-vs-dirname.md diff --git a/src/data/question-groups/nodejs/content/web-server.md b/src/content/question-groups/nodejs/content/web-server.md similarity index 100% rename from src/data/question-groups/nodejs/content/web-server.md rename to src/content/question-groups/nodejs/content/web-server.md diff --git a/src/data/question-groups/nodejs/nodejs.md b/src/content/question-groups/nodejs/nodejs.md similarity index 100% rename from src/data/question-groups/nodejs/nodejs.md rename to src/content/question-groups/nodejs/nodejs.md diff --git a/src/data/question-groups/react/content/component-lifecycle.md b/src/content/question-groups/react/content/component-lifecycle.md similarity index 100% rename from src/data/question-groups/react/content/component-lifecycle.md rename to src/content/question-groups/react/content/component-lifecycle.md diff --git a/src/data/question-groups/react/content/controlled-vs-uncontrolled.md b/src/content/question-groups/react/content/controlled-vs-uncontrolled.md similarity index 100% rename from src/data/question-groups/react/content/controlled-vs-uncontrolled.md rename to src/content/question-groups/react/content/controlled-vs-uncontrolled.md diff --git a/src/data/question-groups/react/content/create-portal.md b/src/content/question-groups/react/content/create-portal.md similarity index 100% rename from src/data/question-groups/react/content/create-portal.md rename to src/content/question-groups/react/content/create-portal.md diff --git a/src/data/question-groups/react/content/custom-hook.md b/src/content/question-groups/react/content/custom-hook.md similarity index 100% rename from src/data/question-groups/react/content/custom-hook.md rename to src/content/question-groups/react/content/custom-hook.md diff --git a/src/data/question-groups/react/content/error-boundaries.md b/src/content/question-groups/react/content/error-boundaries.md similarity index 100% rename from src/data/question-groups/react/content/error-boundaries.md rename to src/content/question-groups/react/content/error-boundaries.md diff --git a/src/data/question-groups/react/content/flush-sync.md b/src/content/question-groups/react/content/flush-sync.md similarity index 100% rename from src/data/question-groups/react/content/flush-sync.md rename to src/content/question-groups/react/content/flush-sync.md diff --git a/src/data/question-groups/react/content/investigate-slow-app.md b/src/content/question-groups/react/content/investigate-slow-app.md similarity index 100% rename from src/data/question-groups/react/content/investigate-slow-app.md rename to src/content/question-groups/react/content/investigate-slow-app.md diff --git a/src/data/question-groups/react/content/lazy-loading.md b/src/content/question-groups/react/content/lazy-loading.md similarity index 100% rename from src/data/question-groups/react/content/lazy-loading.md rename to src/content/question-groups/react/content/lazy-loading.md diff --git a/src/data/question-groups/react/content/pure-components.md b/src/content/question-groups/react/content/pure-components.md similarity index 100% rename from src/data/question-groups/react/content/pure-components.md rename to src/content/question-groups/react/content/pure-components.md diff --git a/src/data/question-groups/react/content/re-renders.md b/src/content/question-groups/react/content/re-renders.md similarity index 100% rename from src/data/question-groups/react/content/re-renders.md rename to src/content/question-groups/react/content/re-renders.md diff --git a/src/data/question-groups/react/content/ref-forwarding.md b/src/content/question-groups/react/content/ref-forwarding.md similarity index 100% rename from src/data/question-groups/react/content/ref-forwarding.md rename to src/content/question-groups/react/content/ref-forwarding.md diff --git a/src/data/question-groups/react/content/render-list.md b/src/content/question-groups/react/content/render-list.md similarity index 100% rename from src/data/question-groups/react/content/render-list.md rename to src/content/question-groups/react/content/render-list.md diff --git a/src/data/question-groups/react/content/strict-mode.md b/src/content/question-groups/react/content/strict-mode.md similarity index 100% rename from src/data/question-groups/react/content/strict-mode.md rename to src/content/question-groups/react/content/strict-mode.md diff --git a/src/data/question-groups/react/content/suspense.md b/src/content/question-groups/react/content/suspense.md similarity index 100% rename from src/data/question-groups/react/content/suspense.md rename to src/content/question-groups/react/content/suspense.md diff --git a/src/data/question-groups/react/content/synthetic-events.md b/src/content/question-groups/react/content/synthetic-events.md similarity index 100% rename from src/data/question-groups/react/content/synthetic-events.md rename to src/content/question-groups/react/content/synthetic-events.md diff --git a/src/data/question-groups/react/content/use-transition.md b/src/content/question-groups/react/content/use-transition.md similarity index 100% rename from src/data/question-groups/react/content/use-transition.md rename to src/content/question-groups/react/content/use-transition.md diff --git a/src/data/question-groups/react/content/virtual-dom.md b/src/content/question-groups/react/content/virtual-dom.md similarity index 100% rename from src/data/question-groups/react/content/virtual-dom.md rename to src/content/question-groups/react/content/virtual-dom.md diff --git a/src/data/question-groups/react/react.md b/src/content/question-groups/react/react.md similarity index 100% rename from src/data/question-groups/react/react.md rename to src/content/question-groups/react/react.md diff --git a/src/lib/author.ts b/src/lib/author.ts index bc97ce690..99c82d8be 100644 --- a/src/lib/author.ts +++ b/src/lib/author.ts @@ -1,29 +1,6 @@ -import type { MarkdownFileType } from './file'; +import { getCollection, type CollectionEntry } from 'astro:content'; -export interface AuthorFrontmatter { - name: string; - imageUrl: string; - employment?: { - title: string; - company: string; - }; - social: { - twitter: string; - github: string; - linkedin: string; - website: string; - }; -} - -export type AuthorFileType = MarkdownFileType & { - id: string; -}; - -function authorPathToId(filePath: string): string { - const fileName = filePath.split('/').pop() || ''; - - return fileName.replace('.md', ''); -} +export type AuthorFileType = CollectionEntry<'authors'>; /** * Gets the IDs of all the authors available on the website @@ -31,46 +8,23 @@ function authorPathToId(filePath: string): string { * @returns string[] Array of author IDs */ export async function getAuthorIds() { - const authorFiles = import.meta.glob( - '/src/data/authors/*.md', - { - eager: true, - }, - ); - - return Object.keys(authorFiles).map(authorPathToId); + const authorEntries = await getCollection('authors'); + return authorEntries.map((entry) => entry.slug); } export async function getAllAuthors(): Promise { - const authorFilesMap: Record = - import.meta.glob('/src/data/authors/*.md', { - eager: true, - }); - - const authorFiles = Object.values(authorFilesMap); - - return authorFiles.map((authorFile) => ({ - ...authorFile, - id: authorPathToId(authorFile.file), - })); + return await getCollection('authors'); } export async function getAuthorById(id: string): Promise { - const authorFilesMap: Record = - import.meta.glob('/src/data/authors/*.md', { - eager: true, - }); - - const authorFile = Object.values(authorFilesMap).find((authorFile) => { - return authorPathToId(authorFile.file) === id; - }); - + const authorEntries = await getCollection( + 'authors', + (entry) => entry.slug === id, + ); + const authorFile = authorEntries?.[0]; if (!authorFile) { throw new Error(`Author with ID ${id} not found`); } - return { - ...authorFile, - id: authorPathToId(authorFile.file), - }; + return authorFile; } diff --git a/src/lib/guide.ts b/src/lib/guide.ts index a83b1aa84..35e2b4cb3 100644 --- a/src/lib/guide.ts +++ b/src/lib/guide.ts @@ -1,51 +1,17 @@ import type { MarkdownFileType } from './file'; import { type AuthorFileType, getAllAuthors } from './author.ts'; +import { getCollection, type CollectionEntry } from 'astro:content'; -export interface GuideFrontmatter { - title: string; - description: string; - authorId: string; - canonicalUrl?: string; - // alternate path where this guide has been published - excludedBySlug?: string; - seo: { - title: string; - description: string; - ogImageUrl?: string; - }; - isNew: boolean; - type: 'visual' | 'textual'; - date: string; - sitemap: { - priority: number; - changefreq: 'daily' | 'weekly' | 'monthly' | 'yearly'; - }; - tags: string[]; -} - -export type GuideFileType = MarkdownFileType & { - id: string; +export type GuideFileType = CollectionEntry<'guides'> & { author: AuthorFileType; }; -/** - * Generates id from the given guide file - * @param filePath Markdown file path - * - * @returns unique guide identifier - */ -function guidePathToId(filePath: string): string { - const fileName = filePath.split('/').pop() || ''; - - return fileName.replace('.md', ''); -} - export async function getGuidesByAuthor( authorId: string, ): Promise { const allGuides = await getAllGuides(); - return allGuides.filter((guide) => guide.author?.id === authorId); + return allGuides.filter((guide) => guide.author?.slug === authorId); } /** @@ -53,27 +19,32 @@ export async function getGuidesByAuthor( * @returns Promisifed guide files */ export async function getAllGuides(): Promise { - // @ts-ignore - const guides = import.meta.glob('/src/data/guides/*.md', { - eager: true, - }); - + const guideEntries = await getCollection('guides'); const allAuthors = await getAllAuthors(); - const guideFiles = Object.values(guides) as GuideFileType[]; - const enrichedGuides: GuideFileType[] = guideFiles.map((guideFile) => ({ - ...guideFile, - id: guidePathToId(guideFile.file), - author: allAuthors.find( - (author) => author.id === guideFile.frontmatter.authorId, - )!, - })); + const enrichedGuides: GuideFileType[] = guideEntries + .map((guideFile) => { + const author = allAuthors.find( + (author) => author.slug === guideFile.data.authorId, + ); + + if (!author) { + throw new Error( + `Author with ID ${guideFile.data.authorId} not found for guide ${guideFile.slug}`, + ); + } - return enrichedGuides.sort( - (a, b) => - new Date(b.frontmatter.date).valueOf() - - new Date(a.frontmatter.date).valueOf(), - ); + return { + ...guideFile, + author, + }; + }) + .sort( + (a, b) => + new Date(b.data.date).valueOf() - new Date(a.data.date).valueOf(), + ); + + return enrichedGuides; } /** diff --git a/src/lib/question-group.ts b/src/lib/question-group.ts index 25eee856e..c1b848c79 100644 --- a/src/lib/question-group.ts +++ b/src/lib/question-group.ts @@ -1,37 +1,9 @@ import type { MarkdownFileType } from './file'; import slugify from 'slugify'; import { getAllAuthors } from './author.ts'; +import type { CollectionEntry } from 'astro:content'; -interface RawQuestionGroupFrontmatter { - order: number; - briefTitle: string; - briefDescription: string; - title: string; - description: string; - isNew: boolean; - authorId?: string; - date?: string; - seo: { - title: string; - description: string; - ogImageUrl?: string; - keywords: string[]; - }; - sitemap: { - priority: number; - changefreq: string; - }; - questions: { - question: string; - answer: string; - topics: string[]; - }[]; -} - -type RawQuestionGroupFileType = - MarkdownFileType & { - id: string; - }; +type RawQuestionGroupFileType = CollectionEntry<'question-groups'>; export type QuestionType = { id: string; diff --git a/src/pages/authors/[authorId].astro b/src/pages/authors/[authorId].astro index 0ed281319..b67361202 100644 --- a/src/pages/authors/[authorId].astro +++ b/src/pages/authors/[authorId].astro @@ -21,7 +21,8 @@ export async function getStaticPaths() { const { authorId } = Astro.params; const author = await getAuthorById(authorId); -const authorFrontmatter = author.frontmatter; +const authorFrontmatter = author.data; +const { Content } = await author.render(); const guides = await getGuidesByAuthor(authorId); const questionGuides = (await getAllQuestionGroups()).filter( @@ -32,10 +33,10 @@ const videos = await getVideosByAuthor(authorId); - +
@@ -86,7 +87,7 @@ const videos = await getVideosByAuthor(authorId); ) } { - authorFrontmatter.social.twitter && ( + authorFrontmatter?.social?.twitter && ( @@ -108,7 +109,7 @@ const videos = await getVideosByAuthor(authorId); ) } { - authorFrontmatter.social.website && ( + authorFrontmatter?.social?.website && ( { - [...guides, ...questionGuides] + [...guides] .sort((a, b) => { - const aDate = a.frontmatter.date || a.frontmatter.publishedAt; - const bDate = b.frontmatter.date || b.frontmatter.publishedAt; - return new Date(bDate) - new Date(aDate); + const aDate = a.data.date; + // const aDate = a.data.date || a.data.publishedAt; + const bDate = b.data.date; + // const bDate = b.data.date || b.data.publishedAt; + return new Date(bDate).getTime() - new Date(aDate).getTime(); }) .map((guide) => ) } diff --git a/src/pages/authors/[authorId].json.ts b/src/pages/authors/[authorId].json.ts index 4193292f7..c8fd233cc 100644 --- a/src/pages/authors/[authorId].json.ts +++ b/src/pages/authors/[authorId].json.ts @@ -11,7 +11,7 @@ export async function getStaticPaths() { return { params: { authorId }, props: { - authorDetails: authorDetails?.frontmatter || {}, + authorDetails: authorDetails?.data || {}, }, }; }), diff --git a/tsconfig.json b/tsconfig.json index c849abc14..685562cb0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,9 @@ "module": "ESNext", "moduleResolution": "node", "jsx": "react-jsx", - "jsxImportSource": "react" + "jsxImportSource": "react", + "strictNullChecks": true, + "allowJs": true }, "exclude": ["node_modules", "dist"] }