Versioned project notes for @stackline/dynamic-dedupe 1.0.5. Original attribution is retained in the linked repository.
Compatibility Contract
The 1.x line preserves the observable [email protected] contract unless a
change is required to prevent loader corruption or ambiguous identity matches.
Preserved
activate([extension, subdirs])deactivate([extension])reset().jsas the default extension- two matching parent directories by default
- one shared exports object for equivalent CommonJS modules
- copied, linked, and preserved-symlink module trees
Additive
- extension names may omit the leading dot;
- invalid configuration fails before loader mutation;
- CommonJS deep imports and package metadata exports;
- ESM configuration facade;
- TypeScript 3.9 and current declarations.
Intentionally Different
- Identity fields are length-framed before SHA-256 hashing. Distinct directory components no longer collide merely because their concatenated text matches.
deactivate()never overwrites a loader installed by another tool after Stackline activation. An embedded disabled hook becomes a pass-through.- Repeated activation is idempotent instead of wrapping the same extension repeatedly.
Outside The Contract
- native ESM import deduplication;
- deduplication across processes, workers, or VM contexts;
- equality of modules with different source text;
- source-code trust or integrity verification;
- mutation of Node's existing
require.cacheentries.