Skip to main content

repo-context

Provides tech stack, package layout, conventions, and build commands for the iTwin/presentation monorepo. Use when: working on any package or app in this repo, planning changes, implementing features, reviewing code.

Informações da origem

Repositório
iTwin/presentation
Última atividade na origem
23 de outubro de 2026 às 14:46
Idioma detectado do SKILL.md
inglês
Estrelas
6
Forks
1

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
repo-context
description
Provides tech stack, package layout, conventions, and build commands for the iTwin/presentation monorepo. Use when: working on any package or app in this repo, planning changes, implementing features, reviewing code.
# iTwin/presentation Repository Context ## Overview This is a **pnpm monorepo** orchestrated with **Lage** and versioned with **Changesets**. ## Tech Stack | Area | Technology | |------|-----------| | Language | TypeScript (strict, ES2022, dual CJS/ESM builds) | | UI | React 18, iTwinUI components, SCSS | | Testing | Vitest | | Linting | oxlint (type-aware, config in `.oxlintrc.json`); ESLint only for `@itwin/eslint-plugin` rules (`eslint.config.js`); oxfmt for formatting | | Platform | iTwin.js (iModels, ECSQL, Presentation APIs) | | Reactive | RxJS | | API docs | `@itwin/build-tools` (extract-api, docs) | | Node | ^24, pnpm 11 | ## Packages | Package | Path | Purpose | |---------|------|---------| | `@itwin/presentation-shared` | `packages/shared` | Shared utilities and types | | `@itwin/presentation-core-interop` | `packages/core-interop` | Interop layer with iTwin.js Core | | `@itwin/presentation-hierarchies` | `packages/hierarchies` | Hierarchy building from iModels and other sources | | `@itwin/presentation-hierarchies-react` | `packages/hierarchies-react` | React bindings for hierarchies | | `@itwin/presentation-components` | `packages/components` | React components (lists, property grids, tables) | | `@itwin/unified-selection` | `packages/unified-selection` | Unified selection storage | | `@itwin/unified-selection-react` | `packages/unified-selection-react` | React bindings for unified selection | | `@itwin/presentation-opentelemetry` | `packages/opentelemetry` | OpenTelemetry diagnostics integration | | `@itwin/presentation-tree-definitions` | `packages/tree-definitions` | Reusable UI-independent hierarchy definitions | | `@itwin/presentation-test-utilities` | `packages/test-utilities` | Internal test utilities | ## Apps | App | Path | Purpose | |-----|------|---------| | `full-stack-tests` | `apps/full-stack-tests` | Integration tests | | `test-app` | `apps/test-app` | Sample app (frontend + backend) | | `performance-tests` | `apps/performance-tests` | Benchmarks for hierarchies and unified selection | ## Key Conventions - For packages under `packages/`, a package is **private** when its `package.json` sets `"private": true`; otherwise it is **public**. A **production package** is any public package, plus any private package whose `package.json` declares a `license` field. Production packages require 100% test coverage; use `pnpm cover` to check it. - Packages produce ESM-only output via `tsconfig.lib.json` (built with `tsc`) or `tsdown` - Public API is tracked via `extract-api` and `.api.md` report files in `api/` folders - Copyright headers are required on all source files (enforced by `copyrightLinter.js`): ``` /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ ``` - User-visible changes to released packages require a changeset (`pnpm change`); packages with `"private": true` do not require a changeset. - Build order is managed by Lage (`lage build`, dependencies via `^build`) - Linting is split between two tools that are always run separately: - `lint` runs oxlint with the root `.oxlintrc.json` (default rules, type-aware, plus the `react` plugin for packages that depend on React). Editors use oxlint too. - `lint:no-internal` runs ESLint with only `@itwin/no-internal` and `@itwin/no-internal-barrel-imports`, which oxlint can't run. It is never run implicitly; run it explicitly or rely on CI. - Suppress oxlint findings with `// oxlint-disable-next-line <rule>`; use `// eslint-disable-next-line @itwin/<rule>` only for the `@itwin` rules. - When adding a package that depends on React, add it to the `react` override in `.oxlintrc.json`. ## Common Commands | Scope | Build | Test | Lint | `@itwin` ESLint rules | Format | |-------|-------|------|------|------|--------| | All (repo root) | `pnpm build:all` | `pnpm cover:all` | `pnpm lint:all` | `pnpm lint:no-internal:all` | `pnpm format` | | Single package | `pnpm build` | `pnpm test` | `pnpm lint` | `pnpm lint:no-internal` | `pnpm -w exec oxfmt --check .` | | Scoped build | `pnpm lage build --to <package>` | — | — | — | — | | Format fix | `pnpm format:fix` | — | — | — | — |
Ver no GitHub