Files
huly-platform/foundations/core/.github/copilot-instructions.md
T
Denis Bykhov fd0b7130eb Add 'foundations/core/' from commit '4f31d1b32637d2f124f555531ee12be8af3fd4fc'
git-subtree-dir: foundations/core
git-subtree-mainline: 16b1109180
git-subtree-split: 4f31d1b326
2025-11-26 22:56:44 +05:00

3.0 KiB

GitHub Copilot Instructions - Huly Core

Type: Rush monorepo (TypeScript)
License: EPL-2.0
Build System: Rush v5.158.1 + pnpm v10.15.1

Critical Rules

  1. Always use Rush commands, never npm/pnpm directly: rush install, rush build, rush test, rush update
  2. Internal dependencies must use workspace:^ protocol in package.json
  3. All packages extend @hcengineering/platform-rig for tsconfig/eslint - don't override configs
  4. Co-locate tests in src/__tests__/ directories (Jest + ts-jest)
  5. Named exports only - avoid default exports

Quick Start

rush install && rush build     # Initial setup
rush build:watch               # Development mode
rush rebuild                   # Force clean rebuild (clears cache)
rush test                      # Run all tests

Package Structure (All packages follow this)

packages/<name>/
├── src/index.ts          # Main entry (exports)
├── lib/                  # Compiled JS (gitignored)
├── types/                # TS declarations (gitignored)
├── package.json          # Scope: @hcengineering/, main: lib/index.js
├── tsconfig.json         # Extends platform-rig
└── jest.config.js        # preset: 'ts-jest', roots: ['./src']

Key Architecture Patterns

Plugin System: @hcengineering/platform provides dependency injection. Packages register resources/services via plugin manifests. Example: packages/core/src/plugin.ts

Data Flow: core → abstract models (Doc, Ref, Class) → client → concrete implementations → WebSocket/REST via api-client

Text Processing: Modular text-* packages (core/html/markdown/ydoc) support extensible rich-text editing with Yjs collaboration

Storage Abstraction: storage package defines interfaces; storage-client provides implementations; backends are pluggable

Common Tasks

Add a package: Create under packages/, add standard files (see structure above), register in rush.json if needed, run rush update

Debug build failures: Check <package>/rush-logs/ and .build/build.tsbuildinfo; use rush rebuild to clear incremental state

Run single package tests: cd packages/<name> && rushx test

Update dependencies: Edit package.json, run rush update, verify with rush build

Where to Look

  • Rush config: common/config/rush/, rush.json
  • Shared scripts: common/scripts/ (coverage merging, install helpers)
  • Core abstractions: packages/core/src/ (Doc, Hierarchy, TxOperations)
  • Platform runtime: packages/platform/src/ (plugin loader, resources)
  • Client layer: packages/client/src/ (LiveQuery, TxOperations client wrapper)

Watch Out For

  • Rush uses incremental builds - cached artifacts in .build/ and common/temp/
  • TypeScript strict mode enabled - type safety enforced
  • platform-rig centralizes tooling configs (ESLint, Prettier, tsconfig)
  • Check common/temp/rush-recycler/ for moved files during dependency updates