Deno Analyzer Scope · SCANNER-ENG-0011 (2025-12-08)

Goals

Inputs

Pipeline (deterministic, offline)

  1. Normalize config: parse deno.json/jsonc; resolve importMap path; default to repo root import map if present. Sort keys.
  2. Lock resolver: read deno.lock; emit components:
    • npm: entries → PURL (pkg:npm/<name>@<version>) + integrity from integrity.
    • specifiers → source→target map for transitive graph.
    • modules (remote URLs) → canonical URL + content hash when present; mark fetchSource: cache.
  3. Import map & vendor:
    • Apply imports/scopes to rewrite edges before graph emission.
    • If vendor/ exists, prefer vendored paths; emit provenance: vendor.
  4. Graph builder:
    • Build module graph from specifiers + import map rewrites; emit edges (from -> to, kind: import|dynamic|npm).
    • Recognise npm: specifiers; map to npm package node.
    • Stable ordering: sort by from, to.
  5. Runtime/capability signals:
    • Detect permissions from tasks (--allow-* flags) and deno.json unstable/no-check.
    • Capture nodeModulesDir toggle to flag npm bridge.
  6. Outputs:
    • Inventory: npm components + remote module list (digest, source, origin).
    • Graph: edges with provenance (lockfile, import_map, vendor).
    • Signals: deno.permissions[], deno.node_compat, deno.unstable.

Tests & fixtures

Deliverables