@savvy-web/silk 2.2.2 → 2.2.3

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.
@@ -384,6 +384,22 @@ const ChangesetConfigLive = effect.Layer.effect(ChangesetConfig, effect.Effect.g
384
384
  };
385
385
  }));
386
386
  //#endregion
387
+ //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
388
+ /**
389
+ * Trim trailing slashes from a string.
390
+ *
391
+ * @remarks
392
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
393
+ * unanchored at the start, so the engine retries the match from every position
394
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
395
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
396
+ */
397
+ const trimTrailingSlashes = (s) => {
398
+ let end = s.length;
399
+ while (end > 0 && s[end - 1] === "/") end -= 1;
400
+ return s.slice(0, end);
401
+ };
402
+ //#endregion
387
403
  //#region ../../node_modules/.pnpm/workspaces-effect@2.0.3_@effect+platform@0.96.2_effect@3.21.4__effect@3.21.4/node_modules/workspaces-effect/errors/CatalogAssemblyError.js
388
404
  /**
389
405
  * Base constant for {@link CatalogAssemblyError}.
@@ -10868,18 +10884,16 @@ var SilkPublishability = class {
10868
10884
  * normalizes to `.`, matching how a root-directory target is recorded.
10869
10885
  *
10870
10886
  * @remarks
10871
- * Trailing slashes are trimmed with an index scan rather than `/\/+$/`. That
10872
- * regex is unanchored at the start, so the engine retries the match from every
10873
- * position and degrades to O(n²) on a path of many slashes (CodeQL
10874
- * `js/polynomial-redos`). `dir` reaches here from `dist/prod/targets.json`, which
10875
- * the bundler writes but a consumer repo could hand-edit.
10887
+ * Trailing-slash trimming is delegated to the shared `trimTrailingSlashes`
10888
+ * index-scan helper rather than `/\/+$/`: that regex is unanchored at the
10889
+ * start, so the engine retries the match from every position and degrades to
10890
+ * O(n²) on a path of many slashes (CodeQL `js/polynomial-redos`). `dir` reaches
10891
+ * here from `dist/prod/targets.json`, which the bundler writes but a consumer
10892
+ * repo could hand-edit.
10876
10893
  */
10877
10894
  const normalizeDir = (dir) => {
10878
10895
  const slashed = dir.replaceAll("\\", "/");
10879
- const withoutPrefix = slashed.startsWith("./") ? slashed.slice(2) : slashed;
10880
- let end = withoutPrefix.length;
10881
- while (end > 0 && withoutPrefix[end - 1] === "/") end -= 1;
10882
- const normalized = withoutPrefix.slice(0, end);
10896
+ const normalized = trimTrailingSlashes(slashed.startsWith("./") ? slashed.slice(2) : slashed);
10883
10897
  return normalized === "" ? "." : normalized;
10884
10898
  };
10885
10899
  /** True when a built target directory's package.json is `private: true`. Missing/unreadable/malformed → false. */
@@ -398,6 +398,23 @@ const ChangesetConfigLive = Layer.effect(ChangesetConfig, Effect.gen(function* (
398
398
  };
399
399
  }));
400
400
 
401
+ //#endregion
402
+ //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
403
+ /**
404
+ * Trim trailing slashes from a string.
405
+ *
406
+ * @remarks
407
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
408
+ * unanchored at the start, so the engine retries the match from every position
409
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
410
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
411
+ */
412
+ const trimTrailingSlashes = (s) => {
413
+ let end = s.length;
414
+ while (end > 0 && s[end - 1] === "/") end -= 1;
415
+ return s.slice(0, end);
416
+ };
417
+
401
418
  //#endregion
402
419
  //#region ../../node_modules/.pnpm/workspaces-effect@2.0.3_@effect+platform@0.96.2_effect@3.21.4__effect@3.21.4/node_modules/workspaces-effect/errors/CatalogAssemblyError.js
403
420
  /**
@@ -11064,18 +11081,16 @@ var SilkPublishability = class {
11064
11081
  * normalizes to `.`, matching how a root-directory target is recorded.
11065
11082
  *
11066
11083
  * @remarks
11067
- * Trailing slashes are trimmed with an index scan rather than `/\/+$/`. That
11068
- * regex is unanchored at the start, so the engine retries the match from every
11069
- * position and degrades to O(n²) on a path of many slashes (CodeQL
11070
- * `js/polynomial-redos`). `dir` reaches here from `dist/prod/targets.json`, which
11071
- * the bundler writes but a consumer repo could hand-edit.
11084
+ * Trailing-slash trimming is delegated to the shared `trimTrailingSlashes`
11085
+ * index-scan helper rather than `/\/+$/`: that regex is unanchored at the
11086
+ * start, so the engine retries the match from every position and degrades to
11087
+ * O(n²) on a path of many slashes (CodeQL `js/polynomial-redos`). `dir` reaches
11088
+ * here from `dist/prod/targets.json`, which the bundler writes but a consumer
11089
+ * repo could hand-edit.
11072
11090
  */
11073
11091
  const normalizeDir = (dir) => {
11074
11092
  const slashed = dir.replaceAll("\\", "/");
11075
- const withoutPrefix = slashed.startsWith("./") ? slashed.slice(2) : slashed;
11076
- let end = withoutPrefix.length;
11077
- while (end > 0 && withoutPrefix[end - 1] === "/") end -= 1;
11078
- const normalized = withoutPrefix.slice(0, end);
11093
+ const normalized = trimTrailingSlashes(slashed.startsWith("./") ? slashed.slice(2) : slashed);
11079
11094
  return normalized === "" ? "." : normalized;
11080
11095
  };
11081
11096
  /** True when a built target directory's package.json is `private: true`. Missing/unreadable/malformed → false. */
@@ -388,6 +388,22 @@ const ChangesetConfigLive = effect.Layer.effect(ChangesetConfig, effect.Effect.g
388
388
  };
389
389
  }));
390
390
  //#endregion
391
+ //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
392
+ /**
393
+ * Trim trailing slashes from a string.
394
+ *
395
+ * @remarks
396
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
397
+ * unanchored at the start, so the engine retries the match from every position
398
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
399
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
400
+ */
401
+ const trimTrailingSlashes = (s) => {
402
+ let end = s.length;
403
+ while (end > 0 && s[end - 1] === "/") end -= 1;
404
+ return s.slice(0, end);
405
+ };
406
+ //#endregion
391
407
  //#region ../../node_modules/.pnpm/workspaces-effect@2.0.3_@effect+platform@0.96.2_effect@3.21.4__effect@3.21.4/node_modules/workspaces-effect/errors/CatalogAssemblyError.js
392
408
  /**
393
409
  * Base constant for {@link CatalogAssemblyError}.
@@ -10872,18 +10888,16 @@ var SilkPublishability = class {
10872
10888
  * normalizes to `.`, matching how a root-directory target is recorded.
10873
10889
  *
10874
10890
  * @remarks
10875
- * Trailing slashes are trimmed with an index scan rather than `/\/+$/`. That
10876
- * regex is unanchored at the start, so the engine retries the match from every
10877
- * position and degrades to O(n²) on a path of many slashes (CodeQL
10878
- * `js/polynomial-redos`). `dir` reaches here from `dist/prod/targets.json`, which
10879
- * the bundler writes but a consumer repo could hand-edit.
10891
+ * Trailing-slash trimming is delegated to the shared `trimTrailingSlashes`
10892
+ * index-scan helper rather than `/\/+$/`: that regex is unanchored at the
10893
+ * start, so the engine retries the match from every position and degrades to
10894
+ * O(n²) on a path of many slashes (CodeQL `js/polynomial-redos`). `dir` reaches
10895
+ * here from `dist/prod/targets.json`, which the bundler writes but a consumer
10896
+ * repo could hand-edit.
10880
10897
  */
10881
10898
  const normalizeDir = (dir) => {
10882
10899
  const slashed = dir.replaceAll("\\", "/");
10883
- const withoutPrefix = slashed.startsWith("./") ? slashed.slice(2) : slashed;
10884
- let end = withoutPrefix.length;
10885
- while (end > 0 && withoutPrefix[end - 1] === "/") end -= 1;
10886
- const normalized = withoutPrefix.slice(0, end);
10900
+ const normalized = trimTrailingSlashes(slashed.startsWith("./") ? slashed.slice(2) : slashed);
10887
10901
  return normalized === "" ? "." : normalized;
10888
10902
  };
10889
10903
  /** True when a built target directory's package.json is `private: true`. Missing/unreadable/malformed → false. */
@@ -398,6 +398,23 @@ const ChangesetConfigLive = Layer.effect(ChangesetConfig, Effect.gen(function* (
398
398
  };
399
399
  }));
400
400
 
401
+ //#endregion
402
+ //#region ../silk-effects/dist/dev/pkg/utils/TrailingSlash.js
403
+ /**
404
+ * Trim trailing slashes from a string.
405
+ *
406
+ * @remarks
407
+ * Trims trailing slashes with an index scan rather than `/\/+$/`. That regex is
408
+ * unanchored at the start, so the engine retries the match from every position
409
+ * and degrades to O(n²) on a string of many slashes (CodeQL `js/polynomial-redos`).
410
+ * Only a trailing run of slashes is removed; interior slash runs are untouched.
411
+ */
412
+ const trimTrailingSlashes = (s) => {
413
+ let end = s.length;
414
+ while (end > 0 && s[end - 1] === "/") end -= 1;
415
+ return s.slice(0, end);
416
+ };
417
+
401
418
  //#endregion
402
419
  //#region ../../node_modules/.pnpm/workspaces-effect@2.0.3_@effect+platform@0.96.2_effect@3.21.4__effect@3.21.4/node_modules/workspaces-effect/errors/CatalogAssemblyError.js
403
420
  /**
@@ -11064,18 +11081,16 @@ var SilkPublishability = class {
11064
11081
  * normalizes to `.`, matching how a root-directory target is recorded.
11065
11082
  *
11066
11083
  * @remarks
11067
- * Trailing slashes are trimmed with an index scan rather than `/\/+$/`. That
11068
- * regex is unanchored at the start, so the engine retries the match from every
11069
- * position and degrades to O(n²) on a path of many slashes (CodeQL
11070
- * `js/polynomial-redos`). `dir` reaches here from `dist/prod/targets.json`, which
11071
- * the bundler writes but a consumer repo could hand-edit.
11084
+ * Trailing-slash trimming is delegated to the shared `trimTrailingSlashes`
11085
+ * index-scan helper rather than `/\/+$/`: that regex is unanchored at the
11086
+ * start, so the engine retries the match from every position and degrades to
11087
+ * O(n²) on a path of many slashes (CodeQL `js/polynomial-redos`). `dir` reaches
11088
+ * here from `dist/prod/targets.json`, which the bundler writes but a consumer
11089
+ * repo could hand-edit.
11072
11090
  */
11073
11091
  const normalizeDir = (dir) => {
11074
11092
  const slashed = dir.replaceAll("\\", "/");
11075
- const withoutPrefix = slashed.startsWith("./") ? slashed.slice(2) : slashed;
11076
- let end = withoutPrefix.length;
11077
- while (end > 0 && withoutPrefix[end - 1] === "/") end -= 1;
11078
- const normalized = withoutPrefix.slice(0, end);
11093
+ const normalized = trimTrailingSlashes(slashed.startsWith("./") ? slashed.slice(2) : slashed);
11079
11094
  return normalized === "" ? "." : normalized;
11080
11095
  };
11081
11096
  /** True when a built target directory's package.json is `private: true`. Missing/unreadable/malformed → false. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savvy-web/silk",
3
- "version": "2.2.2",
3
+ "version": "2.2.3",
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",
@@ -67,9 +67,9 @@
67
67
  "dependencies": {
68
68
  "@effect/platform": "^0.96.2",
69
69
  "@savvy-web/changelog": "0.1.1",
70
- "@savvy-web/cli": "1.5.5",
71
- "@savvy-web/mcp": "1.7.2",
72
- "@savvy-web/silk-effects": "3.2.1",
70
+ "@savvy-web/cli": "1.5.6",
71
+ "@savvy-web/mcp": "1.7.3",
72
+ "@savvy-web/silk-effects": "3.2.2",
73
73
  "effect": "^3.21.4",
74
74
  "semver": "^7.8.5"
75
75
  },