@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.
Files changed (159) hide show
  1. package/README.md +7 -5
  2. package/changesets-changelog.cjs +109 -61
  3. package/changesets-changelog.d.cts +1 -1
  4. package/changesets-changelog.d.ts +1 -1
  5. package/changesets-changelog.js +54099 -1
  6. package/changesets-markdownlint.cjs +109 -61
  7. package/changesets-markdownlint.d.cts +1 -1
  8. package/changesets-markdownlint.d.ts +1 -1
  9. package/changesets-markdownlint.js +54099 -1
  10. package/package.json +5 -4
  11. package/tsconfig/node/dist/tsconfig.tsbuildinfo +1 -1
  12. package/_virtual/_rolldown/runtime.cjs +0 -45
  13. package/_virtual/_rolldown/runtime.js +0 -45
  14. package/packages/silk-effects/dist/dev/pkg/_virtual/_rolldown/runtime.cjs +0 -15
  15. package/packages/silk-effects/dist/dev/pkg/_virtual/_rolldown/runtime.js +0 -14
  16. package/packages/silk-effects/dist/dev/pkg/changesets/api/categories.cjs +0 -247
  17. package/packages/silk-effects/dist/dev/pkg/changesets/api/categories.js +0 -247
  18. package/packages/silk-effects/dist/dev/pkg/changesets/api/changelog.cjs +0 -134
  19. package/packages/silk-effects/dist/dev/pkg/changesets/api/changelog.js +0 -134
  20. package/packages/silk-effects/dist/dev/pkg/changesets/api/dependency-table.cjs +0 -163
  21. package/packages/silk-effects/dist/dev/pkg/changesets/api/dependency-table.js +0 -163
  22. package/packages/silk-effects/dist/dev/pkg/changesets/api/linter.cjs +0 -170
  23. package/packages/silk-effects/dist/dev/pkg/changesets/api/linter.js +0 -170
  24. package/packages/silk-effects/dist/dev/pkg/changesets/api/transformer.cjs +0 -134
  25. package/packages/silk-effects/dist/dev/pkg/changesets/api/transformer.js +0 -134
  26. package/packages/silk-effects/dist/dev/pkg/changesets/categories/index.cjs +0 -317
  27. package/packages/silk-effects/dist/dev/pkg/changesets/categories/index.js +0 -299
  28. package/packages/silk-effects/dist/dev/pkg/changesets/categories/types.cjs +0 -65
  29. package/packages/silk-effects/dist/dev/pkg/changesets/categories/types.js +0 -65
  30. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/formatting.cjs +0 -114
  31. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/formatting.js +0 -113
  32. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getDependencyReleaseLine.cjs +0 -118
  33. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getDependencyReleaseLine.js +0 -118
  34. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getReleaseLine.cjs +0 -122
  35. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/getReleaseLine.js +0 -122
  36. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/index.cjs +0 -97
  37. package/packages/silk-effects/dist/dev/pkg/changesets/changelog/index.js +0 -97
  38. package/packages/silk-effects/dist/dev/pkg/changesets/constants.cjs +0 -43
  39. package/packages/silk-effects/dist/dev/pkg/changesets/constants.js +0 -42
  40. package/packages/silk-effects/dist/dev/pkg/changesets/errors.cjs +0 -386
  41. package/packages/silk-effects/dist/dev/pkg/changesets/errors.js +0 -371
  42. package/packages/silk-effects/dist/dev/pkg/changesets/index.cjs +0 -300
  43. package/packages/silk-effects/dist/dev/pkg/changesets/index.js +0 -179
  44. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/index.cjs +0 -34
  45. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/index.js +0 -29
  46. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/content-structure.cjs +0 -98
  47. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/content-structure.js +0 -98
  48. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/dependency-table-format.cjs +0 -170
  49. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/dependency-table-format.js +0 -170
  50. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/heading-hierarchy.cjs +0 -61
  51. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/heading-hierarchy.js +0 -61
  52. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/required-sections.cjs +0 -54
  53. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/required-sections.js +0 -54
  54. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/uncategorized-content.cjs +0 -54
  55. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/uncategorized-content.js +0 -54
  56. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/utils.cjs +0 -31
  57. package/packages/silk-effects/dist/dev/pkg/changesets/markdownlint/rules/utils.js +0 -30
  58. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/aggregate-dependency-tables.cjs +0 -47
  59. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/aggregate-dependency-tables.js +0 -47
  60. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/contributor-footnotes.cjs +0 -123
  61. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/contributor-footnotes.js +0 -123
  62. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/deduplicate-items.cjs +0 -32
  63. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/deduplicate-items.js +0 -32
  64. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/issue-link-refs.cjs +0 -59
  65. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/issue-link-refs.js +0 -59
  66. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/maintenance-note.cjs +0 -61
  67. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/maintenance-note.js +0 -61
  68. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/merge-sections.cjs +0 -43
  69. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/merge-sections.js +0 -43
  70. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/normalize-format.cjs +0 -47
  71. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/normalize-format.js +0 -47
  72. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/reorder-sections.cjs +0 -34
  73. package/packages/silk-effects/dist/dev/pkg/changesets/remark/plugins/reorder-sections.js +0 -34
  74. package/packages/silk-effects/dist/dev/pkg/changesets/remark/presets.cjs +0 -120
  75. package/packages/silk-effects/dist/dev/pkg/changesets/remark/presets.js +0 -119
  76. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/content-structure.cjs +0 -22
  77. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/content-structure.js +0 -22
  78. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/dependency-table-format.cjs +0 -40
  79. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/dependency-table-format.js +0 -40
  80. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/heading-hierarchy.cjs +0 -19
  81. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/heading-hierarchy.js +0 -19
  82. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/required-sections.cjs +0 -17
  83. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/required-sections.js +0 -17
  84. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/uncategorized-content.cjs +0 -31
  85. package/packages/silk-effects/dist/dev/pkg/changesets/remark/rules/uncategorized-content.js +0 -31
  86. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/changeset.cjs +0 -148
  87. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/changeset.js +0 -145
  88. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/dependency-table.cjs +0 -203
  89. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/dependency-table.js +0 -198
  90. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/git.cjs +0 -69
  91. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/git.js +0 -68
  92. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/github.cjs +0 -177
  93. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/github.js +0 -174
  94. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/options.cjs +0 -183
  95. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/options.js +0 -181
  96. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/package-scope.cjs +0 -129
  97. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/package-scope.js +0 -127
  98. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/primitives.cjs +0 -72
  99. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/primitives.js +0 -71
  100. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/release-plan.cjs +0 -62
  101. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/release-plan.js +0 -56
  102. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/version-files.cjs +0 -154
  103. package/packages/silk-effects/dist/dev/pkg/changesets/schemas/version-files.js +0 -150
  104. package/packages/silk-effects/dist/dev/pkg/changesets/services/branch-analyzer.cjs +0 -300
  105. package/packages/silk-effects/dist/dev/pkg/changesets/services/branch-analyzer.js +0 -294
  106. package/packages/silk-effects/dist/dev/pkg/changesets/services/changelog.cjs +0 -50
  107. package/packages/silk-effects/dist/dev/pkg/changesets/services/changelog.js +0 -49
  108. package/packages/silk-effects/dist/dev/pkg/changesets/services/config-inspector.cjs +0 -489
  109. package/packages/silk-effects/dist/dev/pkg/changesets/services/config-inspector.js +0 -481
  110. package/packages/silk-effects/dist/dev/pkg/changesets/services/deps-regen.cjs +0 -375
  111. package/packages/silk-effects/dist/dev/pkg/changesets/services/deps-regen.js +0 -371
  112. package/packages/silk-effects/dist/dev/pkg/changesets/services/github.cjs +0 -160
  113. package/packages/silk-effects/dist/dev/pkg/changesets/services/github.js +0 -157
  114. package/packages/silk-effects/dist/dev/pkg/changesets/services/maintenance-reason.cjs +0 -68
  115. package/packages/silk-effects/dist/dev/pkg/changesets/services/maintenance-reason.js +0 -66
  116. package/packages/silk-effects/dist/dev/pkg/changesets/services/markdown.cjs +0 -87
  117. package/packages/silk-effects/dist/dev/pkg/changesets/services/markdown.js +0 -85
  118. package/packages/silk-effects/dist/dev/pkg/changesets/services/release-planner.cjs +0 -352
  119. package/packages/silk-effects/dist/dev/pkg/changesets/services/release-planner.js +0 -348
  120. package/packages/silk-effects/dist/dev/pkg/changesets/utils/commit-parser.cjs +0 -81
  121. package/packages/silk-effects/dist/dev/pkg/changesets/utils/commit-parser.js +0 -80
  122. package/packages/silk-effects/dist/dev/pkg/changesets/utils/dep-diff.cjs +0 -111
  123. package/packages/silk-effects/dist/dev/pkg/changesets/utils/dep-diff.js +0 -111
  124. package/packages/silk-effects/dist/dev/pkg/changesets/utils/dependency-table.cjs +0 -351
  125. package/packages/silk-effects/dist/dev/pkg/changesets/utils/dependency-table.js +0 -347
  126. package/packages/silk-effects/dist/dev/pkg/changesets/utils/git.cjs +0 -51
  127. package/packages/silk-effects/dist/dev/pkg/changesets/utils/git.js +0 -51
  128. package/packages/silk-effects/dist/dev/pkg/changesets/utils/issue-refs.cjs +0 -102
  129. package/packages/silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js +0 -101
  130. package/packages/silk-effects/dist/dev/pkg/changesets/utils/jsonpath.cjs +0 -178
  131. package/packages/silk-effects/dist/dev/pkg/changesets/utils/jsonpath.js +0 -175
  132. package/packages/silk-effects/dist/dev/pkg/changesets/utils/logger.cjs +0 -51
  133. package/packages/silk-effects/dist/dev/pkg/changesets/utils/logger.js +0 -50
  134. package/packages/silk-effects/dist/dev/pkg/changesets/utils/markdown-link.cjs +0 -59
  135. package/packages/silk-effects/dist/dev/pkg/changesets/utils/markdown-link.js +0 -57
  136. package/packages/silk-effects/dist/dev/pkg/changesets/utils/publishability.cjs +0 -50
  137. package/packages/silk-effects/dist/dev/pkg/changesets/utils/publishability.js +0 -50
  138. package/packages/silk-effects/dist/dev/pkg/changesets/utils/remark-pipeline.cjs +0 -81
  139. package/packages/silk-effects/dist/dev/pkg/changesets/utils/remark-pipeline.js +0 -79
  140. package/packages/silk-effects/dist/dev/pkg/changesets/utils/section-parser.cjs +0 -94
  141. package/packages/silk-effects/dist/dev/pkg/changesets/utils/section-parser.js +0 -94
  142. package/packages/silk-effects/dist/dev/pkg/changesets/utils/strip-frontmatter.cjs +0 -47
  143. package/packages/silk-effects/dist/dev/pkg/changesets/utils/strip-frontmatter.js +0 -46
  144. package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-blocks.cjs +0 -110
  145. package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-blocks.js +0 -108
  146. package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-files.cjs +0 -336
  147. package/packages/silk-effects/dist/dev/pkg/changesets/utils/version-files.js +0 -336
  148. package/packages/silk-effects/dist/dev/pkg/changesets/vendor/github-info.cjs +0 -77
  149. package/packages/silk-effects/dist/dev/pkg/changesets/vendor/github-info.js +0 -77
  150. package/packages/silk-effects/dist/dev/pkg/errors/ChangesetConfigError.cjs +0 -21
  151. package/packages/silk-effects/dist/dev/pkg/errors/ChangesetConfigError.js +0 -21
  152. package/packages/silk-effects/dist/dev/pkg/schemas/VersioningSchemas.cjs +0 -101
  153. package/packages/silk-effects/dist/dev/pkg/schemas/VersioningSchemas.js +0 -99
  154. package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfig.cjs +0 -81
  155. package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfig.js +0 -80
  156. package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfigReader.cjs +0 -109
  157. package/packages/silk-effects/dist/dev/pkg/services/ChangesetConfigReader.js +0 -108
  158. package/packages/silk-effects/dist/dev/pkg/services/SilkPublishability.cjs +0 -238
  159. package/packages/silk-effects/dist/dev/pkg/services/SilkPublishability.js +0 -236
@@ -1,347 +0,0 @@
1
- import { toString } from "../../../../../../../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js";
2
- import remarkGfm from "../../../../../../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js";
3
- import remarkStringify from "../../../../../../../node_modules/.pnpm/remark-stringify@11.0.0/node_modules/remark-stringify/lib/index.js";
4
- import { unified } from "../../../../../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js";
5
- import { DependencyTableRowSchema } from "../schemas/dependency-table.js";
6
- import { Schema } from "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 = Schema.decodeUnknownSync(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) => 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]] = 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 unified().use(remarkGfm).use(remarkStringify).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
- export { collapseDependencyRows, parseDependencyTable, serializeDependencyTable, serializeDependencyTableToMarkdown, sortDependencyRows };
@@ -1,51 +0,0 @@
1
- const require_errors = require('../errors.cjs');
2
- let effect = require("effect");
3
- let node_child_process = require("node:child_process");
4
-
5
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/git.js
6
- /**
7
- * Git helpers for the changesets deps regen/detect orchestration.
8
- *
9
- * @remarks
10
- * `PointInTimeWorkspace` (from `workspaces-effect`) reads both sides of a
11
- * dependency diff over `CommandExecutor`. The one git operation it does not
12
- * cover is resolving the default `--from` ref — the merge-base with the base
13
- * branch — which stays here as a synchronous `execFileSync` shell-out.
14
- *
15
- * @internal
16
- */
17
- /**
18
- * Run `git merge-base <base> HEAD`, returning the SHA. Errors propagate
19
- * as {@link GitError}.
20
- *
21
- * @internal
22
- */
23
- function gitMergeBase(cwd, base) {
24
- return effect.Effect.try({
25
- try: () => (0, node_child_process.execFileSync)("git", [
26
- "merge-base",
27
- base,
28
- "HEAD"
29
- ], {
30
- cwd,
31
- encoding: "utf8",
32
- stdio: [
33
- "ignore",
34
- "pipe",
35
- "pipe"
36
- ]
37
- }).trim(),
38
- catch: (error) => {
39
- const stderr = error.stderr;
40
- const text = typeof stderr === "string" ? stderr : stderr?.toString() ?? "";
41
- return new require_errors.GitError({
42
- command: `git merge-base ${base} HEAD`,
43
- cwd,
44
- reason: text.trim() || (error.message ?? String(error))
45
- });
46
- }
47
- });
48
- }
49
-
50
- //#endregion
51
- exports.gitMergeBase = gitMergeBase;
@@ -1,51 +0,0 @@
1
- import { GitError } from "../errors.js";
2
- import { Effect } from "effect";
3
- import { execFileSync } from "node:child_process";
4
-
5
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/git.js
6
- /**
7
- * Git helpers for the changesets deps regen/detect orchestration.
8
- *
9
- * @remarks
10
- * `PointInTimeWorkspace` (from `workspaces-effect`) reads both sides of a
11
- * dependency diff over `CommandExecutor`. The one git operation it does not
12
- * cover is resolving the default `--from` ref — the merge-base with the base
13
- * branch — which stays here as a synchronous `execFileSync` shell-out.
14
- *
15
- * @internal
16
- */
17
- /**
18
- * Run `git merge-base <base> HEAD`, returning the SHA. Errors propagate
19
- * as {@link GitError}.
20
- *
21
- * @internal
22
- */
23
- function gitMergeBase(cwd, base) {
24
- return Effect.try({
25
- try: () => execFileSync("git", [
26
- "merge-base",
27
- base,
28
- "HEAD"
29
- ], {
30
- cwd,
31
- encoding: "utf8",
32
- stdio: [
33
- "ignore",
34
- "pipe",
35
- "pipe"
36
- ]
37
- }).trim(),
38
- catch: (error) => {
39
- const stderr = error.stderr;
40
- const text = typeof stderr === "string" ? stderr : stderr?.toString() ?? "";
41
- return new GitError({
42
- command: `git merge-base ${base} HEAD`,
43
- cwd,
44
- reason: text.trim() || (error.message ?? String(error))
45
- });
46
- }
47
- });
48
- }
49
-
50
- //#endregion
51
- export { gitMergeBase };
@@ -1,102 +0,0 @@
1
-
2
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js
3
- /**
4
- * GitHub issue reference parsing from commit messages.
5
- *
6
- * @remarks
7
- * Extracts categorized issue references (`Closes`, `Fixes`, `Refs`) from
8
- * commit message bodies. Supports multiple formats including with/without
9
- * colons, singular/plural keywords, and comma-separated issue lists.
10
- * Input is truncated to 10,000 characters to prevent ReDoS on adversarial input.
11
- *
12
- * @see {@link Changelog} for the public API that consumes issue references
13
- *
14
- * @internal
15
- */
16
- /**
17
- * Matches "closes #123" or "close: #456, #789" patterns (case-insensitive).
18
- *
19
- * Capture group `[1]` contains the comma-separated issue number list.
20
- *
21
- * @internal
22
- */
23
- const CLOSES_ISSUE_PATTERN = /closes?:?\s*#?(\d+(?:, *#?\d+)*)/i;
24
- /**
25
- * Matches "fixes #123" or "fix: #456, #789" patterns (case-insensitive).
26
- *
27
- * Capture group `[1]` contains the comma-separated issue number list.
28
- *
29
- * @internal
30
- */
31
- const FIXES_ISSUE_PATTERN = /fix(?:es)?:?\s*#?(\d+(?:, *#?\d+)*)/i;
32
- /**
33
- * Matches "refs #123" or "ref: #456, #789" patterns (case-insensitive).
34
- *
35
- * Capture group `[1]` contains the comma-separated issue number list.
36
- *
37
- * @internal
38
- */
39
- const REFS_ISSUE_PATTERN = /refs?:?\s*#?(\d+(?:, *#?\d+)*)/i;
40
- /**
41
- * Pattern for splitting comma-separated issue numbers.
42
- *
43
- * @internal
44
- */
45
- const ISSUE_NUMBER_SPLIT_PATTERN = /, */;
46
- /**
47
- * Extract issue numbers from a regex match against a commit message.
48
- *
49
- * @remarks
50
- * Truncates the input to 10,000 characters before matching to prevent
51
- * ReDoS on adversarial input. Strips `#` prefixes from matched numbers.
52
- *
53
- * @param pattern - The regex pattern to match (must have a capture group for issue numbers)
54
- * @param message - The commit message body to search
55
- * @returns Array of issue number strings (without `#` prefix)
56
- *
57
- * @internal
58
- */
59
- function extractIssueNumbers(pattern, message) {
60
- const safeMessage = message.slice(0, 1e4);
61
- const match = pattern.exec(safeMessage);
62
- if (!match?.[1]) return [];
63
- return match[1].split(ISSUE_NUMBER_SPLIT_PATTERN).map((num) => num.replace("#", "").trim());
64
- }
65
- /**
66
- * Parse a commit message for GitHub issue references.
67
- *
68
- * Recognizes `Closes`, `Fixes`, and `Refs` keywords with various formats:
69
- * - `Closes #123`
70
- * - `Fixes: #456, #789`
71
- * - `Refs #101`
72
- *
73
- * @remarks
74
- * Each keyword category is matched independently, so a single commit
75
- * message can contain references in all three categories. Keywords are
76
- * case-insensitive and accept both singular and plural forms.
77
- *
78
- * @param commitMessage - The commit message body to parse
79
- * @returns Categorized issue references with numbers as strings (no `#` prefix)
80
- *
81
- * @example
82
- * ```typescript
83
- * import { parseIssueReferences } from "../utils/issue-refs.js";
84
- *
85
- * const refs = parseIssueReferences("feat: add API\n\nCloses #42\nFixes: #17, #23");
86
- * // refs.closes === ["42"]
87
- * // refs.fixes === ["17", "23"]
88
- * // refs.refs === []
89
- * ```
90
- *
91
- * @internal
92
- */
93
- function parseIssueReferences(commitMessage) {
94
- return {
95
- closes: extractIssueNumbers(CLOSES_ISSUE_PATTERN, commitMessage),
96
- fixes: extractIssueNumbers(FIXES_ISSUE_PATTERN, commitMessage),
97
- refs: extractIssueNumbers(REFS_ISSUE_PATTERN, commitMessage)
98
- };
99
- }
100
-
101
- //#endregion
102
- exports.parseIssueReferences = parseIssueReferences;
@@ -1,101 +0,0 @@
1
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js
2
- /**
3
- * GitHub issue reference parsing from commit messages.
4
- *
5
- * @remarks
6
- * Extracts categorized issue references (`Closes`, `Fixes`, `Refs`) from
7
- * commit message bodies. Supports multiple formats including with/without
8
- * colons, singular/plural keywords, and comma-separated issue lists.
9
- * Input is truncated to 10,000 characters to prevent ReDoS on adversarial input.
10
- *
11
- * @see {@link Changelog} for the public API that consumes issue references
12
- *
13
- * @internal
14
- */
15
- /**
16
- * Matches "closes #123" or "close: #456, #789" patterns (case-insensitive).
17
- *
18
- * Capture group `[1]` contains the comma-separated issue number list.
19
- *
20
- * @internal
21
- */
22
- const CLOSES_ISSUE_PATTERN = /closes?:?\s*#?(\d+(?:, *#?\d+)*)/i;
23
- /**
24
- * Matches "fixes #123" or "fix: #456, #789" patterns (case-insensitive).
25
- *
26
- * Capture group `[1]` contains the comma-separated issue number list.
27
- *
28
- * @internal
29
- */
30
- const FIXES_ISSUE_PATTERN = /fix(?:es)?:?\s*#?(\d+(?:, *#?\d+)*)/i;
31
- /**
32
- * Matches "refs #123" or "ref: #456, #789" patterns (case-insensitive).
33
- *
34
- * Capture group `[1]` contains the comma-separated issue number list.
35
- *
36
- * @internal
37
- */
38
- const REFS_ISSUE_PATTERN = /refs?:?\s*#?(\d+(?:, *#?\d+)*)/i;
39
- /**
40
- * Pattern for splitting comma-separated issue numbers.
41
- *
42
- * @internal
43
- */
44
- const ISSUE_NUMBER_SPLIT_PATTERN = /, */;
45
- /**
46
- * Extract issue numbers from a regex match against a commit message.
47
- *
48
- * @remarks
49
- * Truncates the input to 10,000 characters before matching to prevent
50
- * ReDoS on adversarial input. Strips `#` prefixes from matched numbers.
51
- *
52
- * @param pattern - The regex pattern to match (must have a capture group for issue numbers)
53
- * @param message - The commit message body to search
54
- * @returns Array of issue number strings (without `#` prefix)
55
- *
56
- * @internal
57
- */
58
- function extractIssueNumbers(pattern, message) {
59
- const safeMessage = message.slice(0, 1e4);
60
- const match = pattern.exec(safeMessage);
61
- if (!match?.[1]) return [];
62
- return match[1].split(ISSUE_NUMBER_SPLIT_PATTERN).map((num) => num.replace("#", "").trim());
63
- }
64
- /**
65
- * Parse a commit message for GitHub issue references.
66
- *
67
- * Recognizes `Closes`, `Fixes`, and `Refs` keywords with various formats:
68
- * - `Closes #123`
69
- * - `Fixes: #456, #789`
70
- * - `Refs #101`
71
- *
72
- * @remarks
73
- * Each keyword category is matched independently, so a single commit
74
- * message can contain references in all three categories. Keywords are
75
- * case-insensitive and accept both singular and plural forms.
76
- *
77
- * @param commitMessage - The commit message body to parse
78
- * @returns Categorized issue references with numbers as strings (no `#` prefix)
79
- *
80
- * @example
81
- * ```typescript
82
- * import { parseIssueReferences } from "../utils/issue-refs.js";
83
- *
84
- * const refs = parseIssueReferences("feat: add API\n\nCloses #42\nFixes: #17, #23");
85
- * // refs.closes === ["42"]
86
- * // refs.fixes === ["17", "23"]
87
- * // refs.refs === []
88
- * ```
89
- *
90
- * @internal
91
- */
92
- function parseIssueReferences(commitMessage) {
93
- return {
94
- closes: extractIssueNumbers(CLOSES_ISSUE_PATTERN, commitMessage),
95
- fixes: extractIssueNumbers(FIXES_ISSUE_PATTERN, commitMessage),
96
- refs: extractIssueNumbers(REFS_ISSUE_PATTERN, commitMessage)
97
- };
98
- }
99
-
100
- //#endregion
101
- export { parseIssueReferences };