@savvy-web/silk 3.15.3 → 4.0.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.
@@ -30,11 +30,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  enumerable: true
31
31
  }) : target, mod));
32
32
  //#endregion
33
- let _effected_templates = require("@effected/templates");
34
33
  let effect = require("effect");
34
+ let _effected_templates = require("@effected/templates");
35
+ let _effected_workspaces = require("@effected/workspaces");
35
36
  let node_path = require("node:path");
36
37
  node_path = __toESM(node_path, 1);
37
- let _effected_workspaces = require("@effected/workspaces");
38
38
  let node_fs_promises = require("node:fs/promises");
39
39
  node_fs_promises = __toESM(node_fs_promises, 1);
40
40
  let node_util = require("node:util");
@@ -75,7 +75,7 @@ let semver_functions_gt_js = require("semver/functions/gt.js");
75
75
  semver_functions_gt_js = __toESM(semver_functions_gt_js, 1);
76
76
  let semver_functions_inc_js = require("semver/functions/inc.js");
77
77
  semver_functions_inc_js = __toESM(semver_functions_inc_js, 1);
78
- //#region ../silk-effects/dist/dev/pkg/errors/ChangesetConfigError.js
78
+ //#region ../silk-core/dist/dev/pkg/errors/ChangesetConfigError.js
79
79
  /**
80
80
  * Raised when the `.changeset/config.json` file cannot be read or decoded.
81
81
  *
@@ -92,7 +92,441 @@ var ChangesetConfigError = class extends effect.Data.TaggedError("ChangesetConfi
92
92
  }
93
93
  };
94
94
  //#endregion
95
- //#region ../silk-effects/dist/dev/pkg/schemas/VersioningSchemas.js
95
+ //#region ../silk-core/dist/dev/pkg/errors/PublishTargetBindingError.js
96
+ /**
97
+ * Raised when publishability detection selects a directory that the package's
98
+ * `dist/prod/targets.json` binding does not describe.
99
+ *
100
+ * @remarks
101
+ * The bundler's prod build writes `targets.json` naming every byte-group
102
+ * directory it produced. Once that binding exists it is authoritative: the only
103
+ * directories whose bytes may be published are the ones it lists. A detector
104
+ * that returns anything else — most often `publishConfig.directory` pointing at
105
+ * a **dev** build, because silk mode was misdetected — is about to pack an
106
+ * unresolved workspace manifest and ship it to a registry.
107
+ *
108
+ * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
109
+ * dev manifest still carried `catalog:` specifiers, and the published package
110
+ * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
111
+ *
112
+ * @since 3.1.0
113
+ * @public
114
+ */
115
+ var PublishTargetBindingError = class extends effect.Data.TaggedError("PublishTargetBindingError") {
116
+ get message() {
117
+ return `Package ${this.pkg} resolved publish directory "${this.directory}", which is not one of the directories bound by dist/prod/targets.json (${this.boundDirectories.join(", ")}). This means publishability detection did not select the prod build output — refusing to publish before packing an unresolved manifest.`;
118
+ }
119
+ };
120
+ //#endregion
121
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
122
+ /**
123
+ * GitHub's closing-keyword issue-reference grammar, as pure functions.
124
+ *
125
+ * @remarks
126
+ * GitHub links an issue to a pull request when the PR's description carries
127
+ * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
128
+ * that grammar in two distinct dialects, and this module models exactly those
129
+ * two — no service, no layer, nothing but strings in and values out:
130
+ *
131
+ * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
132
+ * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
133
+ * and **no colon**, because that is the spelling GitHub itself scans PR
134
+ * bodies for. This is the dialect a release pipeline harvests from commit
135
+ * subjects and PR descriptions.
136
+ * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
137
+ * the reference — `"Closes: #12"` — with an **optional colon**, because a
138
+ * generated references region writes one reference per line and a colon
139
+ * reads better there. GitHub does not require the colon; the region format
140
+ * allows it, so the parser must too. The dialects differ because their
141
+ * producers do: prose is written by humans for GitHub's scanner, the region
142
+ * is written by tooling for humans.
143
+ *
144
+ * Deliberately out of scope this round: cross-repo references
145
+ * (`owner/repo#N`) and full-URL references
146
+ * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
147
+ * neither dialect's consumers emit them yet, and guessing at their shape here
148
+ * would freeze an API nobody has driven.
149
+ */
150
+ /**
151
+ * The nine closing keywords GitHub documents, lowercased.
152
+ *
153
+ * @public
154
+ */
155
+ const CLOSING_KEYWORDS = [
156
+ "close",
157
+ "closes",
158
+ "closed",
159
+ "fix",
160
+ "fixes",
161
+ "fixed",
162
+ "resolve",
163
+ "resolves",
164
+ "resolved"
165
+ ];
166
+ /**
167
+ * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
168
+ * grammar cannot drift. Alternation order is safe: the regex engine backtracks
169
+ * through alternatives, so `close` matching inside `closes` fails at the
170
+ * mandatory `#`-introducer and retries the longer keyword.
171
+ */
172
+ const KEYWORDS = CLOSING_KEYWORDS.join("|");
173
+ new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
174
+ new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
175
+ //#endregion
176
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
177
+ /**
178
+ * The closing-list dialect: one whole line naming several issues at once.
179
+ *
180
+ * @remarks
181
+ * The third dialect, alongside the two in `IssueReferences`: after trimming,
182
+ * the **entire** line must be `<keyword>[:] <list>` — keyword
183
+ * case-insensitive (lowercased to canonical form in the result), colon
184
+ * optional, and the list one or more `#<digits>` items separated by `,`,
185
+ * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
186
+ * so an embedded newline cannot smuggle two lines past a parser whose
187
+ * contract is one — the same posture as the bare-line pattern. Any trailing
188
+ * content after the list rejects the line; duplicates are preserved in order,
189
+ * because whether `#1, #1` means one issue or two is the caller's business.
190
+ *
191
+ * Two keyword sets play here. {@link parseClosingList} accepts only the nine
192
+ * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
193
+ * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
194
+ * `refs`, `references`) and reports which set matched via
195
+ * {@link ReferenceList}'s `closing` flag.
196
+ *
197
+ * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
198
+ * line**, where `harvestIssueReferences` merely skips the one match. The
199
+ * asymmetry is deliberate: a harvest drops one reference out of running
200
+ * prose, but a list line is a single claim about a set of issues, and
201
+ * returning the parseable subset would misrepresent the line as claiming
202
+ * less than it does.
203
+ *
204
+ * Complexity posture: parsing is a single left-to-right character scan —
205
+ * this module contains **no regular expressions at all** — so worst-case
206
+ * time is linear in the line length by construction. There is no
207
+ * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
208
+ * and therefore no input truncation.
209
+ *
210
+ * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
211
+ * the same list grammar to the inline-in-prose posture — several lists on
212
+ * one line of running text — and {@link parseClosingLists} /
213
+ * {@link parseReferenceLists} apply the whole-line parsers per line of a
214
+ * multi-line text. All of them ride the same character scan; the no-regex
215
+ * promise above covers every export here.
216
+ */
217
+ /**
218
+ * The non-closing reference keywords the list dialect accepts, lowercased.
219
+ *
220
+ * @remarks
221
+ * GitHub does not act on these — they associate without closing — but a
222
+ * references region writes them, so the parser must read them.
223
+ *
224
+ * @public
225
+ */
226
+ const REFERENCE_KEYWORDS = [
227
+ "ref",
228
+ "refs",
229
+ "references"
230
+ ];
231
+ /**
232
+ * Both keyword tables ARE the exported constants — membership sets built from
233
+ * them once — so the constants and the grammar cannot drift.
234
+ */
235
+ const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
236
+ /** Membership test for reporting `closing`, widened once so no call casts. */
237
+ const CLOSING_SET = new Set(CLOSING_KEYWORDS);
238
+ const HASH = 35;
239
+ const COLON = 58;
240
+ const COMMA = 44;
241
+ /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
242
+ const isSpaceTab = (code) => code === 32 || code === 9;
243
+ const isDigit$2 = (code) => code >= 48 && code <= 57;
244
+ const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
245
+ /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
246
+ const skipSpaceTab = (line, from) => {
247
+ let index = from;
248
+ while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
249
+ return index;
250
+ };
251
+ /**
252
+ * One list item at exactly `from`: `#<digits>` and the index one past it.
253
+ * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
254
+ * silently rounded issue number, still carrying the index one past the digit
255
+ * run so a caller can skip the item's extent; the whole-line parsers reject
256
+ * on it and {@link harvestReferenceLists} abandons the entire candidate —
257
+ * see the module remarks for why a list never yields a partial reading.
258
+ * Anything that is not `#<digits>` at all is `undefined`.
259
+ */
260
+ const readItem = (line, from) => {
261
+ if (line.charCodeAt(from) !== HASH) return void 0;
262
+ const start = from + 1;
263
+ let index = start;
264
+ while (index < line.length && isDigit$2(line.charCodeAt(index))) index += 1;
265
+ if (index === start) return void 0;
266
+ const value = Number(line.slice(start, index));
267
+ return Number.isSafeInteger(value) ? {
268
+ kind: "item",
269
+ value,
270
+ next: index
271
+ } : {
272
+ kind: "unsafe",
273
+ next: index
274
+ };
275
+ };
276
+ /**
277
+ * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
278
+ * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
279
+ * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
280
+ * lowercase-only — the keyword head is case-insensitive, the separator is
281
+ * not. Returns the index where the next item must start, or `undefined` when
282
+ * no separator is present.
283
+ */
284
+ const scanSeparator = (line, from) => {
285
+ const afterLeading = skipSpaceTab(line, from);
286
+ if (line.charCodeAt(afterLeading) === COMMA) {
287
+ const afterComma = skipSpaceTab(line, afterLeading + 1);
288
+ if (line.startsWith("and", afterComma)) {
289
+ const afterAnd = skipSpaceTab(line, afterComma + 3);
290
+ if (afterAnd > afterComma + 3) return afterAnd;
291
+ }
292
+ return afterComma;
293
+ }
294
+ if (afterLeading > from && line.startsWith("and", afterLeading)) {
295
+ const afterAnd = skipSpaceTab(line, afterLeading + 3);
296
+ if (afterAnd > afterLeading + 3) return afterAnd;
297
+ }
298
+ };
299
+ /**
300
+ * The scan walk: item, then separator, then item, until the cursor stands
301
+ * exactly at the end of the string. Anything else — a malformed item, an
302
+ * unknown separator, trailing content, an unsafe issue number — is
303
+ * `undefined`, and the caller rejects the whole line.
304
+ */
305
+ const parseItems = (line, from) => {
306
+ const issueNumbers = [];
307
+ let cursor = from;
308
+ for (;;) {
309
+ const item = readItem(line, cursor);
310
+ if (item === void 0 || item.kind === "unsafe") return void 0;
311
+ issueNumbers.push(item.value);
312
+ cursor = item.next;
313
+ if (cursor === line.length) return issueNumbers;
314
+ const next = scanSeparator(line, cursor);
315
+ if (next === void 0) return void 0;
316
+ cursor = next;
317
+ }
318
+ };
319
+ /**
320
+ * The list a whole line carries under either keyword set, or `Option.none()`.
321
+ *
322
+ * @remarks
323
+ * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
324
+ * reports which set matched in the result's `closing` flag. Grammar,
325
+ * whole-line posture and the whole-line rejection of unsafe issue numbers
326
+ * are in the module remarks.
327
+ *
328
+ * @public
329
+ */
330
+ const parseReferenceList = (line) => {
331
+ const trimmed = line.trim();
332
+ let letters = 0;
333
+ while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
334
+ if (letters === 0) return effect.Option.none();
335
+ const keyword = trimmed.slice(0, letters).toLowerCase();
336
+ if (!ALL_KEYWORDS.has(keyword)) return effect.Option.none();
337
+ let cursor = letters;
338
+ if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
339
+ const afterWhitespace = skipSpaceTab(trimmed, cursor);
340
+ if (afterWhitespace === cursor) return effect.Option.none();
341
+ const issueNumbers = parseItems(trimmed, afterWhitespace);
342
+ if (issueNumbers === void 0) return effect.Option.none();
343
+ return effect.Option.some({
344
+ keyword,
345
+ closing: CLOSING_SET.has(keyword),
346
+ issueNumbers
347
+ });
348
+ };
349
+ /**
350
+ * Every reference list a text carries, line by line, across both postures.
351
+ *
352
+ * @remarks
353
+ * The trailer/prose interleave consumers otherwise hand-roll: each line is
354
+ * tried as a whole-line reference list first ({@link parseReferenceList} —
355
+ * colon-tolerant, per the line dialect), and only a line that is not one is
356
+ * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
357
+ * dialect). The preference means a colon-less trailer line contributes its
358
+ * list exactly once, never once per posture.
359
+ *
360
+ * Results carry no offsets, deliberately: this is the line-granular
361
+ * composition, and a consumer that needs spans uses
362
+ * {@link harvestReferenceLists} directly. Duplicates are preserved, in
363
+ * document order.
364
+ *
365
+ * @public
366
+ */
367
+ const collectReferenceLists = (text) => {
368
+ const lists = [];
369
+ for (const line of text.split("\n")) {
370
+ const whole = parseReferenceList(line);
371
+ if (effect.Option.isSome(whole)) {
372
+ lists.push(whole.value);
373
+ continue;
374
+ }
375
+ for (const harvested of harvestReferenceLists(line)) lists.push({
376
+ keyword: harvested.keyword,
377
+ closing: harvested.closing,
378
+ issueNumbers: harvested.issueNumbers
379
+ });
380
+ }
381
+ return lists;
382
+ };
383
+ /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
384
+ const isWordChar = (code) => isAsciiLetter(code) || isDigit$2(code) || code === 95;
385
+ /**
386
+ * The full JavaScript `\s` set, spelled as a predicate so the module keeps
387
+ * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
388
+ * Unicode space separators. Only the keyword→first-item gap of
389
+ * {@link harvestReferenceLists} admits this set — everything inside a list
390
+ * stays `[ \t]`, per the module remarks.
391
+ */
392
+ const isAnyWhitespace = (code) => code === 32 || code >= 9 && code <= 13 || code === 160 || code === 5760 || code >= 8192 && code <= 8202 || code === 8232 || code === 8233 || code === 8239 || code === 8287 || code === 12288 || code === 65279;
393
+ /**
394
+ * Every reference list found inline in `text`, in document order.
395
+ *
396
+ * @remarks
397
+ * The inline-in-prose posture generalized to lists:
398
+ * `Closes #123, Fixes #456` in one line of a commit body yields two
399
+ * single-item lists, where
400
+ * `harvestIssueReferences` reads only the first reference of each and the
401
+ * whole-line parsers read neither. The grammar per candidate:
402
+ *
403
+ * - The keyword is case-insensitive, drawn from either keyword set,
404
+ * lowercased to canonical form in the result, with `closing` reported by
405
+ * set membership. Word boundaries hold on both sides: the characters
406
+ * immediately before and after the keyword's letter run must not be
407
+ * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
408
+ * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
409
+ * belongs to the line dialects ({@link parseReferenceList} and the
410
+ * bare-line parser), so `closes: #1` inline yields nothing.
411
+ * - The keyword→first-item gap is any run of whitespace **including
412
+ * newlines**, mirroring the inline dialect's `\s+`.
413
+ * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
414
+ * whitespace only, so a list cannot continue past a newline — a later
415
+ * line makes its own claims.
416
+ * - Items are `#<digits>`; duplicates are preserved in order.
417
+ *
418
+ * A list ends at its last valid item: in `closes #1 and fixes #2` the
419
+ * ` and ` before `fixes` fails as a separator because what follows is not
420
+ * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
421
+ * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
422
+ * candidate — never a partial list, for the same reason
423
+ * {@link parseReferenceList} rejects the whole line — and scanning resumes
424
+ * after the candidate's scanned extent.
425
+ *
426
+ * Like everything in this module, the harvest is a single left-to-right
427
+ * character scan with no regular expressions, so time stays linear in the
428
+ * text length and no input is truncated.
429
+ *
430
+ * @public
431
+ */
432
+ const harvestReferenceLists = (text) => {
433
+ const lists = [];
434
+ let index = 0;
435
+ while (index < text.length) {
436
+ if (!isAsciiLetter(text.charCodeAt(index))) {
437
+ index += 1;
438
+ continue;
439
+ }
440
+ const runStart = index;
441
+ let runEnd = index + 1;
442
+ while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
443
+ if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
444
+ index = runEnd;
445
+ continue;
446
+ }
447
+ const keyword = text.slice(runStart, runEnd).toLowerCase();
448
+ if (!ALL_KEYWORDS.has(keyword)) {
449
+ index = runEnd;
450
+ continue;
451
+ }
452
+ let cursor = runEnd;
453
+ while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
454
+ const first = cursor === runEnd ? void 0 : readItem(text, cursor);
455
+ if (first === void 0) {
456
+ index = runEnd;
457
+ continue;
458
+ }
459
+ if (first.kind === "unsafe") {
460
+ index = first.next;
461
+ continue;
462
+ }
463
+ const issueNumbers = [first.value];
464
+ let end = first.next;
465
+ let unsafeNext;
466
+ for (;;) {
467
+ const next = scanSeparator(text, end);
468
+ if (next === void 0) break;
469
+ const item = readItem(text, next);
470
+ if (item === void 0) break;
471
+ if (item.kind === "unsafe") {
472
+ unsafeNext = item.next;
473
+ break;
474
+ }
475
+ issueNumbers.push(item.value);
476
+ end = item.next;
477
+ }
478
+ if (unsafeNext !== void 0) {
479
+ index = unsafeNext;
480
+ continue;
481
+ }
482
+ lists.push({
483
+ keyword,
484
+ closing: CLOSING_SET.has(keyword),
485
+ issueNumbers,
486
+ start: runStart,
487
+ end
488
+ });
489
+ index = end;
490
+ }
491
+ return lists;
492
+ };
493
+ //#endregion
494
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
495
+ /**
496
+ * The projection table IS the totality proof: `Record` over the union of
497
+ * both keyword types makes a keyword added to either constant without an
498
+ * entry here fail to compile.
499
+ */
500
+ const FAMILIES = {
501
+ close: "close",
502
+ closes: "close",
503
+ closed: "close",
504
+ fix: "fix",
505
+ fixes: "fix",
506
+ fixed: "fix",
507
+ resolve: "resolve",
508
+ resolves: "resolve",
509
+ resolved: "resolve",
510
+ ref: "ref",
511
+ refs: "ref",
512
+ references: "ref"
513
+ };
514
+ /**
515
+ * The family a keyword belongs to.
516
+ *
517
+ * @remarks
518
+ * Total over both keyword sets by construction — see the module remarks for
519
+ * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
520
+ * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
521
+ * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
522
+ * the projection is downstream: categorized harvesters key maps by family,
523
+ * and each was hand-rolling this collapse.
524
+ *
525
+ * @public
526
+ */
527
+ const keywordFamily = (keyword) => FAMILIES[keyword];
528
+ //#endregion
529
+ //#region ../silk-core/dist/dev/pkg/schemas/VersioningSchemas.js
96
530
  /**
97
531
  * Configuration for how private packages are handled during versioning.
98
532
  *
@@ -164,7 +598,7 @@ const ChangesetConfigFile = effect.Schema.Struct({
164
598
  *
165
599
  * @remarks
166
600
  * Extends {@link (ChangesetConfigFile:type)} with a `_isSilk` marker flag that is automatically
167
- * set to `true`. Detected by {@link ChangesetConfigReader} when the `changelog` field
601
+ * set to `true`. Detected by `ChangesetConfigReader` when the `changelog` field
168
602
  * references `@savvy-web/changesets`.
169
603
  *
170
604
  * @since 0.1.0
@@ -175,6 +609,25 @@ const SilkChangesetConfigFile = effect.Schema.Struct({
175
609
  _isSilk: effect.Schema.Boolean.pipe(effect.Schema.withDecodingDefaultType(effect.Effect.succeed(true)), effect.Schema.withConstructorDefault(effect.Effect.succeed(true)))
176
610
  });
177
611
  //#endregion
612
+ //#region ../silk-core/dist/dev/pkg/utils/TrailingSlash.js
613
+ /**
614
+ * Trim trailing slashes from a string.
615
+ *
616
+ * @remarks
617
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
618
+ * unanchored at the start, so the engine retries the match from every position
619
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
620
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
621
+ *
622
+ * @since 0.1.0
623
+ * @public
624
+ */
625
+ const trimTrailingSlashes = (s) => {
626
+ let end = s.length;
627
+ while (end > 0 && s[end - 1] === "/") end -= 1;
628
+ return s.slice(0, end);
629
+ };
630
+ //#endregion
178
631
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfigReader.js
179
632
  /**
180
633
  * Substrings that identify a Silk changelog adapter entry in `.changeset/config.json`.
@@ -204,8 +657,8 @@ function isSilkChangelog(changelog) {
204
657
  *
205
658
  * @remarks
206
659
  * Automatically detects whether the config uses the Silk changelog adapter
207
- * (`@savvy-web/changesets`) and decodes as {@link (SilkChangesetConfigFile:type)} or the
208
- * standard {@link (ChangesetConfigFile:type)} accordingly.
660
+ * (`@savvy-web/changesets`) and decodes as `SilkChangesetConfigFile` or the
661
+ * standard `ChangesetConfigFile` accordingly.
209
662
  *
210
663
  * @example
211
664
  * ```typescript
@@ -283,32 +736,6 @@ var ChangesetConfigReader = class extends effect.Context.Service()("@savvy-web/s
283
736
  }));
284
737
  };
285
738
  //#endregion
286
- //#region ../silk-effects/dist/dev/pkg/errors/PublishTargetBindingError.js
287
- /**
288
- * Raised when publishability detection selects a directory that the package's
289
- * `dist/prod/targets.json` binding does not describe.
290
- *
291
- * @remarks
292
- * The bundler's prod build writes `targets.json` naming every byte-group
293
- * directory it produced. Once that binding exists it is authoritative: the only
294
- * directories whose bytes may be published are the ones it lists. A detector
295
- * that returns anything else — most often `publishConfig.directory` pointing at
296
- * a **dev** build, because silk mode was misdetected — is about to pack an
297
- * unresolved workspace manifest and ship it to a registry.
298
- *
299
- * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
300
- * dev manifest still carried `catalog:` specifiers, and the published package
301
- * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
302
- *
303
- * @since 3.1.0
304
- * @public
305
- */
306
- var PublishTargetBindingError = class extends effect.Data.TaggedError("PublishTargetBindingError") {
307
- get message() {
308
- return `Package ${this.pkg} resolved publish directory "${this.directory}", which is not one of the directories bound by dist/prod/targets.json (${this.boundDirectories.join(", ")}). This means publishability detection did not select the prod build output — refusing to publish before packing an unresolved manifest.`;
309
- }
310
- };
311
- //#endregion
312
739
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfig.js
313
740
  const isSilk = (cfg) => "_isSilk" in cfg && cfg._isSilk === true;
314
741
  /**
@@ -385,22 +812,6 @@ var ChangesetConfig = class ChangesetConfig extends effect.Context.Service()("@s
385
812
  }));
386
813
  };
387
814
  //#endregion
388
- //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
389
- /**
390
- * Trim trailing slashes from a string.
391
- *
392
- * @remarks
393
- * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
394
- * unanchored at the start, so the engine retries the match from every position
395
- * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
396
- * Only a trailing run of slashes is removed; interior slash runs are untouched.
397
- */
398
- const trimTrailingSlashes = (s) => {
399
- let end = s.length;
400
- while (end > 0 && s[end - 1] === "/") end -= 1;
401
- return s.slice(0, end);
402
- };
403
- //#endregion
404
815
  //#region ../silk-effects/dist/dev/pkg/services/SilkPublishability.js
405
816
  const NPM_DEFAULT = "https://registry.npmjs.org/";
406
817
  /**
@@ -523,7 +934,7 @@ var SilkPublishability = class SilkPublishability {
523
934
  * directories it names. A directory outside the binding means detection did
524
935
  * not select the prod output — the `yaml-effect@0.7.1` shape, where a dev
525
936
  * manifest carrying `catalog:` specifiers was packed and published. Rather
526
- * than ship those bytes, fail with {@link PublishTargetBindingError}.
937
+ * than ship those bytes, fail with `PublishTargetBindingError`.
527
938
  *
528
939
  * Before the prod build runs there is no binding, and the detector's
529
940
  * placeholder directories are left alone.
@@ -2651,6 +3062,66 @@ function makeGitHubTest(responses) {
2651
3062
  } });
2652
3063
  }
2653
3064
  //#endregion
3065
+ //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
3066
+ /**
3067
+ * Warning output for changelog generation, parameterised by a
3068
+ * {@link ChangesetLogMode} reference instead of an ambient environment read.
3069
+ *
3070
+ * @remarks
3071
+ * This module is engine code shared by every front end, so it must not read
3072
+ * `process` — a `process.env` read here would bake one host's environment
3073
+ * into every other. The mode is a `Context.Reference` with a default of
3074
+ * `"stderr"`; a front end that knows it runs under GitHub Actions or a test
3075
+ * runner provides `"github"` or `"silent"` from its own `process.env` read.
3076
+ *
3077
+ * @packageDocumentation
3078
+ */
3079
+ /**
3080
+ * The reference that selects the {@link ChangesetLogModeValue}.
3081
+ *
3082
+ * @remarks
3083
+ * Defaults to `"stderr"` when no front end provides it, so a program that
3084
+ * never touches the reference still reports. Provide with
3085
+ * `Layer.succeed(ChangesetLogMode, "github")` or
3086
+ * `Effect.provideService(ChangesetLogMode, "silent")`.
3087
+ *
3088
+ * @example
3089
+ * ```typescript
3090
+ * import { Effect } from "effect";
3091
+ * import { Changesets } from "\@savvy-web/silk-effects";
3092
+ *
3093
+ * const mode = process.env.GITHUB_ACTIONS === "true" ? "github" : "stderr";
3094
+ * program.pipe(Effect.provideService(Changesets.ChangesetLogMode, mode));
3095
+ * ```
3096
+ *
3097
+ * @public
3098
+ */
3099
+ const ChangesetLogMode = effect.Context.Reference("@savvy-web/silk-effects/Changesets/ChangesetLogMode", { defaultValue: () => "stderr" });
3100
+ /**
3101
+ * Log a warning message according to the {@link ChangesetLogMode} in context.
3102
+ *
3103
+ * @param message - The warning message
3104
+ * @param args - Additional arguments (concatenated with a space in `"github"` mode)
3105
+ * @returns An `Effect` that never fails
3106
+ *
3107
+ * @internal
3108
+ */
3109
+ function logWarning(message, ...args) {
3110
+ return effect.Effect.gen(function* () {
3111
+ switch (yield* ChangesetLogMode) {
3112
+ case "silent": return;
3113
+ case "github": {
3114
+ const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
3115
+ console.warn(`::warning::${text}`);
3116
+ return;
3117
+ }
3118
+ case "stderr":
3119
+ console.warn(message, ...args);
3120
+ return;
3121
+ }
3122
+ });
3123
+ }
3124
+ //#endregion
2654
3125
  //#region ../silk-effects/dist/dev/pkg/changesets/schemas/primitives.js
2655
3126
  /**
2656
3127
  * Primitive reusable schemas for common constrained types.
@@ -3963,7 +4434,7 @@ function evaluateNode(node, depth) {
3963
4434
  //#region ../../node_modules/.pnpm/@effected+jsonc@0.11.0_effect@4.0.0-rc.115/node_modules/@effected/jsonc/internal/scanner.js
3964
4435
  const isWhitespace = (ch) => ch === 32 || ch === 9 || ch === 11 || ch === 12 || ch === 160 || ch === 65279;
3965
4436
  const isLineBreak$1 = (ch) => ch === 10 || ch === 13 || ch === 8232 || ch === 8233;
3966
- const isDigit$2 = (ch) => ch >= 48 && ch <= 57;
4437
+ const isDigit$1 = (ch) => ch >= 48 && ch <= 57;
3967
4438
  /**
3968
4439
  * Create a stateful {@link Scanner} for the given JSONC string.
3969
4440
  *
@@ -4068,31 +4539,31 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4068
4539
  if (text.charCodeAt(pos) === 45) pos++;
4069
4540
  if (text.charCodeAt(pos) === 48) pos++;
4070
4541
  else {
4071
- if (!isDigit$2(text.charCodeAt(pos))) {
4542
+ if (!isDigit$1(text.charCodeAt(pos))) {
4072
4543
  tokenError = "UnexpectedEndOfNumber";
4073
4544
  return text.substring(start, pos);
4074
4545
  }
4075
4546
  pos++;
4076
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4547
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4077
4548
  }
4078
4549
  if (pos < len && text.charCodeAt(pos) === 46) {
4079
4550
  pos++;
4080
- if (!isDigit$2(text.charCodeAt(pos))) {
4551
+ if (!isDigit$1(text.charCodeAt(pos))) {
4081
4552
  tokenError = "UnexpectedEndOfNumber";
4082
4553
  return text.substring(start, pos);
4083
4554
  }
4084
4555
  pos++;
4085
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4556
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4086
4557
  }
4087
4558
  if (pos < len && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {
4088
4559
  pos++;
4089
4560
  if (pos < len && (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)) pos++;
4090
- if (!isDigit$2(text.charCodeAt(pos))) {
4561
+ if (!isDigit$1(text.charCodeAt(pos))) {
4091
4562
  tokenError = "UnexpectedEndOfNumber";
4092
4563
  return text.substring(start, pos);
4093
4564
  }
4094
4565
  pos++;
4095
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4566
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4096
4567
  }
4097
4568
  return text.substring(start, pos);
4098
4569
  };
@@ -4198,7 +4669,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4198
4669
  return token;
4199
4670
  }
4200
4671
  case 45:
4201
- if (pos + 1 < len && isDigit$2(text.charCodeAt(pos + 1))) {
4672
+ if (pos + 1 < len && isDigit$1(text.charCodeAt(pos + 1))) {
4202
4673
  tokenValue = scanNumber();
4203
4674
  token = "Number";
4204
4675
  return token;
@@ -4209,7 +4680,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4209
4680
  tokenError = "InvalidSymbol";
4210
4681
  return token;
4211
4682
  default:
4212
- if (isDigit$2(ch)) {
4683
+ if (isDigit$1(ch)) {
4213
4684
  tokenValue = scanNumber();
4214
4685
  token = "Number";
4215
4686
  return token;
@@ -30980,414 +31451,6 @@ function parseCommitMessage(message) {
30980
31451
  return { description: message };
30981
31452
  }
30982
31453
  //#endregion
30983
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
30984
- /**
30985
- * GitHub's closing-keyword issue-reference grammar, as pure functions.
30986
- *
30987
- * @remarks
30988
- * GitHub links an issue to a pull request when the PR's description carries
30989
- * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
30990
- * that grammar in two distinct dialects, and this module models exactly those
30991
- * two — no service, no layer, nothing but strings in and values out:
30992
- *
30993
- * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
30994
- * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
30995
- * and **no colon**, because that is the spelling GitHub itself scans PR
30996
- * bodies for. This is the dialect a release pipeline harvests from commit
30997
- * subjects and PR descriptions.
30998
- * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
30999
- * the reference — `"Closes: #12"` — with an **optional colon**, because a
31000
- * generated references region writes one reference per line and a colon
31001
- * reads better there. GitHub does not require the colon; the region format
31002
- * allows it, so the parser must too. The dialects differ because their
31003
- * producers do: prose is written by humans for GitHub's scanner, the region
31004
- * is written by tooling for humans.
31005
- *
31006
- * Deliberately out of scope this round: cross-repo references
31007
- * (`owner/repo#N`) and full-URL references
31008
- * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
31009
- * neither dialect's consumers emit them yet, and guessing at their shape here
31010
- * would freeze an API nobody has driven.
31011
- */
31012
- /**
31013
- * The nine closing keywords GitHub documents, lowercased.
31014
- *
31015
- * @public
31016
- */
31017
- const CLOSING_KEYWORDS = [
31018
- "close",
31019
- "closes",
31020
- "closed",
31021
- "fix",
31022
- "fixes",
31023
- "fixed",
31024
- "resolve",
31025
- "resolves",
31026
- "resolved"
31027
- ];
31028
- /**
31029
- * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
31030
- * grammar cannot drift. Alternation order is safe: the regex engine backtracks
31031
- * through alternatives, so `close` matching inside `closes` fails at the
31032
- * mandatory `#`-introducer and retries the longer keyword.
31033
- */
31034
- const KEYWORDS = CLOSING_KEYWORDS.join("|");
31035
- new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
31036
- new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
31037
- //#endregion
31038
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
31039
- /**
31040
- * The closing-list dialect: one whole line naming several issues at once.
31041
- *
31042
- * @remarks
31043
- * The third dialect, alongside the two in `IssueReferences`: after trimming,
31044
- * the **entire** line must be `<keyword>[:] <list>` — keyword
31045
- * case-insensitive (lowercased to canonical form in the result), colon
31046
- * optional, and the list one or more `#<digits>` items separated by `,`,
31047
- * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
31048
- * so an embedded newline cannot smuggle two lines past a parser whose
31049
- * contract is one — the same posture as the bare-line pattern. Any trailing
31050
- * content after the list rejects the line; duplicates are preserved in order,
31051
- * because whether `#1, #1` means one issue or two is the caller's business.
31052
- *
31053
- * Two keyword sets play here. {@link parseClosingList} accepts only the nine
31054
- * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
31055
- * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
31056
- * `refs`, `references`) and reports which set matched via
31057
- * {@link ReferenceList}'s `closing` flag.
31058
- *
31059
- * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
31060
- * line**, where `harvestIssueReferences` merely skips the one match. The
31061
- * asymmetry is deliberate: a harvest drops one reference out of running
31062
- * prose, but a list line is a single claim about a set of issues, and
31063
- * returning the parseable subset would misrepresent the line as claiming
31064
- * less than it does.
31065
- *
31066
- * Complexity posture: parsing is a single left-to-right character scan —
31067
- * this module contains **no regular expressions at all** — so worst-case
31068
- * time is linear in the line length by construction. There is no
31069
- * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
31070
- * and therefore no input truncation.
31071
- *
31072
- * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
31073
- * the same list grammar to the inline-in-prose posture — several lists on
31074
- * one line of running text — and {@link parseClosingLists} /
31075
- * {@link parseReferenceLists} apply the whole-line parsers per line of a
31076
- * multi-line text. All of them ride the same character scan; the no-regex
31077
- * promise above covers every export here.
31078
- */
31079
- /**
31080
- * The non-closing reference keywords the list dialect accepts, lowercased.
31081
- *
31082
- * @remarks
31083
- * GitHub does not act on these — they associate without closing — but a
31084
- * references region writes them, so the parser must read them.
31085
- *
31086
- * @public
31087
- */
31088
- const REFERENCE_KEYWORDS = [
31089
- "ref",
31090
- "refs",
31091
- "references"
31092
- ];
31093
- /**
31094
- * Both keyword tables ARE the exported constants — membership sets built from
31095
- * them once — so the constants and the grammar cannot drift.
31096
- */
31097
- const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
31098
- /** Membership test for reporting `closing`, widened once so no call casts. */
31099
- const CLOSING_SET = new Set(CLOSING_KEYWORDS);
31100
- const HASH = 35;
31101
- const COLON = 58;
31102
- const COMMA = 44;
31103
- /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
31104
- const isSpaceTab = (code) => code === 32 || code === 9;
31105
- const isDigit$1 = (code) => code >= 48 && code <= 57;
31106
- const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
31107
- /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
31108
- const skipSpaceTab = (line, from) => {
31109
- let index = from;
31110
- while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
31111
- return index;
31112
- };
31113
- /**
31114
- * One list item at exactly `from`: `#<digits>` and the index one past it.
31115
- * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
31116
- * silently rounded issue number, still carrying the index one past the digit
31117
- * run so a caller can skip the item's extent; the whole-line parsers reject
31118
- * on it and {@link harvestReferenceLists} abandons the entire candidate —
31119
- * see the module remarks for why a list never yields a partial reading.
31120
- * Anything that is not `#<digits>` at all is `undefined`.
31121
- */
31122
- const readItem = (line, from) => {
31123
- if (line.charCodeAt(from) !== HASH) return void 0;
31124
- const start = from + 1;
31125
- let index = start;
31126
- while (index < line.length && isDigit$1(line.charCodeAt(index))) index += 1;
31127
- if (index === start) return void 0;
31128
- const value = Number(line.slice(start, index));
31129
- return Number.isSafeInteger(value) ? {
31130
- kind: "item",
31131
- value,
31132
- next: index
31133
- } : {
31134
- kind: "unsafe",
31135
- next: index
31136
- };
31137
- };
31138
- /**
31139
- * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
31140
- * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
31141
- * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
31142
- * lowercase-only — the keyword head is case-insensitive, the separator is
31143
- * not. Returns the index where the next item must start, or `undefined` when
31144
- * no separator is present.
31145
- */
31146
- const scanSeparator = (line, from) => {
31147
- const afterLeading = skipSpaceTab(line, from);
31148
- if (line.charCodeAt(afterLeading) === COMMA) {
31149
- const afterComma = skipSpaceTab(line, afterLeading + 1);
31150
- if (line.startsWith("and", afterComma)) {
31151
- const afterAnd = skipSpaceTab(line, afterComma + 3);
31152
- if (afterAnd > afterComma + 3) return afterAnd;
31153
- }
31154
- return afterComma;
31155
- }
31156
- if (afterLeading > from && line.startsWith("and", afterLeading)) {
31157
- const afterAnd = skipSpaceTab(line, afterLeading + 3);
31158
- if (afterAnd > afterLeading + 3) return afterAnd;
31159
- }
31160
- };
31161
- /**
31162
- * The scan walk: item, then separator, then item, until the cursor stands
31163
- * exactly at the end of the string. Anything else — a malformed item, an
31164
- * unknown separator, trailing content, an unsafe issue number — is
31165
- * `undefined`, and the caller rejects the whole line.
31166
- */
31167
- const parseItems = (line, from) => {
31168
- const issueNumbers = [];
31169
- let cursor = from;
31170
- for (;;) {
31171
- const item = readItem(line, cursor);
31172
- if (item === void 0 || item.kind === "unsafe") return void 0;
31173
- issueNumbers.push(item.value);
31174
- cursor = item.next;
31175
- if (cursor === line.length) return issueNumbers;
31176
- const next = scanSeparator(line, cursor);
31177
- if (next === void 0) return void 0;
31178
- cursor = next;
31179
- }
31180
- };
31181
- /**
31182
- * The list a whole line carries under either keyword set, or `Option.none()`.
31183
- *
31184
- * @remarks
31185
- * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
31186
- * reports which set matched in the result's `closing` flag. Grammar,
31187
- * whole-line posture and the whole-line rejection of unsafe issue numbers
31188
- * are in the module remarks.
31189
- *
31190
- * @public
31191
- */
31192
- const parseReferenceList = (line) => {
31193
- const trimmed = line.trim();
31194
- let letters = 0;
31195
- while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
31196
- if (letters === 0) return effect.Option.none();
31197
- const keyword = trimmed.slice(0, letters).toLowerCase();
31198
- if (!ALL_KEYWORDS.has(keyword)) return effect.Option.none();
31199
- let cursor = letters;
31200
- if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
31201
- const afterWhitespace = skipSpaceTab(trimmed, cursor);
31202
- if (afterWhitespace === cursor) return effect.Option.none();
31203
- const issueNumbers = parseItems(trimmed, afterWhitespace);
31204
- if (issueNumbers === void 0) return effect.Option.none();
31205
- return effect.Option.some({
31206
- keyword,
31207
- closing: CLOSING_SET.has(keyword),
31208
- issueNumbers
31209
- });
31210
- };
31211
- /**
31212
- * Every reference list a text carries, line by line, across both postures.
31213
- *
31214
- * @remarks
31215
- * The trailer/prose interleave consumers otherwise hand-roll: each line is
31216
- * tried as a whole-line reference list first ({@link parseReferenceList} —
31217
- * colon-tolerant, per the line dialect), and only a line that is not one is
31218
- * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
31219
- * dialect). The preference means a colon-less trailer line contributes its
31220
- * list exactly once, never once per posture.
31221
- *
31222
- * Results carry no offsets, deliberately: this is the line-granular
31223
- * composition, and a consumer that needs spans uses
31224
- * {@link harvestReferenceLists} directly. Duplicates are preserved, in
31225
- * document order.
31226
- *
31227
- * @public
31228
- */
31229
- const collectReferenceLists = (text) => {
31230
- const lists = [];
31231
- for (const line of text.split("\n")) {
31232
- const whole = parseReferenceList(line);
31233
- if (effect.Option.isSome(whole)) {
31234
- lists.push(whole.value);
31235
- continue;
31236
- }
31237
- for (const harvested of harvestReferenceLists(line)) lists.push({
31238
- keyword: harvested.keyword,
31239
- closing: harvested.closing,
31240
- issueNumbers: harvested.issueNumbers
31241
- });
31242
- }
31243
- return lists;
31244
- };
31245
- /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
31246
- const isWordChar = (code) => isAsciiLetter(code) || isDigit$1(code) || code === 95;
31247
- /**
31248
- * The full JavaScript `\s` set, spelled as a predicate so the module keeps
31249
- * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
31250
- * Unicode space separators. Only the keyword→first-item gap of
31251
- * {@link harvestReferenceLists} admits this set — everything inside a list
31252
- * stays `[ \t]`, per the module remarks.
31253
- */
31254
- const isAnyWhitespace = (code) => code === 32 || code >= 9 && code <= 13 || code === 160 || code === 5760 || code >= 8192 && code <= 8202 || code === 8232 || code === 8233 || code === 8239 || code === 8287 || code === 12288 || code === 65279;
31255
- /**
31256
- * Every reference list found inline in `text`, in document order.
31257
- *
31258
- * @remarks
31259
- * The inline-in-prose posture generalized to lists:
31260
- * `Closes #123, Fixes #456` in one line of a commit body yields two
31261
- * single-item lists, where
31262
- * `harvestIssueReferences` reads only the first reference of each and the
31263
- * whole-line parsers read neither. The grammar per candidate:
31264
- *
31265
- * - The keyword is case-insensitive, drawn from either keyword set,
31266
- * lowercased to canonical form in the result, with `closing` reported by
31267
- * set membership. Word boundaries hold on both sides: the characters
31268
- * immediately before and after the keyword's letter run must not be
31269
- * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
31270
- * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
31271
- * belongs to the line dialects ({@link parseReferenceList} and the
31272
- * bare-line parser), so `closes: #1` inline yields nothing.
31273
- * - The keyword→first-item gap is any run of whitespace **including
31274
- * newlines**, mirroring the inline dialect's `\s+`.
31275
- * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
31276
- * whitespace only, so a list cannot continue past a newline — a later
31277
- * line makes its own claims.
31278
- * - Items are `#<digits>`; duplicates are preserved in order.
31279
- *
31280
- * A list ends at its last valid item: in `closes #1 and fixes #2` the
31281
- * ` and ` before `fixes` fails as a separator because what follows is not
31282
- * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
31283
- * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
31284
- * candidate — never a partial list, for the same reason
31285
- * {@link parseReferenceList} rejects the whole line — and scanning resumes
31286
- * after the candidate's scanned extent.
31287
- *
31288
- * Like everything in this module, the harvest is a single left-to-right
31289
- * character scan with no regular expressions, so time stays linear in the
31290
- * text length and no input is truncated.
31291
- *
31292
- * @public
31293
- */
31294
- const harvestReferenceLists = (text) => {
31295
- const lists = [];
31296
- let index = 0;
31297
- while (index < text.length) {
31298
- if (!isAsciiLetter(text.charCodeAt(index))) {
31299
- index += 1;
31300
- continue;
31301
- }
31302
- const runStart = index;
31303
- let runEnd = index + 1;
31304
- while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
31305
- if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
31306
- index = runEnd;
31307
- continue;
31308
- }
31309
- const keyword = text.slice(runStart, runEnd).toLowerCase();
31310
- if (!ALL_KEYWORDS.has(keyword)) {
31311
- index = runEnd;
31312
- continue;
31313
- }
31314
- let cursor = runEnd;
31315
- while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
31316
- const first = cursor === runEnd ? void 0 : readItem(text, cursor);
31317
- if (first === void 0) {
31318
- index = runEnd;
31319
- continue;
31320
- }
31321
- if (first.kind === "unsafe") {
31322
- index = first.next;
31323
- continue;
31324
- }
31325
- const issueNumbers = [first.value];
31326
- let end = first.next;
31327
- let unsafeNext;
31328
- for (;;) {
31329
- const next = scanSeparator(text, end);
31330
- if (next === void 0) break;
31331
- const item = readItem(text, next);
31332
- if (item === void 0) break;
31333
- if (item.kind === "unsafe") {
31334
- unsafeNext = item.next;
31335
- break;
31336
- }
31337
- issueNumbers.push(item.value);
31338
- end = item.next;
31339
- }
31340
- if (unsafeNext !== void 0) {
31341
- index = unsafeNext;
31342
- continue;
31343
- }
31344
- lists.push({
31345
- keyword,
31346
- closing: CLOSING_SET.has(keyword),
31347
- issueNumbers,
31348
- start: runStart,
31349
- end
31350
- });
31351
- index = end;
31352
- }
31353
- return lists;
31354
- };
31355
- //#endregion
31356
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
31357
- /**
31358
- * The projection table IS the totality proof: `Record` over the union of
31359
- * both keyword types makes a keyword added to either constant without an
31360
- * entry here fail to compile.
31361
- */
31362
- const FAMILIES = {
31363
- close: "close",
31364
- closes: "close",
31365
- closed: "close",
31366
- fix: "fix",
31367
- fixes: "fix",
31368
- fixed: "fix",
31369
- resolve: "resolve",
31370
- resolves: "resolve",
31371
- resolved: "resolve",
31372
- ref: "ref",
31373
- refs: "ref",
31374
- references: "ref"
31375
- };
31376
- /**
31377
- * The family a keyword belongs to.
31378
- *
31379
- * @remarks
31380
- * Total over both keyword sets by construction — see the module remarks for
31381
- * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
31382
- * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
31383
- * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
31384
- * the projection is downstream: categorized harvesters key maps by family,
31385
- * and each was hand-rolling this collapse.
31386
- *
31387
- * @public
31388
- */
31389
- const keywordFamily = (keyword) => FAMILIES[keyword];
31390
- //#endregion
31391
31454
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js
31392
31455
  /**
31393
31456
  * The output category each keyword family lands in.
@@ -31454,41 +31517,6 @@ function parseIssueReferences(commitMessage) {
31454
31517
  return references;
31455
31518
  }
31456
31519
  //#endregion
31457
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
31458
- /**
31459
- * Log a warning message.
31460
- *
31461
- * @remarks
31462
- * Detection order:
31463
- * 1. If `process.env.VITEST` is set, the message is silently discarded.
31464
- * 2. If `process.env.GITHUB_ACTIONS === "true"`, the message is emitted
31465
- * as a `::warning::` annotation.
31466
- * 3. Otherwise, `console.warn` is used.
31467
- *
31468
- * @param message - The warning message
31469
- * @param args - Additional arguments (concatenated with a space in CI mode)
31470
- *
31471
- * @example
31472
- * ```typescript
31473
- * import { logWarning } from "../utils/logger.js";
31474
- *
31475
- * logWarning("Duplicate dependency entry", "effect@3.19.0");
31476
- * // In CI: "::warning::Duplicate dependency entry effect@3.19.0"
31477
- * // Locally: console.warn("Duplicate dependency entry", "effect@3.19.0")
31478
- * ```
31479
- *
31480
- * @internal
31481
- */
31482
- function logWarning(message, ...args) {
31483
- /* v8 ignore start — environment-specific */
31484
- if (typeof process !== "undefined" && process.env.VITEST) return;
31485
- if (typeof process !== "undefined" && process.env.GITHUB_ACTIONS === "true") {
31486
- const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
31487
- console.warn(`::warning::${text}`);
31488
- } else console.warn(message, ...args);
31489
- /* v8 ignore stop */
31490
- }
31491
- //#endregion
31492
31520
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/section-parser.js
31493
31521
  /**
31494
31522
  * Parse a changeset summary into structured sections.
@@ -31858,10 +31886,7 @@ function getReleaseLine(changeset, versionType, options) {
31858
31886
  if (changeset.commit) commitInfo = yield* (yield* GitHubService).getInfo({
31859
31887
  commit: changeset.commit,
31860
31888
  repo: options.repo
31861
- }).pipe(effect.Effect.flatMap((raw) => effect.Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(effect.Effect.map(() => raw), effect.Effect.catch(() => effect.Effect.succeed(raw)))), effect.Effect.catch((error) => {
31862
- logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error));
31863
- return effect.Effect.succeed(null);
31864
- }));
31889
+ }).pipe(effect.Effect.flatMap((raw) => effect.Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(effect.Effect.map(() => raw), effect.Effect.catch(() => effect.Effect.succeed(raw)))), effect.Effect.catch((error) => logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error)).pipe(effect.Effect.as(null))));
31865
31890
  const parsed = parseChangesetSections(changeset.summary);
31866
31891
  const firstLine = changeset.summary.split("\n")[0];
31867
31892
  const commitMsg = parseCommitMessage(firstLine);
@@ -31956,29 +31981,48 @@ function getReleaseLine(changeset, versionType, options) {
31956
31981
  */
31957
31982
  const MainLayer = GitHubService.layer;
31958
31983
  /**
31959
- * Changesets API `ChangelogFunctions` implementation.
31984
+ * Build a Changesets `ChangelogFunctions` implementation bound to a warning
31985
+ * mode.
31960
31986
  *
31961
- * This object satisfies the `ChangelogFunctions` contract from
31962
- * `\@changesets/types`. Each method validates options, runs the
31963
- * corresponding Effect program with the merged service layer, and
31964
- * returns a `Promise<string>`.
31987
+ * @remarks
31988
+ * This module is engine code and reads no environment; the host that installs
31989
+ * the functions (the `\@savvy-web/changelog` package under the changesets CLI)
31990
+ * decides the mode from its own `process.env` and passes it here. Each method
31991
+ * validates options, runs the corresponding Effect program with the merged
31992
+ * service layer and the chosen {@link ChangesetLogMode}, and returns a
31993
+ * `Promise<string>`.
31965
31994
  *
31966
- * @internal
31995
+ * @param options - The warning mode to provide
31996
+ * @returns A `ChangelogFunctions` object for `.changeset/config.json`
31997
+ *
31998
+ * @public
31967
31999
  */
31968
- const changelogFunctions$2 = {
31969
- getReleaseLine: async (changeset, versionType, options) => {
31970
- const program = effect.Effect.gen(function* () {
32000
+ function makeChangelogFunctions(options = {}) {
32001
+ const run = (program) => {
32002
+ const provided = program.pipe(effect.Effect.provide(MainLayer));
32003
+ return effect.Effect.runPromise(options.logMode === void 0 ? provided : provided.pipe(effect.Effect.provideService(ChangesetLogMode, options.logMode)));
32004
+ };
32005
+ return {
32006
+ getReleaseLine: async (changeset, versionType, options) => run(effect.Effect.gen(function* () {
31971
32007
  return yield* getReleaseLine(changeset, versionType, yield* validateChangesetOptions(options));
31972
- });
31973
- return effect.Effect.runPromise(program.pipe(effect.Effect.provide(MainLayer)));
31974
- },
31975
- getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => {
31976
- const program = effect.Effect.gen(function* () {
32008
+ })),
32009
+ getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => run(effect.Effect.gen(function* () {
31977
32010
  return yield* getDependencyReleaseLine(changesets, dependenciesUpdated, yield* validateChangesetOptions(options));
31978
- });
31979
- return effect.Effect.runPromise(program.pipe(effect.Effect.provide(MainLayer)));
31980
- }
31981
- };
32011
+ }))
32012
+ };
32013
+ }
32014
+ /**
32015
+ * Changesets API `ChangelogFunctions` implementation with the default warning
32016
+ * mode (`"stderr"`).
32017
+ *
32018
+ * @remarks
32019
+ * Equivalent to `makeChangelogFunctions()`. A host that runs under GitHub
32020
+ * Actions or a test runner should call {@link makeChangelogFunctions} with the
32021
+ * mode it detects instead.
32022
+ *
32023
+ * @internal
32024
+ */
32025
+ const changelogFunctions$2 = makeChangelogFunctions();
31982
32026
  //#endregion
31983
32027
  //#region ../silk-effects/dist/dev/pkg/changesets/api/changelog.js
31984
32028
  /**
@@ -32083,10 +32127,13 @@ var Changelog = class {
32083
32127
  * @param versionType - The semantic version bump type (`"major"`, `"minor"`, or `"patch"`)
32084
32128
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32085
32129
  * Pass `null` to use defaults (no GitHub link resolution).
32130
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32131
+ * the host reads its own environment and passes `"github"` / `"silent"` — this
32132
+ * engine never does. See `ChangesetLogMode`.
32086
32133
  * @returns A promise resolving to the formatted markdown string
32087
32134
  */
32088
- static async formatReleaseLine(changeset, versionType, options) {
32089
- return changelogFunctions$2.getReleaseLine(changeset, versionType, options);
32135
+ static async formatReleaseLine(changeset, versionType, options, logMode) {
32136
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getReleaseLine(changeset, versionType, options);
32090
32137
  }
32091
32138
  /**
32092
32139
  * Format dependency update release lines into a markdown table.
@@ -32101,11 +32148,13 @@ var Changelog = class {
32101
32148
  * old/new versions and package metadata
32102
32149
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32103
32150
  * Pass `null` to use defaults.
32151
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32152
+ * see {@link Changelog.formatReleaseLine}.
32104
32153
  * @returns A promise resolving to the formatted markdown string containing
32105
32154
  * the dependency update table
32106
32155
  */
32107
- static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options) {
32108
- return changelogFunctions$2.getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32156
+ static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options, logMode) {
32157
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32109
32158
  }
32110
32159
  };
32111
32160
  //#endregion
@@ -40751,7 +40800,7 @@ function globSync(globInput, options) {
40751
40800
  return crawler ? formatPaths(crawler.sync(), relative) : [];
40752
40801
  }
40753
40802
  //#endregion
40754
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
40803
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/identity.js
40755
40804
  var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
40756
40805
  const ALIAS = Symbol.for("yaml.alias");
40757
40806
  const DOC = Symbol.for("yaml.document");
@@ -40801,7 +40850,7 @@ var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
40801
40850
  exports.isSeq = isSeq;
40802
40851
  }));
40803
40852
  //#endregion
40804
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/visit.js
40853
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/visit.js
40805
40854
  var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
40806
40855
  var identity = require_identity();
40807
40856
  const BREAK = Symbol("break visit");
@@ -40992,7 +41041,7 @@ var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
40992
41041
  exports.visitAsync = visitAsync;
40993
41042
  }));
40994
41043
  //#endregion
40995
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js
41044
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/directives.js
40996
41045
  var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
40997
41046
  var identity = require_identity();
40998
41047
  var visit = require_visit();
@@ -41156,7 +41205,7 @@ var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
41156
41205
  exports.Directives = Directives;
41157
41206
  }));
41158
41207
  //#endregion
41159
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js
41208
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/anchors.js
41160
41209
  var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41161
41210
  var identity = require_identity();
41162
41211
  var visit = require_visit();
@@ -41223,7 +41272,7 @@ var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41223
41272
  exports.findNewAnchor = findNewAnchor;
41224
41273
  }));
41225
41274
  //#endregion
41226
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js
41275
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/applyReviver.js
41227
41276
  var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41228
41277
  /**
41229
41278
  * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,
@@ -41265,7 +41314,7 @@ var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41265
41314
  exports.applyReviver = applyReviver;
41266
41315
  }));
41267
41316
  //#endregion
41268
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js
41317
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/toJS.js
41269
41318
  var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41270
41319
  var identity = require_identity();
41271
41320
  /**
@@ -41302,7 +41351,7 @@ var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41302
41351
  exports.toJS = toJS;
41303
41352
  }));
41304
41353
  //#endregion
41305
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js
41354
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Node.js
41306
41355
  var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41307
41356
  var applyReviver = require_applyReviver();
41308
41357
  var identity = require_identity();
@@ -41336,7 +41385,7 @@ var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41336
41385
  exports.NodeBase = NodeBase;
41337
41386
  }));
41338
41387
  //#endregion
41339
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js
41388
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Alias.js
41340
41389
  var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41341
41390
  var anchors = require_anchors();
41342
41391
  var visit = require_visit();
@@ -41371,29 +41420,31 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41371
41420
  if (node === this) break;
41372
41421
  if (node.anchor === this.source) found = node;
41373
41422
  }
41423
+ if (found && ctx) {
41424
+ const { anchors, doc, maxAliasCount } = ctx;
41425
+ let data = anchors.get(found);
41426
+ if (!data) {
41427
+ toJS.toJS(found, null, ctx);
41428
+ data = anchors.get(found);
41429
+ }
41430
+ /* istanbul ignore if */
41431
+ if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41432
+ if (maxAliasCount >= 0) {
41433
+ data.count += 1;
41434
+ if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, found, anchors);
41435
+ if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41436
+ }
41437
+ }
41374
41438
  return found;
41375
41439
  }
41376
41440
  toJSON(_arg, ctx) {
41377
41441
  if (!ctx) return { source: this.source };
41378
- const { anchors, doc, maxAliasCount } = ctx;
41379
- const source = this.resolve(doc, ctx);
41442
+ const source = this.resolve(ctx.doc, ctx);
41380
41443
  if (!source) {
41381
41444
  const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
41382
41445
  throw new ReferenceError(msg);
41383
41446
  }
41384
- let data = anchors.get(source);
41385
- if (!data) {
41386
- toJS.toJS(source, null, ctx);
41387
- data = anchors.get(source);
41388
- }
41389
- /* istanbul ignore if */
41390
- if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41391
- if (maxAliasCount >= 0) {
41392
- data.count += 1;
41393
- if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, source, anchors);
41394
- if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41395
- }
41396
- return data.res;
41447
+ return ctx.anchors.get(source).res;
41397
41448
  }
41398
41449
  toString(ctx, _onComment, _onChompKeep) {
41399
41450
  const src = `*${this.source}`;
@@ -41430,7 +41481,7 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41430
41481
  exports.Alias = Alias;
41431
41482
  }));
41432
41483
  //#endregion
41433
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js
41484
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Scalar.js
41434
41485
  var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41435
41486
  var identity = require_identity();
41436
41487
  var Node = require_Node();
@@ -41457,7 +41508,7 @@ var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41457
41508
  exports.isScalarValue = isScalarValue;
41458
41509
  }));
41459
41510
  //#endregion
41460
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js
41511
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/createNode.js
41461
41512
  var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41462
41513
  var Alias = require_Alias();
41463
41514
  var identity = require_identity();
@@ -41520,7 +41571,7 @@ var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41520
41571
  exports.createNode = createNode;
41521
41572
  }));
41522
41573
  //#endregion
41523
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js
41574
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Collection.js
41524
41575
  var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
41525
41576
  var createNode = require_createNode();
41526
41577
  var identity = require_identity();
@@ -41641,7 +41692,7 @@ var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
41641
41692
  exports.isEmptyPath = isEmptyPath;
41642
41693
  }));
41643
41694
  //#endregion
41644
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js
41695
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyComment.js
41645
41696
  var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
41646
41697
  /**
41647
41698
  * Stringifies a comment.
@@ -41661,7 +41712,7 @@ var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
41661
41712
  exports.stringifyComment = stringifyComment;
41662
41713
  }));
41663
41714
  //#endregion
41664
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js
41715
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/foldFlowLines.js
41665
41716
  var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
41666
41717
  const FOLD_FLOW = "flow";
41667
41718
  const FOLD_BLOCK = "block";
@@ -41781,7 +41832,7 @@ var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
41781
41832
  exports.foldFlowLines = foldFlowLines;
41782
41833
  }));
41783
41834
  //#endregion
41784
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js
41835
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyString.js
41785
41836
  var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
41786
41837
  var Scalar = require_Scalar();
41787
41838
  var foldFlowLines = require_foldFlowLines();
@@ -42005,7 +42056,7 @@ var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
42005
42056
  exports.stringifyString = stringifyString;
42006
42057
  }));
42007
42058
  //#endregion
42008
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js
42059
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringify.js
42009
42060
  var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42010
42061
  var anchors = require_anchors();
42011
42062
  var identity = require_identity();
@@ -42113,7 +42164,7 @@ var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42113
42164
  exports.stringify = stringify;
42114
42165
  }));
42115
42166
  //#endregion
42116
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js
42167
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyPair.js
42117
42168
  var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42118
42169
  var identity = require_identity();
42119
42170
  var Scalar = require_Scalar();
@@ -42210,7 +42261,7 @@ var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42210
42261
  exports.stringifyPair = stringifyPair;
42211
42262
  }));
42212
42263
  //#endregion
42213
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/log.js
42264
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/log.js
42214
42265
  var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42215
42266
  var node_process$3 = require("process");
42216
42267
  function debug(logLevel, ...messages) {
@@ -42226,7 +42277,7 @@ var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42226
42277
  exports.warn = warn;
42227
42278
  }));
42228
42279
  //#endregion
42229
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42280
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42230
42281
  var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42231
42282
  var identity = require_identity();
42232
42283
  var Scalar = require_Scalar();
@@ -42269,7 +42320,7 @@ var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42269
42320
  exports.merge = merge;
42270
42321
  }));
42271
42322
  //#endregion
42272
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js
42323
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/addPairToJSMap.js
42273
42324
  var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42274
42325
  var log = require_log();
42275
42326
  var merge = require_merge();
@@ -42320,7 +42371,7 @@ var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42320
42371
  exports.addPairToJSMap = addPairToJSMap;
42321
42372
  }));
42322
42373
  //#endregion
42323
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js
42374
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Pair.js
42324
42375
  var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42325
42376
  var createNode = require_createNode();
42326
42377
  var stringifyPair = require_stringifyPair();
@@ -42353,7 +42404,7 @@ var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42353
42404
  exports.createPair = createPair;
42354
42405
  }));
42355
42406
  //#endregion
42356
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js
42407
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyCollection.js
42357
42408
  var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42358
42409
  var identity = require_identity();
42359
42410
  var stringify = require_stringify$1();
@@ -42471,7 +42522,7 @@ var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42471
42522
  exports.stringifyCollection = stringifyCollection;
42472
42523
  }));
42473
42524
  //#endregion
42474
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js
42525
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLMap.js
42475
42526
  var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42476
42527
  var stringifyCollection = require_stringifyCollection();
42477
42528
  var addPairToJSMap = require_addPairToJSMap();
@@ -42580,7 +42631,7 @@ var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42580
42631
  exports.findPair = findPair;
42581
42632
  }));
42582
42633
  //#endregion
42583
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js
42634
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/map.js
42584
42635
  var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
42585
42636
  var identity = require_identity();
42586
42637
  var YAMLMap = require_YAMLMap();
@@ -42597,7 +42648,7 @@ var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
42597
42648
  };
42598
42649
  }));
42599
42650
  //#endregion
42600
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js
42651
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLSeq.js
42601
42652
  var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
42602
42653
  var createNode = require_createNode();
42603
42654
  var stringifyCollection = require_stringifyCollection();
@@ -42703,7 +42754,7 @@ var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
42703
42754
  exports.YAMLSeq = YAMLSeq;
42704
42755
  }));
42705
42756
  //#endregion
42706
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js
42757
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/seq.js
42707
42758
  var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
42708
42759
  var identity = require_identity();
42709
42760
  var YAMLSeq = require_YAMLSeq();
@@ -42720,7 +42771,7 @@ var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
42720
42771
  };
42721
42772
  }));
42722
42773
  //#endregion
42723
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js
42774
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/string.js
42724
42775
  var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
42725
42776
  var stringifyString = require_stringifyString();
42726
42777
  exports.string = {
@@ -42735,7 +42786,7 @@ var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
42735
42786
  };
42736
42787
  }));
42737
42788
  //#endregion
42738
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js
42789
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/null.js
42739
42790
  var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
42740
42791
  var Scalar = require_Scalar();
42741
42792
  const nullTag = {
@@ -42750,7 +42801,7 @@ var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
42750
42801
  exports.nullTag = nullTag;
42751
42802
  }));
42752
42803
  //#endregion
42753
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js
42804
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/bool.js
42754
42805
  var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42755
42806
  var Scalar = require_Scalar();
42756
42807
  const boolTag = {
@@ -42769,7 +42820,7 @@ var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42769
42820
  exports.boolTag = boolTag;
42770
42821
  }));
42771
42822
  //#endregion
42772
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js
42823
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyNumber.js
42773
42824
  var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
42774
42825
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
42775
42826
  if (typeof value === "bigint") return String(value);
@@ -42790,7 +42841,7 @@ var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
42790
42841
  exports.stringifyNumber = stringifyNumber;
42791
42842
  }));
42792
42843
  //#endregion
42793
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js
42844
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/float.js
42794
42845
  var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42795
42846
  var Scalar = require_Scalar();
42796
42847
  var stringifyNumber = require_stringifyNumber();
@@ -42831,7 +42882,7 @@ var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42831
42882
  exports.floatNaN = floatNaN;
42832
42883
  }));
42833
42884
  //#endregion
42834
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js
42885
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/int.js
42835
42886
  var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42836
42887
  var stringifyNumber = require_stringifyNumber();
42837
42888
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -42872,7 +42923,7 @@ var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42872
42923
  exports.intOct = intOct;
42873
42924
  }));
42874
42925
  //#endregion
42875
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js
42926
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/schema.js
42876
42927
  var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
42877
42928
  var map = require_map();
42878
42929
  var _null = require_null();
@@ -42896,7 +42947,7 @@ var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
42896
42947
  ];
42897
42948
  }));
42898
42949
  //#endregion
42899
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js
42950
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/json/schema.js
42900
42951
  var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42901
42952
  var Scalar = require_Scalar();
42902
42953
  var map = require_map();
@@ -42958,7 +43009,7 @@ var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42958
43009
  });
42959
43010
  }));
42960
43011
  //#endregion
42961
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js
43012
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/binary.js
42962
43013
  var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
42963
43014
  var node_buffer = require("buffer");
42964
43015
  var Scalar = require_Scalar();
@@ -43014,7 +43065,7 @@ var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
43014
43065
  };
43015
43066
  }));
43016
43067
  //#endregion
43017
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43068
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43018
43069
  var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43019
43070
  var identity = require_identity();
43020
43071
  var Pair = require_Pair();
@@ -43075,7 +43126,7 @@ var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43075
43126
  exports.resolvePairs = resolvePairs;
43076
43127
  }));
43077
43128
  //#endregion
43078
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43129
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43079
43130
  var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43080
43131
  var identity = require_identity();
43081
43132
  var toJS = require_toJS();
@@ -43140,7 +43191,7 @@ var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43140
43191
  exports.omap = omap;
43141
43192
  }));
43142
43193
  //#endregion
43143
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43194
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43144
43195
  var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43145
43196
  var Scalar = require_Scalar();
43146
43197
  function boolStringify({ value, source }, ctx) {
@@ -43167,7 +43218,7 @@ var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43167
43218
  exports.trueTag = trueTag;
43168
43219
  }));
43169
43220
  //#endregion
43170
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js
43221
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/float.js
43171
43222
  var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43172
43223
  var Scalar = require_Scalar();
43173
43224
  var stringifyNumber = require_stringifyNumber();
@@ -43211,7 +43262,7 @@ var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43211
43262
  exports.floatNaN = floatNaN;
43212
43263
  }));
43213
43264
  //#endregion
43214
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js
43265
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/int.js
43215
43266
  var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43216
43267
  var stringifyNumber = require_stringifyNumber();
43217
43268
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -43284,7 +43335,7 @@ var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43284
43335
  exports.intOct = intOct;
43285
43336
  }));
43286
43337
  //#endregion
43287
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js
43338
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/set.js
43288
43339
  var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43289
43340
  var identity = require_identity();
43290
43341
  var Pair = require_Pair();
@@ -43353,7 +43404,7 @@ var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43353
43404
  exports.set = set;
43354
43405
  }));
43355
43406
  //#endregion
43356
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43407
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43357
43408
  var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43358
43409
  var stringifyNumber = require_stringifyNumber();
43359
43410
  /** Internal types handle bigint as number, because TS can't figure it out. */
@@ -43436,7 +43487,7 @@ var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43436
43487
  exports.timestamp = timestamp;
43437
43488
  }));
43438
43489
  //#endregion
43439
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43490
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43440
43491
  var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43441
43492
  var map = require_map();
43442
43493
  var _null = require_null();
@@ -43476,7 +43527,7 @@ var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43476
43527
  ];
43477
43528
  }));
43478
43529
  //#endregion
43479
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js
43530
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/tags.js
43480
43531
  var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
43481
43532
  var map = require_map();
43482
43533
  var _null = require_null();
@@ -43562,7 +43613,7 @@ var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
43562
43613
  exports.getTags = getTags;
43563
43614
  }));
43564
43615
  //#endregion
43565
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js
43616
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/Schema.js
43566
43617
  var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43567
43618
  var identity = require_identity();
43568
43619
  var map = require_map();
@@ -43590,7 +43641,7 @@ var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43590
43641
  };
43591
43642
  }));
43592
43643
  //#endregion
43593
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js
43644
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyDocument.js
43594
43645
  var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
43595
43646
  var identity = require_identity();
43596
43647
  var stringify = require_stringify$1();
@@ -43652,7 +43703,7 @@ var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
43652
43703
  exports.stringifyDocument = stringifyDocument;
43653
43704
  }));
43654
43705
  //#endregion
43655
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js
43706
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/Document.js
43656
43707
  var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
43657
43708
  var Alias = require_Alias();
43658
43709
  var Collection = require_Collection();
@@ -43933,7 +43984,7 @@ var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
43933
43984
  exports.Document = Document;
43934
43985
  }));
43935
43986
  //#endregion
43936
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/errors.js
43987
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/errors.js
43937
43988
  var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
43938
43989
  var YAMLError = class extends Error {
43939
43990
  constructor(name, pos, code, message) {
@@ -43986,7 +44037,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
43986
44037
  exports.prettifyError = prettifyError;
43987
44038
  }));
43988
44039
  //#endregion
43989
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js
44040
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-props.js
43990
44041
  var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
43991
44042
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
43992
44043
  let spaceBefore = false;
@@ -44093,7 +44144,7 @@ var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
44093
44144
  exports.resolveProps = resolveProps;
44094
44145
  }));
44095
44146
  //#endregion
44096
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js
44147
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-contains-newline.js
44097
44148
  var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) => {
44098
44149
  function containsNewline(key) {
44099
44150
  if (!key) return null;
@@ -44122,7 +44173,7 @@ var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) =>
44122
44173
  exports.containsNewline = containsNewline;
44123
44174
  }));
44124
44175
  //#endregion
44125
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js
44176
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-flow-indent-check.js
44126
44177
  var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) => {
44127
44178
  var utilContainsNewline = require_util_contains_newline();
44128
44179
  function flowIndentCheck(indent, fc, onError) {
@@ -44134,7 +44185,7 @@ var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) =>
44134
44185
  exports.flowIndentCheck = flowIndentCheck;
44135
44186
  }));
44136
44187
  //#endregion
44137
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js
44188
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-map-includes.js
44138
44189
  var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44139
44190
  var identity = require_identity();
44140
44191
  function mapIncludes(ctx, items, search) {
@@ -44146,7 +44197,7 @@ var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44146
44197
  exports.mapIncludes = mapIncludes;
44147
44198
  }));
44148
44199
  //#endregion
44149
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js
44200
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-map.js
44150
44201
  var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44151
44202
  var Pair = require_Pair();
44152
44203
  var YAMLMap = require_YAMLMap();
@@ -44234,7 +44285,7 @@ var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44234
44285
  exports.resolveBlockMap = resolveBlockMap;
44235
44286
  }));
44236
44287
  //#endregion
44237
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js
44288
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-seq.js
44238
44289
  var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44239
44290
  var YAMLSeq = require_YAMLSeq();
44240
44291
  var resolveProps = require_resolve_props();
@@ -44279,7 +44330,7 @@ var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44279
44330
  exports.resolveBlockSeq = resolveBlockSeq;
44280
44331
  }));
44281
44332
  //#endregion
44282
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js
44333
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-end.js
44283
44334
  var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44284
44335
  function resolveEnd(end, offset, reqSpace, onError) {
44285
44336
  let comment = "";
@@ -44317,7 +44368,7 @@ var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44317
44368
  exports.resolveEnd = resolveEnd;
44318
44369
  }));
44319
44370
  //#endregion
44320
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js
44371
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-collection.js
44321
44372
  var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44322
44373
  var identity = require_identity();
44323
44374
  var Pair = require_Pair();
@@ -44480,7 +44531,7 @@ var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) =
44480
44531
  exports.resolveFlowCollection = resolveFlowCollection;
44481
44532
  }));
44482
44533
  //#endregion
44483
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js
44534
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-collection.js
44484
44535
  var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44485
44536
  var identity = require_identity();
44486
44537
  var Scalar = require_Scalar();
@@ -44532,7 +44583,7 @@ var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44532
44583
  exports.composeCollection = composeCollection;
44533
44584
  }));
44534
44585
  //#endregion
44535
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js
44586
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-scalar.js
44536
44587
  var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44537
44588
  var Scalar = require_Scalar();
44538
44589
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -44709,7 +44760,7 @@ var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44709
44760
  exports.resolveBlockScalar = resolveBlockScalar;
44710
44761
  }));
44711
44762
  //#endregion
44712
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js
44763
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-scalar.js
44713
44764
  var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44714
44765
  var Scalar = require_Scalar();
44715
44766
  var resolveEnd = require_resolve_end();
@@ -44779,40 +44830,41 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44779
44830
  case "`": badChar = `reserved character ${source[0]}`;
44780
44831
  }
44781
44832
  if (badChar) onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`);
44782
- return foldLines(source);
44833
+ return unfoldLines(source);
44783
44834
  }
44784
44835
  function singleQuotedValue(source, onError) {
44785
44836
  if (source[source.length - 1] !== "'" || source.length === 1) onError(source.length, "MISSING_CHAR", "Missing closing 'quote");
44786
- return foldLines(source.slice(1, -1)).replace(/''/g, "'");
44837
+ return unfoldLines(source.slice(1, -1)).replace(/''/g, "'");
44787
44838
  }
44788
- function foldLines(source) {
44839
+ function unfoldLines(source) {
44840
+ const line = /(.*?)\r?\n/sy;
44841
+ let match = line.exec(source);
44842
+ if (!match) return source;
44789
44843
  /**
44790
- * The negative lookbehind here and in the `re` RegExp is to
44844
+ * The negative lookbehinds in these RegExps are to
44791
44845
  * prevent causing a polynomial search time in certain cases.
44792
44846
  *
44793
- * The try-catch is for Safari, which doesn't support this yet:
44847
+ * The try-catch is for Safari < 16.4 and other old browsers:
44794
44848
  * https://caniuse.com/js-regexp-lookbehind
44795
44849
  */
44796
- let first, line;
44850
+ let trimEnd, trimBoth;
44797
44851
  try {
44798
- first = new RegExp("(.*?)(?<![ ])[ ]*\r?\n", "sy");
44799
- line = new RegExp("[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?\n", "sy");
44852
+ trimEnd = new RegExp("(?<![ ])[ ]+$");
44853
+ trimBoth = new RegExp("^[ ]+|(?<![ ])[ ]+$", "g");
44800
44854
  } catch {
44801
- first = /(.*?)[ \t]*\r?\n/sy;
44802
- line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
44855
+ trimEnd = /[ \t]+$/;
44856
+ trimBoth = /^[ \t]+|[ \t]+$/g;
44803
44857
  }
44804
- let match = first.exec(source);
44805
- if (!match) return source;
44806
- let res = match[1];
44858
+ let res = match[1].replace(trimEnd, "");
44807
44859
  let sep = " ";
44808
- let pos = first.lastIndex;
44809
- line.lastIndex = pos;
44860
+ let pos = line.lastIndex;
44810
44861
  while (match = line.exec(source)) {
44811
- if (match[1] === "") {
44862
+ const lm = match[1].replace(trimBoth, "");
44863
+ if (lm === "") {
44812
44864
  if (sep === "\n") res += sep;
44813
44865
  else sep = "\n";
44814
44866
  } else {
44815
- res += sep + match[1];
44867
+ res += sep + lm;
44816
44868
  sep = " ";
44817
44869
  }
44818
44870
  pos = line.lastIndex;
@@ -44913,7 +44965,7 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44913
44965
  exports.resolveFlowScalar = resolveFlowScalar;
44914
44966
  }));
44915
44967
  //#endregion
44916
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js
44968
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-scalar.js
44917
44969
  var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44918
44970
  var identity = require_identity();
44919
44971
  var Scalar = require_Scalar();
@@ -44974,7 +45026,7 @@ var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44974
45026
  exports.composeScalar = composeScalar;
44975
45027
  }));
44976
45028
  //#endregion
44977
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js
45029
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-empty-scalar-position.js
44978
45030
  var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports) => {
44979
45031
  function emptyScalarPosition(offset, before, pos) {
44980
45032
  if (before) {
@@ -45001,7 +45053,7 @@ var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports
45001
45053
  exports.emptyScalarPosition = emptyScalarPosition;
45002
45054
  }));
45003
45055
  //#endregion
45004
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js
45056
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-node.js
45005
45057
  var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45006
45058
  var Alias = require_Alias();
45007
45059
  var identity = require_identity();
@@ -45092,7 +45144,7 @@ var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45092
45144
  exports.composeNode = composeNode;
45093
45145
  }));
45094
45146
  //#endregion
45095
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js
45147
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-doc.js
45096
45148
  var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45097
45149
  var Document = require_Document();
45098
45150
  var composeNode = require_compose_node();
@@ -45134,7 +45186,7 @@ var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45134
45186
  exports.composeDoc = composeDoc;
45135
45187
  }));
45136
45188
  //#endregion
45137
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js
45189
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/composer.js
45138
45190
  var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45139
45191
  var node_process$2 = require("process");
45140
45192
  var directives = require_directives();
@@ -45332,7 +45384,7 @@ var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45332
45384
  exports.Composer = Composer;
45333
45385
  }));
45334
45386
  //#endregion
45335
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js
45387
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-scalar.js
45336
45388
  var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45337
45389
  var resolveBlockScalar = require_resolve_block_scalar();
45338
45390
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -45599,7 +45651,7 @@ var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45599
45651
  exports.setScalarValue = setScalarValue;
45600
45652
  }));
45601
45653
  //#endregion
45602
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js
45654
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-stringify.js
45603
45655
  var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
45604
45656
  /**
45605
45657
  * Stringify a CST document, token, or collection item
@@ -45650,7 +45702,7 @@ var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
45650
45702
  exports.stringify = stringify;
45651
45703
  }));
45652
45704
  //#endregion
45653
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js
45705
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-visit.js
45654
45706
  var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
45655
45707
  const BREAK = Symbol("break visit");
45656
45708
  const SKIP = Symbol("skip children");
@@ -45741,7 +45793,7 @@ var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
45741
45793
  exports.visit = visit;
45742
45794
  }));
45743
45795
  //#endregion
45744
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js
45796
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst.js
45745
45797
  var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
45746
45798
  var cstScalar = require_cst_scalar();
45747
45799
  var cstStringify = require_cst_stringify();
@@ -45820,7 +45872,7 @@ var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
45820
45872
  exports.tokenType = tokenType;
45821
45873
  }));
45822
45874
  //#endregion
45823
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js
45875
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/lexer.js
45824
45876
  var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
45825
45877
  var cst = require_cst();
45826
45878
  function isEmpty(ch) {
@@ -46353,7 +46405,7 @@ var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
46353
46405
  exports.Lexer = Lexer;
46354
46406
  }));
46355
46407
  //#endregion
46356
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js
46408
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/line-counter.js
46357
46409
  var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46358
46410
  /**
46359
46411
  * Tracks newlines during parsing in order to provide an efficient API for
@@ -46400,7 +46452,7 @@ var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46400
46452
  exports.LineCounter = LineCounter;
46401
46453
  }));
46402
46454
  //#endregion
46403
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js
46455
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/parser.js
46404
46456
  var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
46405
46457
  var node_process$1 = require("process");
46406
46458
  var cst = require_cst();
@@ -47266,7 +47318,7 @@ var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
47266
47318
  exports.Parser = Parser;
47267
47319
  }));
47268
47320
  //#endregion
47269
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/public-api.js
47321
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/public-api.js
47270
47322
  var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47271
47323
  var composer = require_composer();
47272
47324
  var Document = require_Document();
@@ -47355,7 +47407,7 @@ var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47355
47407
  exports.stringify = stringify;
47356
47408
  }));
47357
47409
  //#endregion
47358
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js
47410
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/index.js
47359
47411
  var require_dist = /* @__PURE__ */ __commonJSMin(((exports) => {
47360
47412
  var composer = require_composer();
47361
47413
  var Document = require_Document();
@@ -55733,17 +55785,8 @@ const SilkChangesetsRules = [
55733
55785
  DependencyTableFormatRule
55734
55786
  ];
55735
55787
  //#endregion
55736
- //#region src/changesets/changelog.ts
55737
- /**
55738
- * Changesets API changelog formatter shim for \@savvy-web/silk.
55739
- *
55740
- * Drop-in replacement for \@savvy-web/changesets/changelog.
55741
- * The default export is the ChangelogFunctions object consumed by the
55742
- * Changesets CLI via the changelog field in .changeset/config.json.
55743
- *
55744
- * @packageDocumentation
55745
- */
55746
- const changelogFunctions = (/* @__PURE__ */ __exportAll({
55788
+ //#region ../silk-effects/dist/dev/pkg/changesets/index.js
55789
+ var changesets_exports = /* @__PURE__ */ __exportAll({
55747
55790
  AggregateDependencyTablesPlugin: () => AggregateDependencyTablesPlugin,
55748
55791
  AppliedReleaseEntrySchema: () => AppliedReleaseEntrySchema,
55749
55792
  AppliedReleaseSchema: () => AppliedReleaseSchema,
@@ -55757,6 +55800,7 @@ const changelogFunctions = (/* @__PURE__ */ __exportAll({
55757
55800
  ChangelogTransformer: () => ChangelogTransformer,
55758
55801
  ChangesetIOError: () => ChangesetIOError,
55759
55802
  ChangesetLinter: () => ChangesetLinter,
55803
+ ChangesetLogMode: () => ChangesetLogMode,
55760
55804
  ChangesetOptionsSchema: () => ChangesetOptionsSchema,
55761
55805
  ChangesetPreviewSchema: () => ChangesetPreviewSchema,
55762
55806
  ChangesetSchema: () => ChangesetSchema,
@@ -55843,6 +55887,7 @@ const changelogFunctions = (/* @__PURE__ */ __exportAll({
55843
55887
  isPureDependencyChangeset: () => isPureDependencyChangeset,
55844
55888
  listPublishablePackageNames: () => listPublishablePackageNames,
55845
55889
  makeBranchAnalyzerTest: () => makeBranchAnalyzerTest,
55890
+ makeChangelogFunctions: () => makeChangelogFunctions,
55846
55891
  makeConfigInspectorTest: () => makeConfigInspectorTest,
55847
55892
  makeDepsRegenDefault: () => makeDepsRegenDefault,
55848
55893
  makeGitHubTest: () => makeGitHubTest,
@@ -55850,6 +55895,28 @@ const changelogFunctions = (/* @__PURE__ */ __exportAll({
55850
55895
  parseChangesetPackages: () => parseChangesetPackages,
55851
55896
  serializeDependencyTableToMarkdown: () => serializeDependencyTableToMarkdown,
55852
55897
  vanillaChangelogFunctions: () => vanillaChangelogFunctions
55853
- })).changelogFunctions;
55898
+ });
55899
+ //#endregion
55900
+ //#region src/changesets/changelog.ts
55901
+ /**
55902
+ * Changesets API changelog formatter shim for \@savvy-web/silk.
55903
+ *
55904
+ * Drop-in replacement for \@savvy-web/changesets/changelog (superseded by
55905
+ * \@savvy-web/changelog, which this mirrors exactly). The default export is
55906
+ * the ChangelogFunctions object consumed by the Changesets CLI via the
55907
+ * changelog field in .changeset/config.json.
55908
+ *
55909
+ * This shim is the host adapter for the changesets CLI, a foreign process
55910
+ * that supplies no context of its own, so the warning mode is read from
55911
+ * `process.env` HERE and handed to the engine, which never reads it.
55912
+ *
55913
+ * @packageDocumentation
55914
+ */
55915
+ const logMode = () => {
55916
+ if (process.env.VITEST) return "silent";
55917
+ if (process.env.GITHUB_ACTIONS === "true") return "github";
55918
+ return "stderr";
55919
+ };
55920
+ const changelogFunctions = changesets_exports.makeChangelogFunctions({ logMode: logMode() });
55854
55921
  //#endregion
55855
55922
  module.exports = changelogFunctions;