@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,348 +0,0 @@
1
- import { ReleasePlanError } from "../errors.js";
2
- import { ChangelogTransformer } from "../api/transformer.js";
3
- import { ConfigInspector } from "./config-inspector.js";
4
- import { deriveMaintenanceReason } from "./maintenance-reason.js";
5
- import { VersionFiles } from "../utils/version-files.js";
6
- import { getPackages } from "../../../../../../../node_modules/.pnpm/@manypkg_get-packages@3.1.0/node_modules/@manypkg/get-packages/dist/manypkg-get-packages.js";
7
- import { readConfig } from "../../../../../../../node_modules/.pnpm/@changesets_config@4.0.0-next.6/node_modules/@changesets/config/dist/index.js";
8
- import { applyReleasePlan } from "../../../../../../../node_modules/.pnpm/@changesets_apply-release-plan@8.0.0-next.7/node_modules/@changesets/apply-release-plan/dist/index.js";
9
- import { getReleasePlan } from "../../../../../../../node_modules/.pnpm/@changesets_get-release-plan@5.0.0-next.7/node_modules/@changesets/get-release-plan/dist/index.js";
10
- import { Context, Effect, Layer } from "effect";
11
- import { FileSystem } from "@effect/platform";
12
- import { dirname, isAbsolute, join, relative } from "node:path";
13
-
14
- //#region ../silk-effects/dist/dev/pkg/changesets/services/release-planner.js
15
- /**
16
- * `ReleasePlanner` service — drive the genuine changesets release engine to
17
- * compute a plan, render a read-only preview, or natively apply a release.
18
- *
19
- * @remarks
20
- * `preview` and `apply` both run the real `@changesets/apply-release-plan`;
21
- * `preview` redirects every write into a throwaway temp directory by handing
22
- * the engine a `@manypkg`-shaped `Packages` object whose `dir`s point at temp,
23
- * then reads the generated CHANGELOG blocks back. No changesets-internal logic
24
- * (e.g. `getChangelogEntry`) is re-implemented.
25
- *
26
- */
27
- const errMsg = (e) => e instanceof Error ? e.message : String(e);
28
- /**
29
- * Read the changesets config, surfacing non-throwing `readConfig` errors as a
30
- * thrown `Error` so callers inside `Effect.tryPromise` land on the existing
31
- * `ReleasePlanError` mapping. Warnings are returned alongside the config so
32
- * the caller can log them via the Effect runtime rather than console output.
33
- */
34
- async function loadConfig(root, packages) {
35
- const configResult = await readConfig(root, packages);
36
- if (configResult.config === void 0) throw new Error(`Invalid changeset config:\n${configResult.errors.join("\n")}`);
37
- return {
38
- config: configResult.config,
39
- warnings: configResult.warnings
40
- };
41
- }
42
- /**
43
- * Base class for {@link ReleasePlanner}.
44
- *
45
- * @privateRemarks Required export for api-extractor (anonymous Context.Tag base). Do not delete.
46
- * @internal
47
- */
48
- const ReleasePlannerBase = Context.Tag("ReleasePlanner")();
49
- /** Effect service tag for the release planner. @public */
50
- var ReleasePlanner = class extends ReleasePlannerBase {};
51
- /** Build the service shape over a resolved {@link ConfigInspector} and {@link FileSystem.FileSystem}. */
52
- function makeShape(inspector, fs) {
53
- const plan = (root) => Effect.tryPromise({
54
- try: () => getReleasePlan(root),
55
- catch: (e) => new ReleasePlanError({
56
- phase: "plan",
57
- reason: errMsg(e)
58
- })
59
- });
60
- const preview = (root) => previewEffect(root, fs);
61
- const apply = (root, options) => applyEffect(root, options?.dryRun ?? false, options?.changelogModules, inspector, fs);
62
- return {
63
- plan,
64
- preview,
65
- apply
66
- };
67
- }
68
- /** Production layer. Requires {@link ConfigInspector} (used by `apply`) and `FileSystem`. @public */
69
- const ReleasePlannerLive = Layer.effect(ReleasePlanner, Effect.gen(function* () {
70
- return makeShape(yield* ConfigInspector, yield* FileSystem.FileSystem);
71
- }));
72
- /**
73
- * Test factory — supply fixed results for any subset of methods. Unsupplied
74
- * methods fail with a `ReleasePlanError`.
75
- *
76
- * @public
77
- */
78
- function makeReleasePlannerTest(fixed) {
79
- const fail = (phase) => Effect.fail(new ReleasePlanError({
80
- phase,
81
- reason: "not provided in test layer"
82
- }));
83
- return Layer.succeed(ReleasePlanner, {
84
- plan: () => fixed.plan ? Effect.succeed(fixed.plan) : fail("plan"),
85
- preview: () => fixed.preview ? Effect.succeed(fixed.preview) : fail("preview"),
86
- apply: () => fixed.apply ? Effect.succeed(fixed.apply) : fail("apply")
87
- });
88
- }
89
- /** Extract the `## <version>` block (down to the next H2 or EOF) from a changelog. */
90
- function extractVersionBlock(changelog, version) {
91
- const lines = changelog.split("\n");
92
- const start = lines.findIndex((l) => l.trim() === `## ${version}`);
93
- if (start === -1) return "";
94
- let end = lines.length;
95
- for (let i = start + 1; i < lines.length; i++) if (/^## /.test(lines[i])) {
96
- end = i;
97
- break;
98
- }
99
- return lines.slice(start, end).join("\n").trim();
100
- }
101
- /** Maintenance reasons for every changeset-less release in the plan, keyed by package name. */
102
- function maintenanceReasons(plan, config) {
103
- const reasons = /* @__PURE__ */ new Map();
104
- for (const r of plan.releases) {
105
- if (r.type === "none") continue;
106
- const reason = deriveMaintenanceReason(r, plan, config);
107
- if (reason) reasons.set(r.name, reason);
108
- }
109
- return reasons;
110
- }
111
- /**
112
- * Render a non-destructive preview by redirecting every write into a
113
- * scope-managed temp directory (cleaned up automatically when the scope
114
- * closes) and reading the generated CHANGELOG blocks back.
115
- */
116
- function previewEffect(root, fs) {
117
- const program = Effect.gen(function* () {
118
- const [plan, packages] = yield* Effect.tryPromise({
119
- try: () => Promise.all([getReleasePlan(root), getPackages(root)]),
120
- catch: (e) => new ReleasePlanError({
121
- phase: "preview",
122
- reason: errMsg(e)
123
- })
124
- });
125
- if (!packages.rootPackage) return yield* Effect.fail(new ReleasePlanError({
126
- phase: "preview",
127
- reason: `Workspace root has no package.json: ${root}`
128
- }));
129
- const rootPackage = packages.rootPackage;
130
- const { config, warnings } = yield* Effect.tryPromise({
131
- try: () => loadConfig(root, packages),
132
- catch: (e) => new ReleasePlanError({
133
- phase: "preview",
134
- reason: errMsg(e)
135
- })
136
- });
137
- yield* Effect.forEach(warnings, (w) => Effect.logWarning(w));
138
- const reasonByName = maintenanceReasons(plan, config);
139
- const preMode = plan.preState ? plan.preState.mode : null;
140
- const changesets = plan.changesets.map((cs) => ({
141
- id: cs.id,
142
- summary: cs.summary,
143
- releases: cs.releases.filter((r) => r.type !== "none").map((r) => ({
144
- name: r.name,
145
- type: r.type
146
- }))
147
- }));
148
- const releasesToRender = plan.releases.filter((r) => r.type !== "none");
149
- if (releasesToRender.length === 0) return {
150
- preMode,
151
- releases: [],
152
- changesets
153
- };
154
- const tempRoot = yield* fs.makeTempDirectoryScoped({ prefix: "silk-preview-" });
155
- const mapDir = (dir) => {
156
- const rel = relative(packages.rootDir, dir);
157
- if (rel.startsWith("..") || isAbsolute(rel)) return Effect.fail(new ReleasePlanError({
158
- phase: "preview",
159
- reason: `Package directory is outside the workspace root: ${dir}`
160
- }));
161
- return Effect.succeed(join(tempRoot, rel));
162
- };
163
- const tempDirs = yield* Effect.forEach(packages.packages, (p) => mapDir(p.dir));
164
- const tempPackages = {
165
- tool: packages.tool,
166
- rootDir: tempRoot,
167
- rootPackage: {
168
- dir: tempRoot,
169
- packageJson: structuredClone(rootPackage.packageJson)
170
- },
171
- packages: packages.packages.map((p, i) => ({
172
- dir: tempDirs[i],
173
- packageJson: structuredClone(p.packageJson)
174
- }))
175
- };
176
- yield* fs.makeDirectory(join(tempRoot, ".changeset"), { recursive: true });
177
- yield* fs.copyFile(join(root, "package.json"), join(tempRoot, "package.json"));
178
- const preJson = join(root, ".changeset", "pre.json");
179
- if (yield* fs.exists(preJson)) yield* fs.copyFile(preJson, join(tempRoot, ".changeset", "pre.json"));
180
- for (let i = 0; i < packages.packages.length; i++) {
181
- const p = packages.packages[i];
182
- const tDir = tempDirs[i];
183
- yield* fs.makeDirectory(tDir, { recursive: true });
184
- yield* fs.copyFile(join(p.dir, "package.json"), join(tDir, "package.json"));
185
- const realCl = join(p.dir, "CHANGELOG.md");
186
- if (yield* fs.exists(realCl)) yield* fs.copyFile(realCl, join(tDir, "CHANGELOG.md"));
187
- }
188
- const rootCl = join(packages.rootDir, "CHANGELOG.md");
189
- if (yield* fs.exists(rootCl)) yield* fs.copyFile(rootCl, join(tempRoot, "CHANGELOG.md"));
190
- yield* Effect.tryPromise({
191
- try: () => applyReleasePlan(plan, tempPackages, config, void 0, root),
192
- catch: (e) => new ReleasePlanError({
193
- phase: "preview",
194
- reason: errMsg(e)
195
- })
196
- });
197
- const dirByName = /* @__PURE__ */ new Map();
198
- for (const p of tempPackages.packages) dirByName.set(p.packageJson.name, p.dir);
199
- if (tempPackages.rootPackage?.packageJson.name) dirByName.set(tempPackages.rootPackage.packageJson.name, tempRoot);
200
- const releases = [];
201
- for (const r of releasesToRender) {
202
- const dir = dirByName.get(r.name);
203
- if (!dir) continue;
204
- const clPath = join(dir, "CHANGELOG.md");
205
- if (!(yield* fs.exists(clPath))) continue;
206
- const reason = reasonByName.get(r.name);
207
- yield* Effect.try({
208
- try: () => ChangelogTransformer.transformFile(clPath, reason ? { maintenance: {
209
- version: r.newVersion,
210
- reason
211
- } } : void 0),
212
- catch: (e) => new ReleasePlanError({
213
- phase: "preview",
214
- reason: errMsg(e)
215
- })
216
- });
217
- const content = yield* fs.readFileString(clPath);
218
- releases.push({
219
- name: r.name,
220
- type: r.type,
221
- oldVersion: r.oldVersion,
222
- newVersion: r.newVersion,
223
- changesetIds: [...r.changesets],
224
- changelogEntry: extractVersionBlock(content, r.newVersion)
225
- });
226
- }
227
- return {
228
- preMode,
229
- releases,
230
- changesets
231
- };
232
- });
233
- return Effect.scoped(program).pipe(Effect.mapError((e) => e instanceof ReleasePlanError ? e : new ReleasePlanError({
234
- phase: "preview",
235
- reason: errMsg(e)
236
- })));
237
- }
238
- /** Re-read a package's version from disk (post-bump) to feed versionFiles; unreadable/unparseable falls back. */
239
- function diskVersion(workspaceDir, fallback, fs) {
240
- return fs.readFileString(join(workspaceDir, "package.json")).pipe(Effect.flatMap((raw) => Effect.try(() => JSON.parse(raw).version ?? fallback)), Effect.orElseSucceed(() => fallback));
241
- }
242
- function applyEffect(root, dryRun, changelogModules, inspector, fs) {
243
- return Effect.gen(function* () {
244
- const { plan, packages, config, warnings } = yield* Effect.tryPromise({
245
- try: async () => {
246
- const [plan, packages] = await Promise.all([getReleasePlan(root), getPackages(root)]);
247
- const { config, warnings } = await loadConfig(root, packages);
248
- return {
249
- plan,
250
- packages,
251
- config,
252
- warnings
253
- };
254
- },
255
- catch: (e) => new ReleasePlanError({
256
- phase: "apply",
257
- reason: errMsg(e)
258
- })
259
- });
260
- yield* Effect.forEach(warnings, (w) => Effect.logWarning(w));
261
- let engineConfig = config;
262
- if (changelogModules) {
263
- engineConfig = {
264
- ...config,
265
- format: false
266
- };
267
- if (Array.isArray(config.changelog)) {
268
- const configuredId = config.changelog[0];
269
- const mapped = changelogModules[configuredId];
270
- if (mapped === void 0) {
271
- const supported = Object.keys(changelogModules).join(", ");
272
- return yield* Effect.fail(new ReleasePlanError({
273
- phase: "apply",
274
- reason: `changelog id "${configuredId}" is not in changelogModules (supported: ${supported})`
275
- }));
276
- }
277
- engineConfig = {
278
- ...engineConfig,
279
- changelog: [mapped, config.changelog[1]]
280
- };
281
- }
282
- }
283
- const releases = plan.releases.filter((r) => r.type !== "none").map((r) => ({
284
- name: r.name,
285
- type: r.type,
286
- oldVersion: r.oldVersion,
287
- newVersion: r.newVersion
288
- }));
289
- let touchedFiles = [];
290
- if (!dryRun) {
291
- const reasonByName = maintenanceReasons(plan, config);
292
- const versionByPkgName = new Map(plan.releases.map((r) => [r.name, r.newVersion]));
293
- const nameByDir = /* @__PURE__ */ new Map();
294
- for (const p of packages.packages) nameByDir.set(p.dir, p.packageJson.name);
295
- if (packages.rootPackage?.packageJson.name) nameByDir.set(packages.rootDir, packages.rootPackage.packageJson.name);
296
- touchedFiles = yield* Effect.tryPromise({
297
- try: async () => {
298
- const touched = await applyReleasePlan(plan, packages, engineConfig);
299
- for (const f of touched) {
300
- if (!f.endsWith("CHANGELOG.md")) continue;
301
- const pkgName = nameByDir.get(dirname(f));
302
- const reason = pkgName ? reasonByName.get(pkgName) : void 0;
303
- const newVersion = pkgName ? versionByPkgName.get(pkgName) : void 0;
304
- ChangelogTransformer.transformFile(f, reason && newVersion ? { maintenance: {
305
- version: newVersion,
306
- reason
307
- } } : void 0);
308
- }
309
- return touched;
310
- },
311
- catch: (e) => new ReleasePlanError({
312
- phase: "apply",
313
- reason: errMsg(e)
314
- })
315
- });
316
- }
317
- const newVersionByName = new Map(plan.releases.map((r) => [r.name, r.newVersion]));
318
- const inspected = yield* inspector.inspect(root).pipe(Effect.catchAll((error) => Effect.logWarning(`Skipping versionFiles update: ${errMsg(error)}`).pipe(Effect.as(null))));
319
- let versionFileUpdates = [];
320
- if (inspected) {
321
- const candidates = inspected.packages.filter((p) => p.versionFiles.length > 0);
322
- const freshVersions = yield* Effect.forEach(candidates, (p) => dryRun ? Effect.succeed(newVersionByName.get(p.name) ?? p.version) : diskVersion(p.workspaceDir, p.version, fs));
323
- const scopes = candidates.map((p, i) => {
324
- const fresh = freshVersions[i];
325
- return fresh !== p.version ? {
326
- ...p,
327
- version: fresh
328
- } : p;
329
- });
330
- versionFileUpdates = yield* Effect.try({
331
- try: () => scopes.length > 0 ? VersionFiles.processResolvedVersionFiles(scopes, dryRun) : [],
332
- catch: (e) => new ReleasePlanError({
333
- phase: "apply",
334
- reason: errMsg(e)
335
- })
336
- });
337
- }
338
- return {
339
- dryRun,
340
- touchedFiles,
341
- releases,
342
- versionFileUpdates
343
- };
344
- });
345
- }
346
-
347
- //#endregion
348
- export { ReleasePlanner, ReleasePlannerBase, ReleasePlannerLive, extractVersionBlock, makeReleasePlannerTest };
@@ -1,81 +0,0 @@
1
-
2
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/commit-parser.js
3
- /**
4
- * Conventional commit message parsing.
5
- *
6
- * Implements a parser for the
7
- * {@link https://www.conventionalcommits.org/ | Conventional Commits}
8
- * specification, extracting type, scope, breaking-change indicator,
9
- * description, and body from commit messages.
10
- *
11
- * @remarks
12
- * The parser uses a single regex pass for the first line, then splits
13
- * remaining lines to extract the body. Non-conventional messages are
14
- * returned with only the `description` field populated (set to the
15
- * full message text).
16
- *
17
- * @see {@link Changelog} for the public API that consumes parsed commits
18
- *
19
- * @internal
20
- */
21
- /**
22
- * Matches conventional commit format: `type(scope)!: description`.
23
- *
24
- * Capture groups:
25
- * - `[1]` — commit type (e.g., `feat`, `fix`)
26
- * - `[2]` — optional scope (e.g., `api`, `ui`)
27
- * - `[3]` — optional `!` breaking-change indicator
28
- * - `[4]` — description text after the colon
29
- *
30
- * @internal
31
- */
32
- const CONVENTIONAL_COMMIT_PATTERN = /^(\w+)(?:\(([^)]+)\))?(!)?\s*:\s*(.+)/;
33
- /**
34
- * Parse a commit message following the Conventional Commits specification.
35
- *
36
- * Supports the full format: `type(scope)!: description\n\nbody`
37
- *
38
- * @remarks
39
- * The algorithm first attempts to match the first line against the
40
- * conventional commit pattern. If matched, the type, optional scope,
41
- * optional breaking indicator, and description are extracted. The body
42
- * is everything after the first line, trimmed. If the message does not
43
- * match, a fallback result with only the `description` set to the raw
44
- * message is returned.
45
- *
46
- * @param message - The commit message to parse
47
- * @returns Parsed components; only `description` is guaranteed present
48
- *
49
- * @example
50
- * ```typescript
51
- * import { parseCommitMessage } from "../utils/commit-parser.js";
52
- *
53
- * const result = parseCommitMessage("feat(api)!: add v2 routes\n\nBREAKING CHANGE: v1 removed");
54
- * // result.type === "feat"
55
- * // result.scope === "api"
56
- * // result.breaking === true
57
- * // result.description === "add v2 routes"
58
- * // result.body === "BREAKING CHANGE: v1 removed"
59
- * ```
60
- *
61
- * @internal
62
- */
63
- function parseCommitMessage(message) {
64
- const match = CONVENTIONAL_COMMIT_PATTERN.exec(message);
65
- if (match) {
66
- const [, type, scope, bang, description] = match;
67
- const body = message.split("\n").slice(1).join("\n").trim();
68
- const result = {
69
- type,
70
- description: description.trim()
71
- };
72
- if (scope) result.scope = scope;
73
- if (bang === "!") result.breaking = true;
74
- if (body) result.body = body;
75
- return result;
76
- }
77
- return { description: message };
78
- }
79
-
80
- //#endregion
81
- exports.parseCommitMessage = parseCommitMessage;
@@ -1,80 +0,0 @@
1
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/commit-parser.js
2
- /**
3
- * Conventional commit message parsing.
4
- *
5
- * Implements a parser for the
6
- * {@link https://www.conventionalcommits.org/ | Conventional Commits}
7
- * specification, extracting type, scope, breaking-change indicator,
8
- * description, and body from commit messages.
9
- *
10
- * @remarks
11
- * The parser uses a single regex pass for the first line, then splits
12
- * remaining lines to extract the body. Non-conventional messages are
13
- * returned with only the `description` field populated (set to the
14
- * full message text).
15
- *
16
- * @see {@link Changelog} for the public API that consumes parsed commits
17
- *
18
- * @internal
19
- */
20
- /**
21
- * Matches conventional commit format: `type(scope)!: description`.
22
- *
23
- * Capture groups:
24
- * - `[1]` — commit type (e.g., `feat`, `fix`)
25
- * - `[2]` — optional scope (e.g., `api`, `ui`)
26
- * - `[3]` — optional `!` breaking-change indicator
27
- * - `[4]` — description text after the colon
28
- *
29
- * @internal
30
- */
31
- const CONVENTIONAL_COMMIT_PATTERN = /^(\w+)(?:\(([^)]+)\))?(!)?\s*:\s*(.+)/;
32
- /**
33
- * Parse a commit message following the Conventional Commits specification.
34
- *
35
- * Supports the full format: `type(scope)!: description\n\nbody`
36
- *
37
- * @remarks
38
- * The algorithm first attempts to match the first line against the
39
- * conventional commit pattern. If matched, the type, optional scope,
40
- * optional breaking indicator, and description are extracted. The body
41
- * is everything after the first line, trimmed. If the message does not
42
- * match, a fallback result with only the `description` set to the raw
43
- * message is returned.
44
- *
45
- * @param message - The commit message to parse
46
- * @returns Parsed components; only `description` is guaranteed present
47
- *
48
- * @example
49
- * ```typescript
50
- * import { parseCommitMessage } from "../utils/commit-parser.js";
51
- *
52
- * const result = parseCommitMessage("feat(api)!: add v2 routes\n\nBREAKING CHANGE: v1 removed");
53
- * // result.type === "feat"
54
- * // result.scope === "api"
55
- * // result.breaking === true
56
- * // result.description === "add v2 routes"
57
- * // result.body === "BREAKING CHANGE: v1 removed"
58
- * ```
59
- *
60
- * @internal
61
- */
62
- function parseCommitMessage(message) {
63
- const match = CONVENTIONAL_COMMIT_PATTERN.exec(message);
64
- if (match) {
65
- const [, type, scope, bang, description] = match;
66
- const body = message.split("\n").slice(1).join("\n").trim();
67
- const result = {
68
- type,
69
- description: description.trim()
70
- };
71
- if (scope) result.scope = scope;
72
- if (bang === "!") result.breaking = true;
73
- if (body) result.body = body;
74
- return result;
75
- }
76
- return { description: message };
77
- }
78
-
79
- //#endregion
80
- export { parseCommitMessage };
@@ -1,111 +0,0 @@
1
- const require_dependency_table = require('./dependency-table.cjs');
2
- let effect = require("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) => effect.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 = effect.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: require_dependency_table.sortDependencyRows(rows)
105
- });
106
- }
107
- return result;
108
- }
109
-
110
- //#endregion
111
- exports.computeWorkspaceDependencyDiffs = computeWorkspaceDependencyDiffs;