@savvy-web/silk 2.0.0 → 2.1.1
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/README.md +7 -5
- package/changesets-changelog.cjs +109 -61
- package/changesets-changelog.d.cts +1 -1
- package/changesets-changelog.d.ts +1 -1
- package/changesets-changelog.js +54099 -1
- package/changesets-markdownlint.cjs +109 -61
- package/changesets-markdownlint.d.cts +1 -1
- package/changesets-markdownlint.d.ts +1 -1
- package/changesets-markdownlint.js +54099 -1
- package/package.json +5 -4
- package/tsconfig/node/dist/tsconfig.tsbuildinfo +1 -1
- package/_virtual/_rolldown/runtime.cjs +0 -45
- package/_virtual/_rolldown/runtime.js +0 -45
- package/packages/silk-effects/dist/dev/pkg/_virtual/_rolldown/runtime.cjs +0 -15
- package/packages/silk-effects/dist/dev/pkg/_virtual/_rolldown/runtime.js +0 -14
- package/packages/silk-effects/dist/dev/pkg/changesets/api/categories.cjs +0 -247
- package/packages/silk-effects/dist/dev/pkg/changesets/api/categories.js +0 -247
- package/packages/silk-effects/dist/dev/pkg/changesets/api/changelog.cjs +0 -134
- package/packages/silk-effects/dist/dev/pkg/changesets/api/changelog.js +0 -134
- package/packages/silk-effects/dist/dev/pkg/changesets/api/dependency-table.cjs +0 -163
- package/packages/silk-effects/dist/dev/pkg/changesets/api/dependency-table.js +0 -163
- package/packages/silk-effects/dist/dev/pkg/changesets/api/linter.cjs +0 -170
- package/packages/silk-effects/dist/dev/pkg/changesets/api/linter.js +0 -170
- package/packages/silk-effects/dist/dev/pkg/changesets/api/transformer.cjs +0 -134
- package/packages/silk-effects/dist/dev/pkg/changesets/api/transformer.js +0 -134
- package/packages/silk-effects/dist/dev/pkg/changesets/categories/index.cjs +0 -317
- package/packages/silk-effects/dist/dev/pkg/changesets/categories/index.js +0 -299
- package/packages/silk-effects/dist/dev/pkg/changesets/categories/types.cjs +0 -65
- package/packages/silk-effects/dist/dev/pkg/changesets/categories/types.js +0 -65
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/formatting.cjs +0 -114
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/formatting.js +0 -113
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getDependencyReleaseLine.cjs +0 -118
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getDependencyReleaseLine.js +0 -118
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getReleaseLine.cjs +0 -122
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getReleaseLine.js +0 -122
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/index.cjs +0 -97
- package/packages/silk-effects/dist/dev/pkg/changesets/changelog/index.js +0 -97
- package/packages/silk-effects/dist/dev/pkg/changesets/constants.cjs +0 -43
- package/packages/silk-effects/dist/dev/pkg/changesets/constants.js +0 -42
- package/packages/silk-effects/dist/dev/pkg/changesets/errors.cjs +0 -386
- package/packages/silk-effects/dist/dev/pkg/changesets/errors.js +0 -371
- package/packages/silk-effects/dist/dev/pkg/changesets/index.cjs +0 -300
- package/packages/silk-effects/dist/dev/pkg/changesets/index.js +0 -179
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/index.cjs +0 -34
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/index.js +0 -29
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/content-structure.cjs +0 -98
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/content-structure.js +0 -98
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/dependency-table-format.cjs +0 -170
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/dependency-table-format.js +0 -170
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/heading-hierarchy.cjs +0 -61
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/heading-hierarchy.js +0 -61
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/required-sections.cjs +0 -54
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/required-sections.js +0 -54
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/uncategorized-content.cjs +0 -54
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/uncategorized-content.js +0 -54
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/utils.cjs +0 -31
- package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/utils.js +0 -30
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/aggregate-dependency-tables.cjs +0 -47
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/aggregate-dependency-tables.js +0 -47
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/contributor-footnotes.cjs +0 -123
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/contributor-footnotes.js +0 -123
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/deduplicate-items.cjs +0 -32
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/deduplicate-items.js +0 -32
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/issue-link-refs.cjs +0 -59
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/issue-link-refs.js +0 -59
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/maintenance-note.cjs +0 -61
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/maintenance-note.js +0 -61
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/merge-sections.cjs +0 -43
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/merge-sections.js +0 -43
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/normalize-format.cjs +0 -47
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/normalize-format.js +0 -47
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/reorder-sections.cjs +0 -34
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/reorder-sections.js +0 -34
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/presets.cjs +0 -120
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/presets.js +0 -119
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/content-structure.cjs +0 -22
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/content-structure.js +0 -22
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/dependency-table-format.cjs +0 -40
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/dependency-table-format.js +0 -40
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/heading-hierarchy.cjs +0 -19
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/heading-hierarchy.js +0 -19
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/required-sections.cjs +0 -17
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/required-sections.js +0 -17
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/uncategorized-content.cjs +0 -31
- package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/uncategorized-content.js +0 -31
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/changeset.cjs +0 -148
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/changeset.js +0 -145
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/dependency-table.cjs +0 -203
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/dependency-table.js +0 -198
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/git.cjs +0 -69
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/git.js +0 -68
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/github.cjs +0 -177
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/github.js +0 -174
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/options.cjs +0 -183
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/options.js +0 -181
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/package-scope.cjs +0 -129
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/package-scope.js +0 -127
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/primitives.cjs +0 -72
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/primitives.js +0 -71
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/release-plan.cjs +0 -62
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/release-plan.js +0 -56
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/version-files.cjs +0 -154
- package/packages/silk-effects/dist/dev/pkg/changesets/schemas/version-files.js +0 -150
- package/packages/silk-effects/dist/dev/pkg/changesets/services/branch-analyzer.cjs +0 -300
- package/packages/silk-effects/dist/dev/pkg/changesets/services/branch-analyzer.js +0 -294
- package/packages/silk-effects/dist/dev/pkg/changesets/services/changelog.cjs +0 -50
- package/packages/silk-effects/dist/dev/pkg/changesets/services/changelog.js +0 -49
- package/packages/silk-effects/dist/dev/pkg/changesets/services/config-inspector.cjs +0 -489
- package/packages/silk-effects/dist/dev/pkg/changesets/services/config-inspector.js +0 -481
- package/packages/silk-effects/dist/dev/pkg/changesets/services/deps-regen.cjs +0 -375
- package/packages/silk-effects/dist/dev/pkg/changesets/services/deps-regen.js +0 -371
- package/packages/silk-effects/dist/dev/pkg/changesets/services/github.cjs +0 -160
- package/packages/silk-effects/dist/dev/pkg/changesets/services/github.js +0 -157
- package/packages/silk-effects/dist/dev/pkg/changesets/services/maintenance-reason.cjs +0 -68
- package/packages/silk-effects/dist/dev/pkg/changesets/services/maintenance-reason.js +0 -66
- package/packages/silk-effects/dist/dev/pkg/changesets/services/markdown.cjs +0 -87
- package/packages/silk-effects/dist/dev/pkg/changesets/services/markdown.js +0 -85
- package/packages/silk-effects/dist/dev/pkg/changesets/services/release-planner.cjs +0 -352
- package/packages/silk-effects/dist/dev/pkg/changesets/services/release-planner.js +0 -348
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/commit-parser.cjs +0 -81
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/commit-parser.js +0 -80
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/dep-diff.cjs +0 -111
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/dep-diff.js +0 -111
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/dependency-table.cjs +0 -351
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/dependency-table.js +0 -347
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/git.cjs +0 -51
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/git.js +0 -51
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/issue-refs.cjs +0 -102
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js +0 -101
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/jsonpath.cjs +0 -178
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/jsonpath.js +0 -175
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/logger.cjs +0 -51
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/logger.js +0 -50
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/markdown-link.cjs +0 -59
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/markdown-link.js +0 -57
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/publishability.cjs +0 -50
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/publishability.js +0 -50
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/remark-pipeline.cjs +0 -81
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/remark-pipeline.js +0 -79
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/section-parser.cjs +0 -94
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/section-parser.js +0 -94
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/strip-frontmatter.cjs +0 -47
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/strip-frontmatter.js +0 -46
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-blocks.cjs +0 -110
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-blocks.js +0 -108
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-files.cjs +0 -336
- package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-files.js +0 -336
- package/packages/silk-effects/dist/dev/pkg/changesets/vendor/github-info.cjs +0 -77
- package/packages/silk-effects/dist/dev/pkg/changesets/vendor/github-info.js +0 -77
- package/packages/silk-effects/dist/dev/pkg/errors/ChangesetConfigError.cjs +0 -21
- package/packages/silk-effects/dist/dev/pkg/errors/ChangesetConfigError.js +0 -21
- package/packages/silk-effects/dist/dev/pkg/schemas/VersioningSchemas.cjs +0 -101
- package/packages/silk-effects/dist/dev/pkg/schemas/VersioningSchemas.js +0 -99
- package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfig.cjs +0 -81
- package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfig.js +0 -80
- package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfigReader.cjs +0 -109
- package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfigReader.js +0 -108
- package/packages/silk-effects/dist/dev/pkg/services/SilkPublishability.cjs +0 -238
- package/packages/silk-effects/dist/dev/pkg/services/SilkPublishability.js +0 -236
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { sortDependencyRows } from "./dependency-table.js";
|
|
2
|
-
import { Option } from "effect";
|
|
3
|
-
|
|
4
|
-
//#region ../silk-effects/dist/dev/pkg/changesets/utils/dep-diff.js
|
|
5
|
-
/**
|
|
6
|
-
* Compute per-workspace-package dependency-table rows from two
|
|
7
|
-
* {@link WorkspaceStateSnapshot}s, resolving `catalog:` / `workspace:`
|
|
8
|
-
* specifiers against each side's own catalogs and package versions BEFORE
|
|
9
|
-
* comparing.
|
|
10
|
-
*
|
|
11
|
-
* @remarks
|
|
12
|
-
* Operates on declared dependencies only (the `dependencies` /
|
|
13
|
-
* `devDependencies` / `peerDependencies` / `optionalDependencies` fields
|
|
14
|
-
* of each workspace's `package.json`). Lockfile-only movements
|
|
15
|
-
* (resolved versions changing while declared ranges stay put) are
|
|
16
|
-
* intentionally excluded — those happen on every `pnpm install` and
|
|
17
|
-
* would generate constant noise.
|
|
18
|
-
*
|
|
19
|
-
* Each side carries its own catalogs and package versions, so a specifier
|
|
20
|
-
* is resolved against the snapshot it belongs to: `catalog:silk` resolves
|
|
21
|
-
* to that ref's `silk` catalog entry, `workspace:*` to that ref's target
|
|
22
|
-
* package version. A row is emitted iff the two RESOLVED values differ (or
|
|
23
|
-
* the dependency was added/removed) — a package that merely adopted a
|
|
24
|
-
* `catalog:` specifier without changing the concrete version produces NO
|
|
25
|
-
* row. When a side cannot resolve a specifier (no matching catalog entry,
|
|
26
|
-
* plain range, etc.) it falls back to the raw specifier string.
|
|
27
|
-
*
|
|
28
|
-
* @see {@link DependencyTableRow} for the row schema
|
|
29
|
-
* @see {@link WorkspaceStateSnapshot} for the input shape
|
|
30
|
-
*
|
|
31
|
-
*/
|
|
32
|
-
/** The em-dash sentinel (U+2014) used for added ("from") / removed ("to") cells. */
|
|
33
|
-
const EM_DASH = "—";
|
|
34
|
-
const DEP_TYPE_MAP = [
|
|
35
|
-
["dependencies", "dependency"],
|
|
36
|
-
["devDependencies", "devDependency"],
|
|
37
|
-
["peerDependencies", "peerDependency"],
|
|
38
|
-
["optionalDependencies", "optionalDependency"]
|
|
39
|
-
];
|
|
40
|
-
/**
|
|
41
|
-
* Resolve a specifier against the snapshot it belongs to, falling back to
|
|
42
|
-
* the raw specifier string when the snapshot cannot resolve it.
|
|
43
|
-
*/
|
|
44
|
-
const resolveOrRaw = (snapshot, dep, spec) => Option.getOrElse(snapshot.resolve(dep, spec), () => spec);
|
|
45
|
-
/**
|
|
46
|
-
* Diff two workspace snapshots and return per-package dependency-table rows,
|
|
47
|
-
* comparing already-resolved specifier values per side.
|
|
48
|
-
*
|
|
49
|
-
* @param before - Snapshot at the older ref (typically the merge base). A
|
|
50
|
-
* workspace package absent here reports every declared dep as `"added"`.
|
|
51
|
-
* @param after - Snapshot at the newer ref (typically the working tree).
|
|
52
|
-
* @returns One {@link WorkspaceDependencyDiff} entry per workspace package
|
|
53
|
-
* that has at least one row. Packages with no resolved-value changes are
|
|
54
|
-
* omitted.
|
|
55
|
-
*
|
|
56
|
-
* @public
|
|
57
|
-
*/
|
|
58
|
-
function computeWorkspaceDependencyDiffs(before, after) {
|
|
59
|
-
const result = [];
|
|
60
|
-
for (const afterPkg of after.packages) {
|
|
61
|
-
const beforePkg = Option.getOrNull(before.package(afterPkg.name));
|
|
62
|
-
const rows = [];
|
|
63
|
-
for (const [field, type] of DEP_TYPE_MAP) {
|
|
64
|
-
const beforeRecord = beforePkg?.[field] ?? {};
|
|
65
|
-
const afterRecord = afterPkg[field];
|
|
66
|
-
const seen = /* @__PURE__ */ new Set();
|
|
67
|
-
for (const [name, beforeSpec] of Object.entries(beforeRecord)) {
|
|
68
|
-
seen.add(name);
|
|
69
|
-
const from = resolveOrRaw(before, name, beforeSpec);
|
|
70
|
-
const afterSpec = afterRecord[name];
|
|
71
|
-
if (afterSpec === void 0) {
|
|
72
|
-
rows.push({
|
|
73
|
-
dependency: name,
|
|
74
|
-
type,
|
|
75
|
-
action: "removed",
|
|
76
|
-
from,
|
|
77
|
-
to: EM_DASH
|
|
78
|
-
});
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const to = resolveOrRaw(after, name, afterSpec);
|
|
82
|
-
if (from !== to) rows.push({
|
|
83
|
-
dependency: name,
|
|
84
|
-
type,
|
|
85
|
-
action: "updated",
|
|
86
|
-
from,
|
|
87
|
-
to
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
for (const [name, afterSpec] of Object.entries(afterRecord)) {
|
|
91
|
-
if (seen.has(name)) continue;
|
|
92
|
-
rows.push({
|
|
93
|
-
dependency: name,
|
|
94
|
-
type,
|
|
95
|
-
action: "added",
|
|
96
|
-
from: EM_DASH,
|
|
97
|
-
to: resolveOrRaw(after, name, afterSpec)
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (rows.length > 0) result.push({
|
|
102
|
-
package: afterPkg.name,
|
|
103
|
-
relativePath: afterPkg.relativePath,
|
|
104
|
-
rows: sortDependencyRows(rows)
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
//#endregion
|
|
111
|
-
export { computeWorkspaceDependencyDiffs };
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
const require_index = require('../../../../../../../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.cjs');
|
|
2
|
-
const require_index$1 = require('../../../../../../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.cjs');
|
|
3
|
-
const require_index$2 = require('../../../../../../../node_modules/.pnpm/remark-stringify@11.0.0/node_modules/remark-stringify/lib/index.cjs');
|
|
4
|
-
const require_index$3 = require('../../../../../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.cjs');
|
|
5
|
-
const require_dependency_table = require('../schemas/dependency-table.cjs');
|
|
6
|
-
let effect = require("effect");
|
|
7
|
-
|
|
8
|
-
//#region ../silk-effects/dist/dev/pkg/changesets/utils/dependency-table.js
|
|
9
|
-
/**
|
|
10
|
-
* Dependency table utilities for parsing, serializing, collapsing, and sorting
|
|
11
|
-
* dependency table rows between MDAST table nodes and typed representations.
|
|
12
|
-
*
|
|
13
|
-
* @remarks
|
|
14
|
-
* This module provides the low-level functional primitives that the
|
|
15
|
-
* {@link DependencyTable} class wraps with a stateful, fluent API.
|
|
16
|
-
* It operates on arrays of `DependencyTableRow` objects and MDAST `Table`
|
|
17
|
-
* nodes, converting between the two representations.
|
|
18
|
-
*
|
|
19
|
-
* The collapse algorithm merges rows sharing the same `dependency + type`
|
|
20
|
-
* key, applying semantic rules (e.g., added then removed = net zero).
|
|
21
|
-
* Sorting follows a stable order: removed, updated, added, then
|
|
22
|
-
* alphabetically by type and dependency name.
|
|
23
|
-
*
|
|
24
|
-
* @see {@link DependencyTable} for the public class-based API
|
|
25
|
-
*
|
|
26
|
-
* @internal
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Ordered column headers for dependency tables.
|
|
30
|
-
*
|
|
31
|
-
* Defines the canonical header row: `Dependency | Type | Action | From | To`.
|
|
32
|
-
*
|
|
33
|
-
* @internal
|
|
34
|
-
*/
|
|
35
|
-
const COLUMN_HEADERS = [
|
|
36
|
-
"Dependency",
|
|
37
|
-
"Type",
|
|
38
|
-
"Action",
|
|
39
|
-
"From",
|
|
40
|
-
"To"
|
|
41
|
-
];
|
|
42
|
-
/**
|
|
43
|
-
* Property keys on {@link DependencyTableRow} corresponding to each column
|
|
44
|
-
* in {@link COLUMN_HEADERS}.
|
|
45
|
-
*
|
|
46
|
-
* Used to map between positional table cells and typed object fields.
|
|
47
|
-
*
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
const COLUMN_KEYS = [
|
|
51
|
-
"dependency",
|
|
52
|
-
"type",
|
|
53
|
-
"action",
|
|
54
|
-
"from",
|
|
55
|
-
"to"
|
|
56
|
-
];
|
|
57
|
-
/** Schema decoder for validating raw cell values into a typed row. */
|
|
58
|
-
const decode = effect.Schema.decodeUnknownSync(require_dependency_table.DependencyTableRowSchema);
|
|
59
|
-
/**
|
|
60
|
-
* Parse an MDAST table node into validated dependency table rows.
|
|
61
|
-
*
|
|
62
|
-
* @remarks
|
|
63
|
-
* Validates the header row against {@link COLUMN_HEADERS} (case-insensitive),
|
|
64
|
-
* then decodes each data row through the `DependencyTableRowSchema` for
|
|
65
|
-
* type-safe validation of action values, version strings, and dependency types.
|
|
66
|
-
*
|
|
67
|
-
* @param table - An MDAST `Table` node (from remark-gfm)
|
|
68
|
-
* @returns Array of validated `DependencyTableRow` objects
|
|
69
|
-
* @throws If the table has fewer than 2 rows (header + at least one data row)
|
|
70
|
-
* @throws If the header columns do not match the expected column names
|
|
71
|
-
* @throws If any data row fails schema validation
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* import { parseDependencyTable } from "../utils/dependency-table.js";
|
|
76
|
-
* import { parseMarkdown } from "../utils/remark-pipeline.js";
|
|
77
|
-
* import type { Table } from "mdast";
|
|
78
|
-
*
|
|
79
|
-
* const tree = parseMarkdown("| Dependency | Type | Action | From | To |\n| --- | --- | --- | --- | --- |\n| foo | dependency | added | — | 1.0.0 |");
|
|
80
|
-
* const table = tree.children.find((n) => n.type === "table") as Table;
|
|
81
|
-
* const rows = parseDependencyTable(table);
|
|
82
|
-
* // rows[0].dependency === "foo"
|
|
83
|
-
* ```
|
|
84
|
-
*
|
|
85
|
-
* @internal
|
|
86
|
-
*/
|
|
87
|
-
function parseDependencyTable(table) {
|
|
88
|
-
const rows = table.children;
|
|
89
|
-
if (rows.length < 2) throw new Error("Dependency table must have at least one data row");
|
|
90
|
-
const headers = rows[0].children.map((cell) => require_index.toString(cell).trim().toLowerCase());
|
|
91
|
-
const expected = COLUMN_HEADERS.map((h) => h.toLowerCase());
|
|
92
|
-
if (headers.length !== expected.length || !headers.every((h, i) => h === expected[i])) throw new Error(`Table must have columns: ${COLUMN_HEADERS.join(", ")}. Got: ${headers.join(", ")}`);
|
|
93
|
-
const result = [];
|
|
94
|
-
for (let i = 1; i < rows.length; i++) {
|
|
95
|
-
const cells = rows[i].children;
|
|
96
|
-
const raw = {};
|
|
97
|
-
for (let c = 0; c < COLUMN_KEYS.length; c++) raw[COLUMN_KEYS[c]] = require_index.toString(cells[c]).trim();
|
|
98
|
-
result.push(decode(raw));
|
|
99
|
-
}
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Create a table cell with a text node.
|
|
104
|
-
*
|
|
105
|
-
* @param text - The cell text content
|
|
106
|
-
* @returns An MDAST `TableCell` node
|
|
107
|
-
*
|
|
108
|
-
* @internal
|
|
109
|
-
*/
|
|
110
|
-
function makeCell(text) {
|
|
111
|
-
return {
|
|
112
|
-
type: "tableCell",
|
|
113
|
-
children: [{
|
|
114
|
-
type: "text",
|
|
115
|
-
value: text
|
|
116
|
-
}]
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Create a table row from an array of cell texts.
|
|
121
|
-
*
|
|
122
|
-
* @param texts - Array of cell text values
|
|
123
|
-
* @returns An MDAST `TableRow` node
|
|
124
|
-
*
|
|
125
|
-
* @internal
|
|
126
|
-
*/
|
|
127
|
-
function makeRow(texts) {
|
|
128
|
-
return {
|
|
129
|
-
type: "tableRow",
|
|
130
|
-
children: texts.map(makeCell)
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Serialize dependency table rows into an MDAST `Table` node.
|
|
135
|
-
*
|
|
136
|
-
* @remarks
|
|
137
|
-
* Creates a well-formed GFM table with the canonical header row
|
|
138
|
-
* ({@link COLUMN_HEADERS}) followed by one data row per entry.
|
|
139
|
-
* The inverse of {@link parseDependencyTable}.
|
|
140
|
-
*
|
|
141
|
-
* @param rows - Array of `DependencyTableRow` objects
|
|
142
|
-
* @returns An MDAST `Table` node ready for insertion into an AST
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* ```typescript
|
|
146
|
-
* import { serializeDependencyTable } from "../utils/dependency-table.js";
|
|
147
|
-
* import type { DependencyTableRow } from "../schemas/dependency-table.js";
|
|
148
|
-
*
|
|
149
|
-
* const rows: DependencyTableRow[] = [
|
|
150
|
-
* { dependency: "effect", type: "dependency", action: "updated", from: "3.18.0", to: "3.19.0" },
|
|
151
|
-
* ];
|
|
152
|
-
* const table = serializeDependencyTable(rows);
|
|
153
|
-
* // table.type === "table"
|
|
154
|
-
* // table.children.length === 2 (header + 1 data row)
|
|
155
|
-
* ```
|
|
156
|
-
*
|
|
157
|
-
* @internal
|
|
158
|
-
*/
|
|
159
|
-
function serializeDependencyTable(rows) {
|
|
160
|
-
return {
|
|
161
|
-
type: "table",
|
|
162
|
-
children: [makeRow([...COLUMN_HEADERS]), ...rows.map((row) => makeRow(COLUMN_KEYS.map((key) => row[key])))]
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Serialize dependency table rows to a markdown table string.
|
|
167
|
-
*
|
|
168
|
-
* @remarks
|
|
169
|
-
* Combines {@link serializeDependencyTable} with unified/remark-gfm/remark-stringify
|
|
170
|
-
* to produce a ready-to-use GFM markdown table string. The result is trimmed
|
|
171
|
-
* of leading/trailing whitespace.
|
|
172
|
-
*
|
|
173
|
-
* @param rows - Array of `DependencyTableRow` objects
|
|
174
|
-
* @returns Markdown table string (GFM format)
|
|
175
|
-
*
|
|
176
|
-
* @example
|
|
177
|
-
* ```typescript
|
|
178
|
-
* import { serializeDependencyTableToMarkdown } from "../utils/dependency-table.js";
|
|
179
|
-
* import type { DependencyTableRow } from "../schemas/dependency-table.js";
|
|
180
|
-
*
|
|
181
|
-
* const rows: DependencyTableRow[] = [
|
|
182
|
-
* { dependency: "effect", type: "dependency", action: "updated", from: "3.18.0", to: "3.19.0" },
|
|
183
|
-
* ];
|
|
184
|
-
* const md = serializeDependencyTableToMarkdown(rows);
|
|
185
|
-
* // "| Dependency | Type | Action | From | To |\n| --- | --- | ..."
|
|
186
|
-
* ```
|
|
187
|
-
*
|
|
188
|
-
* @internal
|
|
189
|
-
*/
|
|
190
|
-
function serializeDependencyTableToMarkdown(rows) {
|
|
191
|
-
const tree = {
|
|
192
|
-
type: "root",
|
|
193
|
-
children: [serializeDependencyTable(rows)]
|
|
194
|
-
};
|
|
195
|
-
return require_index$3.unified().use(require_index$1.default).use(require_index$2.default).stringify(tree).trim();
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Sort priority for dependency actions: removed first, then updated, then added.
|
|
199
|
-
*
|
|
200
|
-
* @remarks
|
|
201
|
-
* Used by {@link sortDependencyRows} for primary sort ordering. The numeric
|
|
202
|
-
* values define the sort position (lower = earlier in the sorted output).
|
|
203
|
-
*
|
|
204
|
-
* @internal
|
|
205
|
-
*/
|
|
206
|
-
const ACTION_ORDER = {
|
|
207
|
-
removed: 0,
|
|
208
|
-
updated: 1,
|
|
209
|
-
added: 2
|
|
210
|
-
};
|
|
211
|
-
/**
|
|
212
|
-
* Collapse dependency table rows with the same `dependency + type` key.
|
|
213
|
-
*
|
|
214
|
-
* @remarks
|
|
215
|
-
* When multiple changelog entries affect the same dependency, this function
|
|
216
|
-
* merges them into a single row using semantic collapse rules. Rows are
|
|
217
|
-
* grouped by a composite key of `dependency\0type` (null-byte separated).
|
|
218
|
-
*
|
|
219
|
-
* The collapse rules applied by {@link collapseTwo} are:
|
|
220
|
-
*
|
|
221
|
-
* | First action | Second action | Result |
|
|
222
|
-
* |---|---|---|
|
|
223
|
-
* | `updated` | `updated` | `updated` (earliest `from`, latest `to`) |
|
|
224
|
-
* | `added` | `updated` | `added` (final `to`) |
|
|
225
|
-
* | `added` | `removed` | dropped (net zero change) |
|
|
226
|
-
* | `updated` | `removed` | `removed` (original `from`) |
|
|
227
|
-
* | `removed` | `added` | `updated` (original `from`, new `to`) |
|
|
228
|
-
* | other | other | keep later entry |
|
|
229
|
-
*
|
|
230
|
-
* @param rows - Array of `DependencyTableRow` objects (in chronological order)
|
|
231
|
-
* @returns Collapsed array with at most one row per `dependency + type` pair
|
|
232
|
-
*
|
|
233
|
-
* @example
|
|
234
|
-
* ```typescript
|
|
235
|
-
* import { collapseDependencyRows } from "../utils/dependency-table.js";
|
|
236
|
-
* import type { DependencyTableRow } from "../schemas/dependency-table.js";
|
|
237
|
-
*
|
|
238
|
-
* const rows: DependencyTableRow[] = [
|
|
239
|
-
* { dependency: "effect", type: "dependency", action: "updated", from: "3.17.0", to: "3.18.0" },
|
|
240
|
-
* { dependency: "effect", type: "dependency", action: "updated", from: "3.18.0", to: "3.19.0" },
|
|
241
|
-
* ];
|
|
242
|
-
* const collapsed = collapseDependencyRows(rows);
|
|
243
|
-
* // collapsed[0].from === "3.17.0", collapsed[0].to === "3.19.0"
|
|
244
|
-
* ```
|
|
245
|
-
*
|
|
246
|
-
* @see {@link DependencyTable} for the public API that wraps this function
|
|
247
|
-
*
|
|
248
|
-
* @internal
|
|
249
|
-
*/
|
|
250
|
-
function collapseDependencyRows(rows) {
|
|
251
|
-
const groups = /* @__PURE__ */ new Map();
|
|
252
|
-
for (const row of rows) {
|
|
253
|
-
const key = `${row.dependency}\0${row.type}`;
|
|
254
|
-
const existing = groups.get(key);
|
|
255
|
-
if (!existing) {
|
|
256
|
-
groups.set(key, { ...row });
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
const merged = collapseTwo(existing, row);
|
|
260
|
-
if (merged === null) groups.delete(key);
|
|
261
|
-
else groups.set(key, merged);
|
|
262
|
-
}
|
|
263
|
-
return [...groups.values()];
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Collapse two rows sharing the same `dependency + type` key into one,
|
|
267
|
-
* or return `null` if they cancel out (net zero).
|
|
268
|
-
*
|
|
269
|
-
* @remarks
|
|
270
|
-
* This is the core merge function called by {@link collapseDependencyRows}.
|
|
271
|
-
* It applies the semantic collapse rules based on the action pair.
|
|
272
|
-
* See {@link collapseDependencyRows} for the full rule table.
|
|
273
|
-
*
|
|
274
|
-
* @param first - The earlier (existing) row
|
|
275
|
-
* @param second - The later (incoming) row
|
|
276
|
-
* @returns The merged row, or `null` to drop the entry entirely
|
|
277
|
-
*
|
|
278
|
-
* @internal
|
|
279
|
-
*/
|
|
280
|
-
function collapseTwo(first, second) {
|
|
281
|
-
const a = first.action;
|
|
282
|
-
const b = second.action;
|
|
283
|
-
if (a === "updated" && b === "updated") return {
|
|
284
|
-
...first,
|
|
285
|
-
to: second.to
|
|
286
|
-
};
|
|
287
|
-
if (a === "added" && b === "updated") return {
|
|
288
|
-
...first,
|
|
289
|
-
to: second.to
|
|
290
|
-
};
|
|
291
|
-
if (a === "added" && b === "removed") return null;
|
|
292
|
-
if (a === "updated" && b === "removed") return {
|
|
293
|
-
...first,
|
|
294
|
-
action: "removed",
|
|
295
|
-
to: "—"
|
|
296
|
-
};
|
|
297
|
-
if (a === "removed" && b === "added") return {
|
|
298
|
-
...first,
|
|
299
|
-
action: "updated",
|
|
300
|
-
to: second.to
|
|
301
|
-
};
|
|
302
|
-
return { ...second };
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Sort dependency table rows into canonical display order.
|
|
306
|
-
*
|
|
307
|
-
* @remarks
|
|
308
|
-
* Applies a three-level stable sort:
|
|
309
|
-
* 1. **Action** — `removed` first, then `updated`, then `added`
|
|
310
|
-
* (per {@link ACTION_ORDER})
|
|
311
|
-
* 2. **Type** — alphabetically (e.g., `config` before `dependency`)
|
|
312
|
-
* 3. **Dependency name** — alphabetically within each action+type group
|
|
313
|
-
*
|
|
314
|
-
* Returns a new array; the input is not mutated.
|
|
315
|
-
*
|
|
316
|
-
* @param rows - Array of `DependencyTableRow` objects
|
|
317
|
-
* @returns New sorted array
|
|
318
|
-
*
|
|
319
|
-
* @example
|
|
320
|
-
* ```typescript
|
|
321
|
-
* import { sortDependencyRows } from "../utils/dependency-table.js";
|
|
322
|
-
* import type { DependencyTableRow } from "../schemas/dependency-table.js";
|
|
323
|
-
*
|
|
324
|
-
* const rows: DependencyTableRow[] = [
|
|
325
|
-
* { dependency: "zod", type: "dependency", action: "added", from: "\u2014", to: "3.0.0" },
|
|
326
|
-
* { dependency: "effect", type: "dependency", action: "removed", from: "3.19.0", to: "\u2014" },
|
|
327
|
-
* ];
|
|
328
|
-
* const sorted = sortDependencyRows(rows);
|
|
329
|
-
* // sorted[0].dependency === "effect" (removed comes first)
|
|
330
|
-
* ```
|
|
331
|
-
*
|
|
332
|
-
* @see {@link DependencyTable} for the public API that wraps this function
|
|
333
|
-
*
|
|
334
|
-
* @internal
|
|
335
|
-
*/
|
|
336
|
-
function sortDependencyRows(rows) {
|
|
337
|
-
return [...rows].sort((a, b) => {
|
|
338
|
-
const actionDiff = (ACTION_ORDER[a.action] ?? 99) - (ACTION_ORDER[b.action] ?? 99);
|
|
339
|
-
if (actionDiff !== 0) return actionDiff;
|
|
340
|
-
const typeDiff = a.type.localeCompare(b.type);
|
|
341
|
-
if (typeDiff !== 0) return typeDiff;
|
|
342
|
-
return a.dependency.localeCompare(b.dependency);
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
//#endregion
|
|
347
|
-
exports.collapseDependencyRows = collapseDependencyRows;
|
|
348
|
-
exports.parseDependencyTable = parseDependencyTable;
|
|
349
|
-
exports.serializeDependencyTable = serializeDependencyTable;
|
|
350
|
-
exports.serializeDependencyTableToMarkdown = serializeDependencyTableToMarkdown;
|
|
351
|
-
exports.sortDependencyRows = sortDependencyRows;
|