Skip to documentation

reference

Compatibility Contract — @stackline/dynamic-dedupe

Project compatibility notes for @stackline/dynamic-dedupe 1.0.5. Review behavior, requirements and limitations.

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()
  • .js as 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.cache entries.

Package reference