@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.
@@ -1,9 +1,9 @@
1
1
  import { builtinModules, createRequire } from "node:module";
2
- import { CommentStyle, SectionId } from "@effected/templates";
3
2
  import { Context, Data, Effect, FileSystem, Layer, Option, Path, Result, Schema, SchemaIssue, SchemaTransformation } from "effect";
3
+ import { CommentStyle, SectionId } from "@effected/templates";
4
+ import { PublishTarget, PublishabilityDetector, WorkspaceDiscovery, WorkspaceSnapshots, WorkspaceStateSnapshot, Workspaces } from "@effected/workspaces";
4
5
  import * as path$1 from "node:path";
5
6
  import { basename, delimiter, dirname, isAbsolute, join, normalize, relative, resolve, sep } from "node:path";
6
- import { PublishTarget, PublishabilityDetector, WorkspaceDiscovery, WorkspaceSnapshots, WorkspaceStateSnapshot, Workspaces } from "@effected/workspaces";
7
7
  import * as fs$1 from "node:fs/promises";
8
8
  import * as util from "node:util";
9
9
  import { format, inspect, styleText } from "node:util";
@@ -75,7 +75,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
75
75
  var __require$1 = /* #__PURE__ */ (() => createRequire(import.meta.url))();
76
76
 
77
77
  //#endregion
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
  *
@@ -93,7 +93,451 @@ var ChangesetConfigError = class extends Data.TaggedError("ChangesetConfigError"
93
93
  };
94
94
 
95
95
  //#endregion
96
- //#region ../silk-effects/dist/dev/pkg/schemas/VersioningSchemas.js
96
+ //#region ../silk-core/dist/dev/pkg/errors/PublishTargetBindingError.js
97
+ /**
98
+ * Raised when publishability detection selects a directory that the package's
99
+ * `dist/prod/targets.json` binding does not describe.
100
+ *
101
+ * @remarks
102
+ * The bundler's prod build writes `targets.json` naming every byte-group
103
+ * directory it produced. Once that binding exists it is authoritative: the only
104
+ * directories whose bytes may be published are the ones it lists. A detector
105
+ * that returns anything else — most often `publishConfig.directory` pointing at
106
+ * a **dev** build, because silk mode was misdetected — is about to pack an
107
+ * unresolved workspace manifest and ship it to a registry.
108
+ *
109
+ * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
110
+ * dev manifest still carried `catalog:` specifiers, and the published package
111
+ * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
112
+ *
113
+ * @since 3.1.0
114
+ * @public
115
+ */
116
+ var PublishTargetBindingError = class extends Data.TaggedError("PublishTargetBindingError") {
117
+ get message() {
118
+ 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.`;
119
+ }
120
+ };
121
+
122
+ //#endregion
123
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
124
+ /**
125
+ * GitHub's closing-keyword issue-reference grammar, as pure functions.
126
+ *
127
+ * @remarks
128
+ * GitHub links an issue to a pull request when the PR's description carries
129
+ * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
130
+ * that grammar in two distinct dialects, and this module models exactly those
131
+ * two — no service, no layer, nothing but strings in and values out:
132
+ *
133
+ * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
134
+ * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
135
+ * and **no colon**, because that is the spelling GitHub itself scans PR
136
+ * bodies for. This is the dialect a release pipeline harvests from commit
137
+ * subjects and PR descriptions.
138
+ * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
139
+ * the reference — `"Closes: #12"` — with an **optional colon**, because a
140
+ * generated references region writes one reference per line and a colon
141
+ * reads better there. GitHub does not require the colon; the region format
142
+ * allows it, so the parser must too. The dialects differ because their
143
+ * producers do: prose is written by humans for GitHub's scanner, the region
144
+ * is written by tooling for humans.
145
+ *
146
+ * Deliberately out of scope this round: cross-repo references
147
+ * (`owner/repo#N`) and full-URL references
148
+ * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
149
+ * neither dialect's consumers emit them yet, and guessing at their shape here
150
+ * would freeze an API nobody has driven.
151
+ */
152
+ /**
153
+ * The nine closing keywords GitHub documents, lowercased.
154
+ *
155
+ * @public
156
+ */
157
+ const CLOSING_KEYWORDS = [
158
+ "close",
159
+ "closes",
160
+ "closed",
161
+ "fix",
162
+ "fixes",
163
+ "fixed",
164
+ "resolve",
165
+ "resolves",
166
+ "resolved"
167
+ ];
168
+ /**
169
+ * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
170
+ * grammar cannot drift. Alternation order is safe: the regex engine backtracks
171
+ * through alternatives, so `close` matching inside `closes` fails at the
172
+ * mandatory `#`-introducer and retries the longer keyword.
173
+ */
174
+ const KEYWORDS = CLOSING_KEYWORDS.join("|");
175
+ /** Inline-in-prose: mandatory whitespace, no colon. */
176
+ const INLINE_PATTERN = new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
177
+ /**
178
+ * Bare-line: optional colon, then mandatory same-line whitespace. `[ \t]`
179
+ * rather than `\s`, so an embedded newline cannot smuggle two lines past a
180
+ * parser whose contract is one.
181
+ */
182
+ const BARE_LINE_PATTERN = new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
183
+
184
+ //#endregion
185
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
186
+ /**
187
+ * The closing-list dialect: one whole line naming several issues at once.
188
+ *
189
+ * @remarks
190
+ * The third dialect, alongside the two in `IssueReferences`: after trimming,
191
+ * the **entire** line must be `<keyword>[:] <list>` — keyword
192
+ * case-insensitive (lowercased to canonical form in the result), colon
193
+ * optional, and the list one or more `#<digits>` items separated by `,`,
194
+ * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
195
+ * so an embedded newline cannot smuggle two lines past a parser whose
196
+ * contract is one — the same posture as the bare-line pattern. Any trailing
197
+ * content after the list rejects the line; duplicates are preserved in order,
198
+ * because whether `#1, #1` means one issue or two is the caller's business.
199
+ *
200
+ * Two keyword sets play here. {@link parseClosingList} accepts only the nine
201
+ * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
202
+ * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
203
+ * `refs`, `references`) and reports which set matched via
204
+ * {@link ReferenceList}'s `closing` flag.
205
+ *
206
+ * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
207
+ * line**, where `harvestIssueReferences` merely skips the one match. The
208
+ * asymmetry is deliberate: a harvest drops one reference out of running
209
+ * prose, but a list line is a single claim about a set of issues, and
210
+ * returning the parseable subset would misrepresent the line as claiming
211
+ * less than it does.
212
+ *
213
+ * Complexity posture: parsing is a single left-to-right character scan —
214
+ * this module contains **no regular expressions at all** — so worst-case
215
+ * time is linear in the line length by construction. There is no
216
+ * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
217
+ * and therefore no input truncation.
218
+ *
219
+ * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
220
+ * the same list grammar to the inline-in-prose posture — several lists on
221
+ * one line of running text — and {@link parseClosingLists} /
222
+ * {@link parseReferenceLists} apply the whole-line parsers per line of a
223
+ * multi-line text. All of them ride the same character scan; the no-regex
224
+ * promise above covers every export here.
225
+ */
226
+ /**
227
+ * The non-closing reference keywords the list dialect accepts, lowercased.
228
+ *
229
+ * @remarks
230
+ * GitHub does not act on these — they associate without closing — but a
231
+ * references region writes them, so the parser must read them.
232
+ *
233
+ * @public
234
+ */
235
+ const REFERENCE_KEYWORDS = [
236
+ "ref",
237
+ "refs",
238
+ "references"
239
+ ];
240
+ /**
241
+ * Both keyword tables ARE the exported constants — membership sets built from
242
+ * them once — so the constants and the grammar cannot drift.
243
+ */
244
+ const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
245
+ /** Membership test for reporting `closing`, widened once so no call casts. */
246
+ const CLOSING_SET = new Set(CLOSING_KEYWORDS);
247
+ const HASH = 35;
248
+ const COLON = 58;
249
+ const COMMA = 44;
250
+ /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
251
+ const isSpaceTab = (code) => code === 32 || code === 9;
252
+ const isDigit$2 = (code) => code >= 48 && code <= 57;
253
+ const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
254
+ /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
255
+ const skipSpaceTab = (line, from) => {
256
+ let index = from;
257
+ while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
258
+ return index;
259
+ };
260
+ /**
261
+ * One list item at exactly `from`: `#<digits>` and the index one past it.
262
+ * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
263
+ * silently rounded issue number, still carrying the index one past the digit
264
+ * run so a caller can skip the item's extent; the whole-line parsers reject
265
+ * on it and {@link harvestReferenceLists} abandons the entire candidate —
266
+ * see the module remarks for why a list never yields a partial reading.
267
+ * Anything that is not `#<digits>` at all is `undefined`.
268
+ */
269
+ const readItem = (line, from) => {
270
+ if (line.charCodeAt(from) !== HASH) return void 0;
271
+ const start = from + 1;
272
+ let index = start;
273
+ while (index < line.length && isDigit$2(line.charCodeAt(index))) index += 1;
274
+ if (index === start) return void 0;
275
+ const value = Number(line.slice(start, index));
276
+ return Number.isSafeInteger(value) ? {
277
+ kind: "item",
278
+ value,
279
+ next: index
280
+ } : {
281
+ kind: "unsafe",
282
+ next: index
283
+ };
284
+ };
285
+ /**
286
+ * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
287
+ * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
288
+ * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
289
+ * lowercase-only — the keyword head is case-insensitive, the separator is
290
+ * not. Returns the index where the next item must start, or `undefined` when
291
+ * no separator is present.
292
+ */
293
+ const scanSeparator = (line, from) => {
294
+ const afterLeading = skipSpaceTab(line, from);
295
+ if (line.charCodeAt(afterLeading) === COMMA) {
296
+ const afterComma = skipSpaceTab(line, afterLeading + 1);
297
+ if (line.startsWith("and", afterComma)) {
298
+ const afterAnd = skipSpaceTab(line, afterComma + 3);
299
+ if (afterAnd > afterComma + 3) return afterAnd;
300
+ }
301
+ return afterComma;
302
+ }
303
+ if (afterLeading > from && line.startsWith("and", afterLeading)) {
304
+ const afterAnd = skipSpaceTab(line, afterLeading + 3);
305
+ if (afterAnd > afterLeading + 3) return afterAnd;
306
+ }
307
+ };
308
+ /**
309
+ * The scan walk: item, then separator, then item, until the cursor stands
310
+ * exactly at the end of the string. Anything else — a malformed item, an
311
+ * unknown separator, trailing content, an unsafe issue number — is
312
+ * `undefined`, and the caller rejects the whole line.
313
+ */
314
+ const parseItems = (line, from) => {
315
+ const issueNumbers = [];
316
+ let cursor = from;
317
+ for (;;) {
318
+ const item = readItem(line, cursor);
319
+ if (item === void 0 || item.kind === "unsafe") return void 0;
320
+ issueNumbers.push(item.value);
321
+ cursor = item.next;
322
+ if (cursor === line.length) return issueNumbers;
323
+ const next = scanSeparator(line, cursor);
324
+ if (next === void 0) return void 0;
325
+ cursor = next;
326
+ }
327
+ };
328
+ /**
329
+ * The list a whole line carries under either keyword set, or `Option.none()`.
330
+ *
331
+ * @remarks
332
+ * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
333
+ * reports which set matched in the result's `closing` flag. Grammar,
334
+ * whole-line posture and the whole-line rejection of unsafe issue numbers
335
+ * are in the module remarks.
336
+ *
337
+ * @public
338
+ */
339
+ const parseReferenceList = (line) => {
340
+ const trimmed = line.trim();
341
+ let letters = 0;
342
+ while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
343
+ if (letters === 0) return Option.none();
344
+ const keyword = trimmed.slice(0, letters).toLowerCase();
345
+ if (!ALL_KEYWORDS.has(keyword)) return Option.none();
346
+ let cursor = letters;
347
+ if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
348
+ const afterWhitespace = skipSpaceTab(trimmed, cursor);
349
+ if (afterWhitespace === cursor) return Option.none();
350
+ const issueNumbers = parseItems(trimmed, afterWhitespace);
351
+ if (issueNumbers === void 0) return Option.none();
352
+ return Option.some({
353
+ keyword,
354
+ closing: CLOSING_SET.has(keyword),
355
+ issueNumbers
356
+ });
357
+ };
358
+ /**
359
+ * Every reference list a text carries, line by line, across both postures.
360
+ *
361
+ * @remarks
362
+ * The trailer/prose interleave consumers otherwise hand-roll: each line is
363
+ * tried as a whole-line reference list first ({@link parseReferenceList} —
364
+ * colon-tolerant, per the line dialect), and only a line that is not one is
365
+ * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
366
+ * dialect). The preference means a colon-less trailer line contributes its
367
+ * list exactly once, never once per posture.
368
+ *
369
+ * Results carry no offsets, deliberately: this is the line-granular
370
+ * composition, and a consumer that needs spans uses
371
+ * {@link harvestReferenceLists} directly. Duplicates are preserved, in
372
+ * document order.
373
+ *
374
+ * @public
375
+ */
376
+ const collectReferenceLists = (text) => {
377
+ const lists = [];
378
+ for (const line of text.split("\n")) {
379
+ const whole = parseReferenceList(line);
380
+ if (Option.isSome(whole)) {
381
+ lists.push(whole.value);
382
+ continue;
383
+ }
384
+ for (const harvested of harvestReferenceLists(line)) lists.push({
385
+ keyword: harvested.keyword,
386
+ closing: harvested.closing,
387
+ issueNumbers: harvested.issueNumbers
388
+ });
389
+ }
390
+ return lists;
391
+ };
392
+ /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
393
+ const isWordChar = (code) => isAsciiLetter(code) || isDigit$2(code) || code === 95;
394
+ /**
395
+ * The full JavaScript `\s` set, spelled as a predicate so the module keeps
396
+ * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
397
+ * Unicode space separators. Only the keyword→first-item gap of
398
+ * {@link harvestReferenceLists} admits this set — everything inside a list
399
+ * stays `[ \t]`, per the module remarks.
400
+ */
401
+ 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;
402
+ /**
403
+ * Every reference list found inline in `text`, in document order.
404
+ *
405
+ * @remarks
406
+ * The inline-in-prose posture generalized to lists:
407
+ * `Closes #123, Fixes #456` in one line of a commit body yields two
408
+ * single-item lists, where
409
+ * `harvestIssueReferences` reads only the first reference of each and the
410
+ * whole-line parsers read neither. The grammar per candidate:
411
+ *
412
+ * - The keyword is case-insensitive, drawn from either keyword set,
413
+ * lowercased to canonical form in the result, with `closing` reported by
414
+ * set membership. Word boundaries hold on both sides: the characters
415
+ * immediately before and after the keyword's letter run must not be
416
+ * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
417
+ * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
418
+ * belongs to the line dialects ({@link parseReferenceList} and the
419
+ * bare-line parser), so `closes: #1` inline yields nothing.
420
+ * - The keyword→first-item gap is any run of whitespace **including
421
+ * newlines**, mirroring the inline dialect's `\s+`.
422
+ * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
423
+ * whitespace only, so a list cannot continue past a newline — a later
424
+ * line makes its own claims.
425
+ * - Items are `#<digits>`; duplicates are preserved in order.
426
+ *
427
+ * A list ends at its last valid item: in `closes #1 and fixes #2` the
428
+ * ` and ` before `fixes` fails as a separator because what follows is not
429
+ * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
430
+ * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
431
+ * candidate — never a partial list, for the same reason
432
+ * {@link parseReferenceList} rejects the whole line — and scanning resumes
433
+ * after the candidate's scanned extent.
434
+ *
435
+ * Like everything in this module, the harvest is a single left-to-right
436
+ * character scan with no regular expressions, so time stays linear in the
437
+ * text length and no input is truncated.
438
+ *
439
+ * @public
440
+ */
441
+ const harvestReferenceLists = (text) => {
442
+ const lists = [];
443
+ let index = 0;
444
+ while (index < text.length) {
445
+ if (!isAsciiLetter(text.charCodeAt(index))) {
446
+ index += 1;
447
+ continue;
448
+ }
449
+ const runStart = index;
450
+ let runEnd = index + 1;
451
+ while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
452
+ if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
453
+ index = runEnd;
454
+ continue;
455
+ }
456
+ const keyword = text.slice(runStart, runEnd).toLowerCase();
457
+ if (!ALL_KEYWORDS.has(keyword)) {
458
+ index = runEnd;
459
+ continue;
460
+ }
461
+ let cursor = runEnd;
462
+ while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
463
+ const first = cursor === runEnd ? void 0 : readItem(text, cursor);
464
+ if (first === void 0) {
465
+ index = runEnd;
466
+ continue;
467
+ }
468
+ if (first.kind === "unsafe") {
469
+ index = first.next;
470
+ continue;
471
+ }
472
+ const issueNumbers = [first.value];
473
+ let end = first.next;
474
+ let unsafeNext;
475
+ for (;;) {
476
+ const next = scanSeparator(text, end);
477
+ if (next === void 0) break;
478
+ const item = readItem(text, next);
479
+ if (item === void 0) break;
480
+ if (item.kind === "unsafe") {
481
+ unsafeNext = item.next;
482
+ break;
483
+ }
484
+ issueNumbers.push(item.value);
485
+ end = item.next;
486
+ }
487
+ if (unsafeNext !== void 0) {
488
+ index = unsafeNext;
489
+ continue;
490
+ }
491
+ lists.push({
492
+ keyword,
493
+ closing: CLOSING_SET.has(keyword),
494
+ issueNumbers,
495
+ start: runStart,
496
+ end
497
+ });
498
+ index = end;
499
+ }
500
+ return lists;
501
+ };
502
+
503
+ //#endregion
504
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
505
+ /**
506
+ * The projection table IS the totality proof: `Record` over the union of
507
+ * both keyword types makes a keyword added to either constant without an
508
+ * entry here fail to compile.
509
+ */
510
+ const FAMILIES = {
511
+ close: "close",
512
+ closes: "close",
513
+ closed: "close",
514
+ fix: "fix",
515
+ fixes: "fix",
516
+ fixed: "fix",
517
+ resolve: "resolve",
518
+ resolves: "resolve",
519
+ resolved: "resolve",
520
+ ref: "ref",
521
+ refs: "ref",
522
+ references: "ref"
523
+ };
524
+ /**
525
+ * The family a keyword belongs to.
526
+ *
527
+ * @remarks
528
+ * Total over both keyword sets by construction — see the module remarks for
529
+ * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
530
+ * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
531
+ * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
532
+ * the projection is downstream: categorized harvesters key maps by family,
533
+ * and each was hand-rolling this collapse.
534
+ *
535
+ * @public
536
+ */
537
+ const keywordFamily = (keyword) => FAMILIES[keyword];
538
+
539
+ //#endregion
540
+ //#region ../silk-core/dist/dev/pkg/schemas/VersioningSchemas.js
97
541
  /**
98
542
  * Configuration for how private packages are handled during versioning.
99
543
  *
@@ -165,7 +609,7 @@ const ChangesetConfigFile = Schema.Struct({
165
609
  *
166
610
  * @remarks
167
611
  * Extends {@link (ChangesetConfigFile:type)} with a `_isSilk` marker flag that is automatically
168
- * set to `true`. Detected by {@link ChangesetConfigReader} when the `changelog` field
612
+ * set to `true`. Detected by `ChangesetConfigReader` when the `changelog` field
169
613
  * references `@savvy-web/changesets`.
170
614
  *
171
615
  * @since 0.1.0
@@ -176,6 +620,26 @@ const SilkChangesetConfigFile = Schema.Struct({
176
620
  _isSilk: Schema.Boolean.pipe(Schema.withDecodingDefaultType(Effect.succeed(true)), Schema.withConstructorDefault(Effect.succeed(true)))
177
621
  });
178
622
 
623
+ //#endregion
624
+ //#region ../silk-core/dist/dev/pkg/utils/TrailingSlash.js
625
+ /**
626
+ * Trim trailing slashes from a string.
627
+ *
628
+ * @remarks
629
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
630
+ * unanchored at the start, so the engine retries the match from every position
631
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
632
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
633
+ *
634
+ * @since 0.1.0
635
+ * @public
636
+ */
637
+ const trimTrailingSlashes = (s) => {
638
+ let end = s.length;
639
+ while (end > 0 && s[end - 1] === "/") end -= 1;
640
+ return s.slice(0, end);
641
+ };
642
+
179
643
  //#endregion
180
644
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfigReader.js
181
645
  /**
@@ -206,8 +670,8 @@ function isSilkChangelog(changelog) {
206
670
  *
207
671
  * @remarks
208
672
  * Automatically detects whether the config uses the Silk changelog adapter
209
- * (`@savvy-web/changesets`) and decodes as {@link (SilkChangesetConfigFile:type)} or the
210
- * standard {@link (ChangesetConfigFile:type)} accordingly.
673
+ * (`@savvy-web/changesets`) and decodes as `SilkChangesetConfigFile` or the
674
+ * standard `ChangesetConfigFile` accordingly.
211
675
  *
212
676
  * @example
213
677
  * ```typescript
@@ -285,33 +749,6 @@ var ChangesetConfigReader = class extends Context.Service()("@savvy-web/silk-eff
285
749
  }));
286
750
  };
287
751
 
288
- //#endregion
289
- //#region ../silk-effects/dist/dev/pkg/errors/PublishTargetBindingError.js
290
- /**
291
- * Raised when publishability detection selects a directory that the package's
292
- * `dist/prod/targets.json` binding does not describe.
293
- *
294
- * @remarks
295
- * The bundler's prod build writes `targets.json` naming every byte-group
296
- * directory it produced. Once that binding exists it is authoritative: the only
297
- * directories whose bytes may be published are the ones it lists. A detector
298
- * that returns anything else — most often `publishConfig.directory` pointing at
299
- * a **dev** build, because silk mode was misdetected — is about to pack an
300
- * unresolved workspace manifest and ship it to a registry.
301
- *
302
- * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
303
- * dev manifest still carried `catalog:` specifiers, and the published package
304
- * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
305
- *
306
- * @since 3.1.0
307
- * @public
308
- */
309
- var PublishTargetBindingError = class extends Data.TaggedError("PublishTargetBindingError") {
310
- get message() {
311
- 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.`;
312
- }
313
- };
314
-
315
752
  //#endregion
316
753
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfig.js
317
754
  const isSilk = (cfg) => "_isSilk" in cfg && cfg._isSilk === true;
@@ -389,23 +826,6 @@ var ChangesetConfig = class ChangesetConfig extends Context.Service()("@savvy-we
389
826
  }));
390
827
  };
391
828
 
392
- //#endregion
393
- //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
394
- /**
395
- * Trim trailing slashes from a string.
396
- *
397
- * @remarks
398
- * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
399
- * unanchored at the start, so the engine retries the match from every position
400
- * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
401
- * Only a trailing run of slashes is removed; interior slash runs are untouched.
402
- */
403
- const trimTrailingSlashes = (s) => {
404
- let end = s.length;
405
- while (end > 0 && s[end - 1] === "/") end -= 1;
406
- return s.slice(0, end);
407
- };
408
-
409
829
  //#endregion
410
830
  //#region ../silk-effects/dist/dev/pkg/services/SilkPublishability.js
411
831
  const NPM_DEFAULT = "https://registry.npmjs.org/";
@@ -529,7 +949,7 @@ var SilkPublishability = class SilkPublishability {
529
949
  * directories it names. A directory outside the binding means detection did
530
950
  * not select the prod output — the `yaml-effect@0.7.1` shape, where a dev
531
951
  * manifest carrying `catalog:` specifiers was packed and published. Rather
532
- * than ship those bytes, fail with {@link PublishTargetBindingError}.
952
+ * than ship those bytes, fail with `PublishTargetBindingError`.
533
953
  *
534
954
  * Before the prod build runs there is no binding, and the detector's
535
955
  * placeholder directories are left alone.
@@ -2671,6 +3091,67 @@ function makeGitHubTest(responses) {
2671
3091
  } });
2672
3092
  }
2673
3093
 
3094
+ //#endregion
3095
+ //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
3096
+ /**
3097
+ * Warning output for changelog generation, parameterised by a
3098
+ * {@link ChangesetLogMode} reference instead of an ambient environment read.
3099
+ *
3100
+ * @remarks
3101
+ * This module is engine code shared by every front end, so it must not read
3102
+ * `process` — a `process.env` read here would bake one host's environment
3103
+ * into every other. The mode is a `Context.Reference` with a default of
3104
+ * `"stderr"`; a front end that knows it runs under GitHub Actions or a test
3105
+ * runner provides `"github"` or `"silent"` from its own `process.env` read.
3106
+ *
3107
+ * @packageDocumentation
3108
+ */
3109
+ /**
3110
+ * The reference that selects the {@link ChangesetLogModeValue}.
3111
+ *
3112
+ * @remarks
3113
+ * Defaults to `"stderr"` when no front end provides it, so a program that
3114
+ * never touches the reference still reports. Provide with
3115
+ * `Layer.succeed(ChangesetLogMode, "github")` or
3116
+ * `Effect.provideService(ChangesetLogMode, "silent")`.
3117
+ *
3118
+ * @example
3119
+ * ```typescript
3120
+ * import { Effect } from "effect";
3121
+ * import { Changesets } from "\@savvy-web/silk-effects";
3122
+ *
3123
+ * const mode = process.env.GITHUB_ACTIONS === "true" ? "github" : "stderr";
3124
+ * program.pipe(Effect.provideService(Changesets.ChangesetLogMode, mode));
3125
+ * ```
3126
+ *
3127
+ * @public
3128
+ */
3129
+ const ChangesetLogMode = Context.Reference("@savvy-web/silk-effects/Changesets/ChangesetLogMode", { defaultValue: () => "stderr" });
3130
+ /**
3131
+ * Log a warning message according to the {@link ChangesetLogMode} in context.
3132
+ *
3133
+ * @param message - The warning message
3134
+ * @param args - Additional arguments (concatenated with a space in `"github"` mode)
3135
+ * @returns An `Effect` that never fails
3136
+ *
3137
+ * @internal
3138
+ */
3139
+ function logWarning(message, ...args) {
3140
+ return Effect.gen(function* () {
3141
+ switch (yield* ChangesetLogMode) {
3142
+ case "silent": return;
3143
+ case "github": {
3144
+ const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
3145
+ console.warn(`::warning::${text}`);
3146
+ return;
3147
+ }
3148
+ case "stderr":
3149
+ console.warn(message, ...args);
3150
+ return;
3151
+ }
3152
+ });
3153
+ }
3154
+
2674
3155
  //#endregion
2675
3156
  //#region ../silk-effects/dist/dev/pkg/changesets/schemas/primitives.js
2676
3157
  /**
@@ -3994,7 +4475,7 @@ function evaluateNode(node, depth) {
3994
4475
  //#region ../../node_modules/.pnpm/@effected+jsonc@0.11.0_effect@4.0.0-rc.115/node_modules/@effected/jsonc/internal/scanner.js
3995
4476
  const isWhitespace = (ch) => ch === 32 || ch === 9 || ch === 11 || ch === 12 || ch === 160 || ch === 65279;
3996
4477
  const isLineBreak$1 = (ch) => ch === 10 || ch === 13 || ch === 8232 || ch === 8233;
3997
- const isDigit$2 = (ch) => ch >= 48 && ch <= 57;
4478
+ const isDigit$1 = (ch) => ch >= 48 && ch <= 57;
3998
4479
  /**
3999
4480
  * Create a stateful {@link Scanner} for the given JSONC string.
4000
4481
  *
@@ -4099,31 +4580,31 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4099
4580
  if (text.charCodeAt(pos) === 45) pos++;
4100
4581
  if (text.charCodeAt(pos) === 48) pos++;
4101
4582
  else {
4102
- if (!isDigit$2(text.charCodeAt(pos))) {
4583
+ if (!isDigit$1(text.charCodeAt(pos))) {
4103
4584
  tokenError = "UnexpectedEndOfNumber";
4104
4585
  return text.substring(start, pos);
4105
4586
  }
4106
4587
  pos++;
4107
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4588
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4108
4589
  }
4109
4590
  if (pos < len && text.charCodeAt(pos) === 46) {
4110
4591
  pos++;
4111
- if (!isDigit$2(text.charCodeAt(pos))) {
4592
+ if (!isDigit$1(text.charCodeAt(pos))) {
4112
4593
  tokenError = "UnexpectedEndOfNumber";
4113
4594
  return text.substring(start, pos);
4114
4595
  }
4115
4596
  pos++;
4116
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4597
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4117
4598
  }
4118
4599
  if (pos < len && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {
4119
4600
  pos++;
4120
4601
  if (pos < len && (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)) pos++;
4121
- if (!isDigit$2(text.charCodeAt(pos))) {
4602
+ if (!isDigit$1(text.charCodeAt(pos))) {
4122
4603
  tokenError = "UnexpectedEndOfNumber";
4123
4604
  return text.substring(start, pos);
4124
4605
  }
4125
4606
  pos++;
4126
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4607
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4127
4608
  }
4128
4609
  return text.substring(start, pos);
4129
4610
  };
@@ -4229,7 +4710,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4229
4710
  return token;
4230
4711
  }
4231
4712
  case 45:
4232
- if (pos + 1 < len && isDigit$2(text.charCodeAt(pos + 1))) {
4713
+ if (pos + 1 < len && isDigit$1(text.charCodeAt(pos + 1))) {
4233
4714
  tokenValue = scanNumber();
4234
4715
  token = "Number";
4235
4716
  return token;
@@ -4240,7 +4721,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4240
4721
  tokenError = "InvalidSymbol";
4241
4722
  return token;
4242
4723
  default:
4243
- if (isDigit$2(ch)) {
4724
+ if (isDigit$1(ch)) {
4244
4725
  tokenValue = scanNumber();
4245
4726
  token = "Number";
4246
4727
  return token;
@@ -31296,423 +31777,6 @@ function parseCommitMessage(message) {
31296
31777
  return { description: message };
31297
31778
  }
31298
31779
 
31299
- //#endregion
31300
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
31301
- /**
31302
- * GitHub's closing-keyword issue-reference grammar, as pure functions.
31303
- *
31304
- * @remarks
31305
- * GitHub links an issue to a pull request when the PR's description carries
31306
- * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
31307
- * that grammar in two distinct dialects, and this module models exactly those
31308
- * two — no service, no layer, nothing but strings in and values out:
31309
- *
31310
- * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
31311
- * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
31312
- * and **no colon**, because that is the spelling GitHub itself scans PR
31313
- * bodies for. This is the dialect a release pipeline harvests from commit
31314
- * subjects and PR descriptions.
31315
- * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
31316
- * the reference — `"Closes: #12"` — with an **optional colon**, because a
31317
- * generated references region writes one reference per line and a colon
31318
- * reads better there. GitHub does not require the colon; the region format
31319
- * allows it, so the parser must too. The dialects differ because their
31320
- * producers do: prose is written by humans for GitHub's scanner, the region
31321
- * is written by tooling for humans.
31322
- *
31323
- * Deliberately out of scope this round: cross-repo references
31324
- * (`owner/repo#N`) and full-URL references
31325
- * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
31326
- * neither dialect's consumers emit them yet, and guessing at their shape here
31327
- * would freeze an API nobody has driven.
31328
- */
31329
- /**
31330
- * The nine closing keywords GitHub documents, lowercased.
31331
- *
31332
- * @public
31333
- */
31334
- const CLOSING_KEYWORDS = [
31335
- "close",
31336
- "closes",
31337
- "closed",
31338
- "fix",
31339
- "fixes",
31340
- "fixed",
31341
- "resolve",
31342
- "resolves",
31343
- "resolved"
31344
- ];
31345
- /**
31346
- * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
31347
- * grammar cannot drift. Alternation order is safe: the regex engine backtracks
31348
- * through alternatives, so `close` matching inside `closes` fails at the
31349
- * mandatory `#`-introducer and retries the longer keyword.
31350
- */
31351
- const KEYWORDS = CLOSING_KEYWORDS.join("|");
31352
- /** Inline-in-prose: mandatory whitespace, no colon. */
31353
- const INLINE_PATTERN = new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
31354
- /**
31355
- * Bare-line: optional colon, then mandatory same-line whitespace. `[ \t]`
31356
- * rather than `\s`, so an embedded newline cannot smuggle two lines past a
31357
- * parser whose contract is one.
31358
- */
31359
- const BARE_LINE_PATTERN = new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
31360
-
31361
- //#endregion
31362
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
31363
- /**
31364
- * The closing-list dialect: one whole line naming several issues at once.
31365
- *
31366
- * @remarks
31367
- * The third dialect, alongside the two in `IssueReferences`: after trimming,
31368
- * the **entire** line must be `<keyword>[:] <list>` — keyword
31369
- * case-insensitive (lowercased to canonical form in the result), colon
31370
- * optional, and the list one or more `#<digits>` items separated by `,`,
31371
- * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
31372
- * so an embedded newline cannot smuggle two lines past a parser whose
31373
- * contract is one — the same posture as the bare-line pattern. Any trailing
31374
- * content after the list rejects the line; duplicates are preserved in order,
31375
- * because whether `#1, #1` means one issue or two is the caller's business.
31376
- *
31377
- * Two keyword sets play here. {@link parseClosingList} accepts only the nine
31378
- * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
31379
- * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
31380
- * `refs`, `references`) and reports which set matched via
31381
- * {@link ReferenceList}'s `closing` flag.
31382
- *
31383
- * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
31384
- * line**, where `harvestIssueReferences` merely skips the one match. The
31385
- * asymmetry is deliberate: a harvest drops one reference out of running
31386
- * prose, but a list line is a single claim about a set of issues, and
31387
- * returning the parseable subset would misrepresent the line as claiming
31388
- * less than it does.
31389
- *
31390
- * Complexity posture: parsing is a single left-to-right character scan —
31391
- * this module contains **no regular expressions at all** — so worst-case
31392
- * time is linear in the line length by construction. There is no
31393
- * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
31394
- * and therefore no input truncation.
31395
- *
31396
- * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
31397
- * the same list grammar to the inline-in-prose posture — several lists on
31398
- * one line of running text — and {@link parseClosingLists} /
31399
- * {@link parseReferenceLists} apply the whole-line parsers per line of a
31400
- * multi-line text. All of them ride the same character scan; the no-regex
31401
- * promise above covers every export here.
31402
- */
31403
- /**
31404
- * The non-closing reference keywords the list dialect accepts, lowercased.
31405
- *
31406
- * @remarks
31407
- * GitHub does not act on these — they associate without closing — but a
31408
- * references region writes them, so the parser must read them.
31409
- *
31410
- * @public
31411
- */
31412
- const REFERENCE_KEYWORDS = [
31413
- "ref",
31414
- "refs",
31415
- "references"
31416
- ];
31417
- /**
31418
- * Both keyword tables ARE the exported constants — membership sets built from
31419
- * them once — so the constants and the grammar cannot drift.
31420
- */
31421
- const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
31422
- /** Membership test for reporting `closing`, widened once so no call casts. */
31423
- const CLOSING_SET = new Set(CLOSING_KEYWORDS);
31424
- const HASH = 35;
31425
- const COLON = 58;
31426
- const COMMA = 44;
31427
- /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
31428
- const isSpaceTab = (code) => code === 32 || code === 9;
31429
- const isDigit$1 = (code) => code >= 48 && code <= 57;
31430
- const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
31431
- /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
31432
- const skipSpaceTab = (line, from) => {
31433
- let index = from;
31434
- while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
31435
- return index;
31436
- };
31437
- /**
31438
- * One list item at exactly `from`: `#<digits>` and the index one past it.
31439
- * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
31440
- * silently rounded issue number, still carrying the index one past the digit
31441
- * run so a caller can skip the item's extent; the whole-line parsers reject
31442
- * on it and {@link harvestReferenceLists} abandons the entire candidate —
31443
- * see the module remarks for why a list never yields a partial reading.
31444
- * Anything that is not `#<digits>` at all is `undefined`.
31445
- */
31446
- const readItem = (line, from) => {
31447
- if (line.charCodeAt(from) !== HASH) return void 0;
31448
- const start = from + 1;
31449
- let index = start;
31450
- while (index < line.length && isDigit$1(line.charCodeAt(index))) index += 1;
31451
- if (index === start) return void 0;
31452
- const value = Number(line.slice(start, index));
31453
- return Number.isSafeInteger(value) ? {
31454
- kind: "item",
31455
- value,
31456
- next: index
31457
- } : {
31458
- kind: "unsafe",
31459
- next: index
31460
- };
31461
- };
31462
- /**
31463
- * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
31464
- * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
31465
- * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
31466
- * lowercase-only — the keyword head is case-insensitive, the separator is
31467
- * not. Returns the index where the next item must start, or `undefined` when
31468
- * no separator is present.
31469
- */
31470
- const scanSeparator = (line, from) => {
31471
- const afterLeading = skipSpaceTab(line, from);
31472
- if (line.charCodeAt(afterLeading) === COMMA) {
31473
- const afterComma = skipSpaceTab(line, afterLeading + 1);
31474
- if (line.startsWith("and", afterComma)) {
31475
- const afterAnd = skipSpaceTab(line, afterComma + 3);
31476
- if (afterAnd > afterComma + 3) return afterAnd;
31477
- }
31478
- return afterComma;
31479
- }
31480
- if (afterLeading > from && line.startsWith("and", afterLeading)) {
31481
- const afterAnd = skipSpaceTab(line, afterLeading + 3);
31482
- if (afterAnd > afterLeading + 3) return afterAnd;
31483
- }
31484
- };
31485
- /**
31486
- * The scan walk: item, then separator, then item, until the cursor stands
31487
- * exactly at the end of the string. Anything else — a malformed item, an
31488
- * unknown separator, trailing content, an unsafe issue number — is
31489
- * `undefined`, and the caller rejects the whole line.
31490
- */
31491
- const parseItems = (line, from) => {
31492
- const issueNumbers = [];
31493
- let cursor = from;
31494
- for (;;) {
31495
- const item = readItem(line, cursor);
31496
- if (item === void 0 || item.kind === "unsafe") return void 0;
31497
- issueNumbers.push(item.value);
31498
- cursor = item.next;
31499
- if (cursor === line.length) return issueNumbers;
31500
- const next = scanSeparator(line, cursor);
31501
- if (next === void 0) return void 0;
31502
- cursor = next;
31503
- }
31504
- };
31505
- /**
31506
- * The list a whole line carries under either keyword set, or `Option.none()`.
31507
- *
31508
- * @remarks
31509
- * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
31510
- * reports which set matched in the result's `closing` flag. Grammar,
31511
- * whole-line posture and the whole-line rejection of unsafe issue numbers
31512
- * are in the module remarks.
31513
- *
31514
- * @public
31515
- */
31516
- const parseReferenceList = (line) => {
31517
- const trimmed = line.trim();
31518
- let letters = 0;
31519
- while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
31520
- if (letters === 0) return Option.none();
31521
- const keyword = trimmed.slice(0, letters).toLowerCase();
31522
- if (!ALL_KEYWORDS.has(keyword)) return Option.none();
31523
- let cursor = letters;
31524
- if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
31525
- const afterWhitespace = skipSpaceTab(trimmed, cursor);
31526
- if (afterWhitespace === cursor) return Option.none();
31527
- const issueNumbers = parseItems(trimmed, afterWhitespace);
31528
- if (issueNumbers === void 0) return Option.none();
31529
- return Option.some({
31530
- keyword,
31531
- closing: CLOSING_SET.has(keyword),
31532
- issueNumbers
31533
- });
31534
- };
31535
- /**
31536
- * Every reference list a text carries, line by line, across both postures.
31537
- *
31538
- * @remarks
31539
- * The trailer/prose interleave consumers otherwise hand-roll: each line is
31540
- * tried as a whole-line reference list first ({@link parseReferenceList} —
31541
- * colon-tolerant, per the line dialect), and only a line that is not one is
31542
- * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
31543
- * dialect). The preference means a colon-less trailer line contributes its
31544
- * list exactly once, never once per posture.
31545
- *
31546
- * Results carry no offsets, deliberately: this is the line-granular
31547
- * composition, and a consumer that needs spans uses
31548
- * {@link harvestReferenceLists} directly. Duplicates are preserved, in
31549
- * document order.
31550
- *
31551
- * @public
31552
- */
31553
- const collectReferenceLists = (text) => {
31554
- const lists = [];
31555
- for (const line of text.split("\n")) {
31556
- const whole = parseReferenceList(line);
31557
- if (Option.isSome(whole)) {
31558
- lists.push(whole.value);
31559
- continue;
31560
- }
31561
- for (const harvested of harvestReferenceLists(line)) lists.push({
31562
- keyword: harvested.keyword,
31563
- closing: harvested.closing,
31564
- issueNumbers: harvested.issueNumbers
31565
- });
31566
- }
31567
- return lists;
31568
- };
31569
- /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
31570
- const isWordChar = (code) => isAsciiLetter(code) || isDigit$1(code) || code === 95;
31571
- /**
31572
- * The full JavaScript `\s` set, spelled as a predicate so the module keeps
31573
- * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
31574
- * Unicode space separators. Only the keyword→first-item gap of
31575
- * {@link harvestReferenceLists} admits this set — everything inside a list
31576
- * stays `[ \t]`, per the module remarks.
31577
- */
31578
- 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;
31579
- /**
31580
- * Every reference list found inline in `text`, in document order.
31581
- *
31582
- * @remarks
31583
- * The inline-in-prose posture generalized to lists:
31584
- * `Closes #123, Fixes #456` in one line of a commit body yields two
31585
- * single-item lists, where
31586
- * `harvestIssueReferences` reads only the first reference of each and the
31587
- * whole-line parsers read neither. The grammar per candidate:
31588
- *
31589
- * - The keyword is case-insensitive, drawn from either keyword set,
31590
- * lowercased to canonical form in the result, with `closing` reported by
31591
- * set membership. Word boundaries hold on both sides: the characters
31592
- * immediately before and after the keyword's letter run must not be
31593
- * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
31594
- * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
31595
- * belongs to the line dialects ({@link parseReferenceList} and the
31596
- * bare-line parser), so `closes: #1` inline yields nothing.
31597
- * - The keyword→first-item gap is any run of whitespace **including
31598
- * newlines**, mirroring the inline dialect's `\s+`.
31599
- * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
31600
- * whitespace only, so a list cannot continue past a newline — a later
31601
- * line makes its own claims.
31602
- * - Items are `#<digits>`; duplicates are preserved in order.
31603
- *
31604
- * A list ends at its last valid item: in `closes #1 and fixes #2` the
31605
- * ` and ` before `fixes` fails as a separator because what follows is not
31606
- * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
31607
- * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
31608
- * candidate — never a partial list, for the same reason
31609
- * {@link parseReferenceList} rejects the whole line — and scanning resumes
31610
- * after the candidate's scanned extent.
31611
- *
31612
- * Like everything in this module, the harvest is a single left-to-right
31613
- * character scan with no regular expressions, so time stays linear in the
31614
- * text length and no input is truncated.
31615
- *
31616
- * @public
31617
- */
31618
- const harvestReferenceLists = (text) => {
31619
- const lists = [];
31620
- let index = 0;
31621
- while (index < text.length) {
31622
- if (!isAsciiLetter(text.charCodeAt(index))) {
31623
- index += 1;
31624
- continue;
31625
- }
31626
- const runStart = index;
31627
- let runEnd = index + 1;
31628
- while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
31629
- if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
31630
- index = runEnd;
31631
- continue;
31632
- }
31633
- const keyword = text.slice(runStart, runEnd).toLowerCase();
31634
- if (!ALL_KEYWORDS.has(keyword)) {
31635
- index = runEnd;
31636
- continue;
31637
- }
31638
- let cursor = runEnd;
31639
- while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
31640
- const first = cursor === runEnd ? void 0 : readItem(text, cursor);
31641
- if (first === void 0) {
31642
- index = runEnd;
31643
- continue;
31644
- }
31645
- if (first.kind === "unsafe") {
31646
- index = first.next;
31647
- continue;
31648
- }
31649
- const issueNumbers = [first.value];
31650
- let end = first.next;
31651
- let unsafeNext;
31652
- for (;;) {
31653
- const next = scanSeparator(text, end);
31654
- if (next === void 0) break;
31655
- const item = readItem(text, next);
31656
- if (item === void 0) break;
31657
- if (item.kind === "unsafe") {
31658
- unsafeNext = item.next;
31659
- break;
31660
- }
31661
- issueNumbers.push(item.value);
31662
- end = item.next;
31663
- }
31664
- if (unsafeNext !== void 0) {
31665
- index = unsafeNext;
31666
- continue;
31667
- }
31668
- lists.push({
31669
- keyword,
31670
- closing: CLOSING_SET.has(keyword),
31671
- issueNumbers,
31672
- start: runStart,
31673
- end
31674
- });
31675
- index = end;
31676
- }
31677
- return lists;
31678
- };
31679
-
31680
- //#endregion
31681
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
31682
- /**
31683
- * The projection table IS the totality proof: `Record` over the union of
31684
- * both keyword types makes a keyword added to either constant without an
31685
- * entry here fail to compile.
31686
- */
31687
- const FAMILIES = {
31688
- close: "close",
31689
- closes: "close",
31690
- closed: "close",
31691
- fix: "fix",
31692
- fixes: "fix",
31693
- fixed: "fix",
31694
- resolve: "resolve",
31695
- resolves: "resolve",
31696
- resolved: "resolve",
31697
- ref: "ref",
31698
- refs: "ref",
31699
- references: "ref"
31700
- };
31701
- /**
31702
- * The family a keyword belongs to.
31703
- *
31704
- * @remarks
31705
- * Total over both keyword sets by construction — see the module remarks for
31706
- * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
31707
- * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
31708
- * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
31709
- * the projection is downstream: categorized harvesters key maps by family,
31710
- * and each was hand-rolling this collapse.
31711
- *
31712
- * @public
31713
- */
31714
- const keywordFamily = (keyword) => FAMILIES[keyword];
31715
-
31716
31780
  //#endregion
31717
31781
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js
31718
31782
  /**
@@ -31780,42 +31844,6 @@ function parseIssueReferences(commitMessage) {
31780
31844
  return references;
31781
31845
  }
31782
31846
 
31783
- //#endregion
31784
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
31785
- /**
31786
- * Log a warning message.
31787
- *
31788
- * @remarks
31789
- * Detection order:
31790
- * 1. If `process.env.VITEST` is set, the message is silently discarded.
31791
- * 2. If `process.env.GITHUB_ACTIONS === "true"`, the message is emitted
31792
- * as a `::warning::` annotation.
31793
- * 3. Otherwise, `console.warn` is used.
31794
- *
31795
- * @param message - The warning message
31796
- * @param args - Additional arguments (concatenated with a space in CI mode)
31797
- *
31798
- * @example
31799
- * ```typescript
31800
- * import { logWarning } from "../utils/logger.js";
31801
- *
31802
- * logWarning("Duplicate dependency entry", "effect@3.19.0");
31803
- * // In CI: "::warning::Duplicate dependency entry effect@3.19.0"
31804
- * // Locally: console.warn("Duplicate dependency entry", "effect@3.19.0")
31805
- * ```
31806
- *
31807
- * @internal
31808
- */
31809
- function logWarning(message, ...args) {
31810
- /* v8 ignore start — environment-specific */
31811
- if (typeof process !== "undefined" && process.env.VITEST) return;
31812
- if (typeof process !== "undefined" && process.env.GITHUB_ACTIONS === "true") {
31813
- const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
31814
- console.warn(`::warning::${text}`);
31815
- } else console.warn(message, ...args);
31816
- /* v8 ignore stop */
31817
- }
31818
-
31819
31847
  //#endregion
31820
31848
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/section-parser.js
31821
31849
  /**
@@ -32188,10 +32216,7 @@ function getReleaseLine(changeset, versionType, options) {
32188
32216
  if (changeset.commit) commitInfo = yield* (yield* GitHubService).getInfo({
32189
32217
  commit: changeset.commit,
32190
32218
  repo: options.repo
32191
- }).pipe(Effect.flatMap((raw) => Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(Effect.map(() => raw), Effect.catch(() => Effect.succeed(raw)))), Effect.catch((error) => {
32192
- logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error));
32193
- return Effect.succeed(null);
32194
- }));
32219
+ }).pipe(Effect.flatMap((raw) => Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(Effect.map(() => raw), Effect.catch(() => Effect.succeed(raw)))), Effect.catch((error) => logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error)).pipe(Effect.as(null))));
32195
32220
  const parsed = parseChangesetSections(changeset.summary);
32196
32221
  const firstLine = changeset.summary.split("\n")[0];
32197
32222
  const commitMsg = parseCommitMessage(firstLine);
@@ -32290,31 +32315,50 @@ function getReleaseLine(changeset, versionType, options) {
32290
32315
  */
32291
32316
  const MainLayer = GitHubService.layer;
32292
32317
  /**
32293
- * Changesets API `ChangelogFunctions` implementation.
32318
+ * Build a Changesets `ChangelogFunctions` implementation bound to a warning
32319
+ * mode.
32294
32320
  *
32295
- * This object satisfies the `ChangelogFunctions` contract from
32296
- * `\@changesets/types`. Each method validates options, runs the
32297
- * corresponding Effect program with the merged service layer, and
32298
- * returns a `Promise<string>`.
32321
+ * @remarks
32322
+ * This module is engine code and reads no environment; the host that installs
32323
+ * the functions (the `\@savvy-web/changelog` package under the changesets CLI)
32324
+ * decides the mode from its own `process.env` and passes it here. Each method
32325
+ * validates options, runs the corresponding Effect program with the merged
32326
+ * service layer and the chosen {@link ChangesetLogMode}, and returns a
32327
+ * `Promise<string>`.
32299
32328
  *
32300
- * @internal
32329
+ * @param options - The warning mode to provide
32330
+ * @returns A `ChangelogFunctions` object for `.changeset/config.json`
32331
+ *
32332
+ * @public
32301
32333
  */
32302
- const changelogFunctions$1 = {
32303
- getReleaseLine: async (changeset, versionType, options) => {
32304
- const program = Effect.gen(function* () {
32334
+ function makeChangelogFunctions(options = {}) {
32335
+ const run = (program) => {
32336
+ const provided = program.pipe(Effect.provide(MainLayer));
32337
+ return Effect.runPromise(options.logMode === void 0 ? provided : provided.pipe(Effect.provideService(ChangesetLogMode, options.logMode)));
32338
+ };
32339
+ return {
32340
+ getReleaseLine: async (changeset, versionType, options) => run(Effect.gen(function* () {
32305
32341
  const opts = yield* validateChangesetOptions(options);
32306
32342
  return yield* getReleaseLine(changeset, versionType, opts);
32307
- });
32308
- return Effect.runPromise(program.pipe(Effect.provide(MainLayer)));
32309
- },
32310
- getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => {
32311
- const program = Effect.gen(function* () {
32343
+ })),
32344
+ getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => run(Effect.gen(function* () {
32312
32345
  const opts = yield* validateChangesetOptions(options);
32313
32346
  return yield* getDependencyReleaseLine(changesets, dependenciesUpdated, opts);
32314
- });
32315
- return Effect.runPromise(program.pipe(Effect.provide(MainLayer)));
32316
- }
32317
- };
32347
+ }))
32348
+ };
32349
+ }
32350
+ /**
32351
+ * Changesets API `ChangelogFunctions` implementation with the default warning
32352
+ * mode (`"stderr"`).
32353
+ *
32354
+ * @remarks
32355
+ * Equivalent to `makeChangelogFunctions()`. A host that runs under GitHub
32356
+ * Actions or a test runner should call {@link makeChangelogFunctions} with the
32357
+ * mode it detects instead.
32358
+ *
32359
+ * @internal
32360
+ */
32361
+ const changelogFunctions$1 = makeChangelogFunctions();
32318
32362
 
32319
32363
  //#endregion
32320
32364
  //#region ../silk-effects/dist/dev/pkg/changesets/api/changelog.js
@@ -32420,10 +32464,13 @@ var Changelog = class {
32420
32464
  * @param versionType - The semantic version bump type (`"major"`, `"minor"`, or `"patch"`)
32421
32465
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32422
32466
  * Pass `null` to use defaults (no GitHub link resolution).
32467
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32468
+ * the host reads its own environment and passes `"github"` / `"silent"` — this
32469
+ * engine never does. See `ChangesetLogMode`.
32423
32470
  * @returns A promise resolving to the formatted markdown string
32424
32471
  */
32425
- static async formatReleaseLine(changeset, versionType, options) {
32426
- return changelogFunctions$1.getReleaseLine(changeset, versionType, options);
32472
+ static async formatReleaseLine(changeset, versionType, options, logMode) {
32473
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getReleaseLine(changeset, versionType, options);
32427
32474
  }
32428
32475
  /**
32429
32476
  * Format dependency update release lines into a markdown table.
@@ -32438,11 +32485,13 @@ var Changelog = class {
32438
32485
  * old/new versions and package metadata
32439
32486
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32440
32487
  * Pass `null` to use defaults.
32488
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32489
+ * see {@link Changelog.formatReleaseLine}.
32441
32490
  * @returns A promise resolving to the formatted markdown string containing
32442
32491
  * the dependency update table
32443
32492
  */
32444
- static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options) {
32445
- return changelogFunctions$1.getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32493
+ static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options, logMode) {
32494
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32446
32495
  }
32447
32496
  };
32448
32497
 
@@ -41171,7 +41220,7 @@ function globSync(globInput, options) {
41171
41220
  }
41172
41221
 
41173
41222
  //#endregion
41174
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
41223
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/identity.js
41175
41224
  var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
41176
41225
  const ALIAS = Symbol.for("yaml.alias");
41177
41226
  const DOC = Symbol.for("yaml.document");
@@ -41222,7 +41271,7 @@ var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
41222
41271
  }));
41223
41272
 
41224
41273
  //#endregion
41225
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/visit.js
41274
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/visit.js
41226
41275
  var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
41227
41276
  var identity = require_identity();
41228
41277
  const BREAK = Symbol("break visit");
@@ -41414,7 +41463,7 @@ var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
41414
41463
  }));
41415
41464
 
41416
41465
  //#endregion
41417
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js
41466
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/directives.js
41418
41467
  var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
41419
41468
  var identity = require_identity();
41420
41469
  var visit = require_visit();
@@ -41579,7 +41628,7 @@ var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
41579
41628
  }));
41580
41629
 
41581
41630
  //#endregion
41582
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js
41631
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/anchors.js
41583
41632
  var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41584
41633
  var identity = require_identity();
41585
41634
  var visit = require_visit();
@@ -41647,7 +41696,7 @@ var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41647
41696
  }));
41648
41697
 
41649
41698
  //#endregion
41650
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js
41699
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/applyReviver.js
41651
41700
  var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41652
41701
  /**
41653
41702
  * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,
@@ -41690,7 +41739,7 @@ var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41690
41739
  }));
41691
41740
 
41692
41741
  //#endregion
41693
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js
41742
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/toJS.js
41694
41743
  var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41695
41744
  var identity = require_identity();
41696
41745
  /**
@@ -41728,7 +41777,7 @@ var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41728
41777
  }));
41729
41778
 
41730
41779
  //#endregion
41731
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js
41780
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Node.js
41732
41781
  var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41733
41782
  var applyReviver = require_applyReviver();
41734
41783
  var identity = require_identity();
@@ -41763,7 +41812,7 @@ var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41763
41812
  }));
41764
41813
 
41765
41814
  //#endregion
41766
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js
41815
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Alias.js
41767
41816
  var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41768
41817
  var anchors = require_anchors();
41769
41818
  var visit = require_visit();
@@ -41798,29 +41847,31 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41798
41847
  if (node === this) break;
41799
41848
  if (node.anchor === this.source) found = node;
41800
41849
  }
41850
+ if (found && ctx) {
41851
+ const { anchors, doc, maxAliasCount } = ctx;
41852
+ let data = anchors.get(found);
41853
+ if (!data) {
41854
+ toJS.toJS(found, null, ctx);
41855
+ data = anchors.get(found);
41856
+ }
41857
+ /* istanbul ignore if */
41858
+ if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41859
+ if (maxAliasCount >= 0) {
41860
+ data.count += 1;
41861
+ if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, found, anchors);
41862
+ if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41863
+ }
41864
+ }
41801
41865
  return found;
41802
41866
  }
41803
41867
  toJSON(_arg, ctx) {
41804
41868
  if (!ctx) return { source: this.source };
41805
- const { anchors, doc, maxAliasCount } = ctx;
41806
- const source = this.resolve(doc, ctx);
41869
+ const source = this.resolve(ctx.doc, ctx);
41807
41870
  if (!source) {
41808
41871
  const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
41809
41872
  throw new ReferenceError(msg);
41810
41873
  }
41811
- let data = anchors.get(source);
41812
- if (!data) {
41813
- toJS.toJS(source, null, ctx);
41814
- data = anchors.get(source);
41815
- }
41816
- /* istanbul ignore if */
41817
- if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41818
- if (maxAliasCount >= 0) {
41819
- data.count += 1;
41820
- if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, source, anchors);
41821
- if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41822
- }
41823
- return data.res;
41874
+ return ctx.anchors.get(source).res;
41824
41875
  }
41825
41876
  toString(ctx, _onComment, _onChompKeep) {
41826
41877
  const src = `*${this.source}`;
@@ -41858,7 +41909,7 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41858
41909
  }));
41859
41910
 
41860
41911
  //#endregion
41861
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js
41912
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Scalar.js
41862
41913
  var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41863
41914
  var identity = require_identity();
41864
41915
  var Node = require_Node();
@@ -41886,7 +41937,7 @@ var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41886
41937
  }));
41887
41938
 
41888
41939
  //#endregion
41889
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js
41940
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/createNode.js
41890
41941
  var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41891
41942
  var Alias = require_Alias();
41892
41943
  var identity = require_identity();
@@ -41950,7 +42001,7 @@ var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41950
42001
  }));
41951
42002
 
41952
42003
  //#endregion
41953
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js
42004
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Collection.js
41954
42005
  var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
41955
42006
  var createNode = require_createNode();
41956
42007
  var identity = require_identity();
@@ -42072,7 +42123,7 @@ var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
42072
42123
  }));
42073
42124
 
42074
42125
  //#endregion
42075
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js
42126
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyComment.js
42076
42127
  var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
42077
42128
  /**
42078
42129
  * Stringifies a comment.
@@ -42093,7 +42144,7 @@ var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
42093
42144
  }));
42094
42145
 
42095
42146
  //#endregion
42096
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js
42147
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/foldFlowLines.js
42097
42148
  var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
42098
42149
  const FOLD_FLOW = "flow";
42099
42150
  const FOLD_BLOCK = "block";
@@ -42214,7 +42265,7 @@ var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
42214
42265
  }));
42215
42266
 
42216
42267
  //#endregion
42217
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js
42268
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyString.js
42218
42269
  var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
42219
42270
  var Scalar = require_Scalar();
42220
42271
  var foldFlowLines = require_foldFlowLines();
@@ -42439,7 +42490,7 @@ var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
42439
42490
  }));
42440
42491
 
42441
42492
  //#endregion
42442
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js
42493
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringify.js
42443
42494
  var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42444
42495
  var anchors = require_anchors();
42445
42496
  var identity = require_identity();
@@ -42548,7 +42599,7 @@ var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42548
42599
  }));
42549
42600
 
42550
42601
  //#endregion
42551
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js
42602
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyPair.js
42552
42603
  var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42553
42604
  var identity = require_identity();
42554
42605
  var Scalar = require_Scalar();
@@ -42646,7 +42697,7 @@ var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42646
42697
  }));
42647
42698
 
42648
42699
  //#endregion
42649
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/log.js
42700
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/log.js
42650
42701
  var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42651
42702
  var node_process$2 = __require$1("process");
42652
42703
  function debug(logLevel, ...messages) {
@@ -42663,7 +42714,7 @@ var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42663
42714
  }));
42664
42715
 
42665
42716
  //#endregion
42666
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42717
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42667
42718
  var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42668
42719
  var identity = require_identity();
42669
42720
  var Scalar = require_Scalar();
@@ -42707,7 +42758,7 @@ var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42707
42758
  }));
42708
42759
 
42709
42760
  //#endregion
42710
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js
42761
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/addPairToJSMap.js
42711
42762
  var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42712
42763
  var log = require_log();
42713
42764
  var merge = require_merge();
@@ -42759,7 +42810,7 @@ var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42759
42810
  }));
42760
42811
 
42761
42812
  //#endregion
42762
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js
42813
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Pair.js
42763
42814
  var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42764
42815
  var createNode = require_createNode();
42765
42816
  var stringifyPair = require_stringifyPair();
@@ -42795,7 +42846,7 @@ var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42795
42846
  }));
42796
42847
 
42797
42848
  //#endregion
42798
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js
42849
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyCollection.js
42799
42850
  var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42800
42851
  var identity = require_identity();
42801
42852
  var stringify = require_stringify$1();
@@ -42914,7 +42965,7 @@ var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42914
42965
  }));
42915
42966
 
42916
42967
  //#endregion
42917
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js
42968
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLMap.js
42918
42969
  var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42919
42970
  var stringifyCollection = require_stringifyCollection();
42920
42971
  var addPairToJSMap = require_addPairToJSMap();
@@ -43024,7 +43075,7 @@ var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
43024
43075
  }));
43025
43076
 
43026
43077
  //#endregion
43027
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js
43078
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/map.js
43028
43079
  var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
43029
43080
  var identity = require_identity();
43030
43081
  var YAMLMap = require_YAMLMap();
@@ -43043,7 +43094,7 @@ var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
43043
43094
  }));
43044
43095
 
43045
43096
  //#endregion
43046
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js
43097
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLSeq.js
43047
43098
  var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
43048
43099
  var createNode = require_createNode();
43049
43100
  var stringifyCollection = require_stringifyCollection();
@@ -43150,7 +43201,7 @@ var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
43150
43201
  }));
43151
43202
 
43152
43203
  //#endregion
43153
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js
43204
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/seq.js
43154
43205
  var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
43155
43206
  var identity = require_identity();
43156
43207
  var YAMLSeq = require_YAMLSeq();
@@ -43169,7 +43220,7 @@ var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
43169
43220
  }));
43170
43221
 
43171
43222
  //#endregion
43172
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js
43223
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/string.js
43173
43224
  var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
43174
43225
  var stringifyString = require_stringifyString();
43175
43226
  const string = {
@@ -43186,7 +43237,7 @@ var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
43186
43237
  }));
43187
43238
 
43188
43239
  //#endregion
43189
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js
43240
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/null.js
43190
43241
  var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
43191
43242
  var Scalar = require_Scalar();
43192
43243
  const nullTag = {
@@ -43202,7 +43253,7 @@ var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
43202
43253
  }));
43203
43254
 
43204
43255
  //#endregion
43205
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js
43256
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/bool.js
43206
43257
  var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43207
43258
  var Scalar = require_Scalar();
43208
43259
  const boolTag = {
@@ -43222,7 +43273,7 @@ var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43222
43273
  }));
43223
43274
 
43224
43275
  //#endregion
43225
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js
43276
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyNumber.js
43226
43277
  var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
43227
43278
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
43228
43279
  if (typeof value === "bigint") return String(value);
@@ -43244,7 +43295,7 @@ var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
43244
43295
  }));
43245
43296
 
43246
43297
  //#endregion
43247
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js
43298
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/float.js
43248
43299
  var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43249
43300
  var Scalar = require_Scalar();
43250
43301
  var stringifyNumber = require_stringifyNumber();
@@ -43287,7 +43338,7 @@ var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43287
43338
  }));
43288
43339
 
43289
43340
  //#endregion
43290
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js
43341
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/int.js
43291
43342
  var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43292
43343
  var stringifyNumber = require_stringifyNumber();
43293
43344
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -43329,7 +43380,7 @@ var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43329
43380
  }));
43330
43381
 
43331
43382
  //#endregion
43332
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js
43383
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/schema.js
43333
43384
  var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
43334
43385
  var map = require_map();
43335
43386
  var _null = require_null();
@@ -43355,7 +43406,7 @@ var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
43355
43406
  }));
43356
43407
 
43357
43408
  //#endregion
43358
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js
43409
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/json/schema.js
43359
43410
  var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43360
43411
  var Scalar = require_Scalar();
43361
43412
  var map = require_map();
@@ -43419,7 +43470,7 @@ var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
43419
43470
  }));
43420
43471
 
43421
43472
  //#endregion
43422
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js
43473
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/binary.js
43423
43474
  var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
43424
43475
  var node_buffer = __require$1("buffer");
43425
43476
  var Scalar = require_Scalar();
@@ -43477,7 +43528,7 @@ var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
43477
43528
  }));
43478
43529
 
43479
43530
  //#endregion
43480
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43531
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43481
43532
  var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43482
43533
  var identity = require_identity();
43483
43534
  var Pair = require_Pair();
@@ -43539,7 +43590,7 @@ var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43539
43590
  }));
43540
43591
 
43541
43592
  //#endregion
43542
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43593
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43543
43594
  var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43544
43595
  var identity = require_identity();
43545
43596
  var toJS = require_toJS();
@@ -43605,7 +43656,7 @@ var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43605
43656
  }));
43606
43657
 
43607
43658
  //#endregion
43608
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43659
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43609
43660
  var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43610
43661
  var Scalar = require_Scalar();
43611
43662
  function boolStringify({ value, source }, ctx) {
@@ -43633,7 +43684,7 @@ var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43633
43684
  }));
43634
43685
 
43635
43686
  //#endregion
43636
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js
43687
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/float.js
43637
43688
  var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43638
43689
  var Scalar = require_Scalar();
43639
43690
  var stringifyNumber = require_stringifyNumber();
@@ -43679,7 +43730,7 @@ var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43679
43730
  }));
43680
43731
 
43681
43732
  //#endregion
43682
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js
43733
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/int.js
43683
43734
  var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43684
43735
  var stringifyNumber = require_stringifyNumber();
43685
43736
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -43753,7 +43804,7 @@ var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43753
43804
  }));
43754
43805
 
43755
43806
  //#endregion
43756
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js
43807
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/set.js
43757
43808
  var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43758
43809
  var identity = require_identity();
43759
43810
  var Pair = require_Pair();
@@ -43823,7 +43874,7 @@ var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43823
43874
  }));
43824
43875
 
43825
43876
  //#endregion
43826
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43877
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43827
43878
  var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43828
43879
  var stringifyNumber = require_stringifyNumber();
43829
43880
  /** Internal types handle bigint as number, because TS can't figure it out. */
@@ -43907,7 +43958,7 @@ var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43907
43958
  }));
43908
43959
 
43909
43960
  //#endregion
43910
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43961
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43911
43962
  var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43912
43963
  var map = require_map();
43913
43964
  var _null = require_null();
@@ -43949,7 +44000,7 @@ var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43949
44000
  }));
43950
44001
 
43951
44002
  //#endregion
43952
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js
44003
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/tags.js
43953
44004
  var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
43954
44005
  var map = require_map();
43955
44006
  var _null = require_null();
@@ -44036,7 +44087,7 @@ var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
44036
44087
  }));
44037
44088
 
44038
44089
  //#endregion
44039
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js
44090
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/Schema.js
44040
44091
  var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
44041
44092
  var identity = require_identity();
44042
44093
  var map = require_map();
@@ -44066,7 +44117,7 @@ var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
44066
44117
  }));
44067
44118
 
44068
44119
  //#endregion
44069
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js
44120
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyDocument.js
44070
44121
  var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
44071
44122
  var identity = require_identity();
44072
44123
  var stringify = require_stringify$1();
@@ -44129,7 +44180,7 @@ var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
44129
44180
  }));
44130
44181
 
44131
44182
  //#endregion
44132
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js
44183
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/Document.js
44133
44184
  var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
44134
44185
  var Alias = require_Alias();
44135
44186
  var Collection = require_Collection();
@@ -44411,7 +44462,7 @@ var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
44411
44462
  }));
44412
44463
 
44413
44464
  //#endregion
44414
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/errors.js
44465
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/errors.js
44415
44466
  var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
44416
44467
  var YAMLError = class extends Error {
44417
44468
  constructor(name, pos, code, message) {
@@ -44465,7 +44516,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
44465
44516
  }));
44466
44517
 
44467
44518
  //#endregion
44468
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js
44519
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-props.js
44469
44520
  var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
44470
44521
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
44471
44522
  let spaceBefore = false;
@@ -44573,7 +44624,7 @@ var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
44573
44624
  }));
44574
44625
 
44575
44626
  //#endregion
44576
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js
44627
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-contains-newline.js
44577
44628
  var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) => {
44578
44629
  function containsNewline(key) {
44579
44630
  if (!key) return null;
@@ -44603,7 +44654,7 @@ var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) =>
44603
44654
  }));
44604
44655
 
44605
44656
  //#endregion
44606
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js
44657
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-flow-indent-check.js
44607
44658
  var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) => {
44608
44659
  var utilContainsNewline = require_util_contains_newline();
44609
44660
  function flowIndentCheck(indent, fc, onError) {
@@ -44616,7 +44667,7 @@ var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) =>
44616
44667
  }));
44617
44668
 
44618
44669
  //#endregion
44619
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js
44670
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-map-includes.js
44620
44671
  var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44621
44672
  var identity = require_identity();
44622
44673
  function mapIncludes(ctx, items, search) {
@@ -44629,7 +44680,7 @@ var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44629
44680
  }));
44630
44681
 
44631
44682
  //#endregion
44632
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js
44683
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-map.js
44633
44684
  var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44634
44685
  var Pair = require_Pair();
44635
44686
  var YAMLMap = require_YAMLMap();
@@ -44718,7 +44769,7 @@ var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44718
44769
  }));
44719
44770
 
44720
44771
  //#endregion
44721
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js
44772
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-seq.js
44722
44773
  var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44723
44774
  var YAMLSeq = require_YAMLSeq();
44724
44775
  var resolveProps = require_resolve_props();
@@ -44764,7 +44815,7 @@ var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44764
44815
  }));
44765
44816
 
44766
44817
  //#endregion
44767
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js
44818
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-end.js
44768
44819
  var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44769
44820
  function resolveEnd(end, offset, reqSpace, onError) {
44770
44821
  let comment = "";
@@ -44803,7 +44854,7 @@ var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44803
44854
  }));
44804
44855
 
44805
44856
  //#endregion
44806
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js
44857
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-collection.js
44807
44858
  var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44808
44859
  var identity = require_identity();
44809
44860
  var Pair = require_Pair();
@@ -44967,7 +45018,7 @@ var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) =
44967
45018
  }));
44968
45019
 
44969
45020
  //#endregion
44970
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js
45021
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-collection.js
44971
45022
  var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44972
45023
  var identity = require_identity();
44973
45024
  var Scalar = require_Scalar();
@@ -45020,7 +45071,7 @@ var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
45020
45071
  }));
45021
45072
 
45022
45073
  //#endregion
45023
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js
45074
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-scalar.js
45024
45075
  var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45025
45076
  var Scalar = require_Scalar();
45026
45077
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -45198,7 +45249,7 @@ var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45198
45249
  }));
45199
45250
 
45200
45251
  //#endregion
45201
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js
45252
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-scalar.js
45202
45253
  var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45203
45254
  var Scalar = require_Scalar();
45204
45255
  var resolveEnd = require_resolve_end();
@@ -45268,40 +45319,41 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45268
45319
  case "`": badChar = `reserved character ${source[0]}`;
45269
45320
  }
45270
45321
  if (badChar) onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`);
45271
- return foldLines(source);
45322
+ return unfoldLines(source);
45272
45323
  }
45273
45324
  function singleQuotedValue(source, onError) {
45274
45325
  if (source[source.length - 1] !== "'" || source.length === 1) onError(source.length, "MISSING_CHAR", "Missing closing 'quote");
45275
- return foldLines(source.slice(1, -1)).replace(/''/g, "'");
45326
+ return unfoldLines(source.slice(1, -1)).replace(/''/g, "'");
45276
45327
  }
45277
- function foldLines(source) {
45328
+ function unfoldLines(source) {
45329
+ const line = /(.*?)\r?\n/sy;
45330
+ let match = line.exec(source);
45331
+ if (!match) return source;
45278
45332
  /**
45279
- * The negative lookbehind here and in the `re` RegExp is to
45333
+ * The negative lookbehinds in these RegExps are to
45280
45334
  * prevent causing a polynomial search time in certain cases.
45281
45335
  *
45282
- * The try-catch is for Safari, which doesn't support this yet:
45336
+ * The try-catch is for Safari < 16.4 and other old browsers:
45283
45337
  * https://caniuse.com/js-regexp-lookbehind
45284
45338
  */
45285
- let first, line;
45339
+ let trimEnd, trimBoth;
45286
45340
  try {
45287
- first = new RegExp("(.*?)(?<![ ])[ ]*\r?\n", "sy");
45288
- line = new RegExp("[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?\n", "sy");
45341
+ trimEnd = new RegExp("(?<![ ])[ ]+$");
45342
+ trimBoth = new RegExp("^[ ]+|(?<![ ])[ ]+$", "g");
45289
45343
  } catch {
45290
- first = /(.*?)[ \t]*\r?\n/sy;
45291
- line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
45344
+ trimEnd = /[ \t]+$/;
45345
+ trimBoth = /^[ \t]+|[ \t]+$/g;
45292
45346
  }
45293
- let match = first.exec(source);
45294
- if (!match) return source;
45295
- let res = match[1];
45347
+ let res = match[1].replace(trimEnd, "");
45296
45348
  let sep = " ";
45297
- let pos = first.lastIndex;
45298
- line.lastIndex = pos;
45349
+ let pos = line.lastIndex;
45299
45350
  while (match = line.exec(source)) {
45300
- if (match[1] === "") {
45351
+ const lm = match[1].replace(trimBoth, "");
45352
+ if (lm === "") {
45301
45353
  if (sep === "\n") res += sep;
45302
45354
  else sep = "\n";
45303
45355
  } else {
45304
- res += sep + match[1];
45356
+ res += sep + lm;
45305
45357
  sep = " ";
45306
45358
  }
45307
45359
  pos = line.lastIndex;
@@ -45403,7 +45455,7 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45403
45455
  }));
45404
45456
 
45405
45457
  //#endregion
45406
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js
45458
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-scalar.js
45407
45459
  var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45408
45460
  var identity = require_identity();
45409
45461
  var Scalar = require_Scalar();
@@ -45465,7 +45517,7 @@ var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45465
45517
  }));
45466
45518
 
45467
45519
  //#endregion
45468
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js
45520
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-empty-scalar-position.js
45469
45521
  var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports) => {
45470
45522
  function emptyScalarPosition(offset, before, pos) {
45471
45523
  if (before) {
@@ -45493,7 +45545,7 @@ var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports
45493
45545
  }));
45494
45546
 
45495
45547
  //#endregion
45496
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js
45548
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-node.js
45497
45549
  var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45498
45550
  var Alias = require_Alias();
45499
45551
  var identity = require_identity();
@@ -45585,7 +45637,7 @@ var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45585
45637
  }));
45586
45638
 
45587
45639
  //#endregion
45588
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js
45640
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-doc.js
45589
45641
  var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45590
45642
  var Document = require_Document();
45591
45643
  var composeNode = require_compose_node();
@@ -45628,7 +45680,7 @@ var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45628
45680
  }));
45629
45681
 
45630
45682
  //#endregion
45631
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js
45683
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/composer.js
45632
45684
  var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45633
45685
  var node_process$1 = __require$1("process");
45634
45686
  var directives = require_directives();
@@ -45827,7 +45879,7 @@ var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45827
45879
  }));
45828
45880
 
45829
45881
  //#endregion
45830
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js
45882
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-scalar.js
45831
45883
  var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45832
45884
  var resolveBlockScalar = require_resolve_block_scalar();
45833
45885
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -46095,7 +46147,7 @@ var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
46095
46147
  }));
46096
46148
 
46097
46149
  //#endregion
46098
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js
46150
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-stringify.js
46099
46151
  var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
46100
46152
  /**
46101
46153
  * Stringify a CST document, token, or collection item
@@ -46147,7 +46199,7 @@ var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
46147
46199
  }));
46148
46200
 
46149
46201
  //#endregion
46150
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js
46202
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-visit.js
46151
46203
  var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
46152
46204
  const BREAK = Symbol("break visit");
46153
46205
  const SKIP = Symbol("skip children");
@@ -46239,7 +46291,7 @@ var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
46239
46291
  }));
46240
46292
 
46241
46293
  //#endregion
46242
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js
46294
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst.js
46243
46295
  var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
46244
46296
  var cstScalar = require_cst_scalar();
46245
46297
  var cstStringify = require_cst_stringify();
@@ -46319,7 +46371,7 @@ var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
46319
46371
  }));
46320
46372
 
46321
46373
  //#endregion
46322
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js
46374
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/lexer.js
46323
46375
  var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
46324
46376
  var cst = require_cst();
46325
46377
  function isEmpty(ch) {
@@ -46853,7 +46905,7 @@ var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
46853
46905
  }));
46854
46906
 
46855
46907
  //#endregion
46856
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js
46908
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/line-counter.js
46857
46909
  var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46858
46910
  /**
46859
46911
  * Tracks newlines during parsing in order to provide an efficient API for
@@ -46901,7 +46953,7 @@ var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46901
46953
  }));
46902
46954
 
46903
46955
  //#endregion
46904
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js
46956
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/parser.js
46905
46957
  var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
46906
46958
  var node_process = __require$1("process");
46907
46959
  var cst = require_cst();
@@ -47768,7 +47820,7 @@ var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
47768
47820
  }));
47769
47821
 
47770
47822
  //#endregion
47771
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/public-api.js
47823
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/public-api.js
47772
47824
  var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47773
47825
  var composer = require_composer();
47774
47826
  var Document = require_Document();
@@ -47858,7 +47910,7 @@ var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47858
47910
  }));
47859
47911
 
47860
47912
  //#endregion
47861
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js
47913
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/index.js
47862
47914
  var require_dist = /* @__PURE__ */ __commonJSMin(((exports) => {
47863
47915
  var composer = require_composer();
47864
47916
  var Document = require_Document();
@@ -56317,6 +56369,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
56317
56369
  ChangelogTransformer: () => ChangelogTransformer,
56318
56370
  ChangesetIOError: () => ChangesetIOError,
56319
56371
  ChangesetLinter: () => ChangesetLinter,
56372
+ ChangesetLogMode: () => ChangesetLogMode,
56320
56373
  ChangesetOptionsSchema: () => ChangesetOptionsSchema,
56321
56374
  ChangesetPreviewSchema: () => ChangesetPreviewSchema,
56322
56375
  ChangesetSchema: () => ChangesetSchema,
@@ -56403,6 +56456,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
56403
56456
  isPureDependencyChangeset: () => isPureDependencyChangeset,
56404
56457
  listPublishablePackageNames: () => listPublishablePackageNames,
56405
56458
  makeBranchAnalyzerTest: () => makeBranchAnalyzerTest,
56459
+ makeChangelogFunctions: () => makeChangelogFunctions,
56406
56460
  makeConfigInspectorTest: () => makeConfigInspectorTest,
56407
56461
  makeDepsRegenDefault: () => makeDepsRegenDefault,
56408
56462
  makeGitHubTest: () => makeGitHubTest,