@savvy-web/silk 2.1.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changesets-changelog.cjs +43 -8
- package/changesets-changelog.d.cts +13 -1
- package/changesets-changelog.d.ts +13 -1
- package/changesets-changelog.js +43 -8
- package/changesets-markdownlint.cjs +43 -8
- package/changesets-markdownlint.d.cts +13 -1
- package/changesets-markdownlint.d.ts +13 -1
- package/changesets-markdownlint.js +43 -8
- package/package.json +5 -5
- package/tsconfig/node/dist/tsconfig.tsbuildinfo +1 -1
package/changesets-changelog.cjs
CHANGED
|
@@ -38738,15 +38738,16 @@ function makeShape$2(inspector) {
|
|
|
38738
38738
|
path,
|
|
38739
38739
|
status: "added"
|
|
38740
38740
|
}));
|
|
38741
|
+
const isOwnChangeset = (path) => path.startsWith(".changeset/") && path.endsWith(".md");
|
|
38741
38742
|
const seen = /* @__PURE__ */ new Set();
|
|
38742
38743
|
const rawEntries = [];
|
|
38743
38744
|
for (const e of diffEntries) {
|
|
38744
|
-
if (seen.has(e.path)) continue;
|
|
38745
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
38745
38746
|
seen.add(e.path);
|
|
38746
38747
|
rawEntries.push(e);
|
|
38747
38748
|
}
|
|
38748
38749
|
for (const e of untrackedEntries) {
|
|
38749
|
-
if (seen.has(e.path)) continue;
|
|
38750
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
38750
38751
|
seen.add(e.path);
|
|
38751
38752
|
rawEntries.push(e);
|
|
38752
38753
|
}
|
|
@@ -38879,6 +38880,32 @@ const DEP_TYPE_MAP = [
|
|
|
38879
38880
|
*/
|
|
38880
38881
|
const resolveOrRaw = (snapshot, dep, spec) => effect.Option.getOrElse(snapshot.resolve(dep, spec), () => spec);
|
|
38881
38882
|
/**
|
|
38883
|
+
* Drop no-net-change field moves: the same dependency removed from one field
|
|
38884
|
+
* and added to another with an equal resolved version (e.g. a dep promoted
|
|
38885
|
+
* from `devDependencies` to `dependencies`). A field reclassification is a
|
|
38886
|
+
* contract change worth release-note prose, not a version movement, so it
|
|
38887
|
+
* must not surface as an unrelated removed row plus an added row. Moves that
|
|
38888
|
+
* also change the resolved version keep both rows (the movement is real).
|
|
38889
|
+
*/
|
|
38890
|
+
const collapseFieldMoves = (rows) => {
|
|
38891
|
+
const dropped = /* @__PURE__ */ new Set();
|
|
38892
|
+
const byName = /* @__PURE__ */ new Map();
|
|
38893
|
+
for (const row of rows) {
|
|
38894
|
+
const group = byName.get(row.dependency);
|
|
38895
|
+
if (group) group.push(row);
|
|
38896
|
+
else byName.set(row.dependency, [row]);
|
|
38897
|
+
}
|
|
38898
|
+
for (const group of byName.values()) for (const removed of group) {
|
|
38899
|
+
if (removed.action !== "removed" || dropped.has(removed)) continue;
|
|
38900
|
+
const added = group.find((r) => r.action === "added" && !dropped.has(r) && r.type !== removed.type && r.to === removed.from);
|
|
38901
|
+
if (added) {
|
|
38902
|
+
dropped.add(removed);
|
|
38903
|
+
dropped.add(added);
|
|
38904
|
+
}
|
|
38905
|
+
}
|
|
38906
|
+
return rows.filter((r) => !dropped.has(r));
|
|
38907
|
+
};
|
|
38908
|
+
/**
|
|
38882
38909
|
* Diff two workspace snapshots and return per-package dependency-table rows,
|
|
38883
38910
|
* comparing already-resolved specifier values per side.
|
|
38884
38911
|
*
|
|
@@ -38934,10 +38961,11 @@ function computeWorkspaceDependencyDiffs(before, after) {
|
|
|
38934
38961
|
});
|
|
38935
38962
|
}
|
|
38936
38963
|
}
|
|
38937
|
-
|
|
38964
|
+
const collapsed = collapseFieldMoves(rows);
|
|
38965
|
+
if (collapsed.length > 0) result.push({
|
|
38938
38966
|
package: afterPkg.name,
|
|
38939
38967
|
relativePath: afterPkg.relativePath,
|
|
38940
|
-
rows: sortDependencyRows(
|
|
38968
|
+
rows: sortDependencyRows(collapsed)
|
|
38941
38969
|
});
|
|
38942
38970
|
}
|
|
38943
38971
|
return result;
|
|
@@ -39277,7 +39305,8 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39277
39305
|
fromRef = yield* gitMergeBase(resolvedCwd, baseBranch);
|
|
39278
39306
|
}
|
|
39279
39307
|
const rawDiffs = computeWorkspaceDependencyDiffs(yield* pit.at(fromRef, { cwd: resolvedCwd }), options.to ? yield* pit.at(options.to, { cwd: resolvedCwd }) : yield* pit.worktree({ cwd: resolvedCwd }));
|
|
39280
|
-
const
|
|
39308
|
+
const explicitTargets = /* @__PURE__ */ new Set([...options.packages ?? [], ...options.package ? [options.package] : []]);
|
|
39309
|
+
const excluded = new Set(options.exclude ?? []);
|
|
39281
39310
|
const livePackages = yield* discovery.listPackages(resolvedCwd);
|
|
39282
39311
|
const publishable = yield* listPublishablePackageNames(livePackages, resolvedCwd).pipe(effect.Effect.provide(provideDetector));
|
|
39283
39312
|
const versionPrivate = yield* config.versionPrivate(resolvedCwd);
|
|
@@ -39286,9 +39315,15 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39286
39315
|
if (yield* config.isIgnored(pkg.name, resolvedCwd)) continue;
|
|
39287
39316
|
if (publishable.has(pkg.name) || versionPrivate) inScope.add(pkg.name);
|
|
39288
39317
|
}
|
|
39289
|
-
const
|
|
39318
|
+
const activeTargets = /* @__PURE__ */ new Set();
|
|
39319
|
+
for (const name of explicitTargets) {
|
|
39320
|
+
if (excluded.has(name)) continue;
|
|
39321
|
+
if (yield* config.isIgnored(name, resolvedCwd)) continue;
|
|
39322
|
+
activeTargets.add(name);
|
|
39323
|
+
}
|
|
39324
|
+
const inScopeFor = (name) => explicitTargets.size > 0 ? activeTargets.has(name) : inScope.has(name) && !excluded.has(name);
|
|
39290
39325
|
const keepDevDeps = options.includeDevDeps === true;
|
|
39291
|
-
const scoped =
|
|
39326
|
+
const scoped = rawDiffs.filter((d) => inScopeFor(d.package));
|
|
39292
39327
|
const resolved = [];
|
|
39293
39328
|
for (const diff of scoped) {
|
|
39294
39329
|
const rows = keepDevDeps ? [...diff.rows] : diff.rows.filter((r) => r.type !== "devDependency");
|
|
@@ -39299,7 +39334,7 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39299
39334
|
}
|
|
39300
39335
|
const existingPure = yield* findPureDependencyChangesets(fs, changesetDir);
|
|
39301
39336
|
const skippedMixed = yield* findMixedDependencyChangesets(fs, changesetDir);
|
|
39302
|
-
const toDelete =
|
|
39337
|
+
const toDelete = existingPure.filter((p) => inScopeFor(p.package));
|
|
39303
39338
|
const chosenFilenames = /* @__PURE__ */ new Set();
|
|
39304
39339
|
const toWrite = [];
|
|
39305
39340
|
for (const diff of resolved) {
|
|
@@ -8176,8 +8176,20 @@ interface DepsRegenOptions {
|
|
|
8176
8176
|
readonly cwd: string;
|
|
8177
8177
|
/** Override the base branch used to compute the merge-base when `from` is omitted. */
|
|
8178
8178
|
readonly base?: string;
|
|
8179
|
-
/** Restrict regeneration to a single workspace package. */
|
|
8179
|
+
/** Restrict regeneration to a single workspace package. Unioned with {@link DepsRegenOptions.packages}. */
|
|
8180
8180
|
readonly package?: string;
|
|
8181
|
+
/**
|
|
8182
|
+
* Restrict regeneration to these workspace packages. Like `package`, an
|
|
8183
|
+
* explicit target bypasses the versionable gate but NOT the changeset
|
|
8184
|
+
* ignore list. Unioned with `package` when both are set.
|
|
8185
|
+
*/
|
|
8186
|
+
readonly packages?: ReadonlyArray<string>;
|
|
8187
|
+
/**
|
|
8188
|
+
* Drop these packages from scope entirely — no changesets are written for
|
|
8189
|
+
* them and none of their stale pure-dependency changesets are deleted.
|
|
8190
|
+
* Applies to both repo-wide and explicitly-targeted runs (exclude wins).
|
|
8191
|
+
*/
|
|
8192
|
+
readonly exclude?: ReadonlyArray<string>;
|
|
8181
8193
|
/**
|
|
8182
8194
|
* When `true`, retain `devDependency` rows (the `deps detect` path);
|
|
8183
8195
|
* when falsy (the `deps regen` default), drop them unconditionally.
|
|
@@ -8176,8 +8176,20 @@ interface DepsRegenOptions {
|
|
|
8176
8176
|
readonly cwd: string;
|
|
8177
8177
|
/** Override the base branch used to compute the merge-base when `from` is omitted. */
|
|
8178
8178
|
readonly base?: string;
|
|
8179
|
-
/** Restrict regeneration to a single workspace package. */
|
|
8179
|
+
/** Restrict regeneration to a single workspace package. Unioned with {@link DepsRegenOptions.packages}. */
|
|
8180
8180
|
readonly package?: string;
|
|
8181
|
+
/**
|
|
8182
|
+
* Restrict regeneration to these workspace packages. Like `package`, an
|
|
8183
|
+
* explicit target bypasses the versionable gate but NOT the changeset
|
|
8184
|
+
* ignore list. Unioned with `package` when both are set.
|
|
8185
|
+
*/
|
|
8186
|
+
readonly packages?: ReadonlyArray<string>;
|
|
8187
|
+
/**
|
|
8188
|
+
* Drop these packages from scope entirely — no changesets are written for
|
|
8189
|
+
* them and none of their stale pure-dependency changesets are deleted.
|
|
8190
|
+
* Applies to both repo-wide and explicitly-targeted runs (exclude wins).
|
|
8191
|
+
*/
|
|
8192
|
+
readonly exclude?: ReadonlyArray<string>;
|
|
8181
8193
|
/**
|
|
8182
8194
|
* When `true`, retain `devDependency` rows (the `deps detect` path);
|
|
8183
8195
|
* when falsy (the `deps regen` default), drop them unconditionally.
|
package/changesets-changelog.js
CHANGED
|
@@ -39182,15 +39182,16 @@ function makeShape$2(inspector) {
|
|
|
39182
39182
|
path,
|
|
39183
39183
|
status: "added"
|
|
39184
39184
|
}));
|
|
39185
|
+
const isOwnChangeset = (path) => path.startsWith(".changeset/") && path.endsWith(".md");
|
|
39185
39186
|
const seen = /* @__PURE__ */ new Set();
|
|
39186
39187
|
const rawEntries = [];
|
|
39187
39188
|
for (const e of diffEntries) {
|
|
39188
|
-
if (seen.has(e.path)) continue;
|
|
39189
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
39189
39190
|
seen.add(e.path);
|
|
39190
39191
|
rawEntries.push(e);
|
|
39191
39192
|
}
|
|
39192
39193
|
for (const e of untrackedEntries) {
|
|
39193
|
-
if (seen.has(e.path)) continue;
|
|
39194
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
39194
39195
|
seen.add(e.path);
|
|
39195
39196
|
rawEntries.push(e);
|
|
39196
39197
|
}
|
|
@@ -39325,6 +39326,32 @@ const DEP_TYPE_MAP = [
|
|
|
39325
39326
|
*/
|
|
39326
39327
|
const resolveOrRaw = (snapshot, dep, spec) => Option.getOrElse(snapshot.resolve(dep, spec), () => spec);
|
|
39327
39328
|
/**
|
|
39329
|
+
* Drop no-net-change field moves: the same dependency removed from one field
|
|
39330
|
+
* and added to another with an equal resolved version (e.g. a dep promoted
|
|
39331
|
+
* from `devDependencies` to `dependencies`). A field reclassification is a
|
|
39332
|
+
* contract change worth release-note prose, not a version movement, so it
|
|
39333
|
+
* must not surface as an unrelated removed row plus an added row. Moves that
|
|
39334
|
+
* also change the resolved version keep both rows (the movement is real).
|
|
39335
|
+
*/
|
|
39336
|
+
const collapseFieldMoves = (rows) => {
|
|
39337
|
+
const dropped = /* @__PURE__ */ new Set();
|
|
39338
|
+
const byName = /* @__PURE__ */ new Map();
|
|
39339
|
+
for (const row of rows) {
|
|
39340
|
+
const group = byName.get(row.dependency);
|
|
39341
|
+
if (group) group.push(row);
|
|
39342
|
+
else byName.set(row.dependency, [row]);
|
|
39343
|
+
}
|
|
39344
|
+
for (const group of byName.values()) for (const removed of group) {
|
|
39345
|
+
if (removed.action !== "removed" || dropped.has(removed)) continue;
|
|
39346
|
+
const added = group.find((r) => r.action === "added" && !dropped.has(r) && r.type !== removed.type && r.to === removed.from);
|
|
39347
|
+
if (added) {
|
|
39348
|
+
dropped.add(removed);
|
|
39349
|
+
dropped.add(added);
|
|
39350
|
+
}
|
|
39351
|
+
}
|
|
39352
|
+
return rows.filter((r) => !dropped.has(r));
|
|
39353
|
+
};
|
|
39354
|
+
/**
|
|
39328
39355
|
* Diff two workspace snapshots and return per-package dependency-table rows,
|
|
39329
39356
|
* comparing already-resolved specifier values per side.
|
|
39330
39357
|
*
|
|
@@ -39380,10 +39407,11 @@ function computeWorkspaceDependencyDiffs(before, after) {
|
|
|
39380
39407
|
});
|
|
39381
39408
|
}
|
|
39382
39409
|
}
|
|
39383
|
-
|
|
39410
|
+
const collapsed = collapseFieldMoves(rows);
|
|
39411
|
+
if (collapsed.length > 0) result.push({
|
|
39384
39412
|
package: afterPkg.name,
|
|
39385
39413
|
relativePath: afterPkg.relativePath,
|
|
39386
|
-
rows: sortDependencyRows(
|
|
39414
|
+
rows: sortDependencyRows(collapsed)
|
|
39387
39415
|
});
|
|
39388
39416
|
}
|
|
39389
39417
|
return result;
|
|
@@ -39726,7 +39754,8 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39726
39754
|
fromRef = yield* gitMergeBase(resolvedCwd, baseBranch);
|
|
39727
39755
|
}
|
|
39728
39756
|
const rawDiffs = computeWorkspaceDependencyDiffs(yield* pit.at(fromRef, { cwd: resolvedCwd }), options.to ? yield* pit.at(options.to, { cwd: resolvedCwd }) : yield* pit.worktree({ cwd: resolvedCwd }));
|
|
39729
|
-
const
|
|
39757
|
+
const explicitTargets = /* @__PURE__ */ new Set([...options.packages ?? [], ...options.package ? [options.package] : []]);
|
|
39758
|
+
const excluded = new Set(options.exclude ?? []);
|
|
39730
39759
|
const livePackages = yield* discovery.listPackages(resolvedCwd);
|
|
39731
39760
|
const publishable = yield* listPublishablePackageNames(livePackages, resolvedCwd).pipe(Effect.provide(provideDetector));
|
|
39732
39761
|
const versionPrivate = yield* config.versionPrivate(resolvedCwd);
|
|
@@ -39735,9 +39764,15 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39735
39764
|
if (yield* config.isIgnored(pkg.name, resolvedCwd)) continue;
|
|
39736
39765
|
if (publishable.has(pkg.name) || versionPrivate) inScope.add(pkg.name);
|
|
39737
39766
|
}
|
|
39738
|
-
const
|
|
39767
|
+
const activeTargets = /* @__PURE__ */ new Set();
|
|
39768
|
+
for (const name of explicitTargets) {
|
|
39769
|
+
if (excluded.has(name)) continue;
|
|
39770
|
+
if (yield* config.isIgnored(name, resolvedCwd)) continue;
|
|
39771
|
+
activeTargets.add(name);
|
|
39772
|
+
}
|
|
39773
|
+
const inScopeFor = (name) => explicitTargets.size > 0 ? activeTargets.has(name) : inScope.has(name) && !excluded.has(name);
|
|
39739
39774
|
const keepDevDeps = options.includeDevDeps === true;
|
|
39740
|
-
const scoped =
|
|
39775
|
+
const scoped = rawDiffs.filter((d) => inScopeFor(d.package));
|
|
39741
39776
|
const resolved = [];
|
|
39742
39777
|
for (const diff of scoped) {
|
|
39743
39778
|
const rows = keepDevDeps ? [...diff.rows] : diff.rows.filter((r) => r.type !== "devDependency");
|
|
@@ -39748,7 +39783,7 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39748
39783
|
}
|
|
39749
39784
|
const existingPure = yield* findPureDependencyChangesets(fs, changesetDir);
|
|
39750
39785
|
const skippedMixed = yield* findMixedDependencyChangesets(fs, changesetDir);
|
|
39751
|
-
const toDelete =
|
|
39786
|
+
const toDelete = existingPure.filter((p) => inScopeFor(p.package));
|
|
39752
39787
|
const chosenFilenames = /* @__PURE__ */ new Set();
|
|
39753
39788
|
const toWrite = [];
|
|
39754
39789
|
for (const diff of resolved) {
|
|
@@ -38742,15 +38742,16 @@ function makeShape$2(inspector) {
|
|
|
38742
38742
|
path,
|
|
38743
38743
|
status: "added"
|
|
38744
38744
|
}));
|
|
38745
|
+
const isOwnChangeset = (path) => path.startsWith(".changeset/") && path.endsWith(".md");
|
|
38745
38746
|
const seen = /* @__PURE__ */ new Set();
|
|
38746
38747
|
const rawEntries = [];
|
|
38747
38748
|
for (const e of diffEntries) {
|
|
38748
|
-
if (seen.has(e.path)) continue;
|
|
38749
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
38749
38750
|
seen.add(e.path);
|
|
38750
38751
|
rawEntries.push(e);
|
|
38751
38752
|
}
|
|
38752
38753
|
for (const e of untrackedEntries) {
|
|
38753
|
-
if (seen.has(e.path)) continue;
|
|
38754
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
38754
38755
|
seen.add(e.path);
|
|
38755
38756
|
rawEntries.push(e);
|
|
38756
38757
|
}
|
|
@@ -38883,6 +38884,32 @@ const DEP_TYPE_MAP = [
|
|
|
38883
38884
|
*/
|
|
38884
38885
|
const resolveOrRaw = (snapshot, dep, spec) => effect.Option.getOrElse(snapshot.resolve(dep, spec), () => spec);
|
|
38885
38886
|
/**
|
|
38887
|
+
* Drop no-net-change field moves: the same dependency removed from one field
|
|
38888
|
+
* and added to another with an equal resolved version (e.g. a dep promoted
|
|
38889
|
+
* from `devDependencies` to `dependencies`). A field reclassification is a
|
|
38890
|
+
* contract change worth release-note prose, not a version movement, so it
|
|
38891
|
+
* must not surface as an unrelated removed row plus an added row. Moves that
|
|
38892
|
+
* also change the resolved version keep both rows (the movement is real).
|
|
38893
|
+
*/
|
|
38894
|
+
const collapseFieldMoves = (rows) => {
|
|
38895
|
+
const dropped = /* @__PURE__ */ new Set();
|
|
38896
|
+
const byName = /* @__PURE__ */ new Map();
|
|
38897
|
+
for (const row of rows) {
|
|
38898
|
+
const group = byName.get(row.dependency);
|
|
38899
|
+
if (group) group.push(row);
|
|
38900
|
+
else byName.set(row.dependency, [row]);
|
|
38901
|
+
}
|
|
38902
|
+
for (const group of byName.values()) for (const removed of group) {
|
|
38903
|
+
if (removed.action !== "removed" || dropped.has(removed)) continue;
|
|
38904
|
+
const added = group.find((r) => r.action === "added" && !dropped.has(r) && r.type !== removed.type && r.to === removed.from);
|
|
38905
|
+
if (added) {
|
|
38906
|
+
dropped.add(removed);
|
|
38907
|
+
dropped.add(added);
|
|
38908
|
+
}
|
|
38909
|
+
}
|
|
38910
|
+
return rows.filter((r) => !dropped.has(r));
|
|
38911
|
+
};
|
|
38912
|
+
/**
|
|
38886
38913
|
* Diff two workspace snapshots and return per-package dependency-table rows,
|
|
38887
38914
|
* comparing already-resolved specifier values per side.
|
|
38888
38915
|
*
|
|
@@ -38938,10 +38965,11 @@ function computeWorkspaceDependencyDiffs(before, after) {
|
|
|
38938
38965
|
});
|
|
38939
38966
|
}
|
|
38940
38967
|
}
|
|
38941
|
-
|
|
38968
|
+
const collapsed = collapseFieldMoves(rows);
|
|
38969
|
+
if (collapsed.length > 0) result.push({
|
|
38942
38970
|
package: afterPkg.name,
|
|
38943
38971
|
relativePath: afterPkg.relativePath,
|
|
38944
|
-
rows: sortDependencyRows(
|
|
38972
|
+
rows: sortDependencyRows(collapsed)
|
|
38945
38973
|
});
|
|
38946
38974
|
}
|
|
38947
38975
|
return result;
|
|
@@ -39281,7 +39309,8 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39281
39309
|
fromRef = yield* gitMergeBase(resolvedCwd, baseBranch);
|
|
39282
39310
|
}
|
|
39283
39311
|
const rawDiffs = computeWorkspaceDependencyDiffs(yield* pit.at(fromRef, { cwd: resolvedCwd }), options.to ? yield* pit.at(options.to, { cwd: resolvedCwd }) : yield* pit.worktree({ cwd: resolvedCwd }));
|
|
39284
|
-
const
|
|
39312
|
+
const explicitTargets = /* @__PURE__ */ new Set([...options.packages ?? [], ...options.package ? [options.package] : []]);
|
|
39313
|
+
const excluded = new Set(options.exclude ?? []);
|
|
39285
39314
|
const livePackages = yield* discovery.listPackages(resolvedCwd);
|
|
39286
39315
|
const publishable = yield* listPublishablePackageNames(livePackages, resolvedCwd).pipe(effect.Effect.provide(provideDetector));
|
|
39287
39316
|
const versionPrivate = yield* config.versionPrivate(resolvedCwd);
|
|
@@ -39290,9 +39319,15 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39290
39319
|
if (yield* config.isIgnored(pkg.name, resolvedCwd)) continue;
|
|
39291
39320
|
if (publishable.has(pkg.name) || versionPrivate) inScope.add(pkg.name);
|
|
39292
39321
|
}
|
|
39293
|
-
const
|
|
39322
|
+
const activeTargets = /* @__PURE__ */ new Set();
|
|
39323
|
+
for (const name of explicitTargets) {
|
|
39324
|
+
if (excluded.has(name)) continue;
|
|
39325
|
+
if (yield* config.isIgnored(name, resolvedCwd)) continue;
|
|
39326
|
+
activeTargets.add(name);
|
|
39327
|
+
}
|
|
39328
|
+
const inScopeFor = (name) => explicitTargets.size > 0 ? activeTargets.has(name) : inScope.has(name) && !excluded.has(name);
|
|
39294
39329
|
const keepDevDeps = options.includeDevDeps === true;
|
|
39295
|
-
const scoped =
|
|
39330
|
+
const scoped = rawDiffs.filter((d) => inScopeFor(d.package));
|
|
39296
39331
|
const resolved = [];
|
|
39297
39332
|
for (const diff of scoped) {
|
|
39298
39333
|
const rows = keepDevDeps ? [...diff.rows] : diff.rows.filter((r) => r.type !== "devDependency");
|
|
@@ -39303,7 +39338,7 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39303
39338
|
}
|
|
39304
39339
|
const existingPure = yield* findPureDependencyChangesets(fs, changesetDir);
|
|
39305
39340
|
const skippedMixed = yield* findMixedDependencyChangesets(fs, changesetDir);
|
|
39306
|
-
const toDelete =
|
|
39341
|
+
const toDelete = existingPure.filter((p) => inScopeFor(p.package));
|
|
39307
39342
|
const chosenFilenames = /* @__PURE__ */ new Set();
|
|
39308
39343
|
const toWrite = [];
|
|
39309
39344
|
for (const diff of resolved) {
|
|
@@ -8176,8 +8176,20 @@ interface DepsRegenOptions {
|
|
|
8176
8176
|
readonly cwd: string;
|
|
8177
8177
|
/** Override the base branch used to compute the merge-base when `from` is omitted. */
|
|
8178
8178
|
readonly base?: string;
|
|
8179
|
-
/** Restrict regeneration to a single workspace package. */
|
|
8179
|
+
/** Restrict regeneration to a single workspace package. Unioned with {@link DepsRegenOptions.packages}. */
|
|
8180
8180
|
readonly package?: string;
|
|
8181
|
+
/**
|
|
8182
|
+
* Restrict regeneration to these workspace packages. Like `package`, an
|
|
8183
|
+
* explicit target bypasses the versionable gate but NOT the changeset
|
|
8184
|
+
* ignore list. Unioned with `package` when both are set.
|
|
8185
|
+
*/
|
|
8186
|
+
readonly packages?: ReadonlyArray<string>;
|
|
8187
|
+
/**
|
|
8188
|
+
* Drop these packages from scope entirely — no changesets are written for
|
|
8189
|
+
* them and none of their stale pure-dependency changesets are deleted.
|
|
8190
|
+
* Applies to both repo-wide and explicitly-targeted runs (exclude wins).
|
|
8191
|
+
*/
|
|
8192
|
+
readonly exclude?: ReadonlyArray<string>;
|
|
8181
8193
|
/**
|
|
8182
8194
|
* When `true`, retain `devDependency` rows (the `deps detect` path);
|
|
8183
8195
|
* when falsy (the `deps regen` default), drop them unconditionally.
|
|
@@ -8176,8 +8176,20 @@ interface DepsRegenOptions {
|
|
|
8176
8176
|
readonly cwd: string;
|
|
8177
8177
|
/** Override the base branch used to compute the merge-base when `from` is omitted. */
|
|
8178
8178
|
readonly base?: string;
|
|
8179
|
-
/** Restrict regeneration to a single workspace package. */
|
|
8179
|
+
/** Restrict regeneration to a single workspace package. Unioned with {@link DepsRegenOptions.packages}. */
|
|
8180
8180
|
readonly package?: string;
|
|
8181
|
+
/**
|
|
8182
|
+
* Restrict regeneration to these workspace packages. Like `package`, an
|
|
8183
|
+
* explicit target bypasses the versionable gate but NOT the changeset
|
|
8184
|
+
* ignore list. Unioned with `package` when both are set.
|
|
8185
|
+
*/
|
|
8186
|
+
readonly packages?: ReadonlyArray<string>;
|
|
8187
|
+
/**
|
|
8188
|
+
* Drop these packages from scope entirely — no changesets are written for
|
|
8189
|
+
* them and none of their stale pure-dependency changesets are deleted.
|
|
8190
|
+
* Applies to both repo-wide and explicitly-targeted runs (exclude wins).
|
|
8191
|
+
*/
|
|
8192
|
+
readonly exclude?: ReadonlyArray<string>;
|
|
8181
8193
|
/**
|
|
8182
8194
|
* When `true`, retain `devDependency` rows (the `deps detect` path);
|
|
8183
8195
|
* when falsy (the `deps regen` default), drop them unconditionally.
|
|
@@ -39182,15 +39182,16 @@ function makeShape$2(inspector) {
|
|
|
39182
39182
|
path,
|
|
39183
39183
|
status: "added"
|
|
39184
39184
|
}));
|
|
39185
|
+
const isOwnChangeset = (path) => path.startsWith(".changeset/") && path.endsWith(".md");
|
|
39185
39186
|
const seen = /* @__PURE__ */ new Set();
|
|
39186
39187
|
const rawEntries = [];
|
|
39187
39188
|
for (const e of diffEntries) {
|
|
39188
|
-
if (seen.has(e.path)) continue;
|
|
39189
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
39189
39190
|
seen.add(e.path);
|
|
39190
39191
|
rawEntries.push(e);
|
|
39191
39192
|
}
|
|
39192
39193
|
for (const e of untrackedEntries) {
|
|
39193
|
-
if (seen.has(e.path)) continue;
|
|
39194
|
+
if (seen.has(e.path) || isOwnChangeset(e.path)) continue;
|
|
39194
39195
|
seen.add(e.path);
|
|
39195
39196
|
rawEntries.push(e);
|
|
39196
39197
|
}
|
|
@@ -39325,6 +39326,32 @@ const DEP_TYPE_MAP = [
|
|
|
39325
39326
|
*/
|
|
39326
39327
|
const resolveOrRaw = (snapshot, dep, spec) => Option.getOrElse(snapshot.resolve(dep, spec), () => spec);
|
|
39327
39328
|
/**
|
|
39329
|
+
* Drop no-net-change field moves: the same dependency removed from one field
|
|
39330
|
+
* and added to another with an equal resolved version (e.g. a dep promoted
|
|
39331
|
+
* from `devDependencies` to `dependencies`). A field reclassification is a
|
|
39332
|
+
* contract change worth release-note prose, not a version movement, so it
|
|
39333
|
+
* must not surface as an unrelated removed row plus an added row. Moves that
|
|
39334
|
+
* also change the resolved version keep both rows (the movement is real).
|
|
39335
|
+
*/
|
|
39336
|
+
const collapseFieldMoves = (rows) => {
|
|
39337
|
+
const dropped = /* @__PURE__ */ new Set();
|
|
39338
|
+
const byName = /* @__PURE__ */ new Map();
|
|
39339
|
+
for (const row of rows) {
|
|
39340
|
+
const group = byName.get(row.dependency);
|
|
39341
|
+
if (group) group.push(row);
|
|
39342
|
+
else byName.set(row.dependency, [row]);
|
|
39343
|
+
}
|
|
39344
|
+
for (const group of byName.values()) for (const removed of group) {
|
|
39345
|
+
if (removed.action !== "removed" || dropped.has(removed)) continue;
|
|
39346
|
+
const added = group.find((r) => r.action === "added" && !dropped.has(r) && r.type !== removed.type && r.to === removed.from);
|
|
39347
|
+
if (added) {
|
|
39348
|
+
dropped.add(removed);
|
|
39349
|
+
dropped.add(added);
|
|
39350
|
+
}
|
|
39351
|
+
}
|
|
39352
|
+
return rows.filter((r) => !dropped.has(r));
|
|
39353
|
+
};
|
|
39354
|
+
/**
|
|
39328
39355
|
* Diff two workspace snapshots and return per-package dependency-table rows,
|
|
39329
39356
|
* comparing already-resolved specifier values per side.
|
|
39330
39357
|
*
|
|
@@ -39380,10 +39407,11 @@ function computeWorkspaceDependencyDiffs(before, after) {
|
|
|
39380
39407
|
});
|
|
39381
39408
|
}
|
|
39382
39409
|
}
|
|
39383
|
-
|
|
39410
|
+
const collapsed = collapseFieldMoves(rows);
|
|
39411
|
+
if (collapsed.length > 0) result.push({
|
|
39384
39412
|
package: afterPkg.name,
|
|
39385
39413
|
relativePath: afterPkg.relativePath,
|
|
39386
|
-
rows: sortDependencyRows(
|
|
39414
|
+
rows: sortDependencyRows(collapsed)
|
|
39387
39415
|
});
|
|
39388
39416
|
}
|
|
39389
39417
|
return result;
|
|
@@ -39726,7 +39754,8 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39726
39754
|
fromRef = yield* gitMergeBase(resolvedCwd, baseBranch);
|
|
39727
39755
|
}
|
|
39728
39756
|
const rawDiffs = computeWorkspaceDependencyDiffs(yield* pit.at(fromRef, { cwd: resolvedCwd }), options.to ? yield* pit.at(options.to, { cwd: resolvedCwd }) : yield* pit.worktree({ cwd: resolvedCwd }));
|
|
39729
|
-
const
|
|
39757
|
+
const explicitTargets = /* @__PURE__ */ new Set([...options.packages ?? [], ...options.package ? [options.package] : []]);
|
|
39758
|
+
const excluded = new Set(options.exclude ?? []);
|
|
39730
39759
|
const livePackages = yield* discovery.listPackages(resolvedCwd);
|
|
39731
39760
|
const publishable = yield* listPublishablePackageNames(livePackages, resolvedCwd).pipe(Effect.provide(provideDetector));
|
|
39732
39761
|
const versionPrivate = yield* config.versionPrivate(resolvedCwd);
|
|
@@ -39735,9 +39764,15 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39735
39764
|
if (yield* config.isIgnored(pkg.name, resolvedCwd)) continue;
|
|
39736
39765
|
if (publishable.has(pkg.name) || versionPrivate) inScope.add(pkg.name);
|
|
39737
39766
|
}
|
|
39738
|
-
const
|
|
39767
|
+
const activeTargets = /* @__PURE__ */ new Set();
|
|
39768
|
+
for (const name of explicitTargets) {
|
|
39769
|
+
if (excluded.has(name)) continue;
|
|
39770
|
+
if (yield* config.isIgnored(name, resolvedCwd)) continue;
|
|
39771
|
+
activeTargets.add(name);
|
|
39772
|
+
}
|
|
39773
|
+
const inScopeFor = (name) => explicitTargets.size > 0 ? activeTargets.has(name) : inScope.has(name) && !excluded.has(name);
|
|
39739
39774
|
const keepDevDeps = options.includeDevDeps === true;
|
|
39740
|
-
const scoped =
|
|
39775
|
+
const scoped = rawDiffs.filter((d) => inScopeFor(d.package));
|
|
39741
39776
|
const resolved = [];
|
|
39742
39777
|
for (const diff of scoped) {
|
|
39743
39778
|
const rows = keepDevDeps ? [...diff.rows] : diff.rows.filter((r) => r.type !== "devDependency");
|
|
@@ -39748,7 +39783,7 @@ function makeShape$1(pit, inspector, discovery, detector, config, fs) {
|
|
|
39748
39783
|
}
|
|
39749
39784
|
const existingPure = yield* findPureDependencyChangesets(fs, changesetDir);
|
|
39750
39785
|
const skippedMixed = yield* findMixedDependencyChangesets(fs, changesetDir);
|
|
39751
|
-
const toDelete =
|
|
39786
|
+
const toDelete = existingPure.filter((p) => inScopeFor(p.package));
|
|
39752
39787
|
const chosenFilenames = /* @__PURE__ */ new Set();
|
|
39753
39788
|
const toWrite = [];
|
|
39754
39789
|
for (const diff of resolved) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@savvy-web/silk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The single Silk Suite dev-tooling package — changeset, commitlint, lint, and biome conventions",
|
|
6
6
|
"homepage": "https://github.com/savvy-web/systems/tree/main/packages/silk",
|
|
@@ -66,7 +66,10 @@
|
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@effect/platform": "^0.96.2",
|
|
69
|
-
"@savvy-web/
|
|
69
|
+
"@savvy-web/changelog": "0.1.1",
|
|
70
|
+
"@savvy-web/cli": "1.5.3",
|
|
71
|
+
"@savvy-web/mcp": "1.7.0",
|
|
72
|
+
"@savvy-web/silk-effects": "3.1.0",
|
|
70
73
|
"effect": "^3.21.4",
|
|
71
74
|
"semver": "^7.8.5"
|
|
72
75
|
},
|
|
@@ -75,9 +78,6 @@
|
|
|
75
78
|
"@changesets/cli": "^3.0.0-next.8",
|
|
76
79
|
"@commitlint/cli": "^21.2.0",
|
|
77
80
|
"@commitlint/config-conventional": "^21.2.0",
|
|
78
|
-
"@savvy-web/changelog": "0.1.0",
|
|
79
|
-
"@savvy-web/cli": "1.5.2",
|
|
80
|
-
"@savvy-web/mcp": "1.6.7",
|
|
81
81
|
"@types/node": "^26.1.0",
|
|
82
82
|
"@typescript/native-preview": "^7.0.0-dev.20260612.1",
|
|
83
83
|
"commitizen": "^4.3.2",
|