@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.
@@ -34,11 +34,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
34
  enumerable: true
35
35
  }) : target, mod));
36
36
  //#endregion
37
- let _effected_templates = require("@effected/templates");
38
37
  let effect = require("effect");
38
+ let _effected_templates = require("@effected/templates");
39
+ let _effected_workspaces = require("@effected/workspaces");
39
40
  let node_path = require("node:path");
40
41
  node_path = __toESM(node_path, 1);
41
- let _effected_workspaces = require("@effected/workspaces");
42
42
  let node_fs_promises = require("node:fs/promises");
43
43
  node_fs_promises = __toESM(node_fs_promises, 1);
44
44
  let node_util = require("node:util");
@@ -79,7 +79,7 @@ let semver_functions_gt_js = require("semver/functions/gt.js");
79
79
  semver_functions_gt_js = __toESM(semver_functions_gt_js, 1);
80
80
  let semver_functions_inc_js = require("semver/functions/inc.js");
81
81
  semver_functions_inc_js = __toESM(semver_functions_inc_js, 1);
82
- //#region ../silk-effects/dist/dev/pkg/errors/ChangesetConfigError.js
82
+ //#region ../silk-core/dist/dev/pkg/errors/ChangesetConfigError.js
83
83
  /**
84
84
  * Raised when the `.changeset/config.json` file cannot be read or decoded.
85
85
  *
@@ -96,7 +96,441 @@ var ChangesetConfigError = class extends effect.Data.TaggedError("ChangesetConfi
96
96
  }
97
97
  };
98
98
  //#endregion
99
- //#region ../silk-effects/dist/dev/pkg/schemas/VersioningSchemas.js
99
+ //#region ../silk-core/dist/dev/pkg/errors/PublishTargetBindingError.js
100
+ /**
101
+ * Raised when publishability detection selects a directory that the package's
102
+ * `dist/prod/targets.json` binding does not describe.
103
+ *
104
+ * @remarks
105
+ * The bundler's prod build writes `targets.json` naming every byte-group
106
+ * directory it produced. Once that binding exists it is authoritative: the only
107
+ * directories whose bytes may be published are the ones it lists. A detector
108
+ * that returns anything else — most often `publishConfig.directory` pointing at
109
+ * a **dev** build, because silk mode was misdetected — is about to pack an
110
+ * unresolved workspace manifest and ship it to a registry.
111
+ *
112
+ * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
113
+ * dev manifest still carried `catalog:` specifiers, and the published package
114
+ * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
115
+ *
116
+ * @since 3.1.0
117
+ * @public
118
+ */
119
+ var PublishTargetBindingError = class extends effect.Data.TaggedError("PublishTargetBindingError") {
120
+ get message() {
121
+ 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.`;
122
+ }
123
+ };
124
+ //#endregion
125
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
126
+ /**
127
+ * GitHub's closing-keyword issue-reference grammar, as pure functions.
128
+ *
129
+ * @remarks
130
+ * GitHub links an issue to a pull request when the PR's description carries
131
+ * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
132
+ * that grammar in two distinct dialects, and this module models exactly those
133
+ * two — no service, no layer, nothing but strings in and values out:
134
+ *
135
+ * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
136
+ * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
137
+ * and **no colon**, because that is the spelling GitHub itself scans PR
138
+ * bodies for. This is the dialect a release pipeline harvests from commit
139
+ * subjects and PR descriptions.
140
+ * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
141
+ * the reference — `"Closes: #12"` — with an **optional colon**, because a
142
+ * generated references region writes one reference per line and a colon
143
+ * reads better there. GitHub does not require the colon; the region format
144
+ * allows it, so the parser must too. The dialects differ because their
145
+ * producers do: prose is written by humans for GitHub's scanner, the region
146
+ * is written by tooling for humans.
147
+ *
148
+ * Deliberately out of scope this round: cross-repo references
149
+ * (`owner/repo#N`) and full-URL references
150
+ * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
151
+ * neither dialect's consumers emit them yet, and guessing at their shape here
152
+ * would freeze an API nobody has driven.
153
+ */
154
+ /**
155
+ * The nine closing keywords GitHub documents, lowercased.
156
+ *
157
+ * @public
158
+ */
159
+ const CLOSING_KEYWORDS = [
160
+ "close",
161
+ "closes",
162
+ "closed",
163
+ "fix",
164
+ "fixes",
165
+ "fixed",
166
+ "resolve",
167
+ "resolves",
168
+ "resolved"
169
+ ];
170
+ /**
171
+ * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
172
+ * grammar cannot drift. Alternation order is safe: the regex engine backtracks
173
+ * through alternatives, so `close` matching inside `closes` fails at the
174
+ * mandatory `#`-introducer and retries the longer keyword.
175
+ */
176
+ const KEYWORDS = CLOSING_KEYWORDS.join("|");
177
+ new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
178
+ new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
179
+ //#endregion
180
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
181
+ /**
182
+ * The closing-list dialect: one whole line naming several issues at once.
183
+ *
184
+ * @remarks
185
+ * The third dialect, alongside the two in `IssueReferences`: after trimming,
186
+ * the **entire** line must be `<keyword>[:] <list>` — keyword
187
+ * case-insensitive (lowercased to canonical form in the result), colon
188
+ * optional, and the list one or more `#<digits>` items separated by `,`,
189
+ * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
190
+ * so an embedded newline cannot smuggle two lines past a parser whose
191
+ * contract is one — the same posture as the bare-line pattern. Any trailing
192
+ * content after the list rejects the line; duplicates are preserved in order,
193
+ * because whether `#1, #1` means one issue or two is the caller's business.
194
+ *
195
+ * Two keyword sets play here. {@link parseClosingList} accepts only the nine
196
+ * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
197
+ * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
198
+ * `refs`, `references`) and reports which set matched via
199
+ * {@link ReferenceList}'s `closing` flag.
200
+ *
201
+ * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
202
+ * line**, where `harvestIssueReferences` merely skips the one match. The
203
+ * asymmetry is deliberate: a harvest drops one reference out of running
204
+ * prose, but a list line is a single claim about a set of issues, and
205
+ * returning the parseable subset would misrepresent the line as claiming
206
+ * less than it does.
207
+ *
208
+ * Complexity posture: parsing is a single left-to-right character scan —
209
+ * this module contains **no regular expressions at all** — so worst-case
210
+ * time is linear in the line length by construction. There is no
211
+ * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
212
+ * and therefore no input truncation.
213
+ *
214
+ * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
215
+ * the same list grammar to the inline-in-prose posture — several lists on
216
+ * one line of running text — and {@link parseClosingLists} /
217
+ * {@link parseReferenceLists} apply the whole-line parsers per line of a
218
+ * multi-line text. All of them ride the same character scan; the no-regex
219
+ * promise above covers every export here.
220
+ */
221
+ /**
222
+ * The non-closing reference keywords the list dialect accepts, lowercased.
223
+ *
224
+ * @remarks
225
+ * GitHub does not act on these — they associate without closing — but a
226
+ * references region writes them, so the parser must read them.
227
+ *
228
+ * @public
229
+ */
230
+ const REFERENCE_KEYWORDS = [
231
+ "ref",
232
+ "refs",
233
+ "references"
234
+ ];
235
+ /**
236
+ * Both keyword tables ARE the exported constants — membership sets built from
237
+ * them once — so the constants and the grammar cannot drift.
238
+ */
239
+ const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
240
+ /** Membership test for reporting `closing`, widened once so no call casts. */
241
+ const CLOSING_SET = new Set(CLOSING_KEYWORDS);
242
+ const HASH = 35;
243
+ const COLON = 58;
244
+ const COMMA = 44;
245
+ /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
246
+ const isSpaceTab = (code) => code === 32 || code === 9;
247
+ const isDigit$2 = (code) => code >= 48 && code <= 57;
248
+ const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
249
+ /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
250
+ const skipSpaceTab = (line, from) => {
251
+ let index = from;
252
+ while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
253
+ return index;
254
+ };
255
+ /**
256
+ * One list item at exactly `from`: `#<digits>` and the index one past it.
257
+ * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
258
+ * silently rounded issue number, still carrying the index one past the digit
259
+ * run so a caller can skip the item's extent; the whole-line parsers reject
260
+ * on it and {@link harvestReferenceLists} abandons the entire candidate —
261
+ * see the module remarks for why a list never yields a partial reading.
262
+ * Anything that is not `#<digits>` at all is `undefined`.
263
+ */
264
+ const readItem = (line, from) => {
265
+ if (line.charCodeAt(from) !== HASH) return void 0;
266
+ const start = from + 1;
267
+ let index = start;
268
+ while (index < line.length && isDigit$2(line.charCodeAt(index))) index += 1;
269
+ if (index === start) return void 0;
270
+ const value = Number(line.slice(start, index));
271
+ return Number.isSafeInteger(value) ? {
272
+ kind: "item",
273
+ value,
274
+ next: index
275
+ } : {
276
+ kind: "unsafe",
277
+ next: index
278
+ };
279
+ };
280
+ /**
281
+ * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
282
+ * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
283
+ * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
284
+ * lowercase-only — the keyword head is case-insensitive, the separator is
285
+ * not. Returns the index where the next item must start, or `undefined` when
286
+ * no separator is present.
287
+ */
288
+ const scanSeparator = (line, from) => {
289
+ const afterLeading = skipSpaceTab(line, from);
290
+ if (line.charCodeAt(afterLeading) === COMMA) {
291
+ const afterComma = skipSpaceTab(line, afterLeading + 1);
292
+ if (line.startsWith("and", afterComma)) {
293
+ const afterAnd = skipSpaceTab(line, afterComma + 3);
294
+ if (afterAnd > afterComma + 3) return afterAnd;
295
+ }
296
+ return afterComma;
297
+ }
298
+ if (afterLeading > from && line.startsWith("and", afterLeading)) {
299
+ const afterAnd = skipSpaceTab(line, afterLeading + 3);
300
+ if (afterAnd > afterLeading + 3) return afterAnd;
301
+ }
302
+ };
303
+ /**
304
+ * The scan walk: item, then separator, then item, until the cursor stands
305
+ * exactly at the end of the string. Anything else — a malformed item, an
306
+ * unknown separator, trailing content, an unsafe issue number — is
307
+ * `undefined`, and the caller rejects the whole line.
308
+ */
309
+ const parseItems = (line, from) => {
310
+ const issueNumbers = [];
311
+ let cursor = from;
312
+ for (;;) {
313
+ const item = readItem(line, cursor);
314
+ if (item === void 0 || item.kind === "unsafe") return void 0;
315
+ issueNumbers.push(item.value);
316
+ cursor = item.next;
317
+ if (cursor === line.length) return issueNumbers;
318
+ const next = scanSeparator(line, cursor);
319
+ if (next === void 0) return void 0;
320
+ cursor = next;
321
+ }
322
+ };
323
+ /**
324
+ * The list a whole line carries under either keyword set, or `Option.none()`.
325
+ *
326
+ * @remarks
327
+ * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
328
+ * reports which set matched in the result's `closing` flag. Grammar,
329
+ * whole-line posture and the whole-line rejection of unsafe issue numbers
330
+ * are in the module remarks.
331
+ *
332
+ * @public
333
+ */
334
+ const parseReferenceList = (line) => {
335
+ const trimmed = line.trim();
336
+ let letters = 0;
337
+ while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
338
+ if (letters === 0) return effect.Option.none();
339
+ const keyword = trimmed.slice(0, letters).toLowerCase();
340
+ if (!ALL_KEYWORDS.has(keyword)) return effect.Option.none();
341
+ let cursor = letters;
342
+ if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
343
+ const afterWhitespace = skipSpaceTab(trimmed, cursor);
344
+ if (afterWhitespace === cursor) return effect.Option.none();
345
+ const issueNumbers = parseItems(trimmed, afterWhitespace);
346
+ if (issueNumbers === void 0) return effect.Option.none();
347
+ return effect.Option.some({
348
+ keyword,
349
+ closing: CLOSING_SET.has(keyword),
350
+ issueNumbers
351
+ });
352
+ };
353
+ /**
354
+ * Every reference list a text carries, line by line, across both postures.
355
+ *
356
+ * @remarks
357
+ * The trailer/prose interleave consumers otherwise hand-roll: each line is
358
+ * tried as a whole-line reference list first ({@link parseReferenceList} —
359
+ * colon-tolerant, per the line dialect), and only a line that is not one is
360
+ * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
361
+ * dialect). The preference means a colon-less trailer line contributes its
362
+ * list exactly once, never once per posture.
363
+ *
364
+ * Results carry no offsets, deliberately: this is the line-granular
365
+ * composition, and a consumer that needs spans uses
366
+ * {@link harvestReferenceLists} directly. Duplicates are preserved, in
367
+ * document order.
368
+ *
369
+ * @public
370
+ */
371
+ const collectReferenceLists = (text) => {
372
+ const lists = [];
373
+ for (const line of text.split("\n")) {
374
+ const whole = parseReferenceList(line);
375
+ if (effect.Option.isSome(whole)) {
376
+ lists.push(whole.value);
377
+ continue;
378
+ }
379
+ for (const harvested of harvestReferenceLists(line)) lists.push({
380
+ keyword: harvested.keyword,
381
+ closing: harvested.closing,
382
+ issueNumbers: harvested.issueNumbers
383
+ });
384
+ }
385
+ return lists;
386
+ };
387
+ /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
388
+ const isWordChar = (code) => isAsciiLetter(code) || isDigit$2(code) || code === 95;
389
+ /**
390
+ * The full JavaScript `\s` set, spelled as a predicate so the module keeps
391
+ * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
392
+ * Unicode space separators. Only the keyword→first-item gap of
393
+ * {@link harvestReferenceLists} admits this set — everything inside a list
394
+ * stays `[ \t]`, per the module remarks.
395
+ */
396
+ 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;
397
+ /**
398
+ * Every reference list found inline in `text`, in document order.
399
+ *
400
+ * @remarks
401
+ * The inline-in-prose posture generalized to lists:
402
+ * `Closes #123, Fixes #456` in one line of a commit body yields two
403
+ * single-item lists, where
404
+ * `harvestIssueReferences` reads only the first reference of each and the
405
+ * whole-line parsers read neither. The grammar per candidate:
406
+ *
407
+ * - The keyword is case-insensitive, drawn from either keyword set,
408
+ * lowercased to canonical form in the result, with `closing` reported by
409
+ * set membership. Word boundaries hold on both sides: the characters
410
+ * immediately before and after the keyword's letter run must not be
411
+ * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
412
+ * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
413
+ * belongs to the line dialects ({@link parseReferenceList} and the
414
+ * bare-line parser), so `closes: #1` inline yields nothing.
415
+ * - The keyword→first-item gap is any run of whitespace **including
416
+ * newlines**, mirroring the inline dialect's `\s+`.
417
+ * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
418
+ * whitespace only, so a list cannot continue past a newline — a later
419
+ * line makes its own claims.
420
+ * - Items are `#<digits>`; duplicates are preserved in order.
421
+ *
422
+ * A list ends at its last valid item: in `closes #1 and fixes #2` the
423
+ * ` and ` before `fixes` fails as a separator because what follows is not
424
+ * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
425
+ * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
426
+ * candidate — never a partial list, for the same reason
427
+ * {@link parseReferenceList} rejects the whole line — and scanning resumes
428
+ * after the candidate's scanned extent.
429
+ *
430
+ * Like everything in this module, the harvest is a single left-to-right
431
+ * character scan with no regular expressions, so time stays linear in the
432
+ * text length and no input is truncated.
433
+ *
434
+ * @public
435
+ */
436
+ const harvestReferenceLists = (text) => {
437
+ const lists = [];
438
+ let index = 0;
439
+ while (index < text.length) {
440
+ if (!isAsciiLetter(text.charCodeAt(index))) {
441
+ index += 1;
442
+ continue;
443
+ }
444
+ const runStart = index;
445
+ let runEnd = index + 1;
446
+ while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
447
+ if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
448
+ index = runEnd;
449
+ continue;
450
+ }
451
+ const keyword = text.slice(runStart, runEnd).toLowerCase();
452
+ if (!ALL_KEYWORDS.has(keyword)) {
453
+ index = runEnd;
454
+ continue;
455
+ }
456
+ let cursor = runEnd;
457
+ while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
458
+ const first = cursor === runEnd ? void 0 : readItem(text, cursor);
459
+ if (first === void 0) {
460
+ index = runEnd;
461
+ continue;
462
+ }
463
+ if (first.kind === "unsafe") {
464
+ index = first.next;
465
+ continue;
466
+ }
467
+ const issueNumbers = [first.value];
468
+ let end = first.next;
469
+ let unsafeNext;
470
+ for (;;) {
471
+ const next = scanSeparator(text, end);
472
+ if (next === void 0) break;
473
+ const item = readItem(text, next);
474
+ if (item === void 0) break;
475
+ if (item.kind === "unsafe") {
476
+ unsafeNext = item.next;
477
+ break;
478
+ }
479
+ issueNumbers.push(item.value);
480
+ end = item.next;
481
+ }
482
+ if (unsafeNext !== void 0) {
483
+ index = unsafeNext;
484
+ continue;
485
+ }
486
+ lists.push({
487
+ keyword,
488
+ closing: CLOSING_SET.has(keyword),
489
+ issueNumbers,
490
+ start: runStart,
491
+ end
492
+ });
493
+ index = end;
494
+ }
495
+ return lists;
496
+ };
497
+ //#endregion
498
+ //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
499
+ /**
500
+ * The projection table IS the totality proof: `Record` over the union of
501
+ * both keyword types makes a keyword added to either constant without an
502
+ * entry here fail to compile.
503
+ */
504
+ const FAMILIES = {
505
+ close: "close",
506
+ closes: "close",
507
+ closed: "close",
508
+ fix: "fix",
509
+ fixes: "fix",
510
+ fixed: "fix",
511
+ resolve: "resolve",
512
+ resolves: "resolve",
513
+ resolved: "resolve",
514
+ ref: "ref",
515
+ refs: "ref",
516
+ references: "ref"
517
+ };
518
+ /**
519
+ * The family a keyword belongs to.
520
+ *
521
+ * @remarks
522
+ * Total over both keyword sets by construction — see the module remarks for
523
+ * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
524
+ * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
525
+ * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
526
+ * the projection is downstream: categorized harvesters key maps by family,
527
+ * and each was hand-rolling this collapse.
528
+ *
529
+ * @public
530
+ */
531
+ const keywordFamily = (keyword) => FAMILIES[keyword];
532
+ //#endregion
533
+ //#region ../silk-core/dist/dev/pkg/schemas/VersioningSchemas.js
100
534
  /**
101
535
  * Configuration for how private packages are handled during versioning.
102
536
  *
@@ -168,7 +602,7 @@ const ChangesetConfigFile = effect.Schema.Struct({
168
602
  *
169
603
  * @remarks
170
604
  * Extends {@link (ChangesetConfigFile:type)} with a `_isSilk` marker flag that is automatically
171
- * set to `true`. Detected by {@link ChangesetConfigReader} when the `changelog` field
605
+ * set to `true`. Detected by `ChangesetConfigReader` when the `changelog` field
172
606
  * references `@savvy-web/changesets`.
173
607
  *
174
608
  * @since 0.1.0
@@ -179,6 +613,25 @@ const SilkChangesetConfigFile = effect.Schema.Struct({
179
613
  _isSilk: effect.Schema.Boolean.pipe(effect.Schema.withDecodingDefaultType(effect.Effect.succeed(true)), effect.Schema.withConstructorDefault(effect.Effect.succeed(true)))
180
614
  });
181
615
  //#endregion
616
+ //#region ../silk-core/dist/dev/pkg/utils/TrailingSlash.js
617
+ /**
618
+ * Trim trailing slashes from a string.
619
+ *
620
+ * @remarks
621
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
622
+ * unanchored at the start, so the engine retries the match from every position
623
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
624
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
625
+ *
626
+ * @since 0.1.0
627
+ * @public
628
+ */
629
+ const trimTrailingSlashes = (s) => {
630
+ let end = s.length;
631
+ while (end > 0 && s[end - 1] === "/") end -= 1;
632
+ return s.slice(0, end);
633
+ };
634
+ //#endregion
182
635
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfigReader.js
183
636
  /**
184
637
  * Substrings that identify a Silk changelog adapter entry in `.changeset/config.json`.
@@ -208,8 +661,8 @@ function isSilkChangelog(changelog) {
208
661
  *
209
662
  * @remarks
210
663
  * Automatically detects whether the config uses the Silk changelog adapter
211
- * (`@savvy-web/changesets`) and decodes as {@link (SilkChangesetConfigFile:type)} or the
212
- * standard {@link (ChangesetConfigFile:type)} accordingly.
664
+ * (`@savvy-web/changesets`) and decodes as `SilkChangesetConfigFile` or the
665
+ * standard `ChangesetConfigFile` accordingly.
213
666
  *
214
667
  * @example
215
668
  * ```typescript
@@ -287,32 +740,6 @@ var ChangesetConfigReader = class extends effect.Context.Service()("@savvy-web/s
287
740
  }));
288
741
  };
289
742
  //#endregion
290
- //#region ../silk-effects/dist/dev/pkg/errors/PublishTargetBindingError.js
291
- /**
292
- * Raised when publishability detection selects a directory that the package's
293
- * `dist/prod/targets.json` binding does not describe.
294
- *
295
- * @remarks
296
- * The bundler's prod build writes `targets.json` naming every byte-group
297
- * directory it produced. Once that binding exists it is authoritative: the only
298
- * directories whose bytes may be published are the ones it lists. A detector
299
- * that returns anything else — most often `publishConfig.directory` pointing at
300
- * a **dev** build, because silk mode was misdetected — is about to pack an
301
- * unresolved workspace manifest and ship it to a registry.
302
- *
303
- * That is the `yaml-effect@0.7.1` failure: detection picked `dist/dev/pkg`, the
304
- * dev manifest still carried `catalog:` specifiers, and the published package
305
- * was uninstallable (`EUNSUPPORTEDPROTOCOL`).
306
- *
307
- * @since 3.1.0
308
- * @public
309
- */
310
- var PublishTargetBindingError = class extends effect.Data.TaggedError("PublishTargetBindingError") {
311
- get message() {
312
- 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.`;
313
- }
314
- };
315
- //#endregion
316
743
  //#region ../silk-effects/dist/dev/pkg/services/ChangesetConfig.js
317
744
  const isSilk = (cfg) => "_isSilk" in cfg && cfg._isSilk === true;
318
745
  /**
@@ -389,22 +816,6 @@ var ChangesetConfig = class ChangesetConfig extends effect.Context.Service()("@s
389
816
  }));
390
817
  };
391
818
  //#endregion
392
- //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
393
- /**
394
- * Trim trailing slashes from a string.
395
- *
396
- * @remarks
397
- * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
398
- * unanchored at the start, so the engine retries the match from every position
399
- * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
400
- * Only a trailing run of slashes is removed; interior slash runs are untouched.
401
- */
402
- const trimTrailingSlashes = (s) => {
403
- let end = s.length;
404
- while (end > 0 && s[end - 1] === "/") end -= 1;
405
- return s.slice(0, end);
406
- };
407
- //#endregion
408
819
  //#region ../silk-effects/dist/dev/pkg/services/SilkPublishability.js
409
820
  const NPM_DEFAULT = "https://registry.npmjs.org/";
410
821
  /**
@@ -527,7 +938,7 @@ var SilkPublishability = class SilkPublishability {
527
938
  * directories it names. A directory outside the binding means detection did
528
939
  * not select the prod output — the `yaml-effect@0.7.1` shape, where a dev
529
940
  * manifest carrying `catalog:` specifiers was packed and published. Rather
530
- * than ship those bytes, fail with {@link PublishTargetBindingError}.
941
+ * than ship those bytes, fail with `PublishTargetBindingError`.
531
942
  *
532
943
  * Before the prod build runs there is no binding, and the detector's
533
944
  * placeholder directories are left alone.
@@ -2655,6 +3066,66 @@ function makeGitHubTest(responses) {
2655
3066
  } });
2656
3067
  }
2657
3068
  //#endregion
3069
+ //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
3070
+ /**
3071
+ * Warning output for changelog generation, parameterised by a
3072
+ * {@link ChangesetLogMode} reference instead of an ambient environment read.
3073
+ *
3074
+ * @remarks
3075
+ * This module is engine code shared by every front end, so it must not read
3076
+ * `process` — a `process.env` read here would bake one host's environment
3077
+ * into every other. The mode is a `Context.Reference` with a default of
3078
+ * `"stderr"`; a front end that knows it runs under GitHub Actions or a test
3079
+ * runner provides `"github"` or `"silent"` from its own `process.env` read.
3080
+ *
3081
+ * @packageDocumentation
3082
+ */
3083
+ /**
3084
+ * The reference that selects the {@link ChangesetLogModeValue}.
3085
+ *
3086
+ * @remarks
3087
+ * Defaults to `"stderr"` when no front end provides it, so a program that
3088
+ * never touches the reference still reports. Provide with
3089
+ * `Layer.succeed(ChangesetLogMode, "github")` or
3090
+ * `Effect.provideService(ChangesetLogMode, "silent")`.
3091
+ *
3092
+ * @example
3093
+ * ```typescript
3094
+ * import { Effect } from "effect";
3095
+ * import { Changesets } from "\@savvy-web/silk-effects";
3096
+ *
3097
+ * const mode = process.env.GITHUB_ACTIONS === "true" ? "github" : "stderr";
3098
+ * program.pipe(Effect.provideService(Changesets.ChangesetLogMode, mode));
3099
+ * ```
3100
+ *
3101
+ * @public
3102
+ */
3103
+ const ChangesetLogMode = effect.Context.Reference("@savvy-web/silk-effects/Changesets/ChangesetLogMode", { defaultValue: () => "stderr" });
3104
+ /**
3105
+ * Log a warning message according to the {@link ChangesetLogMode} in context.
3106
+ *
3107
+ * @param message - The warning message
3108
+ * @param args - Additional arguments (concatenated with a space in `"github"` mode)
3109
+ * @returns An `Effect` that never fails
3110
+ *
3111
+ * @internal
3112
+ */
3113
+ function logWarning(message, ...args) {
3114
+ return effect.Effect.gen(function* () {
3115
+ switch (yield* ChangesetLogMode) {
3116
+ case "silent": return;
3117
+ case "github": {
3118
+ const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
3119
+ console.warn(`::warning::${text}`);
3120
+ return;
3121
+ }
3122
+ case "stderr":
3123
+ console.warn(message, ...args);
3124
+ return;
3125
+ }
3126
+ });
3127
+ }
3128
+ //#endregion
2658
3129
  //#region ../silk-effects/dist/dev/pkg/changesets/schemas/primitives.js
2659
3130
  /**
2660
3131
  * Primitive reusable schemas for common constrained types.
@@ -3967,7 +4438,7 @@ function evaluateNode(node, depth) {
3967
4438
  //#region ../../node_modules/.pnpm/@effected+jsonc@0.11.0_effect@4.0.0-rc.115/node_modules/@effected/jsonc/internal/scanner.js
3968
4439
  const isWhitespace = (ch) => ch === 32 || ch === 9 || ch === 11 || ch === 12 || ch === 160 || ch === 65279;
3969
4440
  const isLineBreak$1 = (ch) => ch === 10 || ch === 13 || ch === 8232 || ch === 8233;
3970
- const isDigit$2 = (ch) => ch >= 48 && ch <= 57;
4441
+ const isDigit$1 = (ch) => ch >= 48 && ch <= 57;
3971
4442
  /**
3972
4443
  * Create a stateful {@link Scanner} for the given JSONC string.
3973
4444
  *
@@ -4072,31 +4543,31 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4072
4543
  if (text.charCodeAt(pos) === 45) pos++;
4073
4544
  if (text.charCodeAt(pos) === 48) pos++;
4074
4545
  else {
4075
- if (!isDigit$2(text.charCodeAt(pos))) {
4546
+ if (!isDigit$1(text.charCodeAt(pos))) {
4076
4547
  tokenError = "UnexpectedEndOfNumber";
4077
4548
  return text.substring(start, pos);
4078
4549
  }
4079
4550
  pos++;
4080
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4551
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4081
4552
  }
4082
4553
  if (pos < len && text.charCodeAt(pos) === 46) {
4083
4554
  pos++;
4084
- if (!isDigit$2(text.charCodeAt(pos))) {
4555
+ if (!isDigit$1(text.charCodeAt(pos))) {
4085
4556
  tokenError = "UnexpectedEndOfNumber";
4086
4557
  return text.substring(start, pos);
4087
4558
  }
4088
4559
  pos++;
4089
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4560
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4090
4561
  }
4091
4562
  if (pos < len && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {
4092
4563
  pos++;
4093
4564
  if (pos < len && (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)) pos++;
4094
- if (!isDigit$2(text.charCodeAt(pos))) {
4565
+ if (!isDigit$1(text.charCodeAt(pos))) {
4095
4566
  tokenError = "UnexpectedEndOfNumber";
4096
4567
  return text.substring(start, pos);
4097
4568
  }
4098
4569
  pos++;
4099
- while (pos < len && isDigit$2(text.charCodeAt(pos))) pos++;
4570
+ while (pos < len && isDigit$1(text.charCodeAt(pos))) pos++;
4100
4571
  }
4101
4572
  return text.substring(start, pos);
4102
4573
  };
@@ -4202,7 +4673,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4202
4673
  return token;
4203
4674
  }
4204
4675
  case 45:
4205
- if (pos + 1 < len && isDigit$2(text.charCodeAt(pos + 1))) {
4676
+ if (pos + 1 < len && isDigit$1(text.charCodeAt(pos + 1))) {
4206
4677
  tokenValue = scanNumber();
4207
4678
  token = "Number";
4208
4679
  return token;
@@ -4213,7 +4684,7 @@ const createScanner$1 = (text, ignoreTrivia = false) => {
4213
4684
  tokenError = "InvalidSymbol";
4214
4685
  return token;
4215
4686
  default:
4216
- if (isDigit$2(ch)) {
4687
+ if (isDigit$1(ch)) {
4217
4688
  tokenValue = scanNumber();
4218
4689
  token = "Number";
4219
4690
  return token;
@@ -30984,414 +31455,6 @@ function parseCommitMessage(message) {
30984
31455
  return { description: message };
30985
31456
  }
30986
31457
  //#endregion
30987
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/IssueReferences.js
30988
- /**
30989
- * GitHub's closing-keyword issue-reference grammar, as pure functions.
30990
- *
30991
- * @remarks
30992
- * GitHub links an issue to a pull request when the PR's description carries
30993
- * `<keyword> #<number>` for one of nine documented keywords. Consumers speak
30994
- * that grammar in two distinct dialects, and this module models exactly those
30995
- * two — no service, no layer, nothing but strings in and values out:
30996
- *
30997
- * - **Inline-in-prose** ({@link harvestIssueReferences}): a reference may appear anywhere in
30998
- * running text — `"fixes #12 and closes #13"` — with mandatory whitespace
30999
- * and **no colon**, because that is the spelling GitHub itself scans PR
31000
- * bodies for. This is the dialect a release pipeline harvests from commit
31001
- * subjects and PR descriptions.
31002
- * - **Bare-line** ({@link parseBareLineReference}): the whole line, after trimming, *is*
31003
- * the reference — `"Closes: #12"` — with an **optional colon**, because a
31004
- * generated references region writes one reference per line and a colon
31005
- * reads better there. GitHub does not require the colon; the region format
31006
- * allows it, so the parser must too. The dialects differ because their
31007
- * producers do: prose is written by humans for GitHub's scanner, the region
31008
- * is written by tooling for humans.
31009
- *
31010
- * Deliberately out of scope this round: cross-repo references
31011
- * (`owner/repo#N`) and full-URL references
31012
- * (`https://github.com/owner/repo/issues/N`). Both are real GitHub spellings;
31013
- * neither dialect's consumers emit them yet, and guessing at their shape here
31014
- * would freeze an API nobody has driven.
31015
- */
31016
- /**
31017
- * The nine closing keywords GitHub documents, lowercased.
31018
- *
31019
- * @public
31020
- */
31021
- const CLOSING_KEYWORDS = [
31022
- "close",
31023
- "closes",
31024
- "closed",
31025
- "fix",
31026
- "fixes",
31027
- "fixed",
31028
- "resolve",
31029
- "resolves",
31030
- "resolved"
31031
- ];
31032
- /**
31033
- * Both patterns derive from {@link CLOSING_KEYWORDS} so the constant and the
31034
- * grammar cannot drift. Alternation order is safe: the regex engine backtracks
31035
- * through alternatives, so `close` matching inside `closes` fails at the
31036
- * mandatory `#`-introducer and retries the longer keyword.
31037
- */
31038
- const KEYWORDS = CLOSING_KEYWORDS.join("|");
31039
- new RegExp(`\\b(${KEYWORDS})\\s+#(\\d+)`, "gi");
31040
- new RegExp(`^(${KEYWORDS}):?[ \\t]+#(\\d+)$`, "i");
31041
- //#endregion
31042
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/ClosingList.js
31043
- /**
31044
- * The closing-list dialect: one whole line naming several issues at once.
31045
- *
31046
- * @remarks
31047
- * The third dialect, alongside the two in `IssueReferences`: after trimming,
31048
- * the **entire** line must be `<keyword>[:] <list>` — keyword
31049
- * case-insensitive (lowercased to canonical form in the result), colon
31050
- * optional, and the list one or more `#<digits>` items separated by `,`,
31051
- * `and`, or the Oxford `, and`. Whitespace inside the line is `[ \t]` only,
31052
- * so an embedded newline cannot smuggle two lines past a parser whose
31053
- * contract is one — the same posture as the bare-line pattern. Any trailing
31054
- * content after the list rejects the line; duplicates are preserved in order,
31055
- * because whether `#1, #1` means one issue or two is the caller's business.
31056
- *
31057
- * Two keyword sets play here. {@link parseClosingList} accepts only the nine
31058
- * closing keywords and yields a {@link ClosingList}; {@link parseReferenceList}
31059
- * additionally accepts the non-closing {@link REFERENCE_KEYWORDS} (`ref`,
31060
- * `refs`, `references`) and reports which set matched via
31061
- * {@link ReferenceList}'s `closing` flag.
31062
- *
31063
- * An item whose digits exceed `Number.MAX_SAFE_INTEGER` rejects the **whole
31064
- * line**, where `harvestIssueReferences` merely skips the one match. The
31065
- * asymmetry is deliberate: a harvest drops one reference out of running
31066
- * prose, but a list line is a single claim about a set of issues, and
31067
- * returning the parseable subset would misrepresent the line as claiming
31068
- * less than it does.
31069
- *
31070
- * Complexity posture: parsing is a single left-to-right character scan —
31071
- * this module contains **no regular expressions at all** — so worst-case
31072
- * time is linear in the line length by construction. There is no
31073
- * backtracking engine to feed, no polynomial blow-up for a scanner to flag,
31074
- * and therefore no input truncation.
31075
- *
31076
- * Beyond the whole-line parsers, {@link harvestReferenceLists} generalizes
31077
- * the same list grammar to the inline-in-prose posture — several lists on
31078
- * one line of running text — and {@link parseClosingLists} /
31079
- * {@link parseReferenceLists} apply the whole-line parsers per line of a
31080
- * multi-line text. All of them ride the same character scan; the no-regex
31081
- * promise above covers every export here.
31082
- */
31083
- /**
31084
- * The non-closing reference keywords the list dialect accepts, lowercased.
31085
- *
31086
- * @remarks
31087
- * GitHub does not act on these — they associate without closing — but a
31088
- * references region writes them, so the parser must read them.
31089
- *
31090
- * @public
31091
- */
31092
- const REFERENCE_KEYWORDS = [
31093
- "ref",
31094
- "refs",
31095
- "references"
31096
- ];
31097
- /**
31098
- * Both keyword tables ARE the exported constants — membership sets built from
31099
- * them once — so the constants and the grammar cannot drift.
31100
- */
31101
- const ALL_KEYWORDS = /* @__PURE__ */ new Set([...CLOSING_KEYWORDS, ...REFERENCE_KEYWORDS]);
31102
- /** Membership test for reporting `closing`, widened once so no call casts. */
31103
- const CLOSING_SET = new Set(CLOSING_KEYWORDS);
31104
- const HASH = 35;
31105
- const COLON = 58;
31106
- const COMMA = 44;
31107
- /** `[ \t]` — the only whitespace the dialect admits, per the module remarks. */
31108
- const isSpaceTab = (code) => code === 32 || code === 9;
31109
- const isDigit$1 = (code) => code >= 48 && code <= 57;
31110
- const isAsciiLetter = (code) => code >= 65 && code <= 90 || code >= 97 && code <= 122;
31111
- /** The index after the run of `[ \t]` starting at `from` (possibly `from` itself). */
31112
- const skipSpaceTab = (line, from) => {
31113
- let index = from;
31114
- while (index < line.length && isSpaceTab(line.charCodeAt(index))) index += 1;
31115
- return index;
31116
- };
31117
- /**
31118
- * One list item at exactly `from`: `#<digits>` and the index one past it.
31119
- * Digits exceeding `Number.MAX_SAFE_INTEGER` report `"unsafe"` rather than a
31120
- * silently rounded issue number, still carrying the index one past the digit
31121
- * run so a caller can skip the item's extent; the whole-line parsers reject
31122
- * on it and {@link harvestReferenceLists} abandons the entire candidate —
31123
- * see the module remarks for why a list never yields a partial reading.
31124
- * Anything that is not `#<digits>` at all is `undefined`.
31125
- */
31126
- const readItem = (line, from) => {
31127
- if (line.charCodeAt(from) !== HASH) return void 0;
31128
- const start = from + 1;
31129
- let index = start;
31130
- while (index < line.length && isDigit$1(line.charCodeAt(index))) index += 1;
31131
- if (index === start) return void 0;
31132
- const value = Number(line.slice(start, index));
31133
- return Number.isSafeInteger(value) ? {
31134
- kind: "item",
31135
- value,
31136
- next: index
31137
- } : {
31138
- kind: "unsafe",
31139
- next: index
31140
- };
31141
- };
31142
- /**
31143
- * One separator at exactly `from`: a comma with optional surrounding `[ \t]`
31144
- * and an optional Oxford `and` (consumed only when its own trailing `[ \t]+`
31145
- * is present), or a bare `and` requiring `[ \t]+` on both sides. `and` is
31146
- * lowercase-only — the keyword head is case-insensitive, the separator is
31147
- * not. Returns the index where the next item must start, or `undefined` when
31148
- * no separator is present.
31149
- */
31150
- const scanSeparator = (line, from) => {
31151
- const afterLeading = skipSpaceTab(line, from);
31152
- if (line.charCodeAt(afterLeading) === COMMA) {
31153
- const afterComma = skipSpaceTab(line, afterLeading + 1);
31154
- if (line.startsWith("and", afterComma)) {
31155
- const afterAnd = skipSpaceTab(line, afterComma + 3);
31156
- if (afterAnd > afterComma + 3) return afterAnd;
31157
- }
31158
- return afterComma;
31159
- }
31160
- if (afterLeading > from && line.startsWith("and", afterLeading)) {
31161
- const afterAnd = skipSpaceTab(line, afterLeading + 3);
31162
- if (afterAnd > afterLeading + 3) return afterAnd;
31163
- }
31164
- };
31165
- /**
31166
- * The scan walk: item, then separator, then item, until the cursor stands
31167
- * exactly at the end of the string. Anything else — a malformed item, an
31168
- * unknown separator, trailing content, an unsafe issue number — is
31169
- * `undefined`, and the caller rejects the whole line.
31170
- */
31171
- const parseItems = (line, from) => {
31172
- const issueNumbers = [];
31173
- let cursor = from;
31174
- for (;;) {
31175
- const item = readItem(line, cursor);
31176
- if (item === void 0 || item.kind === "unsafe") return void 0;
31177
- issueNumbers.push(item.value);
31178
- cursor = item.next;
31179
- if (cursor === line.length) return issueNumbers;
31180
- const next = scanSeparator(line, cursor);
31181
- if (next === void 0) return void 0;
31182
- cursor = next;
31183
- }
31184
- };
31185
- /**
31186
- * The list a whole line carries under either keyword set, or `Option.none()`.
31187
- *
31188
- * @remarks
31189
- * Accepts the nine closing keywords plus {@link REFERENCE_KEYWORDS}, and
31190
- * reports which set matched in the result's `closing` flag. Grammar,
31191
- * whole-line posture and the whole-line rejection of unsafe issue numbers
31192
- * are in the module remarks.
31193
- *
31194
- * @public
31195
- */
31196
- const parseReferenceList = (line) => {
31197
- const trimmed = line.trim();
31198
- let letters = 0;
31199
- while (letters < trimmed.length && isAsciiLetter(trimmed.charCodeAt(letters))) letters += 1;
31200
- if (letters === 0) return effect.Option.none();
31201
- const keyword = trimmed.slice(0, letters).toLowerCase();
31202
- if (!ALL_KEYWORDS.has(keyword)) return effect.Option.none();
31203
- let cursor = letters;
31204
- if (trimmed.charCodeAt(cursor) === COLON) cursor += 1;
31205
- const afterWhitespace = skipSpaceTab(trimmed, cursor);
31206
- if (afterWhitespace === cursor) return effect.Option.none();
31207
- const issueNumbers = parseItems(trimmed, afterWhitespace);
31208
- if (issueNumbers === void 0) return effect.Option.none();
31209
- return effect.Option.some({
31210
- keyword,
31211
- closing: CLOSING_SET.has(keyword),
31212
- issueNumbers
31213
- });
31214
- };
31215
- /**
31216
- * Every reference list a text carries, line by line, across both postures.
31217
- *
31218
- * @remarks
31219
- * The trailer/prose interleave consumers otherwise hand-roll: each line is
31220
- * tried as a whole-line reference list first ({@link parseReferenceList} —
31221
- * colon-tolerant, per the line dialect), and only a line that is not one is
31222
- * harvested inline ({@link harvestReferenceLists} — no colon, per the inline
31223
- * dialect). The preference means a colon-less trailer line contributes its
31224
- * list exactly once, never once per posture.
31225
- *
31226
- * Results carry no offsets, deliberately: this is the line-granular
31227
- * composition, and a consumer that needs spans uses
31228
- * {@link harvestReferenceLists} directly. Duplicates are preserved, in
31229
- * document order.
31230
- *
31231
- * @public
31232
- */
31233
- const collectReferenceLists = (text) => {
31234
- const lists = [];
31235
- for (const line of text.split("\n")) {
31236
- const whole = parseReferenceList(line);
31237
- if (effect.Option.isSome(whole)) {
31238
- lists.push(whole.value);
31239
- continue;
31240
- }
31241
- for (const harvested of harvestReferenceLists(line)) lists.push({
31242
- keyword: harvested.keyword,
31243
- closing: harvested.closing,
31244
- issueNumbers: harvested.issueNumbers
31245
- });
31246
- }
31247
- return lists;
31248
- };
31249
- /** `[A-Za-z0-9_]` — the word-boundary alphabet the inline dialects use. */
31250
- const isWordChar = (code) => isAsciiLetter(code) || isDigit$1(code) || code === 95;
31251
- /**
31252
- * The full JavaScript `\s` set, spelled as a predicate so the module keeps
31253
- * its no-regex promise: ASCII whitespace, NEL-adjacent controls, and the
31254
- * Unicode space separators. Only the keyword→first-item gap of
31255
- * {@link harvestReferenceLists} admits this set — everything inside a list
31256
- * stays `[ \t]`, per the module remarks.
31257
- */
31258
- 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;
31259
- /**
31260
- * Every reference list found inline in `text`, in document order.
31261
- *
31262
- * @remarks
31263
- * The inline-in-prose posture generalized to lists:
31264
- * `Closes #123, Fixes #456` in one line of a commit body yields two
31265
- * single-item lists, where
31266
- * `harvestIssueReferences` reads only the first reference of each and the
31267
- * whole-line parsers read neither. The grammar per candidate:
31268
- *
31269
- * - The keyword is case-insensitive, drawn from either keyword set,
31270
- * lowercased to canonical form in the result, with `closing` reported by
31271
- * set membership. Word boundaries hold on both sides: the characters
31272
- * immediately before and after the keyword's letter run must not be
31273
- * `[A-Za-z0-9_]`, so `recloses #1` and `1closes #1` do not match.
31274
- * - **No colon** — exactly like `harvestIssueReferences`, the colon spelling
31275
- * belongs to the line dialects ({@link parseReferenceList} and the
31276
- * bare-line parser), so `closes: #1` inline yields nothing.
31277
- * - The keyword→first-item gap is any run of whitespace **including
31278
- * newlines**, mirroring the inline dialect's `\s+`.
31279
- * - List continuation uses the `,` / `and` / Oxford separators with `[ \t]`
31280
- * whitespace only, so a list cannot continue past a newline — a later
31281
- * line makes its own claims.
31282
- * - Items are `#<digits>`; duplicates are preserved in order.
31283
- *
31284
- * A list ends at its last valid item: in `closes #1 and fixes #2` the
31285
- * ` and ` before `fixes` fails as a separator because what follows is not
31286
- * `#`, so the text yields `closes: [1]` then `fixes: [2]`. An item past
31287
- * `Number.MAX_SAFE_INTEGER` anywhere in a candidate skips the **entire**
31288
- * candidate — never a partial list, for the same reason
31289
- * {@link parseReferenceList} rejects the whole line — and scanning resumes
31290
- * after the candidate's scanned extent.
31291
- *
31292
- * Like everything in this module, the harvest is a single left-to-right
31293
- * character scan with no regular expressions, so time stays linear in the
31294
- * text length and no input is truncated.
31295
- *
31296
- * @public
31297
- */
31298
- const harvestReferenceLists = (text) => {
31299
- const lists = [];
31300
- let index = 0;
31301
- while (index < text.length) {
31302
- if (!isAsciiLetter(text.charCodeAt(index))) {
31303
- index += 1;
31304
- continue;
31305
- }
31306
- const runStart = index;
31307
- let runEnd = index + 1;
31308
- while (runEnd < text.length && isAsciiLetter(text.charCodeAt(runEnd))) runEnd += 1;
31309
- if (runStart > 0 && isWordChar(text.charCodeAt(runStart - 1)) || runEnd < text.length && isWordChar(text.charCodeAt(runEnd))) {
31310
- index = runEnd;
31311
- continue;
31312
- }
31313
- const keyword = text.slice(runStart, runEnd).toLowerCase();
31314
- if (!ALL_KEYWORDS.has(keyword)) {
31315
- index = runEnd;
31316
- continue;
31317
- }
31318
- let cursor = runEnd;
31319
- while (cursor < text.length && isAnyWhitespace(text.charCodeAt(cursor))) cursor += 1;
31320
- const first = cursor === runEnd ? void 0 : readItem(text, cursor);
31321
- if (first === void 0) {
31322
- index = runEnd;
31323
- continue;
31324
- }
31325
- if (first.kind === "unsafe") {
31326
- index = first.next;
31327
- continue;
31328
- }
31329
- const issueNumbers = [first.value];
31330
- let end = first.next;
31331
- let unsafeNext;
31332
- for (;;) {
31333
- const next = scanSeparator(text, end);
31334
- if (next === void 0) break;
31335
- const item = readItem(text, next);
31336
- if (item === void 0) break;
31337
- if (item.kind === "unsafe") {
31338
- unsafeNext = item.next;
31339
- break;
31340
- }
31341
- issueNumbers.push(item.value);
31342
- end = item.next;
31343
- }
31344
- if (unsafeNext !== void 0) {
31345
- index = unsafeNext;
31346
- continue;
31347
- }
31348
- lists.push({
31349
- keyword,
31350
- closing: CLOSING_SET.has(keyword),
31351
- issueNumbers,
31352
- start: runStart,
31353
- end
31354
- });
31355
- index = end;
31356
- }
31357
- return lists;
31358
- };
31359
- //#endregion
31360
- //#region ../../node_modules/.pnpm/@effected+github-references@0.3.0_effect@4.0.0-rc.115/node_modules/@effected/github-references/KeywordFamily.js
31361
- /**
31362
- * The projection table IS the totality proof: `Record` over the union of
31363
- * both keyword types makes a keyword added to either constant without an
31364
- * entry here fail to compile.
31365
- */
31366
- const FAMILIES = {
31367
- close: "close",
31368
- closes: "close",
31369
- closed: "close",
31370
- fix: "fix",
31371
- fixes: "fix",
31372
- fixed: "fix",
31373
- resolve: "resolve",
31374
- resolves: "resolve",
31375
- resolved: "resolve",
31376
- ref: "ref",
31377
- refs: "ref",
31378
- references: "ref"
31379
- };
31380
- /**
31381
- * The family a keyword belongs to.
31382
- *
31383
- * @remarks
31384
- * Total over both keyword sets by construction — see the module remarks for
31385
- * why an explicit record beats a `startsWith` heuristic. `close`, `closes`
31386
- * and `closed` map to `"close"`; the `fix` and `resolve` conjugations
31387
- * likewise; `ref`, `refs` and `references` map to `"ref"`. The evidence for
31388
- * the projection is downstream: categorized harvesters key maps by family,
31389
- * and each was hand-rolling this collapse.
31390
- *
31391
- * @public
31392
- */
31393
- const keywordFamily = (keyword) => FAMILIES[keyword];
31394
- //#endregion
31395
31458
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/issue-refs.js
31396
31459
  /**
31397
31460
  * The output category each keyword family lands in.
@@ -31458,41 +31521,6 @@ function parseIssueReferences(commitMessage) {
31458
31521
  return references;
31459
31522
  }
31460
31523
  //#endregion
31461
- //#region ../silk-effects/dist/dev/pkg/changesets/utils/logger.js
31462
- /**
31463
- * Log a warning message.
31464
- *
31465
- * @remarks
31466
- * Detection order:
31467
- * 1. If `process.env.VITEST` is set, the message is silently discarded.
31468
- * 2. If `process.env.GITHUB_ACTIONS === "true"`, the message is emitted
31469
- * as a `::warning::` annotation.
31470
- * 3. Otherwise, `console.warn` is used.
31471
- *
31472
- * @param message - The warning message
31473
- * @param args - Additional arguments (concatenated with a space in CI mode)
31474
- *
31475
- * @example
31476
- * ```typescript
31477
- * import { logWarning } from "../utils/logger.js";
31478
- *
31479
- * logWarning("Duplicate dependency entry", "effect@3.19.0");
31480
- * // In CI: "::warning::Duplicate dependency entry effect@3.19.0"
31481
- * // Locally: console.warn("Duplicate dependency entry", "effect@3.19.0")
31482
- * ```
31483
- *
31484
- * @internal
31485
- */
31486
- function logWarning(message, ...args) {
31487
- /* v8 ignore start — environment-specific */
31488
- if (typeof process !== "undefined" && process.env.VITEST) return;
31489
- if (typeof process !== "undefined" && process.env.GITHUB_ACTIONS === "true") {
31490
- const text = args.length > 0 ? `${message} ${args.join(" ")}` : message;
31491
- console.warn(`::warning::${text}`);
31492
- } else console.warn(message, ...args);
31493
- /* v8 ignore stop */
31494
- }
31495
- //#endregion
31496
31524
  //#region ../silk-effects/dist/dev/pkg/changesets/utils/section-parser.js
31497
31525
  /**
31498
31526
  * Parse a changeset summary into structured sections.
@@ -31862,10 +31890,7 @@ function getReleaseLine(changeset, versionType, options) {
31862
31890
  if (changeset.commit) commitInfo = yield* (yield* GitHubService).getInfo({
31863
31891
  commit: changeset.commit,
31864
31892
  repo: options.repo
31865
- }).pipe(effect.Effect.flatMap((raw) => effect.Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(effect.Effect.map(() => raw), effect.Effect.catch(() => effect.Effect.succeed(raw)))), effect.Effect.catch((error) => {
31866
- logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error));
31867
- return effect.Effect.succeed(null);
31868
- }));
31893
+ }).pipe(effect.Effect.flatMap((raw) => effect.Schema.decodeUnknownEffect(GitHubInfoSchema)(raw).pipe(effect.Effect.map(() => raw), effect.Effect.catch(() => effect.Effect.succeed(raw)))), effect.Effect.catch((error) => logWarning("Could not fetch GitHub info for commit:", changeset.commit ?? "", String(error)).pipe(effect.Effect.as(null))));
31869
31894
  const parsed = parseChangesetSections(changeset.summary);
31870
31895
  const firstLine = changeset.summary.split("\n")[0];
31871
31896
  const commitMsg = parseCommitMessage(firstLine);
@@ -31960,29 +31985,48 @@ function getReleaseLine(changeset, versionType, options) {
31960
31985
  */
31961
31986
  const MainLayer = GitHubService.layer;
31962
31987
  /**
31963
- * Changesets API `ChangelogFunctions` implementation.
31988
+ * Build a Changesets `ChangelogFunctions` implementation bound to a warning
31989
+ * mode.
31964
31990
  *
31965
- * This object satisfies the `ChangelogFunctions` contract from
31966
- * `\@changesets/types`. Each method validates options, runs the
31967
- * corresponding Effect program with the merged service layer, and
31968
- * returns a `Promise<string>`.
31991
+ * @remarks
31992
+ * This module is engine code and reads no environment; the host that installs
31993
+ * the functions (the `\@savvy-web/changelog` package under the changesets CLI)
31994
+ * decides the mode from its own `process.env` and passes it here. Each method
31995
+ * validates options, runs the corresponding Effect program with the merged
31996
+ * service layer and the chosen {@link ChangesetLogMode}, and returns a
31997
+ * `Promise<string>`.
31969
31998
  *
31970
- * @internal
31999
+ * @param options - The warning mode to provide
32000
+ * @returns A `ChangelogFunctions` object for `.changeset/config.json`
32001
+ *
32002
+ * @public
31971
32003
  */
31972
- const changelogFunctions$1 = {
31973
- getReleaseLine: async (changeset, versionType, options) => {
31974
- const program = effect.Effect.gen(function* () {
32004
+ function makeChangelogFunctions(options = {}) {
32005
+ const run = (program) => {
32006
+ const provided = program.pipe(effect.Effect.provide(MainLayer));
32007
+ return effect.Effect.runPromise(options.logMode === void 0 ? provided : provided.pipe(effect.Effect.provideService(ChangesetLogMode, options.logMode)));
32008
+ };
32009
+ return {
32010
+ getReleaseLine: async (changeset, versionType, options) => run(effect.Effect.gen(function* () {
31975
32011
  return yield* getReleaseLine(changeset, versionType, yield* validateChangesetOptions(options));
31976
- });
31977
- return effect.Effect.runPromise(program.pipe(effect.Effect.provide(MainLayer)));
31978
- },
31979
- getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => {
31980
- const program = effect.Effect.gen(function* () {
32012
+ })),
32013
+ getDependencyReleaseLine: async (changesets, dependenciesUpdated, options) => run(effect.Effect.gen(function* () {
31981
32014
  return yield* getDependencyReleaseLine(changesets, dependenciesUpdated, yield* validateChangesetOptions(options));
31982
- });
31983
- return effect.Effect.runPromise(program.pipe(effect.Effect.provide(MainLayer)));
31984
- }
31985
- };
32015
+ }))
32016
+ };
32017
+ }
32018
+ /**
32019
+ * Changesets API `ChangelogFunctions` implementation with the default warning
32020
+ * mode (`"stderr"`).
32021
+ *
32022
+ * @remarks
32023
+ * Equivalent to `makeChangelogFunctions()`. A host that runs under GitHub
32024
+ * Actions or a test runner should call {@link makeChangelogFunctions} with the
32025
+ * mode it detects instead.
32026
+ *
32027
+ * @internal
32028
+ */
32029
+ const changelogFunctions$1 = makeChangelogFunctions();
31986
32030
  //#endregion
31987
32031
  //#region ../silk-effects/dist/dev/pkg/changesets/api/changelog.js
31988
32032
  /**
@@ -32087,10 +32131,13 @@ var Changelog = class {
32087
32131
  * @param versionType - The semantic version bump type (`"major"`, `"minor"`, or `"patch"`)
32088
32132
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32089
32133
  * Pass `null` to use defaults (no GitHub link resolution).
32134
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32135
+ * the host reads its own environment and passes `"github"` / `"silent"` — this
32136
+ * engine never does. See `ChangesetLogMode`.
32090
32137
  * @returns A promise resolving to the formatted markdown string
32091
32138
  */
32092
- static async formatReleaseLine(changeset, versionType, options) {
32093
- return changelogFunctions$1.getReleaseLine(changeset, versionType, options);
32139
+ static async formatReleaseLine(changeset, versionType, options, logMode) {
32140
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getReleaseLine(changeset, versionType, options);
32094
32141
  }
32095
32142
  /**
32096
32143
  * Format dependency update release lines into a markdown table.
@@ -32105,11 +32152,13 @@ var Changelog = class {
32105
32152
  * old/new versions and package metadata
32106
32153
  * @param options - Configuration object; must include `repo` in `"owner/repo"` format.
32107
32154
  * Pass `null` to use defaults.
32155
+ * @param logMode - How a failed GitHub lookup is reported (`"stderr"` when omitted);
32156
+ * see {@link Changelog.formatReleaseLine}.
32108
32157
  * @returns A promise resolving to the formatted markdown string containing
32109
32158
  * the dependency update table
32110
32159
  */
32111
- static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options) {
32112
- return changelogFunctions$1.getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32160
+ static async formatDependencyReleaseLine(changesets, dependenciesUpdated, options, logMode) {
32161
+ return makeChangelogFunctions(logMode === void 0 ? {} : { logMode }).getDependencyReleaseLine(changesets, dependenciesUpdated, options);
32113
32162
  }
32114
32163
  };
32115
32164
  //#endregion
@@ -40755,7 +40804,7 @@ function globSync(globInput, options) {
40755
40804
  return crawler ? formatPaths(crawler.sync(), relative) : [];
40756
40805
  }
40757
40806
  //#endregion
40758
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
40807
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/identity.js
40759
40808
  var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
40760
40809
  const ALIAS = Symbol.for("yaml.alias");
40761
40810
  const DOC = Symbol.for("yaml.document");
@@ -40805,7 +40854,7 @@ var require_identity = /* @__PURE__ */ __commonJSMin(((exports) => {
40805
40854
  exports.isSeq = isSeq;
40806
40855
  }));
40807
40856
  //#endregion
40808
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/visit.js
40857
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/visit.js
40809
40858
  var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
40810
40859
  var identity = require_identity();
40811
40860
  const BREAK = Symbol("break visit");
@@ -40996,7 +41045,7 @@ var require_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
40996
41045
  exports.visitAsync = visitAsync;
40997
41046
  }));
40998
41047
  //#endregion
40999
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js
41048
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/directives.js
41000
41049
  var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
41001
41050
  var identity = require_identity();
41002
41051
  var visit = require_visit();
@@ -41160,7 +41209,7 @@ var require_directives = /* @__PURE__ */ __commonJSMin(((exports) => {
41160
41209
  exports.Directives = Directives;
41161
41210
  }));
41162
41211
  //#endregion
41163
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js
41212
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/anchors.js
41164
41213
  var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41165
41214
  var identity = require_identity();
41166
41215
  var visit = require_visit();
@@ -41227,7 +41276,7 @@ var require_anchors = /* @__PURE__ */ __commonJSMin(((exports) => {
41227
41276
  exports.findNewAnchor = findNewAnchor;
41228
41277
  }));
41229
41278
  //#endregion
41230
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js
41279
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/applyReviver.js
41231
41280
  var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41232
41281
  /**
41233
41282
  * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,
@@ -41269,7 +41318,7 @@ var require_applyReviver = /* @__PURE__ */ __commonJSMin(((exports) => {
41269
41318
  exports.applyReviver = applyReviver;
41270
41319
  }));
41271
41320
  //#endregion
41272
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js
41321
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/toJS.js
41273
41322
  var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41274
41323
  var identity = require_identity();
41275
41324
  /**
@@ -41306,7 +41355,7 @@ var require_toJS = /* @__PURE__ */ __commonJSMin(((exports) => {
41306
41355
  exports.toJS = toJS;
41307
41356
  }));
41308
41357
  //#endregion
41309
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js
41358
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Node.js
41310
41359
  var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41311
41360
  var applyReviver = require_applyReviver();
41312
41361
  var identity = require_identity();
@@ -41340,7 +41389,7 @@ var require_Node = /* @__PURE__ */ __commonJSMin(((exports) => {
41340
41389
  exports.NodeBase = NodeBase;
41341
41390
  }));
41342
41391
  //#endregion
41343
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js
41392
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Alias.js
41344
41393
  var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41345
41394
  var anchors = require_anchors();
41346
41395
  var visit = require_visit();
@@ -41375,29 +41424,31 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41375
41424
  if (node === this) break;
41376
41425
  if (node.anchor === this.source) found = node;
41377
41426
  }
41427
+ if (found && ctx) {
41428
+ const { anchors, doc, maxAliasCount } = ctx;
41429
+ let data = anchors.get(found);
41430
+ if (!data) {
41431
+ toJS.toJS(found, null, ctx);
41432
+ data = anchors.get(found);
41433
+ }
41434
+ /* istanbul ignore if */
41435
+ if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41436
+ if (maxAliasCount >= 0) {
41437
+ data.count += 1;
41438
+ if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, found, anchors);
41439
+ if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41440
+ }
41441
+ }
41378
41442
  return found;
41379
41443
  }
41380
41444
  toJSON(_arg, ctx) {
41381
41445
  if (!ctx) return { source: this.source };
41382
- const { anchors, doc, maxAliasCount } = ctx;
41383
- const source = this.resolve(doc, ctx);
41446
+ const source = this.resolve(ctx.doc, ctx);
41384
41447
  if (!source) {
41385
41448
  const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
41386
41449
  throw new ReferenceError(msg);
41387
41450
  }
41388
- let data = anchors.get(source);
41389
- if (!data) {
41390
- toJS.toJS(source, null, ctx);
41391
- data = anchors.get(source);
41392
- }
41393
- /* istanbul ignore if */
41394
- if (data?.res === void 0) throw new ReferenceError("This should not happen: Alias anchor was not resolved?");
41395
- if (maxAliasCount >= 0) {
41396
- data.count += 1;
41397
- if (data.aliasCount === 0) data.aliasCount = getAliasCount(doc, source, anchors);
41398
- if (data.count * data.aliasCount > maxAliasCount) throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack");
41399
- }
41400
- return data.res;
41451
+ return ctx.anchors.get(source).res;
41401
41452
  }
41402
41453
  toString(ctx, _onComment, _onChompKeep) {
41403
41454
  const src = `*${this.source}`;
@@ -41434,7 +41485,7 @@ var require_Alias = /* @__PURE__ */ __commonJSMin(((exports) => {
41434
41485
  exports.Alias = Alias;
41435
41486
  }));
41436
41487
  //#endregion
41437
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js
41488
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Scalar.js
41438
41489
  var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41439
41490
  var identity = require_identity();
41440
41491
  var Node = require_Node();
@@ -41461,7 +41512,7 @@ var require_Scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
41461
41512
  exports.isScalarValue = isScalarValue;
41462
41513
  }));
41463
41514
  //#endregion
41464
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js
41515
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/createNode.js
41465
41516
  var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41466
41517
  var Alias = require_Alias();
41467
41518
  var identity = require_identity();
@@ -41524,7 +41575,7 @@ var require_createNode = /* @__PURE__ */ __commonJSMin(((exports) => {
41524
41575
  exports.createNode = createNode;
41525
41576
  }));
41526
41577
  //#endregion
41527
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js
41578
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Collection.js
41528
41579
  var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
41529
41580
  var createNode = require_createNode();
41530
41581
  var identity = require_identity();
@@ -41645,7 +41696,7 @@ var require_Collection = /* @__PURE__ */ __commonJSMin(((exports) => {
41645
41696
  exports.isEmptyPath = isEmptyPath;
41646
41697
  }));
41647
41698
  //#endregion
41648
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js
41699
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyComment.js
41649
41700
  var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
41650
41701
  /**
41651
41702
  * Stringifies a comment.
@@ -41665,7 +41716,7 @@ var require_stringifyComment = /* @__PURE__ */ __commonJSMin(((exports) => {
41665
41716
  exports.stringifyComment = stringifyComment;
41666
41717
  }));
41667
41718
  //#endregion
41668
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js
41719
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/foldFlowLines.js
41669
41720
  var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
41670
41721
  const FOLD_FLOW = "flow";
41671
41722
  const FOLD_BLOCK = "block";
@@ -41785,7 +41836,7 @@ var require_foldFlowLines = /* @__PURE__ */ __commonJSMin(((exports) => {
41785
41836
  exports.foldFlowLines = foldFlowLines;
41786
41837
  }));
41787
41838
  //#endregion
41788
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js
41839
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyString.js
41789
41840
  var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
41790
41841
  var Scalar = require_Scalar();
41791
41842
  var foldFlowLines = require_foldFlowLines();
@@ -42009,7 +42060,7 @@ var require_stringifyString = /* @__PURE__ */ __commonJSMin(((exports) => {
42009
42060
  exports.stringifyString = stringifyString;
42010
42061
  }));
42011
42062
  //#endregion
42012
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js
42063
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringify.js
42013
42064
  var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42014
42065
  var anchors = require_anchors();
42015
42066
  var identity = require_identity();
@@ -42117,7 +42168,7 @@ var require_stringify$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42117
42168
  exports.stringify = stringify;
42118
42169
  }));
42119
42170
  //#endregion
42120
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js
42171
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyPair.js
42121
42172
  var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42122
42173
  var identity = require_identity();
42123
42174
  var Scalar = require_Scalar();
@@ -42214,7 +42265,7 @@ var require_stringifyPair = /* @__PURE__ */ __commonJSMin(((exports) => {
42214
42265
  exports.stringifyPair = stringifyPair;
42215
42266
  }));
42216
42267
  //#endregion
42217
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/log.js
42268
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/log.js
42218
42269
  var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42219
42270
  var node_process$3 = require("process");
42220
42271
  function debug(logLevel, ...messages) {
@@ -42230,7 +42281,7 @@ var require_log = /* @__PURE__ */ __commonJSMin(((exports) => {
42230
42281
  exports.warn = warn;
42231
42282
  }));
42232
42283
  //#endregion
42233
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42284
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/merge.js
42234
42285
  var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42235
42286
  var identity = require_identity();
42236
42287
  var Scalar = require_Scalar();
@@ -42273,7 +42324,7 @@ var require_merge = /* @__PURE__ */ __commonJSMin(((exports) => {
42273
42324
  exports.merge = merge;
42274
42325
  }));
42275
42326
  //#endregion
42276
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js
42327
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/addPairToJSMap.js
42277
42328
  var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42278
42329
  var log = require_log();
42279
42330
  var merge = require_merge();
@@ -42324,7 +42375,7 @@ var require_addPairToJSMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42324
42375
  exports.addPairToJSMap = addPairToJSMap;
42325
42376
  }));
42326
42377
  //#endregion
42327
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js
42378
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/Pair.js
42328
42379
  var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42329
42380
  var createNode = require_createNode();
42330
42381
  var stringifyPair = require_stringifyPair();
@@ -42357,7 +42408,7 @@ var require_Pair = /* @__PURE__ */ __commonJSMin(((exports) => {
42357
42408
  exports.createPair = createPair;
42358
42409
  }));
42359
42410
  //#endregion
42360
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js
42411
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyCollection.js
42361
42412
  var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42362
42413
  var identity = require_identity();
42363
42414
  var stringify = require_stringify$1();
@@ -42475,7 +42526,7 @@ var require_stringifyCollection = /* @__PURE__ */ __commonJSMin(((exports) => {
42475
42526
  exports.stringifyCollection = stringifyCollection;
42476
42527
  }));
42477
42528
  //#endregion
42478
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js
42529
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLMap.js
42479
42530
  var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42480
42531
  var stringifyCollection = require_stringifyCollection();
42481
42532
  var addPairToJSMap = require_addPairToJSMap();
@@ -42584,7 +42635,7 @@ var require_YAMLMap = /* @__PURE__ */ __commonJSMin(((exports) => {
42584
42635
  exports.findPair = findPair;
42585
42636
  }));
42586
42637
  //#endregion
42587
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js
42638
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/map.js
42588
42639
  var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
42589
42640
  var identity = require_identity();
42590
42641
  var YAMLMap = require_YAMLMap();
@@ -42601,7 +42652,7 @@ var require_map = /* @__PURE__ */ __commonJSMin(((exports) => {
42601
42652
  };
42602
42653
  }));
42603
42654
  //#endregion
42604
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js
42655
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/YAMLSeq.js
42605
42656
  var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
42606
42657
  var createNode = require_createNode();
42607
42658
  var stringifyCollection = require_stringifyCollection();
@@ -42707,7 +42758,7 @@ var require_YAMLSeq = /* @__PURE__ */ __commonJSMin(((exports) => {
42707
42758
  exports.YAMLSeq = YAMLSeq;
42708
42759
  }));
42709
42760
  //#endregion
42710
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js
42761
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/seq.js
42711
42762
  var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
42712
42763
  var identity = require_identity();
42713
42764
  var YAMLSeq = require_YAMLSeq();
@@ -42724,7 +42775,7 @@ var require_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
42724
42775
  };
42725
42776
  }));
42726
42777
  //#endregion
42727
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js
42778
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/string.js
42728
42779
  var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
42729
42780
  var stringifyString = require_stringifyString();
42730
42781
  exports.string = {
@@ -42739,7 +42790,7 @@ var require_string = /* @__PURE__ */ __commonJSMin(((exports) => {
42739
42790
  };
42740
42791
  }));
42741
42792
  //#endregion
42742
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js
42793
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/common/null.js
42743
42794
  var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
42744
42795
  var Scalar = require_Scalar();
42745
42796
  const nullTag = {
@@ -42754,7 +42805,7 @@ var require_null = /* @__PURE__ */ __commonJSMin(((exports) => {
42754
42805
  exports.nullTag = nullTag;
42755
42806
  }));
42756
42807
  //#endregion
42757
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js
42808
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/bool.js
42758
42809
  var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42759
42810
  var Scalar = require_Scalar();
42760
42811
  const boolTag = {
@@ -42773,7 +42824,7 @@ var require_bool$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42773
42824
  exports.boolTag = boolTag;
42774
42825
  }));
42775
42826
  //#endregion
42776
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js
42827
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyNumber.js
42777
42828
  var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
42778
42829
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
42779
42830
  if (typeof value === "bigint") return String(value);
@@ -42794,7 +42845,7 @@ var require_stringifyNumber = /* @__PURE__ */ __commonJSMin(((exports) => {
42794
42845
  exports.stringifyNumber = stringifyNumber;
42795
42846
  }));
42796
42847
  //#endregion
42797
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js
42848
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/float.js
42798
42849
  var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42799
42850
  var Scalar = require_Scalar();
42800
42851
  var stringifyNumber = require_stringifyNumber();
@@ -42835,7 +42886,7 @@ var require_float$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42835
42886
  exports.floatNaN = floatNaN;
42836
42887
  }));
42837
42888
  //#endregion
42838
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js
42889
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/int.js
42839
42890
  var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42840
42891
  var stringifyNumber = require_stringifyNumber();
42841
42892
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -42876,7 +42927,7 @@ var require_int$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42876
42927
  exports.intOct = intOct;
42877
42928
  }));
42878
42929
  //#endregion
42879
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js
42930
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/core/schema.js
42880
42931
  var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
42881
42932
  var map = require_map();
42882
42933
  var _null = require_null();
@@ -42900,7 +42951,7 @@ var require_schema$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
42900
42951
  ];
42901
42952
  }));
42902
42953
  //#endregion
42903
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js
42954
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/json/schema.js
42904
42955
  var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42905
42956
  var Scalar = require_Scalar();
42906
42957
  var map = require_map();
@@ -42962,7 +43013,7 @@ var require_schema$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
42962
43013
  });
42963
43014
  }));
42964
43015
  //#endregion
42965
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js
43016
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/binary.js
42966
43017
  var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
42967
43018
  var node_buffer = require("buffer");
42968
43019
  var Scalar = require_Scalar();
@@ -43018,7 +43069,7 @@ var require_binary = /* @__PURE__ */ __commonJSMin(((exports) => {
43018
43069
  };
43019
43070
  }));
43020
43071
  //#endregion
43021
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43072
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
43022
43073
  var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43023
43074
  var identity = require_identity();
43024
43075
  var Pair = require_Pair();
@@ -43079,7 +43130,7 @@ var require_pairs = /* @__PURE__ */ __commonJSMin(((exports) => {
43079
43130
  exports.resolvePairs = resolvePairs;
43080
43131
  }));
43081
43132
  //#endregion
43082
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43133
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/omap.js
43083
43134
  var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43084
43135
  var identity = require_identity();
43085
43136
  var toJS = require_toJS();
@@ -43144,7 +43195,7 @@ var require_omap = /* @__PURE__ */ __commonJSMin(((exports) => {
43144
43195
  exports.omap = omap;
43145
43196
  }));
43146
43197
  //#endregion
43147
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43198
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/bool.js
43148
43199
  var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43149
43200
  var Scalar = require_Scalar();
43150
43201
  function boolStringify({ value, source }, ctx) {
@@ -43171,7 +43222,7 @@ var require_bool = /* @__PURE__ */ __commonJSMin(((exports) => {
43171
43222
  exports.trueTag = trueTag;
43172
43223
  }));
43173
43224
  //#endregion
43174
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js
43225
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/float.js
43175
43226
  var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43176
43227
  var Scalar = require_Scalar();
43177
43228
  var stringifyNumber = require_stringifyNumber();
@@ -43215,7 +43266,7 @@ var require_float = /* @__PURE__ */ __commonJSMin(((exports) => {
43215
43266
  exports.floatNaN = floatNaN;
43216
43267
  }));
43217
43268
  //#endregion
43218
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js
43269
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/int.js
43219
43270
  var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43220
43271
  var stringifyNumber = require_stringifyNumber();
43221
43272
  const intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -43288,7 +43339,7 @@ var require_int = /* @__PURE__ */ __commonJSMin(((exports) => {
43288
43339
  exports.intOct = intOct;
43289
43340
  }));
43290
43341
  //#endregion
43291
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js
43342
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/set.js
43292
43343
  var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43293
43344
  var identity = require_identity();
43294
43345
  var Pair = require_Pair();
@@ -43357,7 +43408,7 @@ var require_set = /* @__PURE__ */ __commonJSMin(((exports) => {
43357
43408
  exports.set = set;
43358
43409
  }));
43359
43410
  //#endregion
43360
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43411
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
43361
43412
  var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43362
43413
  var stringifyNumber = require_stringifyNumber();
43363
43414
  /** Internal types handle bigint as number, because TS can't figure it out. */
@@ -43440,7 +43491,7 @@ var require_timestamp = /* @__PURE__ */ __commonJSMin(((exports) => {
43440
43491
  exports.timestamp = timestamp;
43441
43492
  }));
43442
43493
  //#endregion
43443
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43494
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/yaml-1.1/schema.js
43444
43495
  var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43445
43496
  var map = require_map();
43446
43497
  var _null = require_null();
@@ -43480,7 +43531,7 @@ var require_schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43480
43531
  ];
43481
43532
  }));
43482
43533
  //#endregion
43483
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js
43534
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/tags.js
43484
43535
  var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
43485
43536
  var map = require_map();
43486
43537
  var _null = require_null();
@@ -43566,7 +43617,7 @@ var require_tags = /* @__PURE__ */ __commonJSMin(((exports) => {
43566
43617
  exports.getTags = getTags;
43567
43618
  }));
43568
43619
  //#endregion
43569
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js
43620
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/schema/Schema.js
43570
43621
  var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43571
43622
  var identity = require_identity();
43572
43623
  var map = require_map();
@@ -43594,7 +43645,7 @@ var require_Schema = /* @__PURE__ */ __commonJSMin(((exports) => {
43594
43645
  };
43595
43646
  }));
43596
43647
  //#endregion
43597
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js
43648
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/stringify/stringifyDocument.js
43598
43649
  var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
43599
43650
  var identity = require_identity();
43600
43651
  var stringify = require_stringify$1();
@@ -43656,7 +43707,7 @@ var require_stringifyDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
43656
43707
  exports.stringifyDocument = stringifyDocument;
43657
43708
  }));
43658
43709
  //#endregion
43659
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js
43710
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/doc/Document.js
43660
43711
  var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
43661
43712
  var Alias = require_Alias();
43662
43713
  var Collection = require_Collection();
@@ -43937,7 +43988,7 @@ var require_Document = /* @__PURE__ */ __commonJSMin(((exports) => {
43937
43988
  exports.Document = Document;
43938
43989
  }));
43939
43990
  //#endregion
43940
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/errors.js
43991
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/errors.js
43941
43992
  var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
43942
43993
  var YAMLError = class extends Error {
43943
43994
  constructor(name, pos, code, message) {
@@ -43990,7 +44041,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports) => {
43990
44041
  exports.prettifyError = prettifyError;
43991
44042
  }));
43992
44043
  //#endregion
43993
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js
44044
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-props.js
43994
44045
  var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
43995
44046
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
43996
44047
  let spaceBefore = false;
@@ -44097,7 +44148,7 @@ var require_resolve_props = /* @__PURE__ */ __commonJSMin(((exports) => {
44097
44148
  exports.resolveProps = resolveProps;
44098
44149
  }));
44099
44150
  //#endregion
44100
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js
44151
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-contains-newline.js
44101
44152
  var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) => {
44102
44153
  function containsNewline(key) {
44103
44154
  if (!key) return null;
@@ -44126,7 +44177,7 @@ var require_util_contains_newline = /* @__PURE__ */ __commonJSMin(((exports) =>
44126
44177
  exports.containsNewline = containsNewline;
44127
44178
  }));
44128
44179
  //#endregion
44129
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js
44180
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-flow-indent-check.js
44130
44181
  var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) => {
44131
44182
  var utilContainsNewline = require_util_contains_newline();
44132
44183
  function flowIndentCheck(indent, fc, onError) {
@@ -44138,7 +44189,7 @@ var require_util_flow_indent_check = /* @__PURE__ */ __commonJSMin(((exports) =>
44138
44189
  exports.flowIndentCheck = flowIndentCheck;
44139
44190
  }));
44140
44191
  //#endregion
44141
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js
44192
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-map-includes.js
44142
44193
  var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44143
44194
  var identity = require_identity();
44144
44195
  function mapIncludes(ctx, items, search) {
@@ -44150,7 +44201,7 @@ var require_util_map_includes = /* @__PURE__ */ __commonJSMin(((exports) => {
44150
44201
  exports.mapIncludes = mapIncludes;
44151
44202
  }));
44152
44203
  //#endregion
44153
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js
44204
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-map.js
44154
44205
  var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44155
44206
  var Pair = require_Pair();
44156
44207
  var YAMLMap = require_YAMLMap();
@@ -44238,7 +44289,7 @@ var require_resolve_block_map = /* @__PURE__ */ __commonJSMin(((exports) => {
44238
44289
  exports.resolveBlockMap = resolveBlockMap;
44239
44290
  }));
44240
44291
  //#endregion
44241
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js
44292
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-seq.js
44242
44293
  var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44243
44294
  var YAMLSeq = require_YAMLSeq();
44244
44295
  var resolveProps = require_resolve_props();
@@ -44283,7 +44334,7 @@ var require_resolve_block_seq = /* @__PURE__ */ __commonJSMin(((exports) => {
44283
44334
  exports.resolveBlockSeq = resolveBlockSeq;
44284
44335
  }));
44285
44336
  //#endregion
44286
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js
44337
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-end.js
44287
44338
  var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44288
44339
  function resolveEnd(end, offset, reqSpace, onError) {
44289
44340
  let comment = "";
@@ -44321,7 +44372,7 @@ var require_resolve_end = /* @__PURE__ */ __commonJSMin(((exports) => {
44321
44372
  exports.resolveEnd = resolveEnd;
44322
44373
  }));
44323
44374
  //#endregion
44324
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js
44375
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-collection.js
44325
44376
  var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44326
44377
  var identity = require_identity();
44327
44378
  var Pair = require_Pair();
@@ -44484,7 +44535,7 @@ var require_resolve_flow_collection = /* @__PURE__ */ __commonJSMin(((exports) =
44484
44535
  exports.resolveFlowCollection = resolveFlowCollection;
44485
44536
  }));
44486
44537
  //#endregion
44487
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js
44538
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-collection.js
44488
44539
  var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44489
44540
  var identity = require_identity();
44490
44541
  var Scalar = require_Scalar();
@@ -44536,7 +44587,7 @@ var require_compose_collection = /* @__PURE__ */ __commonJSMin(((exports) => {
44536
44587
  exports.composeCollection = composeCollection;
44537
44588
  }));
44538
44589
  //#endregion
44539
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js
44590
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-block-scalar.js
44540
44591
  var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44541
44592
  var Scalar = require_Scalar();
44542
44593
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -44713,7 +44764,7 @@ var require_resolve_block_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44713
44764
  exports.resolveBlockScalar = resolveBlockScalar;
44714
44765
  }));
44715
44766
  //#endregion
44716
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js
44767
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/resolve-flow-scalar.js
44717
44768
  var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44718
44769
  var Scalar = require_Scalar();
44719
44770
  var resolveEnd = require_resolve_end();
@@ -44783,40 +44834,41 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44783
44834
  case "`": badChar = `reserved character ${source[0]}`;
44784
44835
  }
44785
44836
  if (badChar) onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`);
44786
- return foldLines(source);
44837
+ return unfoldLines(source);
44787
44838
  }
44788
44839
  function singleQuotedValue(source, onError) {
44789
44840
  if (source[source.length - 1] !== "'" || source.length === 1) onError(source.length, "MISSING_CHAR", "Missing closing 'quote");
44790
- return foldLines(source.slice(1, -1)).replace(/''/g, "'");
44841
+ return unfoldLines(source.slice(1, -1)).replace(/''/g, "'");
44791
44842
  }
44792
- function foldLines(source) {
44843
+ function unfoldLines(source) {
44844
+ const line = /(.*?)\r?\n/sy;
44845
+ let match = line.exec(source);
44846
+ if (!match) return source;
44793
44847
  /**
44794
- * The negative lookbehind here and in the `re` RegExp is to
44848
+ * The negative lookbehinds in these RegExps are to
44795
44849
  * prevent causing a polynomial search time in certain cases.
44796
44850
  *
44797
- * The try-catch is for Safari, which doesn't support this yet:
44851
+ * The try-catch is for Safari < 16.4 and other old browsers:
44798
44852
  * https://caniuse.com/js-regexp-lookbehind
44799
44853
  */
44800
- let first, line;
44854
+ let trimEnd, trimBoth;
44801
44855
  try {
44802
- first = new RegExp("(.*?)(?<![ ])[ ]*\r?\n", "sy");
44803
- line = new RegExp("[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?\n", "sy");
44856
+ trimEnd = new RegExp("(?<![ ])[ ]+$");
44857
+ trimBoth = new RegExp("^[ ]+|(?<![ ])[ ]+$", "g");
44804
44858
  } catch {
44805
- first = /(.*?)[ \t]*\r?\n/sy;
44806
- line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
44859
+ trimEnd = /[ \t]+$/;
44860
+ trimBoth = /^[ \t]+|[ \t]+$/g;
44807
44861
  }
44808
- let match = first.exec(source);
44809
- if (!match) return source;
44810
- let res = match[1];
44862
+ let res = match[1].replace(trimEnd, "");
44811
44863
  let sep = " ";
44812
- let pos = first.lastIndex;
44813
- line.lastIndex = pos;
44864
+ let pos = line.lastIndex;
44814
44865
  while (match = line.exec(source)) {
44815
- if (match[1] === "") {
44866
+ const lm = match[1].replace(trimBoth, "");
44867
+ if (lm === "") {
44816
44868
  if (sep === "\n") res += sep;
44817
44869
  else sep = "\n";
44818
44870
  } else {
44819
- res += sep + match[1];
44871
+ res += sep + lm;
44820
44872
  sep = " ";
44821
44873
  }
44822
44874
  pos = line.lastIndex;
@@ -44917,7 +44969,7 @@ var require_resolve_flow_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44917
44969
  exports.resolveFlowScalar = resolveFlowScalar;
44918
44970
  }));
44919
44971
  //#endregion
44920
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js
44972
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-scalar.js
44921
44973
  var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44922
44974
  var identity = require_identity();
44923
44975
  var Scalar = require_Scalar();
@@ -44978,7 +45030,7 @@ var require_compose_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
44978
45030
  exports.composeScalar = composeScalar;
44979
45031
  }));
44980
45032
  //#endregion
44981
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js
45033
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/util-empty-scalar-position.js
44982
45034
  var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports) => {
44983
45035
  function emptyScalarPosition(offset, before, pos) {
44984
45036
  if (before) {
@@ -45005,7 +45057,7 @@ var require_util_empty_scalar_position = /* @__PURE__ */ __commonJSMin(((exports
45005
45057
  exports.emptyScalarPosition = emptyScalarPosition;
45006
45058
  }));
45007
45059
  //#endregion
45008
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js
45060
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-node.js
45009
45061
  var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45010
45062
  var Alias = require_Alias();
45011
45063
  var identity = require_identity();
@@ -45096,7 +45148,7 @@ var require_compose_node = /* @__PURE__ */ __commonJSMin(((exports) => {
45096
45148
  exports.composeNode = composeNode;
45097
45149
  }));
45098
45150
  //#endregion
45099
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js
45151
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/compose-doc.js
45100
45152
  var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45101
45153
  var Document = require_Document();
45102
45154
  var composeNode = require_compose_node();
@@ -45138,7 +45190,7 @@ var require_compose_doc = /* @__PURE__ */ __commonJSMin(((exports) => {
45138
45190
  exports.composeDoc = composeDoc;
45139
45191
  }));
45140
45192
  //#endregion
45141
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js
45193
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/compose/composer.js
45142
45194
  var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45143
45195
  var node_process$2 = require("process");
45144
45196
  var directives = require_directives();
@@ -45336,7 +45388,7 @@ var require_composer = /* @__PURE__ */ __commonJSMin(((exports) => {
45336
45388
  exports.Composer = Composer;
45337
45389
  }));
45338
45390
  //#endregion
45339
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js
45391
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-scalar.js
45340
45392
  var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45341
45393
  var resolveBlockScalar = require_resolve_block_scalar();
45342
45394
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -45603,7 +45655,7 @@ var require_cst_scalar = /* @__PURE__ */ __commonJSMin(((exports) => {
45603
45655
  exports.setScalarValue = setScalarValue;
45604
45656
  }));
45605
45657
  //#endregion
45606
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js
45658
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-stringify.js
45607
45659
  var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
45608
45660
  /**
45609
45661
  * Stringify a CST document, token, or collection item
@@ -45654,7 +45706,7 @@ var require_cst_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {
45654
45706
  exports.stringify = stringify;
45655
45707
  }));
45656
45708
  //#endregion
45657
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js
45709
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst-visit.js
45658
45710
  var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
45659
45711
  const BREAK = Symbol("break visit");
45660
45712
  const SKIP = Symbol("skip children");
@@ -45745,7 +45797,7 @@ var require_cst_visit = /* @__PURE__ */ __commonJSMin(((exports) => {
45745
45797
  exports.visit = visit;
45746
45798
  }));
45747
45799
  //#endregion
45748
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js
45800
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/cst.js
45749
45801
  var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
45750
45802
  var cstScalar = require_cst_scalar();
45751
45803
  var cstStringify = require_cst_stringify();
@@ -45824,7 +45876,7 @@ var require_cst = /* @__PURE__ */ __commonJSMin(((exports) => {
45824
45876
  exports.tokenType = tokenType;
45825
45877
  }));
45826
45878
  //#endregion
45827
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js
45879
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/lexer.js
45828
45880
  var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
45829
45881
  var cst = require_cst();
45830
45882
  function isEmpty(ch) {
@@ -46357,7 +46409,7 @@ var require_lexer = /* @__PURE__ */ __commonJSMin(((exports) => {
46357
46409
  exports.Lexer = Lexer;
46358
46410
  }));
46359
46411
  //#endregion
46360
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js
46412
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/line-counter.js
46361
46413
  var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46362
46414
  /**
46363
46415
  * Tracks newlines during parsing in order to provide an efficient API for
@@ -46404,7 +46456,7 @@ var require_line_counter = /* @__PURE__ */ __commonJSMin(((exports) => {
46404
46456
  exports.LineCounter = LineCounter;
46405
46457
  }));
46406
46458
  //#endregion
46407
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js
46459
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/parse/parser.js
46408
46460
  var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
46409
46461
  var node_process$1 = require("process");
46410
46462
  var cst = require_cst();
@@ -47270,7 +47322,7 @@ var require_parser = /* @__PURE__ */ __commonJSMin(((exports) => {
47270
47322
  exports.Parser = Parser;
47271
47323
  }));
47272
47324
  //#endregion
47273
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/public-api.js
47325
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/public-api.js
47274
47326
  var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47275
47327
  var composer = require_composer();
47276
47328
  var Document = require_Document();
@@ -47359,7 +47411,7 @@ var require_public_api = /* @__PURE__ */ __commonJSMin(((exports) => {
47359
47411
  exports.stringify = stringify;
47360
47412
  }));
47361
47413
  //#endregion
47362
- //#region ../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js
47414
+ //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/index.js
47363
47415
  var require_dist = /* @__PURE__ */ __commonJSMin(((exports) => {
47364
47416
  var composer = require_composer();
47365
47417
  var Document = require_Document();
@@ -55752,6 +55804,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
55752
55804
  ChangelogTransformer: () => ChangelogTransformer,
55753
55805
  ChangesetIOError: () => ChangesetIOError,
55754
55806
  ChangesetLinter: () => ChangesetLinter,
55807
+ ChangesetLogMode: () => ChangesetLogMode,
55755
55808
  ChangesetOptionsSchema: () => ChangesetOptionsSchema,
55756
55809
  ChangesetPreviewSchema: () => ChangesetPreviewSchema,
55757
55810
  ChangesetSchema: () => ChangesetSchema,
@@ -55838,6 +55891,7 @@ var changesets_exports = /* @__PURE__ */ __exportAll({
55838
55891
  isPureDependencyChangeset: () => isPureDependencyChangeset,
55839
55892
  listPublishablePackageNames: () => listPublishablePackageNames,
55840
55893
  makeBranchAnalyzerTest: () => makeBranchAnalyzerTest,
55894
+ makeChangelogFunctions: () => makeChangelogFunctions,
55841
55895
  makeConfigInspectorTest: () => makeConfigInspectorTest,
55842
55896
  makeDepsRegenDefault: () => makeDepsRegenDefault,
55843
55897
  makeGitHubTest: () => makeGitHubTest,