{"owner":"loopbackio","repo":"loopback-next","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with\ncode in this repository.\n\n## Project Overview\n\nLoopBack 4 is a highly extensible Node.js and TypeScript framework for building\nAPIs and microservices. This is the monorepo (`loopback-next`) containing all\ncore packages, extensions, and examples.\n\n## Monorepo Structure\n\n- **packages/** — Core framework packages (~29 packages)\n- **extensions/** — Optional extensions (authentication-jwt, graphql, cron,\n  metrics, logging, etc.)\n- **examples/** — Sample applications demonstrating features\n- **acceptance/** — Database connector acceptance tests\n- **fixtures/** — Test fixtures and mock services\n- **bodyparsers/** — Body parser extensions\n- **sandbox/** — For testing monorepo packages as local dependencies\n- **benchmark/** — Performance benchmarks\n- **docs/** — Jekyll-based documentation site\n\nManaged with **Lerna** (independent versioning) and **npm workspaces**.\n\n## Build & Development Commands\n\n```bash\n# Install dependencies (also auto-updates TypeScript project references)\nnpm ci\n\n# Build all packages (incremental TypeScript compilation)\nnpm run build\n\n# Full clean rebuild\nnpm run clean && npm run build\n\n# Build a single package\ncd packages/<name> && npm run build\n```\n\n## Testing\n\n```bash\n# Full test suite (clean + build + mocha + nyc + lint)\nnpm test\n\n# Run mocha tests only (skips build/lint — useful for fast iteration)\nnpm run mocha\n\n# Test a single package (builds & tests it)\ncd packages/<name> && npm test\n\n# Disable parallel test execution\nnpm run mocha -- -j 1\n\n# Run CI-only heavy tests locally\nCI=1 npm test\n```\n\nTest framework: **Mocha** (parallel, 10s timeout) with **NYC** coverage. Tests\nrun against compiled JS in `dist/__tests__/`. The `pretest` script auto-builds,\nso `npm test` in a package compiles then runs tests.\n\nTest files follow the convention `{name}.{test-type}.ts` where test-type is\n`unit`, `integration`, or `acceptance`, placed under\n`src/__tests__/{unit,integration,acceptance}/`.\n\nBuild wrappers from `@loopback/build`: `lb-tsc`, `lb-mocha`, `lb-eslint`,\n`lb-prettier`, `lb-nyc`, `lb-clean`.\n\n## Linting & Formatting\n\n```bash\n# Run ESLint + Prettier checks\nnpm run lint\n\n# Auto-fix lint and formatting issues\nnpm run lint:fix\n```\n\n**Prettier** config:\n`{bracketSpacing: false, singleQuote: true, printWidth: 80, trailingComma: \"all\", arrowParens: \"avoid\"}`.\n\nPre-commit hook (Husky + lint-staged) auto-formats staged files. Bypass with\n`LINT_STAGED=0`.\n\n## Commit Message Convention\n\nUses **Conventional Commits** enforced by commitlint:\n\n```\n<type>(<scope>): <subject>\n```\n\n- **type**: feat, fix, docs, style, refactor, perf, test, build, ci, chore,\n  revert\n- **scope**: package directory name (e.g., `core`, `rest`, `context`,\n  `repository`)\n- **subject**: imperative, lowercase, no trailing dot\n\nUse `git cz` (commitizen) for interactive commit message generation.\n\n## Key Architectural Concepts\n\n### Dependency Injection & Context\n\nThe IoC container (`@loopback/context`) is the foundation. `@loopback/core`\nre-exports all of `@loopback/context`'s public API — application code should\nimport from `@loopback/core`, not `@loopback/context` directly.\n\n**Core dependency chain**: `@loopback/metadata` → `@loopback/context` →\n`@loopback/core` → `@loopback/boot`, `@loopback/rest`, etc.\n\n### Foundation vs Framework Packages\n\n- **Foundation-level** (internal building blocks, not directly consumed by\n  apps): `context`, `metadata`, `express`, `http-server`, `openapi-v3`,\n  `repository-json-schema`\n- **Framework-level** (everything else — used directly by applications)\n\nIn documentation and examples, always reference framework-level packages.\n\n### TypeScript Configuration\n\nTwo sets of tsconfig files serve different purposes:\n\n- **Root `tsconfig.json`** — Used by VS Code for cross-package navigation\n  (enables \"go to definition\" jumping to `.ts` source, cross-package rename\n  refactoring)\n- **Root `tsconfig.build.json`** — Used by ESLint\n- **Per-package `tsconfig.json`** — Used by `npm run build` to compile each\n  package to its `dist/` directory\n\nAll extend `@loopback/build/config/tsconfig.common.json`. TypeScript project\nreferences are auto-updated via `bin/update-ts-project-refs.js` (runs on\n`postinstall`).\n\nKey compiler options: `strict: true`, `target: es2018`, `module: commonjs`,\n`experimentalDecorators: true`, `emitDecoratorMetadata: true`.\n\n## File Naming Convention\n\nFollows Angular-style dotted naming: `{name}.{artifact-type}.ts`\n\nExamples: `authenticate.decorator.ts`, `boot.component.ts`,\n`user.controller.ts`, `todo.repository.ts`, `application.acceptance.ts`\n\n## Code Style Rules (ESLint)\n\n- `@typescript-eslint/no-explicit-any`: **error** — avoid `any` types\n- `@typescript-eslint/no-floating-promises`: **error** — all promises must be\n  awaited or handled\n- `@typescript-eslint/await-thenable`: **error**\n- `@typescript-eslint/no-misused-promises`: **error**\n- `@typescript-eslint/return-await`: **error**\n- `@typescript-eslint/no-shadow`: **error**\n- `mocha/no-exclusive-tests`: **error** — no `.only()` in committed tests\n- Naming: camelCase default, PascalCase for types, UPPER_CASE for constants,\n  leading underscore for private/protected members, PascalCase for mixin\n  functions ending in `Mixin`\n\n## Copyright Headers\n\nAll source files must include the copyright header:\n\n```ts\n// Copyright IBM Corp. and LoopBack contributors <year>. All Rights Reserved.\n// Node module: <package-name>\n// This file is licensed under the MIT License.\n// License text available at https://opensource.org/licenses/MIT\n```\n\nRun `lb4 copyright` to update headers automatically.\n\n## Adding a New Package\n\nUse the helper script: `node bin/create-package.js <package-name>`. It\nscaffolds, fixes up package.json, updates copyright, bootstraps dependencies,\nand updates TypeScript project references.\n\nAfter creation, update `CODEOWNERS` and `docs/site/MONOREPO.md`.\n\n## Connector Limitation in Monorepo\n\nWhen using datasource connectors inside the monorepo (e.g., in examples),\nrequire the connector module directly in the config instead of using a string\nname:\n\n```ts\nconnector: require('loopback-connector-mongodb'); // not connector: 'mongodb'\n```\n\nThis is due to how Lerna symlinks resolve module paths.\n\n## Node.js Support\n\nEngines: Node.js 18, 20, or 22. npm >= 7.\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with\ncode in this repository.\n\n## Project Overview\n\nLoopBack 4 is a highly extensible Node.js and TypeScript framework for building\nAPIs and microservices. This is the monorepo (`loopback-next`) containing all\ncore packages, extensions, and examples.\n\n## Monorepo Structure\n\n- **packages/** — Core framework packages (~29 packages)\n- **extensions/** — Optional extensions (authentication-jwt, graphql, cron,\n  metrics, logging, etc.)\n- **examples/** — Sample applications demonstrating features\n- **acceptance/** — Database connector acceptance tests\n- **fixtures/** — Test fixtures and mock services\n- **bodyparsers/** — Body parser extensions\n- **sandbox/** — For testing monorepo packages as local dependencies\n- **benchmark/** — Performance benchmarks\n- **docs/** — Jekyll-based documentation site\n\nManaged with **Lerna** (independent versioning) and **npm workspaces**.\n\n## Build & Development Commands\n\n```bash\n# Install dependencies (also auto-updates TypeScript project references)\nnpm ci\n\n# Build all packages (incremental TypeScript compilation)\nnpm run build\n\n# Full clean rebuild\nnpm run clean && npm run build\n\n# Build a single package\ncd packages/<name> && npm run build\n```\n\n## Testing\n\n```bash\n# Full test suite (clean + build + mocha + nyc + lint)\nnpm test\n\n# Run mocha tests only (skips build/lint — useful for fast iteration)\nnpm run mocha\n\n# Test a single package (builds & tests it)\ncd packages/<name> && npm test\n\n# Disable parallel test execution\nnpm run mocha -- -j 1\n\n# Run CI-only heavy tests locally\nCI=1 npm test\n```\n\nTest framework: **Mocha** (parallel, 10s timeout) with **NYC** coverage. Tests\nrun against compiled JS in `dist/__tests__/`. The `pretest` script auto-builds,\nso `npm test` in a package compiles then runs tests.\n\nTest files follow the convention `{name}.{test-type}.ts` where test-type is\n`unit`, `integration`, or `acceptance`, placed under\n`src/__tests__/{unit,integration,acceptance}/`.\n\nBuild wrappers from `@loopback/build`: `lb-tsc`, `lb-mocha`, `lb-eslint`,\n`lb-prettier`, `lb-nyc`, `lb-clean`.\n\n## Linting & Formatting\n\n```bash\n# Run ESLint + Prettier checks\nnpm run lint\n\n# Auto-fix lint and formatting issues\nnpm run lint:fix\n```\n\n**Prettier** config:\n`{bracketSpacing: false, singleQuote: true, printWidth: 80, trailingComma: \"all\", arrowParens: \"avoid\"}`.\n\nPre-commit hook (Husky + lint-staged) auto-formats staged files. Bypass with\n`LINT_STAGED=0`.\n\n## Commit Message Convention\n\nUses **Conventional Commits** enforced by commitlint:\n\n```\n<type>(<scope>): <subject>\n```\n\n- **type**: feat, fix, docs, style, refactor, perf, test, build, ci, chore,\n  revert\n- **scope**: package directory name (e.g., `core`, `rest`, `context`,\n  `repository`)\n- **subject**: imperative, lowercase, no trailing dot\n\nUse `git cz` (commitizen) for interactive commit message generation.\n\n## Key Architectural Concepts\n\n### Dependency Injection & Context\n\nThe IoC container (`@loopback/context`) is the foundation. `@loopback/core`\nre-exports all of `@loopback/context`'s public API — application code should\nimport from `@loopback/core`, not `@loopback/context` directly.\n\n**Core dependency chain**: `@loopback/metadata` → `@loopback/context` →\n`@loopback/core` → `@loopback/boot`, `@loopback/rest`, etc.\n\n### Foundation vs Framework Packages\n\n- **Foundation-level** (internal building blocks, not directly consumed by\n  apps): `context`, `metadata`, `express`, `http-server`, `openapi-v3`,\n  `repository-json-schema`\n- **Framework-level** (everything else — used directly by applications)\n\nIn documentation and examples, always reference framework-level packages.\n\n### TypeScript Configuration\n\nTwo sets of tsconfig files serve different purposes:\n\n- **Root `tsconfig.json`** — Used by VS Code for cross-package navigation\n  (enables \"go to definition\" jumping to `.ts` source, cross-package rename\n  refactoring)\n- **Root `tsconfig.build.json`** — Used by ESLint\n- **Per-package `tsconfig.json`** — Used by `npm run build` to compile each\n  package to its `dist/` directory\n\nAll extend `@loopback/build/config/tsconfig.common.json`. TypeScript project\nreferences are auto-updated via `bin/update-ts-project-refs.js` (runs on\n`postinstall`).\n\nKey compiler options: `strict: true`, `target: es2018`, `module: commonjs`,\n`experimentalDecorators: true`, `emitDecoratorMetadata: true`.\n\n## File Naming Convention\n\nFollows Angular-style dotted naming: `{name}.{artifact-type}.ts`\n\nExamples: `authenticate.decorator.ts`, `boot.component.ts`,\n`user.controller.ts`, `todo.repository.ts`, `application.acceptance.ts`\n\n## Code Style Rules (ESLint)\n\n- `@typescript-eslint/no-explicit-any`: **error** — avoid `any` types\n- `@typescript-eslint/no-floating-promises`: **error** — all promises must be\n  awaited or handled\n- `@typescript-eslint/await-thenable`: **error**\n- `@typescript-eslint/no-misused-promises`: **error**\n- `@typescript-eslint/return-await`: **error**\n- `@typescript-eslint/no-shadow`: **error**\n- `mocha/no-exclusive-tests`: **error** — no `.only()` in committed tests\n- Naming: camelCase default, PascalCase for types, UPPER_CASE for constants,\n  leading underscore for private/protected members, PascalCase for mixin\n  functions ending in `Mixin`\n\n## Copyright Headers\n\nAll source files must include the copyright header:\n\n```ts\n// Copyright IBM Corp. and LoopBack contributors <year>. All Rights Reserved.\n// Node module: <package-name>\n// This file is licensed under the MIT License.\n// License text available at https://opensource.org/licenses/MIT\n```\n\nRun `lb4 copyright` to update headers automatically.\n\n## Adding a New Package\n\nUse the helper script: `node bin/create-package.js <package-name>`. It\nscaffolds, fixes up package.json, updates copyright, bootstraps dependencies,\nand updates TypeScript project references.\n\nAfter creation, update `CODEOWNERS` and `docs/site/MONOREPO.md`.\n\n## Connector Limitation in Monorepo\n\nWhen using datasource connectors inside the monorepo (e.g., in examples),\nrequire the connector module directly in the config instead of using a string\nname:\n\n```ts\nconnector: require('loopback-connector-mongodb'); // not connector: 'mongodb'\n```\n\nThis is due to how Lerna symlinks resolve module paths.\n\n## Node.js Support\n\nEngines: Node.js 18, 20, or 22. npm >= 7.\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with\ncode in this repository.\n\n## Project Overview\n\nLoopBack 4 is a highly extensible Node.js and TypeScript framework for building\nAPIs and microservices. This is the monorepo (`loopback-next`) containing all\ncore packages, extensions, and examples.\n\n## Monorepo Structure\n\n- **packages/** — Core framework packages (~29 packages)\n- **extensions/** — Optional extensions (authentication-jwt, graphql, cron,\n  metrics, logging, etc.)\n- **examples/** — Sample applications demonstrating features\n- **acceptance/** — Database connector acceptance tests\n- **fixtures/** — Test fixtures and mock services\n- **bodyparsers/** — Body parser extensions\n- **sandbox/** — For testing monorepo packages as local dependencies\n- **benchmark/** — Performance benchmarks\n- **docs/** — Jekyll-based documentation site\n\nManaged with **Lerna** (independent versioning) and **npm workspaces**.\n\n## Build & Development Commands\n\n```bash\n# Install dependencies (also auto-updates TypeScript project references)\nnpm ci\n\n# Build all packages (incremental TypeScript compilation)\nnpm run build\n\n# Full clean rebuild\nnpm run clean && npm run build\n\n# Build a single package\ncd packages/<name> && npm run build\n```\n\n## Testing\n\n```bash\n# Full test suite (clean + build + mocha + nyc + lint)\nnpm test\n\n# Run mocha tests only (skips build/lint — useful for fast iteration)\nnpm run mocha\n\n# Test a single package (builds & tests it)\ncd packages/<name> && npm test\n\n# Disable parallel test execution\nnpm run mocha -- -j 1\n\n# Run CI-only heavy tests locally\nCI=1 npm test\n```\n\nTest framework: **Mocha** (parallel, 10s timeout) with **NYC** coverage. Tests\nrun against compiled JS in `dist/__tests__/`. The `pretest` script auto-builds,\nso `npm test` in a package compiles then runs tests.\n\nTest files follow the convention `{name}.{test-type}.ts` where test-type is\n`unit`, `integration`, or `acceptance`, placed under\n`src/__tests__/{unit,integration,acceptance}/`.\n\nBuild wrappers from `@loopback/build`: `lb-tsc`, `lb-mocha`, `lb-eslint`,\n`lb-prettier`, `lb-nyc`, `lb-clean`.\n\n## Linting & Formatting\n\n```bash\n# Run ESLint + Prettier checks\nnpm run lint\n\n# Auto-fix lint and formatting issues\nnpm run lint:fix\n```\n\n**Prettier** config:\n`{bracketSpacing: false, singleQuote: true, printWidth: 80, trailingComma: \"all\", arrowParens: \"avoid\"}`.\n\nPre-commit hook (Husky + lint-staged) auto-formats staged files. Bypass with\n`LINT_STAGED=0`.\n\n## Commit Message Convention\n\nUses **Conventional Commits** enforced by commitlint:\n\n```\n<type>(<scope>): <subject>\n```\n\n- **type**: feat, fix, docs, style, refactor, perf, test, build, ci, chore,\n  revert\n- **scope**: package directory name (e.g., `core`, `rest`, `context`,\n  `repository`)\n- **subject**: imperative, lowercase, no trailing dot\n\nUse `git cz` (commitizen) for interactive commit message generation.\n\n## Key Architectural Concepts\n\n### Dependency Injection & Context\n\nThe IoC container (`@loopback/context`) is the foundation. `@loopback/core`\nre-exports all of `@loopback/context`'s public API — application code should\nimport from `@loopback/core`, not `@loopback/context` directly.\n\n**Core dependency chain**: `@loopback/metadata` → `@loopback/context` →\n`@loopback/core` → `@loopback/boot`, `@loopback/rest`, etc.\n\n### Foundation vs Framework Packages\n\n- **Foundation-level** (internal building blocks, not directly consumed by\n  apps): `context`, `metadata`, `express`, `http-server`, `openapi-v3`,\n  `repository-json-schema`\n- **Framework-level** (everything else — used directly by applications)\n\nIn documentation and examples, always reference framework-level packages.\n\n### TypeScript Configuration\n\nTwo sets of tsconfig files serve different purposes:\n\n- **Root `tsconfig.json`** — Used by VS Code for cross-package navigation\n  (enables \"go to definition\" jumping to `.ts` source, cross-package rename\n  refactoring)\n- **Root `tsconfig.build.json`** — Used by ESLint\n- **Per-package `tsconfig.json`** — Used by `npm run build` to compile each\n  package to its `dist/` directory\n\nAll extend `@loopback/build/config/tsconfig.common.json`. TypeScript project\nreferences are auto-updated via `bin/update-ts-project-refs.js` (runs on\n`postinstall`).\n\nKey compiler options: `strict: true`, `target: es2018`, `module: commonjs`,\n`experimentalDecorators: true`, `emitDecoratorMetadata: true`.\n\n## File Naming Convention\n\nFollows Angular-style dotted naming: `{name}.{artifact-type}.ts`\n\nExamples: `authenticate.decorator.ts`, `boot.component.ts`,\n`user.controller.ts`, `todo.repository.ts`, `application.acceptance.ts`\n\n## Code Style Rules (ESLint)\n\n- `@typescript-eslint/no-explicit-any`: **error** — avoid `any` types\n- `@typescript-eslint/no-floating-promises`: **error** — all promises must be\n  awaited or handled\n- `@typescript-eslint/await-thenable`: **error**\n- `@typescript-eslint/no-misused-promises`: **error**\n- `@typescript-eslint/return-await`: **error**\n- `@typescript-eslint/no-shadow`: **error**\n- `mocha/no-exclusive-tests`: **error** — no `.only()` in committed tests\n- Naming: camelCase default, PascalCase for types, UPPER_CASE for constants,\n  leading underscore for private/protected members, PascalCase for mixin\n  functions ending in `Mixin`\n\n## Copyright Headers\n\nAll source files must include the copyright header:\n\n```ts\n// Copyright IBM Corp. and LoopBack contributors <year>. All Rights Reserved.\n// Node module: <package-name>\n// This file is licensed under the MIT License.\n// License text available at https://opensource.org/licenses/MIT\n```\n\nRun `lb4 copyright` to update headers automatically.\n\n## Adding a New Package\n\nUse the helper script: `node bin/create-package.js <package-name>`. It\nscaffolds, fixes up package.json, updates copyright, bootstraps dependencies,\nand updates TypeScript project references.\n\nAfter creation, update `CODEOWNERS` and `docs/site/MONOREPO.md`.\n\n## Connector Limitation in Monorepo\n\nWhen using datasource connectors inside the monorepo (e.g., in examples),\nrequire the connector module directly in the config instead of using a string\nname:\n\n```ts\nconnector: require('loopback-connector-mongodb'); // not connector: 'mongodb'\n```\n\nThis is due to how Lerna symlinks resolve module paths.\n\n## Node.js Support\n\nEngines: Node.js 18, 20, or 22. npm >= 7.\n","category":"root","tokens":1584}]}