@savvy-web/changesets 0.4.2 → 0.5.0

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/cjs/index.cjs CHANGED
@@ -166,44 +166,45 @@ var __webpack_modules__ = {
166
166
  var schemas_options = __webpack_require__("./src/schemas/options.ts");
167
167
  var services_github = __webpack_require__("./src/services/github.ts");
168
168
  var markdown = __webpack_require__("./src/services/markdown.ts");
169
- function logWarning(message, ...args) {
170
- if ("u" > typeof process && process.env.VITEST) return;
171
- if ("u" > typeof process && "true" === process.env.GITHUB_ACTIONS) {
172
- const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
173
- console.warn(`::warning::${text}`);
174
- } else console.warn(message, ...args);
169
+ var dependency_table = __webpack_require__("./src/utils/dependency-table.ts");
170
+ const FIELD_MAP = [
171
+ [
172
+ "dependencies",
173
+ "dependency"
174
+ ],
175
+ [
176
+ "devDependencies",
177
+ "devDependency"
178
+ ],
179
+ [
180
+ "peerDependencies",
181
+ "peerDependency"
182
+ ],
183
+ [
184
+ "optionalDependencies",
185
+ "optionalDependency"
186
+ ]
187
+ ];
188
+ function inferDependencyType(dep) {
189
+ const pkg = dep.packageJson;
190
+ for (const [field, type] of FIELD_MAP){
191
+ const section = pkg[field];
192
+ if ("object" == typeof section && null !== section && dep.name in section) return type;
193
+ }
194
+ return "dependency";
175
195
  }
176
- function getDependencyReleaseLine(changesets, dependenciesUpdated, options) {
196
+ function getDependencyReleaseLine(_changesets, dependenciesUpdated, _options) {
177
197
  return external_effect_.Effect.gen(function*() {
178
198
  if (0 === dependenciesUpdated.length) return "";
179
- const github = yield* services_github.Xx;
180
- let apiFailures = 0;
181
- const totalWithCommit = changesets.filter((cs)=>cs.commit).length;
182
- const commitLinks = yield* external_effect_.Effect.forEach(changesets, (cs)=>{
183
- const commit = cs.commit;
184
- if (!commit) return external_effect_.Effect.succeed(null);
185
- return github.getInfo({
186
- commit,
187
- repo: options.repo
188
- }).pipe(external_effect_.Effect.map((info)=>info.links.commit), external_effect_.Effect.catchAll((error)=>{
189
- apiFailures++;
190
- logWarning(`Failed to fetch GitHub info for commit ${commit}:`, String(error));
191
- return external_effect_.Effect.succeed(`[\`${commit.substring(0, 7)}\`](https://github.com/${options.repo}/commit/${commit})`);
199
+ yield* services_github.Xx;
200
+ const rows = dependenciesUpdated.map((dep)=>({
201
+ dependency: dep.name,
202
+ type: inferDependencyType(dep),
203
+ action: "updated",
204
+ from: dep.oldVersion,
205
+ to: dep.newVersion
192
206
  }));
193
- }, {
194
- concurrency: 10
195
- });
196
- if (apiFailures > 0) {
197
- const successRate = ((totalWithCommit - apiFailures) / totalWithCommit * 100).toFixed(1);
198
- logWarning(`GitHub API calls completed with ${apiFailures}/${totalWithCommit} failures (${successRate}% success rate)`);
199
- }
200
- const validLinks = commitLinks.filter(Boolean);
201
- const changesetLink = validLinks.length > 0 ? `- Updated dependencies [${validLinks.join(", ")}]:` : "- Updated dependencies:";
202
- const updatedDependenciesList = dependenciesUpdated.map((dep)=>` - ${dep.name}@${dep.newVersion}`);
203
- return [
204
- changesetLink,
205
- ...updatedDependenciesList
206
- ].join("\n");
207
+ return (0, dependency_table.S8)(rows);
207
208
  });
208
209
  }
209
210
  var categories = __webpack_require__("./src/categories/index.ts");
@@ -245,6 +246,13 @@ var __webpack_modules__ = {
245
246
  refs: extractIssueNumbers(REFS_ISSUE_PATTERN, commitMessage)
246
247
  };
247
248
  }
249
+ function logWarning(message, ...args) {
250
+ if ("u" > typeof process && process.env.VITEST) return;
251
+ if ("u" > typeof process && "true" === process.env.GITHUB_ACTIONS) {
252
+ const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
253
+ console.warn(`::warning::${text}`);
254
+ } else console.warn(message, ...args);
255
+ }
248
256
  var external_mdast_util_to_string_ = __webpack_require__("mdast-util-to-string");
249
257
  var remark_pipeline = __webpack_require__("./src/utils/remark-pipeline.ts");
250
258
  function parseChangesetSections(summary) {
@@ -471,6 +479,28 @@ var __webpack_modules__ = {
471
479
  }
472
480
  }
473
481
  },
482
+ "./src/schemas/dependency-table.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
483
+ __webpack_require__.d(__webpack_exports__, {
484
+ J1: ()=>DependencyTableTypeSchema,
485
+ Tk: ()=>DependencyTableSchema,
486
+ Z: ()=>DependencyActionSchema,
487
+ n8: ()=>DependencyTableRowSchema,
488
+ wb: ()=>VersionOrEmptySchema
489
+ });
490
+ var effect__rspack_import_0 = __webpack_require__("effect");
491
+ var _primitives_js__rspack_import_1 = __webpack_require__("./src/schemas/primitives.ts");
492
+ const DependencyActionSchema = effect__rspack_import_0.Schema.Literal("added", "updated", "removed");
493
+ const DependencyTableTypeSchema = effect__rspack_import_0.Schema.Literal("dependency", "devDependency", "peerDependency", "optionalDependency", "workspace", "config");
494
+ const VersionOrEmptySchema = effect__rspack_import_0.Schema.String.pipe(effect__rspack_import_0.Schema.pattern(/^(\u2014|[~^]?\d+\.\d+\.\d+(?:[-+.][\w.+-]*)?)$/));
495
+ const DependencyTableRowSchema = effect__rspack_import_0.Schema.Struct({
496
+ dependency: _primitives_js__rspack_import_1.u,
497
+ type: DependencyTableTypeSchema,
498
+ action: DependencyActionSchema,
499
+ from: VersionOrEmptySchema,
500
+ to: VersionOrEmptySchema
501
+ });
502
+ const DependencyTableSchema = effect__rspack_import_0.Schema.Array(DependencyTableRowSchema).pipe(effect__rspack_import_0.Schema.minItems(1));
503
+ },
474
504
  "./src/schemas/github.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
475
505
  __webpack_require__.d(__webpack_exports__, {
476
506
  OD: ()=>IssueNumberSchema,
@@ -642,6 +672,155 @@ var __webpack_modules__ = {
642
672
  stringify: (tree)=>effect__rspack_import_0.Effect.sync(()=>(0, _utils_remark_pipeline_js__rspack_import_1.FH)(tree))
643
673
  });
644
674
  },
675
+ "./src/utils/dependency-table.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
676
+ __webpack_require__.d(__webpack_exports__, {
677
+ Lm: ()=>parseDependencyTable,
678
+ Qp: ()=>serializeDependencyTable,
679
+ Rs: ()=>sortDependencyRows,
680
+ S8: ()=>serializeDependencyTableToMarkdown,
681
+ yh: ()=>collapseDependencyRows
682
+ });
683
+ var effect__rspack_import_0 = __webpack_require__("effect");
684
+ var mdast_util_to_string__rspack_import_1 = __webpack_require__("mdast-util-to-string");
685
+ var remark_gfm__rspack_import_2 = __webpack_require__("remark-gfm");
686
+ var remark_gfm__rspack_import_2_default = /*#__PURE__*/ __webpack_require__.n(remark_gfm__rspack_import_2);
687
+ var remark_stringify__rspack_import_3 = __webpack_require__("remark-stringify");
688
+ var remark_stringify__rspack_import_3_default = /*#__PURE__*/ __webpack_require__.n(remark_stringify__rspack_import_3);
689
+ var unified__rspack_import_4 = __webpack_require__("unified");
690
+ var _schemas_dependency_table_js__rspack_import_5 = __webpack_require__("./src/schemas/dependency-table.ts");
691
+ const COLUMN_HEADERS = [
692
+ "Dependency",
693
+ "Type",
694
+ "Action",
695
+ "From",
696
+ "To"
697
+ ];
698
+ const COLUMN_KEYS = [
699
+ "dependency",
700
+ "type",
701
+ "action",
702
+ "from",
703
+ "to"
704
+ ];
705
+ const decode = effect__rspack_import_0.Schema.decodeUnknownSync(_schemas_dependency_table_js__rspack_import_5.n8);
706
+ function parseDependencyTable(table) {
707
+ const rows = table.children;
708
+ if (rows.length < 2) throw new Error("Dependency table must have at least one data row");
709
+ const headerRow = rows[0];
710
+ const headers = headerRow.children.map((cell)=>(0, mdast_util_to_string__rspack_import_1.toString)(cell).trim().toLowerCase());
711
+ const expected = COLUMN_HEADERS.map((h)=>h.toLowerCase());
712
+ 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(", ")}`);
713
+ const result = [];
714
+ for(let i = 1; i < rows.length; i++){
715
+ const cells = rows[i].children;
716
+ const raw = {};
717
+ for(let c = 0; c < COLUMN_KEYS.length; c++)raw[COLUMN_KEYS[c]] = (0, mdast_util_to_string__rspack_import_1.toString)(cells[c]).trim();
718
+ result.push(decode(raw));
719
+ }
720
+ return result;
721
+ }
722
+ function makeCell(text) {
723
+ return {
724
+ type: "tableCell",
725
+ children: [
726
+ {
727
+ type: "text",
728
+ value: text
729
+ }
730
+ ]
731
+ };
732
+ }
733
+ function makeRow(texts) {
734
+ return {
735
+ type: "tableRow",
736
+ children: texts.map(makeCell)
737
+ };
738
+ }
739
+ function serializeDependencyTable(rows) {
740
+ const headerRow = makeRow([
741
+ ...COLUMN_HEADERS
742
+ ]);
743
+ const dataRows = rows.map((row)=>makeRow(COLUMN_KEYS.map((key)=>row[key])));
744
+ return {
745
+ type: "table",
746
+ children: [
747
+ headerRow,
748
+ ...dataRows
749
+ ]
750
+ };
751
+ }
752
+ function serializeDependencyTableToMarkdown(rows) {
753
+ const table = serializeDependencyTable(rows);
754
+ const tree = {
755
+ type: "root",
756
+ children: [
757
+ table
758
+ ]
759
+ };
760
+ return (0, unified__rspack_import_4.unified)().use(remark_gfm__rspack_import_2_default()).use(remark_stringify__rspack_import_3_default()).stringify(tree).trim();
761
+ }
762
+ const ACTION_ORDER = {
763
+ removed: 0,
764
+ updated: 1,
765
+ added: 2
766
+ };
767
+ function collapseDependencyRows(rows) {
768
+ const groups = new Map();
769
+ for (const row of rows){
770
+ const key = `${row.dependency}\0${row.type}`;
771
+ const existing = groups.get(key);
772
+ if (!existing) {
773
+ groups.set(key, {
774
+ ...row
775
+ });
776
+ continue;
777
+ }
778
+ const merged = collapseTwo(existing, row);
779
+ if (null === merged) groups.delete(key);
780
+ else groups.set(key, merged);
781
+ }
782
+ return [
783
+ ...groups.values()
784
+ ];
785
+ }
786
+ function collapseTwo(first, second) {
787
+ const a = first.action;
788
+ const b = second.action;
789
+ if ("updated" === a && "updated" === b) return {
790
+ ...first,
791
+ to: second.to
792
+ };
793
+ if ("added" === a && "updated" === b) return {
794
+ ...first,
795
+ to: second.to
796
+ };
797
+ if ("added" === a && "removed" === b) return null;
798
+ if ("updated" === a && "removed" === b) return {
799
+ ...first,
800
+ action: "removed",
801
+ to: "\u2014"
802
+ };
803
+ if ("removed" === a && "added" === b) return {
804
+ ...first,
805
+ action: "updated",
806
+ to: second.to
807
+ };
808
+ return {
809
+ ...second
810
+ };
811
+ }
812
+ function sortDependencyRows(rows) {
813
+ return [
814
+ ...rows
815
+ ].sort((a, b)=>{
816
+ const actionDiff = (ACTION_ORDER[a.action] ?? 99) - (ACTION_ORDER[b.action] ?? 99);
817
+ if (0 !== actionDiff) return actionDiff;
818
+ const typeDiff = a.type.localeCompare(b.type);
819
+ if (0 !== typeDiff) return typeDiff;
820
+ return a.dependency.localeCompare(b.dependency);
821
+ });
822
+ }
823
+ },
645
824
  "./src/utils/markdown-link.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
646
825
  __webpack_require__.d(__webpack_exports__, {
647
826
  W: ()=>extractUrlFromMarkdown,
@@ -740,13 +919,16 @@ var __webpack_exports__ = {};
740
919
  (()=>{
741
920
  __webpack_require__.r(__webpack_exports__);
742
921
  __webpack_require__.d(__webpack_exports__, {
922
+ DependencyTable: ()=>DependencyTable,
743
923
  IssueNumberSchema: ()=>schemas_github.OD,
744
924
  VersionFilesSchema: ()=>version_files.Hh,
925
+ DependencyTableRowSchema: ()=>schemas_dependency_table.n8,
745
926
  ChangelogServiceBase: ()=>ChangelogServiceBase,
746
927
  UrlOrMarkdownLinkSchema: ()=>schemas_github.hY,
747
- GitHubInfoSchema: ()=>schemas_github.lo,
748
928
  GitHubServiceBase: ()=>github.wP,
929
+ GitHubInfoSchema: ()=>schemas_github.lo,
749
930
  GitHubApiErrorBase: ()=>errors.TZ,
931
+ DependencyTableSchema: ()=>schemas_dependency_table.Tk,
750
932
  VersionFileError: ()=>errors.j9,
751
933
  ChangesetLinter: ()=>ChangesetLinter,
752
934
  ChangesetSchema: ()=>ChangesetSchema,
@@ -760,27 +942,30 @@ var __webpack_exports__ = {};
760
942
  ChangelogService: ()=>ChangelogService,
761
943
  ChangesetSummarySchema: ()=>ChangesetSummarySchema,
762
944
  JsonPathSchema: ()=>version_files.hH,
763
- MarkdownParseError: ()=>errors.zy,
945
+ DependencyTableTypeSchema: ()=>schemas_dependency_table.J1,
764
946
  CommitHashSchema: ()=>CommitHashSchema,
765
947
  ChangelogTransformer: ()=>ChangelogTransformer,
766
- PositiveInteger: ()=>primitives.e,
948
+ DependencyActionSchema: ()=>schemas_dependency_table.Z,
949
+ MarkdownParseError: ()=>errors.zy,
767
950
  NonEmptyString: ()=>primitives.u,
951
+ PositiveInteger: ()=>primitives.e,
768
952
  ConfigurationError: ()=>errors.j1,
769
953
  VersionFileConfigSchema: ()=>version_files.mC,
770
954
  Categories: ()=>Categories,
771
955
  Changelog: ()=>Changelog,
772
956
  SectionCategorySchema: ()=>SectionCategorySchema,
957
+ VersionOrEmptySchema: ()=>schemas_dependency_table.wb,
773
958
  DependencyTypeSchema: ()=>DependencyTypeSchema,
774
- MarkdownService: ()=>markdown.Rl,
775
959
  ChangesetValidationErrorBase: ()=>errors.hL,
776
960
  ConfigurationErrorBase: ()=>errors.W4,
961
+ MarkdownService: ()=>markdown.Rl,
777
962
  RepoSchema: ()=>schemas_options.s8,
778
963
  GitHubApiError: ()=>errors.OS,
779
- MarkdownParseErrorBase: ()=>errors.ww,
780
964
  GitHubService: ()=>github.Xx,
965
+ MarkdownParseErrorBase: ()=>errors.ww,
781
966
  GitHubLive: ()=>github.cH,
782
- MarkdownLive: ()=>markdown.Am,
783
- ChangesetValidationError: ()=>errors.Gv
967
+ ChangesetValidationError: ()=>errors.Gv,
968
+ MarkdownLive: ()=>markdown.Am
784
969
  });
785
970
  var categories = __webpack_require__("./src/categories/index.ts");
786
971
  class Categories {
@@ -820,6 +1005,27 @@ var __webpack_exports__ = {};
820
1005
  return changelog["default"].getDependencyReleaseLine(changesets, dependenciesUpdated, options);
821
1006
  }
822
1007
  }
1008
+ var dependency_table = __webpack_require__("./src/utils/dependency-table.ts");
1009
+ class DependencyTable {
1010
+ static parse(tableNode) {
1011
+ return (0, dependency_table.Lm)(tableNode);
1012
+ }
1013
+ static serialize(rows) {
1014
+ return (0, dependency_table.Qp)(rows);
1015
+ }
1016
+ static toMarkdown(rows) {
1017
+ return (0, dependency_table.S8)(rows);
1018
+ }
1019
+ static collapse(rows) {
1020
+ return (0, dependency_table.yh)(rows);
1021
+ }
1022
+ static sort(rows) {
1023
+ return (0, dependency_table.Rs)(rows);
1024
+ }
1025
+ static aggregate(rows) {
1026
+ return (0, dependency_table.Rs)((0, dependency_table.yh)(rows));
1027
+ }
1028
+ }
823
1029
  const external_node_fs_namespaceObject = require("node:fs");
824
1030
  const external_node_path_namespaceObject = require("node:path");
825
1031
  var external_remark_parse_ = __webpack_require__("remark-parse");
@@ -835,7 +1041,8 @@ var __webpack_exports__ = {};
835
1041
  CSH001: `${DOCS_BASE}/CSH001.md`,
836
1042
  CSH002: `${DOCS_BASE}/CSH002.md`,
837
1043
  CSH003: `${DOCS_BASE}/CSH003.md`,
838
- CSH004: `${DOCS_BASE}/CSH004.md`
1044
+ CSH004: `${DOCS_BASE}/CSH004.md`,
1045
+ CSH005: `${DOCS_BASE}/CSH005.md`
839
1046
  };
840
1047
  const ContentStructureRule = (0, external_unified_lint_rule_namespaceObject.lintRule)("remark-lint:changeset-content-structure", (tree, file)=>{
841
1048
  (0, external_unist_util_visit_namespaceObject.visit)(tree, "heading", (node, index, parent)=>{
@@ -1258,6 +1465,7 @@ var __webpack_exports__ = {};
1258
1465
  oldVersion: external_effect_.Schema.String,
1259
1466
  newVersion: external_effect_.Schema.String
1260
1467
  });
1468
+ var schemas_dependency_table = __webpack_require__("./src/schemas/dependency-table.ts");
1261
1469
  var schemas_github = __webpack_require__("./src/schemas/github.ts");
1262
1470
  var schemas_options = __webpack_require__("./src/schemas/options.ts");
1263
1471
  var version_files = __webpack_require__("./src/schemas/version-files.ts");
@@ -1276,6 +1484,11 @@ exports.ChangesetValidationErrorBase = __webpack_exports__.ChangesetValidationEr
1276
1484
  exports.CommitHashSchema = __webpack_exports__.CommitHashSchema;
1277
1485
  exports.ConfigurationError = __webpack_exports__.ConfigurationError;
1278
1486
  exports.ConfigurationErrorBase = __webpack_exports__.ConfigurationErrorBase;
1487
+ exports.DependencyActionSchema = __webpack_exports__.DependencyActionSchema;
1488
+ exports.DependencyTable = __webpack_exports__.DependencyTable;
1489
+ exports.DependencyTableRowSchema = __webpack_exports__.DependencyTableRowSchema;
1490
+ exports.DependencyTableSchema = __webpack_exports__.DependencyTableSchema;
1491
+ exports.DependencyTableTypeSchema = __webpack_exports__.DependencyTableTypeSchema;
1279
1492
  exports.DependencyTypeSchema = __webpack_exports__.DependencyTypeSchema;
1280
1493
  exports.DependencyUpdateSchema = __webpack_exports__.DependencyUpdateSchema;
1281
1494
  exports.GitHubApiError = __webpack_exports__.GitHubApiError;
@@ -1301,6 +1514,7 @@ exports.VersionFileConfigSchema = __webpack_exports__.VersionFileConfigSchema;
1301
1514
  exports.VersionFileError = __webpack_exports__.VersionFileError;
1302
1515
  exports.VersionFileErrorBase = __webpack_exports__.VersionFileErrorBase;
1303
1516
  exports.VersionFilesSchema = __webpack_exports__.VersionFilesSchema;
1517
+ exports.VersionOrEmptySchema = __webpack_exports__.VersionOrEmptySchema;
1304
1518
  exports.VersionTypeSchema = __webpack_exports__.VersionTypeSchema;
1305
1519
  exports.makeGitHubTest = __webpack_exports__.makeGitHubTest;
1306
1520
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1318,6 +1532,11 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
1318
1532
  "CommitHashSchema",
1319
1533
  "ConfigurationError",
1320
1534
  "ConfigurationErrorBase",
1535
+ "DependencyActionSchema",
1536
+ "DependencyTable",
1537
+ "DependencyTableRowSchema",
1538
+ "DependencyTableSchema",
1539
+ "DependencyTableTypeSchema",
1321
1540
  "DependencyTypeSchema",
1322
1541
  "DependencyUpdateSchema",
1323
1542
  "GitHubApiError",
@@ -1343,6 +1562,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
1343
1562
  "VersionFileError",
1344
1563
  "VersionFileErrorBase",
1345
1564
  "VersionFilesSchema",
1565
+ "VersionOrEmptySchema",
1346
1566
  "VersionTypeSchema",
1347
1567
  "makeGitHubTest"
1348
1568
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];