Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
260 commits
Select commit Hold shift + click to select a range
ad7d294
refactor(fs): Provide createBuffer factory in FileSystem adapter
RandomByte Dec 1, 2025
601dd05
refactor(project): Refactor cache classes
RandomByte Dec 1, 2025
e7c5d9c
refactor(fs): Add Proxy reader
RandomByte Dec 4, 2025
cdeb551
refactor(project): API refactoring
RandomByte Dec 8, 2025
4738aa6
refactor(builder): Rename task param 'buildCache' to 'cacheUtil'
RandomByte Dec 10, 2025
7c1a6fa
refactor(project): Cleanup
RandomByte Dec 10, 2025
664cbe4
refactor(project): Move resource comparison to util
RandomByte Dec 12, 2025
fcd0a11
refactor(project): Refactor stage handling
RandomByte Dec 16, 2025
7bc6b77
refactor(project): Fix cache handling
RandomByte Dec 16, 2025
fa993cb
refactor(fs): Remove contentAccess mutex timeout from Resource
RandomByte Dec 16, 2025
232c202
refactor(project): Cleanup obsolete code/comments
RandomByte Dec 16, 2025
a764e8e
refactor(server): Cleanup obsolete code
RandomByte Dec 16, 2025
ed97ff6
refactor(project): Rename watch handler events
RandomByte Dec 16, 2025
0e33fcc
refactor: Fix linting issues
matz3 Dec 17, 2025
836d910
test(fs): Adjust getIntegrity tests
matz3 Dec 17, 2025
d9e2c04
refactor: Integrity handling
matz3 Dec 17, 2025
26a6850
test(fs): Adjust getIntegrity tests again
matz3 Dec 17, 2025
0432f28
refactor: Consider npm-shrinkwrap.json
matz3 Dec 17, 2025
a5b2ab5
refactor: Rename Tracker => MonitoredReader
RandomByte Dec 17, 2025
90a7658
refactor(project): Use workspace version in stage name
RandomByte Dec 17, 2025
e01da35
refactor(project): Fix stage writer order
RandomByte Dec 17, 2025
f5c3d8c
refactor(fs): Add Switch reader
RandomByte Dec 17, 2025
cab66d9
refactor(project): Cleanup WatchHandler debounce
RandomByte Dec 17, 2025
9c0662c
refactor(project): Fix outdated API call
RandomByte Dec 17, 2025
b21444f
refactor(project): Fix build signature calculation
RandomByte Dec 17, 2025
6b771ac
refactor(fs): Pass integrity to cloned resource
RandomByte Dec 17, 2025
11e2ada
refactor(project): Fix pattern matching and resource comparison
RandomByte Dec 17, 2025
d381d4d
refactor(project): Import/overwrite stages from cache after saving
RandomByte Dec 18, 2025
032175e
test(builder): Sort files/folders
matz3 Dec 19, 2025
9903f19
refactor(builder): Prevent duplicate entries on app build from cache
matz3 Dec 19, 2025
af29518
refactor(fs): Refactor MonitorReader API
RandomByte Dec 23, 2025
6149e50
refactor(fs): Always calculate integrity on clone
RandomByte Dec 24, 2025
0d0955d
refactor(fs): Add getter to WriterCollection
RandomByte Dec 29, 2025
7ce7612
refactor(builder): Remove cache handling from tasks
RandomByte Dec 24, 2025
af6db28
refactor(builder): Add env variable for disabling workers
RandomByte Dec 30, 2025
b9072e7
refactor(project): Track resource changes using hash trees
RandomByte Dec 23, 2025
d3f9a66
refactor(project): Compress cache using gzip
RandomByte Jan 2, 2026
6f20acd
refactor(fs): Ensure writer collection uses unique readers
RandomByte Jan 2, 2026
1a94711
refactor(fs): Remove write tracking from MonitoredReaderWriter
RandomByte Jan 2, 2026
38f1ac0
refactor(project): Identify written resources using stage writer
RandomByte Jan 2, 2026
4a00316
refactor(project): Add basic differential update functionality
RandomByte Jan 2, 2026
3ad565c
refactor(builder): Re-add cache handling in tasks
RandomByte Jan 7, 2026
a15a870
refactor(project): Cleanup HashTree implementation
RandomByte Jan 7, 2026
9bc8338
refactor(project): Make WatchHandler wait for build to finish before …
RandomByte Jan 7, 2026
41951ec
refactor(project): Use cleanup hooks in update builds
RandomByte Jan 7, 2026
1177642
refactor(logger): Log skipped projects/tasks info in grey color
RandomByte Jan 7, 2026
d836cd4
refactor(project): Fix cache update mechanism
RandomByte Jan 7, 2026
4850f7f
refactor(project): WatchHandler emit error event
RandomByte Jan 7, 2026
8968f68
refactor(server): Exit process on rebuild error
RandomByte Jan 7, 2026
7af4d0f
refactor(project): Fix delta indices
RandomByte Jan 7, 2026
3234bea
refactor(logger): Support differential update task logging
RandomByte Jan 8, 2026
38e945b
refactor(project): Provide differential update flag to logger
RandomByte Jan 8, 2026
a7ffc00
refactor(server): Log error stack on build error
RandomByte Jan 8, 2026
5674418
refactor(project): Add chokidar
RandomByte Jan 8, 2026
311ec00
refactor(project): Limit build signature to project name and config
RandomByte Jan 8, 2026
69bd46e
refactor(project): Improve ResourceRequestGraph handling
RandomByte Jan 8, 2026
4893c9f
refactor(server): Remove obsolete code from serveResources middleware
matz3 Jan 8, 2026
33e7462
refactor(project): Add env variable to skip cache update
RandomByte Jan 9, 2026
7635909
refactor(project): Fix hash tree updates
RandomByte Jan 9, 2026
4b73b38
refactor(project): Remove unused 'cacheDir' param
matz3 Jan 9, 2026
a731717
fix(project): Prevent projects from being always invalidated
matz3 Jan 9, 2026
eb8bec6
fix(project): Prevent exception when not building in watch mode
matz3 Jan 12, 2026
dce7236
refactor(project): Only store new or modified cache entries
RandomByte Jan 9, 2026
17970c0
refactor(project): Refactor project cache validation
RandomByte Jan 11, 2026
a26d714
refactor(project): Extract project build into own method
matz3 Jan 13, 2026
de1521e
fix(project): Clear cleanup task queue
matz3 Jan 13, 2026
a52219b
test(project): Add ProjectBuilder integration test
matz3 Jan 13, 2026
faad1a8
test(project): Add failing ProjectBuilder test case
matz3 Jan 13, 2026
2ce33b4
test(project): Enhance ProjectBuilder test assertions
matz3 Jan 13, 2026
4adfe5e
test(project): Add library test case for ProjectBuilder
matz3 Jan 13, 2026
66c70d9
test(project): Build dependencies in application test of ProjectBuilder
matz3 Jan 13, 2026
ca5e353
test(project): Refactor ProjectBuilder test code
matz3 Jan 14, 2026
0320e60
refactor(project): Refactor task resource request tracking
RandomByte Jan 14, 2026
165c4da
test(project): Add theme-library test and update assertions for fixed…
matz3 Jan 14, 2026
6be6202
test(project): Use graph.build for ProjectBuilder test
matz3 Jan 15, 2026
c1725ac
test(project): Add custom task to ProjectBuilder test
matz3 Jan 15, 2026
4ea2fa9
fix(project): Fix custom task execution
matz3 Jan 15, 2026
60eb46b
fix(project): Prevent writing cache when project build was skipped
matz3 Jan 16, 2026
db86142
refactor(project): Create dedicated SharedHashTree class
RandomByte Jan 15, 2026
4e843d4
refactor(project): Re-implement differential task build
RandomByte Jan 15, 2026
d78a039
refactor(project): Fix HashTree tests
RandomByte Jan 16, 2026
1c20adb
refactor(project): Fix handling cache handling of removed resources
RandomByte Jan 16, 2026
c62c02c
test(project): Add cases for theme.library.e with seperate less files
maxreichmann Jan 20, 2026
c06f45e
refactor(project): Update graph traversal
RandomByte Jan 20, 2026
75770e4
refactor(project): Add BuildServer and BuildReader
RandomByte Jan 16, 2026
2f063bf
refactor(project): Refactor project result cache
RandomByte Jan 20, 2026
4a8f0cd
refactor(server): Integrate BuildServer
RandomByte Jan 20, 2026
93b026c
refactor(project): Small build task cache restructuring, cleanup
RandomByte Jan 20, 2026
5b1eb6c
refactor(project): JSDoc cleanup
RandomByte Jan 20, 2026
0746da2
refactor(project): ProjectBuilder cleanup
RandomByte Jan 20, 2026
3047076
refactor(builder): Small stringReplacer cleanup
RandomByte Jan 20, 2026
7213ba1
revert(fs): Add Switch reader
RandomByte Jan 20, 2026
8c66327
refactor(project): Add perf logging, cleanups
RandomByte Jan 20, 2026
3ea474b
refactor(project): Add cache write perf logging
RandomByte Jan 20, 2026
8f949da
refactor(project): Improve stage change handling
RandomByte Jan 21, 2026
a1ab8ee
refactor(project): Implement queue system in BuildServer
matz3 Jan 21, 2026
f074c66
refactor(server): Add error callback and handle in CLI
RandomByte Jan 21, 2026
d8a1062
refactor(project): ProjectBuilder to provide callback on project built
RandomByte Jan 21, 2026
c7ff622
refactor(project): Do not always include root project in build
RandomByte Jan 21, 2026
04ebb4d
refactor(project): Refactor BuildServer init, add tests
RandomByte Jan 21, 2026
a9d309c
refactor(project): Minor ProjectBuildCache and ProjectBuildContext re…
RandomByte Jan 23, 2026
cc9079e
refactor(project): Handle abort signal in ProjectBuilder et al.
RandomByte Jan 23, 2026
f0d023d
refactor(project): Refactor BuildServer queue
RandomByte Jan 23, 2026
401df52
refactor(project): Fix cache invalidation tracking
RandomByte Jan 23, 2026
0cfee04
refactor(project): Fix stage restore
RandomByte Jan 26, 2026
3444ff2
refactor(project): Add cache support for custom tasks
RandomByte Jan 26, 2026
5d378d3
test(project): Add file deletion case for theme.library.e
maxreichmann Jan 26, 2026
d622756
fix(builder): Filter out non-JS resources in minify task
matz3 Jan 26, 2026
26dcfea
test(project): Add test case for minify task fix
matz3 Jan 26, 2026
f6fec5b
test(project): Add ResourceRequestManager tests
RandomByte Jan 26, 2026
031a43d
refactor(project): Fix derived trees unexpected upsert in parents
RandomByte Jan 26, 2026
c378a27
test(project): Adjust test cases for .library changes
matz3 Jan 26, 2026
cb83056
fix: Ensure dot-file matching with micromatch
matz3 Jan 26, 2026
994d171
test(project): Add test case for ui5.yaml changes
matz3 Jan 26, 2026
659a4e4
fix(project): Handle BuildServer race condition when changing files
matz3 Jan 26, 2026
a0cbda7
test(project): Remove test.serial.only
matz3 Jan 26, 2026
7d3ea01
deps: Fix depcheck issues
matz3 Jan 26, 2026
cb92c8d
test(project): Update ProjectBuildCache and TaskBuildCache tests
RandomByte Jan 26, 2026
4e53dd0
test(project): Update ProjectBuilder tests and JSDoc
RandomByte Jan 26, 2026
85b10ef
test(project): Update TaskRunner tests
RandomByte Jan 26, 2026
a1f2c5e
test(project): Update various tests
RandomByte Jan 26, 2026
70645c8
test(project): Add missing comma
matz3 Jan 27, 2026
405e327
refactor(project): Improve abort signal handling
RandomByte Jan 27, 2026
a57cfbf
refactor(project): Fix additional tests
RandomByte Jan 27, 2026
1dfc6a2
refactor(project): Move dependency indice init into PBC
RandomByte Jan 27, 2026
6911b9a
fix(project): Improve BuildServer stability on resource changes
matz3 Jan 27, 2026
aad01e5
test(project): Add case for BuildServer which requests application an…
maxreichmann Jan 27, 2026
72a0c37
test(project): Add cases
maxreichmann Jan 28, 2026
42b6025
test(project): Add cases for project type "module" (ProjectBuilder)
maxreichmann Jan 29, 2026
5e6e995
refactor(project): ProjectBuildCache state handling
RandomByte Jan 28, 2026
7e423f3
test(project): Update node_modules deps to be aligned with actual fix…
maxreichmann Feb 4, 2026
4ffea28
test(project): Add "library" dependencies to "module" fixture
maxreichmann Feb 5, 2026
f5a712d
test(project): Update ProjectBuildContext tests
matz3 Feb 9, 2026
b2fb48c
Revert "test(project): Update node_modules deps to be aligned with ac…
maxreichmann Feb 10, 2026
257cb72
refactor(project): Rename task param 'supportsDifferentialUpdates' =>…
RandomByte Feb 10, 2026
d12c9d4
test(project): Extend FixtureTester (ProjectBuilder) to work with non…
maxreichmann Feb 10, 2026
c4d7efa
test(project): Add cases for ui5.yaml path mapping (Modules)
maxreichmann Feb 10, 2026
10b7350
test(project): Add race condition test
RandomByte Feb 10, 2026
3c218c8
test(project): Add modify file case for modules
maxreichmann Feb 11, 2026
2fafc85
test(project): Add case for multiple custom tasks (tag handling)
maxreichmann Feb 16, 2026
4b94cd1
fix(project): Fix build manifest access
matz3 Feb 18, 2026
4d1506e
test(project): Fix multiple-task tests (Address review)
maxreichmann Feb 18, 2026
21a1e71
test(project): Re-Add eslint rule (removed by accident)
maxreichmann Feb 18, 2026
990f0e0
refactor(fs): Add MonitoredResourceTagCollection
RandomByte Feb 23, 2026
b78a81f
refactor(project): Add basic handling for resource tags
RandomByte Feb 23, 2026
e52b498
test(project): Add another multiple-task / tag handling case
maxreichmann Feb 25, 2026
865cb27
test(project): Add case for dependency content changes
maxreichmann Feb 26, 2026
359b17e
test(project): Clean-up temporary comments
maxreichmann Feb 27, 2026
44ecf2d
test(project): Add case for JSDoc builds (Standard Tasks)
maxreichmann Mar 5, 2026
bca33ba
test(project): Address review of @RandomByte
maxreichmann Mar 5, 2026
4557fa1
refactor(project): Enhance build cache logging for signatures
RandomByte Mar 5, 2026
e77e459
test(project): Add basic library build test for BuildServer
RandomByte Mar 5, 2026
017721f
test(project): Add cases for custom preload configs (for application,…
maxreichmann Mar 5, 2026
f54e537
refactor(project): Adapt tests after refactoring of resource tag hand…
RandomByte Mar 6, 2026
057f3d6
refactor(fs): Fix resource integrity for resources without content
RandomByte Mar 6, 2026
7530a71
test(logger): Fix tests
RandomByte Mar 6, 2026
56381a8
test(project): Add case for self-contained builds (Standard Tasks)
maxreichmann Mar 6, 2026
eb20af4
refactor(project): Fix incorrect stage signature when using delta sta…
RandomByte Mar 9, 2026
0ef5f76
test(project): Add cases for custom bundling builds
maxreichmann Mar 9, 2026
29a7b5b
test(project): Add cases for file deletion (TC4)
d3xter666 Mar 10, 2026
657b95b
test(project): Refactor "custom tasks 2" case
maxreichmann Mar 10, 2026
fadded6
test(project): Add tests for various dependency relations
maxreichmann Mar 10, 2026
509d7cc
test(project): Add cases for race condition (add/remove file)
d3xter666 Mar 16, 2026
1be3579
refactor(project): Cleanup cache state handling
RandomByte Mar 11, 2026
1e73a3c
feat(project): Incorporate resource tags into hash tree leaf node hashes
RandomByte Mar 10, 2026
95ca2e3
refactor(fs): Add ResourceTagCollection#getAllTagsForResource method
RandomByte Mar 11, 2026
8955517
refactor(project): Add test for cross-project resource tag handling
RandomByte Mar 12, 2026
53043c4
refactor(fs): Expose getTags method on resource
RandomByte Mar 12, 2026
47d57f0
refactor(project): Fix tag handling, align test
RandomByte Mar 13, 2026
5fb1d05
refactor(project): Improve build abort handling, ease race-condition …
RandomByte Mar 16, 2026
f5b18b0
refactor(project): Cleanup comment
RandomByte Mar 16, 2026
f891f92
test(project): Add case for --include-dependency (Cover build with on…
maxreichmann Mar 16, 2026
71ea1d0
test(project): Check if sap-ui-version.json contains correct content
d3xter666 Mar 18, 2026
8b0de03
test(project): Add case for removing a dependency
maxreichmann Mar 19, 2026
dae825a
refactor(project): Validate source files after build finishes
RandomByte Mar 19, 2026
43f00a4
refactor(project): Store source files in CAS
RandomByte Mar 19, 2026
076c6fd
refactor(project): Use stored source files in ProjectResources
RandomByte Mar 19, 2026
13a218b
test(project): Add tests for cross project source file modifications
RandomByte Mar 19, 2026
290a4f0
perf(project): Parallelize I/O in HashTree.upsertResources and TreeRe…
RandomByte Apr 16, 2026
630817f
perf(project): Parallelize I/O in ResourceRequestManager
RandomByte Apr 17, 2026
a607577
perf(project): Skip redundant metadata checks for shared tree nodes
RandomByte Apr 17, 2026
de4f787
perf(project): Prefetch stage cache lookups for next task
RandomByte Apr 17, 2026
485e0b4
perf(project): Add performance instrumentation to build cache
RandomByte Apr 17, 2026
5493c81
perf(project): Add orchestration-level timing instrumentation
RandomByte Apr 17, 2026
ebfd1e1
perf(project): Parallelize source index initialization across projects
RandomByte Apr 17, 2026
0ba3f11
perf(project): Defer cacache I/O in cached stage proxy readers
RandomByte Apr 17, 2026
b1d844f
perf(project): Skip redundant dependency index updates for tasks with…
RandomByte Apr 17, 2026
523362f
docs: Add skills
RandomByte Apr 16, 2026
16f036b
perf(project): Skip redundant CAS lookups for unchanged resources dur…
RandomByte Apr 20, 2026
d6023fd
perf(project): Suppress redundant change propagation on initial stage…
RandomByte Apr 20, 2026
d497b2f
perf(project): Skip dependency index refresh when no changes were pro…
RandomByte Apr 20, 2026
61d655a
perf(project): Add instrumentation for allTasksCompleted, recordTaskR…
RandomByte Apr 22, 2026
bf9bc7c
perf(project): Pre-populate known CAS integrities from cached source …
RandomByte Apr 22, 2026
ba36113
perf(project): Reuse previous frozen source metadata for unchanged files
RandomByte Apr 22, 2026
65681d7
refactor(server): Skip bundling by default
RandomByte Apr 22, 2026
d2d650e
test(project): Add tests for dependency index refresh skip optimization
RandomByte Apr 22, 2026
adb64af
docs(fs): Add skill for @ui5/fs package
RandomByte Apr 23, 2026
37d55b7
perf(project): Replace cacache with custom CAS for faster dist writes
RandomByte Apr 23, 2026
7677e5c
docs(project): Update incremental build skill
RandomByte Apr 23, 2026
6ad56e0
perf(fs): Add CAS-aware fast path in FileSystem._write()
RandomByte Apr 23, 2026
8105d50
test(project): Add tests for delta cacheInfo path in recordTaskResult
RandomByte Apr 24, 2026
5912ebf
perf(project): Replace file-based metadata cache with SQLite storage
RandomByte Apr 27, 2026
56c9edb
perf(project): Replace file-based CAS with SQLite BLOB storage
RandomByte Apr 27, 2026
b3306b9
perf(project): Add batch transaction support to MetadataStorage
RandomByte Apr 27, 2026
400b5dc
refactor(project): Merge CAS and metadata into unified BuildCacheStorage
RandomByte Apr 28, 2026
d2b2ee0
perf(project): Compress metadata blobs in BuildCacheStorage
RandomByte Apr 28, 2026
5e39972
perf(project): Add batch signature existence check for cache lookups
RandomByte Apr 28, 2026
cc0325d
perf(project): Tune SQLite PRAGMA settings for build cache
RandomByte Apr 28, 2026
579e018
perf(project): Use shallow hash recomputation for ancestor directory …
RandomByte Apr 28, 2026
28e9b21
test(project): Add shallow recomputation safety tests and remove dead…
RandomByte Apr 29, 2026
8af5a53
refactor: Fix eslint problem
RandomByte Apr 29, 2026
62c6f2d
perf(project): Optimize writeStageResources compression and add batch…
RandomByte Apr 29, 2026
693b215
perf(project): Move compression outside transaction and parallelize v…
RandomByte Apr 29, 2026
58b887f
perf(fs): Use buffer factory for integrity computation to avoid doubl…
RandomByte Apr 29, 2026
12988ea
perf(project): Skip compression for tiny resources in build cache
RandomByte Apr 29, 2026
ddbf30f
refactor(fs): Fix missing import
RandomByte Apr 29, 2026
4f4ff0e
test(cli): Fix build and serve tests for incremental build changes
RandomByte Apr 30, 2026
7400efa
test(server): Fix tests for incremental build server changes
Apr 30, 2026
4efd584
refactor(server): Destroy build server on close to prevent process hang
RandomByte May 4, 2026
b9b7a83
test(builder): Isolate build cache data directory in tests
RandomByte May 5, 2026
dd6745a
refactor(project): Set busy_timeout before WAL mode to prevent lock e…
RandomByte May 5, 2026
30b464b
test(builder): Expect undefined for unchanged resources in processors
RandomByte May 5, 2026
4b8b99d
test(project): Use correct event stubs in build server assertions
RandomByte May 5, 2026
eed9dbe
refactor(project): Apply style transforms to frozen source reader
RandomByte May 8, 2026
fdeb0de
refactor(fs): Replace deprecated getStatInfo() calls with isDirectory()
RandomByte May 8, 2026
1c7b86c
refactor(project): Correct stage reader priority for ThemeLibrary and…
RandomByte May 8, 2026
d029efb
refactor(project): Recognize build manifest version 1.0 and apply cac…
RandomByte May 9, 2026
1e615e2
test(logger): Cover isDifferentialBuild branch in Console writer
RandomByte May 11, 2026
ab97d2a
test(fs): Improve code coverage to meet thresholds
RandomByte May 11, 2026
5cebb2d
test(project): Improve code coverage to meet configured thresholds
RandomByte May 11, 2026
8f9ba0d
refactor(project): Add reference counting to CacheManager singleton
RandomByte May 11, 2026
28468a7
refactor(project): Handle source changes during build as retriable in…
RandomByte May 11, 2026
b7117ab
refactor(cli): Resolve esmock race condition in serve tests on Node 22
RandomByte May 11, 2026
30bc6b7
refactor(project): Resolve EBUSY errors on Windows from leaked SQLite…
RandomByte May 11, 2026
1753141
test(server): Improve code coverage to meet configured thresholds
RandomByte May 12, 2026
3dc5069
refactor(project): Normalize path separators in getVirtualPath on Win…
RandomByte May 12, 2026
b8c95c6
refactor(project): Prevent state corruption when source changes arriv…
RandomByte May 12, 2026
f6de8ba
refactor(builder): Fix Windows test timeouts caused by leaked handles…
RandomByte May 12, 2026
445b1c4
refactor(fs): Handle legacy streams lacking Symbol.asyncIterator in R…
RandomByte May 13, 2026
ab72897
test(project): Update skip reason for dependency content changes test
RandomByte May 13, 2026
ac60950
refactor(project): Remove unused ssri dependency
RandomByte May 13, 2026
cac8f16
refactor(project): Resolve JSDoc type expression parse errors in jsdo…
RandomByte May 13, 2026
57b8d80
refactor: Support of referencing legacy middlewares in UI5 CLI middle…
d3xter666 May 18, 2026
b145f55
refactor(project): Verify size to detect mtime-preserved content changes
RandomByte May 19, 2026
7130ad5
refactor(project): Detect file replacement via inode in cache check
RandomByte May 19, 2026
4b46467
refactor(project): Rename matchResourceMetadataStrict to isResourceUn…
RandomByte May 19, 2026
34cc0d5
refactor(project): Cleanup build cache utils
RandomByte May 19, 2026
de35965
refactor(fs): Stop fabricating inode 0 for in-memory resources
RandomByte May 19, 2026
2862e0f
refactor(project): Add ui5DataDir build option for cache isolation
RandomByte May 20, 2026
7bc9007
docs: Reflect documentation review comments (#1393)
d3xter666 May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .claude/skills/incremental-build/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
name: incremental-build
description: >
Work on the incremental (delta) build system in @ui5/project: build caching,
resource indexing, hash trees, stage caching, build server, file watching,
task execution caching, and delta builds.
when_to_use: >
TRIGGER when: the user asks about or wants to modify code related to incremental builds,
build caching, resource indexing, hash trees, stage caching, build server, file watching,
task execution caching, delta builds, resource tags in build context, or any component
listed in the Component Map in architecture.md.
DO NOT TRIGGER when: the user is working on unrelated CLI commands, general tooling,
or non-build features.
user-invocable: true
---

# Incremental Build Skill

You are working on the incremental (delta) build system in `@ui5/project`. Read `architecture.md` in this skill directory for the full architecture reference, including the component map, key flows, caching architecture, and data structures. Read `performance-investigation.md` for guidance on profiling builds, reading perf logs, and known performance peculiarities.

## Guidelines for Working on This Code

1. **Always read the source file before modifying it.** The Component Map in `architecture.md` tells you where each piece lives.
2. **Understand the cache flow direction.** Changes propagate: source change -> index update -> signature change -> cache miss -> task re-execution.
3. **Be careful with tag side effects.** `getTags()` is not a pure read -- it triggers lazy tag application. Avoid calling it in unexpected contexts.
4. **Respect abort signals.** Any long-running operation should check `signal?.throwIfAborted()` periodically.
5. **Test with incremental rebuilds.** A single build passing is not enough; the interesting bugs appear on the second and third builds after file changes.
6. **Watch for stale stage readers after abort.** If a build is aborted, stage writers may contain partial results that shadow source files.
7. **Signature stability matters.** Any change to how hashes are computed (e.g., adding new fields to hash input) invalidates all existing caches.
8. **SharedHashTree operations must go through TreeRegistry.** Never mutate a SharedHashTree directly; always schedule via the registry and flush.

## Known Constraints

- `StageCache` (in-memory) has no `clear()` method -- stage entries persist for the lifetime of the `ProjectBuildCache` instance
- `ProjectBuildContext` instances (including their caches) are reused across sequential builds of the same project within a session
- `resource.getTags()` has side effects: it triggers `#applyCachedResourceTags()` and creates `MonitoredResourceTagCollection` instances, which modify tag collection state. This means calling `getTags()` during hash tree operations (e.g., in `TreeRegistry.flush()`) can affect the stage pipeline state.
- `updateProjectIndices` uses `project.getReader()` (stage pipeline reader) to read resources. After an aborted build, stage writers may contain in-memory resources that shadow updated source content, causing stale reads.
- `getSourcePaths()` and `getVirtualPath()` are NOT consistent with `getSourceReader()` for all project types. Module has no `getVirtualPath()` (base class throws). ThemeLibrary's `getSourcePaths()` returns only `[src/]` and `getVirtualPath()` only maps `src/`, but `_getReader()` also includes `test/` when `_testPathExists`. Any optimization that replaces `sourceReader.byGlob()` with direct filesystem enumeration via `getSourcePaths()` + `getVirtualPath()` must handle these mismatches.
370 changes: 370 additions & 0 deletions .claude/skills/incremental-build/architecture.md

Large diffs are not rendered by default.

378 changes: 378 additions & 0 deletions .claude/skills/incremental-build/performance-investigation.md

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions .claude/skills/ui5-fs/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
name: ui5-fs
description: >
Work on the @ui5/fs package: the virtual file system abstraction layer providing
Resource, Adapters (FileSystem, Memory), Reader Collections (ReaderCollection,
ReaderCollectionPrioritized, DuplexCollection, WriterCollection), specialized readers
(Filter, Link, Proxy), resource tagging, monitoring, and the resourceFactory API.
when_to_use: >
TRIGGER when: the user asks about or wants to modify code related to @ui5/fs,
the virtual file system, resources, adapters, reader collections, writer collections,
DuplexCollection, resourceFactory, ResourceTagCollection, MonitoredReader, fsInterface,
ResourceFacade, or any file within packages/fs/.
DO NOT TRIGGER when: the user is working on builder tasks/processors, CLI commands,
server middleware, or project graph resolution that does not touch the FS layer.
user-invocable: true
---

# @ui5/fs Skill

You are working on the `@ui5/fs` package — the virtual file system abstraction layer for UI5 CLI. Read `architecture.md` in this skill directory for the full architecture reference, including the class hierarchy, API surface, adapter internals, and collection patterns.

## Package Location

Source: `packages/fs/lib/`
Tests: `packages/fs/test/lib/`
Fixtures: `packages/fs/test/fixtures/`

## Guidelines for Working on This Code

1. **Always read the source file before modifying it.** The Component Map in `architecture.md` tells you where each piece lives.
2. **Understand the content type state machine.** Resources have internal content types (BUFFER, STREAM, FACTORY, DRAINED_STREAM, IN_TRANSFORMATION) with strict transitions. Never bypass `modifyStream()` for content transformations — it handles mutex locking and state management.
3. **Respect the mutex.** Resource content access is protected by `async-mutex`. Concurrent `getBuffer()` / `getString()` calls are safe, but `modifyStream()` acquires an exclusive lock. Never hold a reference to content across an `await` that could trigger a transformation.
4. **Virtual paths are POSIX-absolute.** All virtual paths must be absolute POSIX paths (start with `/`). Base paths must end with `/`. Adapters normalize patterns relative to their `virBasePath`.
5. **Content parameters are mutually exclusive.** When creating a Resource, only one of `buffer`, `string`, `stream`, `createStream`, or `createBuffer` can be provided. The `createBuffer`/`createStream` factories enable lazy loading.
6. **byGlob randomizes result order.** `AbstractReader.byGlob()` intentionally shuffles results to prevent consumers from relying on ordering. Do not assume or depend on glob result order.
7. **Clone semantics matter.** Resources are cloned on retrieval from adapters. `resource.clone()` creates an independent copy including content. When modifying resources from collections, understand whether you're working on the original or a clone.
8. **ResourceFacade is immutable.** `ResourceFacade.setPath()` throws. The facade wraps a resource with a different virtual path (used by Link reader). Use `getOriginalPath()` to get the underlying path.
9. **Tag format is strict.** Tags follow the pattern `"namespace:Name"` — namespace is lowercase alphanumeric, name is PascalCase. Tags are validated on set. Use `ResourceTagCollection` or `MonitoredResourceTagCollection` for tag operations.
10. **Test with both FileSystem and Memory adapters.** Behavior can differ between adapters (e.g., FileSystem uses `globby` while Memory uses `micromatch`; FileSystem has lazy content loading via factories, Memory clones on read).

## Known Constraints

- `Resource.getStream()` is deprecated — use `getStreamAsync()` or `getBuffer()` / `getString()` instead. The deprecation warning is only logged once per process.
- `Resource.getStatInfo()` is deprecated — use `getLastModified()`, `getSize()`, `getInode()` instead.
- FileSystem adapter's `write()` uses `fs.copyFile` for unmodified resources (optimization). It also detects same-source-same-target writes and skips them, but switches to buffer-based writes if the content was modified (to avoid stream read-during-write conflicts).
- Memory adapter auto-creates virtual directory entries in its hierarchy on `write()`.
- `WriterCollection` matches the **longest prefix** (greedy match) when routing writes to writers.
- `DuplexCollection` uses an internal `ReaderCollectionPrioritized` with the writer first, so written resources shadow the reader's resources.
- `fsInterface` provides a Node.js `fs`-compatible wrapper but only implements `readFile`, `stat`, and `readdir`. `mkdir` is a no-op.
- `Resource.getIntegrity()` computes SHA-256 via `ssri` — this triggers full content loading if not already loaded.
- Monitored readers/writers (`MonitoredReader`, `MonitoredReaderWriter`) prevent reads/writes after being sealed. They track all access patterns for build caching analysis.

## Running Tests

```bash
# All tests
npm run unit --workspace=@ui5/fs

# Single file
cd packages/fs && npx ava test/lib/Resource.js

# Verbose with logging
npm run unit-verbose --workspace=@ui5/fs

# Coverage
npm run coverage --workspace=@ui5/fs
```
Loading
Loading