@storyshelf/affected 0.8.0 → 0.9.0-next-d2cc082

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/trace.mjs CHANGED
@@ -33,8 +33,7 @@ const LOCKFILE_BASENAMES = /* @__PURE__ */ new Set([
33
33
  "pnpm-lock.yaml",
34
34
  "yarn.lock",
35
35
  "bun.lock",
36
- "bun.lockb",
37
- "deno.lock"
36
+ "bun.lockb"
38
37
  ]);
39
38
  /** Basename of a repo-relative path. */
40
39
  function basename(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"trace.mjs","names":[],"sources":["../src/trace.ts"],"sourcesContent":["import { graphModulesFor } from \"./stats.ts\";\nimport type { DepGraph, TraceOptions } from \"./types.ts\";\n\n/** Basenames whose change invalidates every story (global render setup). */\nconst GLOBAL_BASENAMES = new Set([\n \"preview.js\",\n \"preview.jsx\",\n \"preview.ts\",\n \"preview.tsx\",\n \"preview.mjs\",\n \"preview.cjs\",\n \"preview.mts\",\n \"preview.cts\",\n \"manager.js\",\n \"manager.jsx\",\n \"manager.ts\",\n \"manager.tsx\",\n]);\n\n/** Config basenames whose change may add, remove, or re-glob stories. */\nconst CONFIG_BASENAMES = new Set([\"main.js\", \"main.ts\", \"main.mjs\", \"main.cjs\", \"main.mts\"]);\n\n/** Lockfiles whose change means dependency versions cannot be resolved. */\nconst LOCKFILE_BASENAMES = new Set([\n \"package.json\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n \"deno.lock\",\n]);\n\n/** Basename of a repo-relative path. */\nfunction basename(path: string): string {\n const index = path.lastIndexOf(\"/\");\n return index === -1 ? path : path.slice(index + 1);\n}\n\n/** True when a changed file forces a full render of every story. */\nfunction isGlobalFile(path: string): boolean {\n const base = basename(path);\n if (GLOBAL_BASENAMES.has(base) || CONFIG_BASENAMES.has(base) || LOCKFILE_BASENAMES.has(base)) {\n return true;\n }\n return path.includes(\".storybook/\") && (CONFIG_BASENAMES.has(base) || GLOBAL_BASENAMES.has(base));\n}\n\n/** Regex-special chars escaped when translating globs (kept discrete: no `${`). */\nconst REGEX_SPECIALS = new Set([\"+\", \"^\", \"$\", \"{\", \"}\", \"(\", \")\", \"|\", \"[\", \"]\", \"\\\\\", \".\"]);\n\n/** Translate one glob token at `index` into regex text and advance width. */\nfunction translateGlobToken(pattern: string, index: number): { text: string; advance: number } {\n const char = pattern[index];\n if (char === \"*\") {\n return pattern[index + 1] === \"*\" ? { text: \".*\", advance: 2 } : { text: \"[^/]*\", advance: 1 };\n }\n if (char === \"?\") {\n return { text: \"[^/]\", advance: 1 };\n }\n if (char !== undefined && REGEX_SPECIALS.has(char)) {\n return { text: `\\\\${char}`, advance: 1 };\n }\n return { text: char ?? \"\", advance: 1 };\n}\n\n/** Escape regex syntax while translating `*`, `**`, and `?` globs. */\nfunction globToRegExp(pattern: string): RegExp {\n const parts: string[] = [];\n let index = 0;\n while (index < pattern.length) {\n const token = translateGlobToken(pattern, index);\n parts.push(token.text);\n index += token.advance;\n }\n return new RegExp(`^${parts.join(\"\")}$`, \"u\");\n}\n\n/** True when `path` matches any of the given glob patterns. */\nexport function matchesAnyGlob(path: string, patterns: readonly string[]): boolean {\n return patterns.some((pattern) => globToRegExp(pattern).test(path));\n}\n\n/** Queue reverse-edge dependents not yet visited. */\nfunction pushUnseen(seen: Set<string>, pending: string[], dependents: readonly string[]): void {\n for (const dependent of dependents) {\n if (!seen.has(dependent)) {\n seen.add(dependent);\n pending.push(dependent);\n }\n }\n}\n\n/** Fold one graph node into the affected set and queue its dependents. */\nfunction processNode(\n graph: DepGraph,\n storyOf: ReadonlyMap<string, string>,\n seen: Set<string>,\n pending: string[],\n affected: Set<string>,\n current: string,\n): void {\n const story = storyOf.get(current);\n if (story !== undefined) {\n affected.add(story);\n }\n pushUnseen(seen, pending, graph.importedBy[current] ?? []);\n}\n\n/** Collect every story file reachable from `roots` via reverse edges. */\nfunction reachableStories(\n graph: DepGraph,\n roots: string[],\n storyOf: ReadonlyMap<string, string>,\n): Set<string> {\n const seen = new Set<string>(roots);\n const pending = [...roots];\n const affected = new Set<string>();\n while (pending.length > 0) {\n const current = pending.pop();\n if (current === undefined) {\n break;\n }\n processNode(graph, storyOf, seen, pending, affected, current);\n }\n return affected;\n}\n\n/** Map every graph node to its story file (suffix match for absolute stats). */\nfunction storyNodeMap(graph: DepGraph, storyFiles: readonly string[]): Map<string, string> {\n const nodes = new Set([...Object.keys(graph.imports), ...Object.keys(graph.importedBy)]);\n const map = new Map<string, string>();\n for (const story of storyFiles) {\n for (const node of nodes) {\n if ((node === story || node.endsWith(`/${story}`)) && !map.has(node)) {\n map.set(node, story);\n }\n }\n }\n return map;\n}\n/** Root modules for tracing: changed modules plus directly changed stories. */\nfunction traceRoots(\n graph: DepGraph,\n relevant: string[],\n storyOf: ReadonlyMap<string, string>,\n): string[] {\n const roots = changedModules(graph, relevant);\n for (const file of relevant) {\n if (storyOf.has(file)) {\n roots.push(file);\n }\n }\n return [...new Set(roots)];\n}\n/** Map changed files to graph modules, dropping files outside the graph. */\nfunction changedModules(graph: DepGraph, changed: string[]): string[] {\n const modules = new Set<string>();\n for (const file of changed) {\n for (const module of graphModulesFor(graph, file)) {\n modules.add(module);\n }\n }\n return [...modules];\n}\n\n/**\n * Trace changed files through the dependency graph to story files.\n *\n * @param graph - Bidirectional module graph of the built Storybook.\n * @param changedFiles - Repo-relative changed files.\n * @param storyFiles - Normalized story import paths from the story index.\n * @param options - Untraced globs excluded from tracing.\n * @returns Affected story files, or `null` when everything must render.\n */\nexport function traceAffected(\n graph: DepGraph,\n changedFiles: string[],\n storyFiles: readonly string[],\n options: TraceOptions = {},\n): string[] | null {\n const untraced = options.untraced ?? [];\n const relevant = changedFiles.filter((file) => !matchesAnyGlob(file, untraced));\n const forcing = relevant.find((file) => isGlobalFile(file));\n if (forcing !== undefined) {\n return null;\n }\n const storyOf = storyNodeMap(graph, storyFiles);\n const roots = traceRoots(graph, relevant, storyOf);\n return [...reachableStories(graph, roots, storyOf)].toSorted();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"trace.mjs","names":[],"sources":["../src/trace.ts"],"sourcesContent":["import { graphModulesFor } from \"./stats.ts\";\nimport type { DepGraph, TraceOptions } from \"./types.ts\";\n\n/** Basenames whose change invalidates every story (global render setup). */\nconst GLOBAL_BASENAMES = new Set([\n \"preview.js\",\n \"preview.jsx\",\n \"preview.ts\",\n \"preview.tsx\",\n \"preview.mjs\",\n \"preview.cjs\",\n \"preview.mts\",\n \"preview.cts\",\n \"manager.js\",\n \"manager.jsx\",\n \"manager.ts\",\n \"manager.tsx\",\n]);\n\n/** Config basenames whose change may add, remove, or re-glob stories. */\nconst CONFIG_BASENAMES = new Set([\"main.js\", \"main.ts\", \"main.mjs\", \"main.cjs\", \"main.mts\"]);\n\n/** Lockfiles whose change means dependency versions cannot be resolved. */\nconst LOCKFILE_BASENAMES = new Set([\n \"package.json\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n]);\n\n/** Basename of a repo-relative path. */\nfunction basename(path: string): string {\n const index = path.lastIndexOf(\"/\");\n return index === -1 ? path : path.slice(index + 1);\n}\n\n/** True when a changed file forces a full render of every story. */\nfunction isGlobalFile(path: string): boolean {\n const base = basename(path);\n if (GLOBAL_BASENAMES.has(base) || CONFIG_BASENAMES.has(base) || LOCKFILE_BASENAMES.has(base)) {\n return true;\n }\n return path.includes(\".storybook/\") && (CONFIG_BASENAMES.has(base) || GLOBAL_BASENAMES.has(base));\n}\n\n/** Regex-special chars escaped when translating globs (kept discrete: no `${`). */\nconst REGEX_SPECIALS = new Set([\"+\", \"^\", \"$\", \"{\", \"}\", \"(\", \")\", \"|\", \"[\", \"]\", \"\\\\\", \".\"]);\n\n/** Translate one glob token at `index` into regex text and advance width. */\nfunction translateGlobToken(pattern: string, index: number): { text: string; advance: number } {\n const char = pattern[index];\n if (char === \"*\") {\n return pattern[index + 1] === \"*\" ? { text: \".*\", advance: 2 } : { text: \"[^/]*\", advance: 1 };\n }\n if (char === \"?\") {\n return { text: \"[^/]\", advance: 1 };\n }\n if (char !== undefined && REGEX_SPECIALS.has(char)) {\n return { text: `\\\\${char}`, advance: 1 };\n }\n return { text: char ?? \"\", advance: 1 };\n}\n\n/** Escape regex syntax while translating `*`, `**`, and `?` globs. */\nfunction globToRegExp(pattern: string): RegExp {\n const parts: string[] = [];\n let index = 0;\n while (index < pattern.length) {\n const token = translateGlobToken(pattern, index);\n parts.push(token.text);\n index += token.advance;\n }\n return new RegExp(`^${parts.join(\"\")}$`, \"u\");\n}\n\n/** True when `path` matches any of the given glob patterns. */\nexport function matchesAnyGlob(path: string, patterns: readonly string[]): boolean {\n return patterns.some((pattern) => globToRegExp(pattern).test(path));\n}\n\n/** Queue reverse-edge dependents not yet visited. */\nfunction pushUnseen(seen: Set<string>, pending: string[], dependents: readonly string[]): void {\n for (const dependent of dependents) {\n if (!seen.has(dependent)) {\n seen.add(dependent);\n pending.push(dependent);\n }\n }\n}\n\n/** Fold one graph node into the affected set and queue its dependents. */\nfunction processNode(\n graph: DepGraph,\n storyOf: ReadonlyMap<string, string>,\n seen: Set<string>,\n pending: string[],\n affected: Set<string>,\n current: string,\n): void {\n const story = storyOf.get(current);\n if (story !== undefined) {\n affected.add(story);\n }\n pushUnseen(seen, pending, graph.importedBy[current] ?? []);\n}\n\n/** Collect every story file reachable from `roots` via reverse edges. */\nfunction reachableStories(\n graph: DepGraph,\n roots: string[],\n storyOf: ReadonlyMap<string, string>,\n): Set<string> {\n const seen = new Set<string>(roots);\n const pending = [...roots];\n const affected = new Set<string>();\n while (pending.length > 0) {\n const current = pending.pop();\n if (current === undefined) {\n break;\n }\n processNode(graph, storyOf, seen, pending, affected, current);\n }\n return affected;\n}\n\n/** Map every graph node to its story file (suffix match for absolute stats). */\nfunction storyNodeMap(graph: DepGraph, storyFiles: readonly string[]): Map<string, string> {\n const nodes = new Set([...Object.keys(graph.imports), ...Object.keys(graph.importedBy)]);\n const map = new Map<string, string>();\n for (const story of storyFiles) {\n for (const node of nodes) {\n if ((node === story || node.endsWith(`/${story}`)) && !map.has(node)) {\n map.set(node, story);\n }\n }\n }\n return map;\n}\n/** Root modules for tracing: changed modules plus directly changed stories. */\nfunction traceRoots(\n graph: DepGraph,\n relevant: string[],\n storyOf: ReadonlyMap<string, string>,\n): string[] {\n const roots = changedModules(graph, relevant);\n for (const file of relevant) {\n if (storyOf.has(file)) {\n roots.push(file);\n }\n }\n return [...new Set(roots)];\n}\n/** Map changed files to graph modules, dropping files outside the graph. */\nfunction changedModules(graph: DepGraph, changed: string[]): string[] {\n const modules = new Set<string>();\n for (const file of changed) {\n for (const module of graphModulesFor(graph, file)) {\n modules.add(module);\n }\n }\n return [...modules];\n}\n\n/**\n * Trace changed files through the dependency graph to story files.\n *\n * @param graph - Bidirectional module graph of the built Storybook.\n * @param changedFiles - Repo-relative changed files.\n * @param storyFiles - Normalized story import paths from the story index.\n * @param options - Untraced globs excluded from tracing.\n * @returns Affected story files, or `null` when everything must render.\n */\nexport function traceAffected(\n graph: DepGraph,\n changedFiles: string[],\n storyFiles: readonly string[],\n options: TraceOptions = {},\n): string[] | null {\n const untraced = options.untraced ?? [];\n const relevant = changedFiles.filter((file) => !matchesAnyGlob(file, untraced));\n const forcing = relevant.find((file) => isGlobalFile(file));\n if (forcing !== undefined) {\n return null;\n }\n const storyOf = storyNodeMap(graph, storyFiles);\n const roots = traceRoots(graph, relevant, storyOf);\n return [...reachableStories(graph, roots, storyOf)].toSorted();\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storyshelf/affected",
3
- "version": "0.8.0",
3
+ "version": "0.9.0-next-d2cc082",
4
4
  "description": "Affected capture for StoryShelf: dependency-graph tracing that selects the stories impacted by a change.",
5
5
  "keywords": [
6
6
  "affected",
@@ -64,14 +64,5 @@
64
64
  },
65
65
  "engines": {
66
66
  "node": ">=24"
67
- },
68
- "jsr": {
69
- "runtimeCompat": {
70
- "node": true,
71
- "deno": true,
72
- "bun": true,
73
- "workerd": false,
74
- "browser": false
75
- }
76
67
  }
77
68
  }