@savvy-web/silk 3.8.3 → 3.9.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/biome/silk.jsonc CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.5.9/schema.json",
3
3
  "assist": {
4
4
  "actions": {
5
5
  "source": {
@@ -13,6 +13,35 @@
13
13
  },
14
14
  "enabled": true
15
15
  },
16
+ "css": {
17
+ "linter": {
18
+ "enabled": true
19
+ },
20
+ "parser": {
21
+ "cssModules": true
22
+ }
23
+ },
24
+ "files": {
25
+ "includes": [
26
+ "**",
27
+ "!**/node_modules",
28
+ "!**/dist",
29
+ "!**/.repos",
30
+ "!**/.turbo",
31
+ "!**/.git",
32
+ "!**/.rslib",
33
+ "!**/.vitest",
34
+ "!**/.coverage",
35
+ "!coverage",
36
+ "!.claude/worktrees",
37
+ "!**/__test__/**/fixtures",
38
+ "!**/__test__/snapshots",
39
+ "!**/__test__/**/fixtures",
40
+ "!**/__test__/**/snapshots",
41
+ "!**/__fixtures__",
42
+ "!**/__snapshots__"
43
+ ]
44
+ },
16
45
  "formatter": {
17
46
  "enabled": true,
18
47
  "formatWithErrors": true,
@@ -20,6 +49,15 @@
20
49
  "indentWidth": 2,
21
50
  "lineWidth": 120
22
51
  },
52
+ "javascript": {
53
+ "resolver": {
54
+ // Catalog-aware module resolution: lets noUndeclaredDependencies and
55
+ // friends understand `catalog:` / `catalog:<name>` specs in package.json.
56
+ // Requires Biome >= 2.5. Consumers are carried onto it by silk-update-action
57
+ // and `savvy init`, which rewrite the $schema URL CI installs from.
58
+ "experimentalPnpmCatalogs": true
59
+ }
60
+ },
23
61
  "json": {
24
62
  "assist": {
25
63
  "enabled": true
@@ -32,14 +70,6 @@
32
70
  "enabled": true
33
71
  }
34
72
  },
35
- "css": {
36
- "parser": {
37
- "cssModules": true
38
- },
39
- "linter": {
40
- "enabled": true
41
- }
42
- },
43
73
  "linter": {
44
74
  "domains": {
45
75
  "project": "all"
@@ -52,6 +82,7 @@
52
82
  }
53
83
  },
54
84
  "correctness": {
85
+ "noUnresolvedImports": "off",
55
86
  "noUnusedVariables": {
56
87
  "level": "error",
57
88
  "options": {
@@ -73,13 +104,12 @@
73
104
  "tsx": "js"
74
105
  }
75
106
  }
76
- },
77
- "noUnresolvedImports": "off"
107
+ }
78
108
  },
79
109
  "nursery": {
80
110
  "useExplicitType": "off"
81
111
  },
82
- "recommended": true,
112
+ "preset": "recommended",
83
113
  "style": {
84
114
  "useConsistentTypeDefinitions": "error",
85
115
  "useImportType": {
@@ -91,10 +121,10 @@
91
121
  "useNodejsImportProtocol": "error"
92
122
  },
93
123
  "suspicious": {
94
- "noDuplicateDependencies": "error",
95
- "noImportCycles": "error",
96
124
  "noBiomeFirstException": "error",
125
+ "noDuplicateDependencies": "error",
97
126
  "noDuplicateObjectKeys": "error",
127
+ "noImportCycles": "error",
98
128
  "noQuickfixBiome": "error",
99
129
  "useBiomeIgnoreFolder": "error"
100
130
  }
@@ -117,7 +147,25 @@
117
147
  }
118
148
  }
119
149
  },
120
- "includes": ["**/turbo.json", "**/tsconfig.json", "**/tsconfig.*.json", "**/public/tsconfig/**/*.json"]
150
+ "includes": [
151
+ "**/turbo.json",
152
+ "**/tsconfig.json",
153
+ "**/tsconfig.*.json",
154
+ "**/public/tsconfig/**/*.json",
155
+ "**/.claude/settings.json",
156
+ "**/.claude/settings.local.json",
157
+ "**/.claude/design/design.config.json",
158
+ "**/.changeset/config.json",
159
+ "**/.markdownlint.json",
160
+ "**/devcontainer.json",
161
+ "**/.vscode/*.json",
162
+ "**/biome.json",
163
+ "**/biome.jsonc",
164
+ "**/silk.jsonc",
165
+ "**/.markdownlint-cli2.jsonc",
166
+ "**/.claude-plugin/plugin.json",
167
+ "**/.claude-plugin/marketplace.json"
168
+ ]
121
169
  },
122
170
  {
123
171
  "includes": [
@@ -145,26 +193,5 @@
145
193
  "defaultBranch": "main",
146
194
  "enabled": true,
147
195
  "useIgnoreFile": true
148
- },
149
- "files": {
150
- "includes": [
151
- "**",
152
- "!**/node_modules",
153
- "!**/dist",
154
- "!**/.repos",
155
- "!**/.turbo",
156
- "!**/.git",
157
- "!**/.rslib",
158
- "!**/.vitest",
159
- "!**/.coverage",
160
- "!coverage",
161
- "!.claude/worktrees",
162
- "!**/__test__/**/fixtures",
163
- "!**/__test__/snapshots",
164
- "!**/__test__/**/fixtures",
165
- "!**/__test__/**/snapshots",
166
- "!**/__fixtures__",
167
- "!**/__snapshots__"
168
- ]
169
196
  }
170
197
  }
@@ -2335,7 +2335,7 @@ var GlobSet = class GlobSet extends effect.Schema.Class("GlobSet")(effect.Schema
2335
2335
  }
2336
2336
  };
2337
2337
  //#endregion
2338
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/BunExtension.js
2338
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/BunExtension.js
2339
2339
  /**
2340
2340
  * Extension data specific to bun lockfiles, attached to `Lockfile.extension`
2341
2341
  * when the format is `"bun"`.
@@ -5578,7 +5578,7 @@ var ReleaseAgeGate = class ReleaseAgeGate extends effect.Schema.Class("ReleaseAg
5578
5578
  }
5579
5579
  };
5580
5580
  //#endregion
5581
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/ImporterDependency.js
5581
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/ImporterDependency.js
5582
5582
  /**
5583
5583
  * One declared dependency of one workspace importer, as the lockfile records it.
5584
5584
  *
@@ -5616,7 +5616,7 @@ var ImporterDependency = class extends effect.Schema.Class("ImporterDependency")
5616
5616
  depType: DependencyField
5617
5617
  }) {};
5618
5618
  //#endregion
5619
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/LockfileImporter.js
5619
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/LockfileImporter.js
5620
5620
  /**
5621
5621
  * One workspace importer's declared dependencies, as the lockfile records them.
5622
5622
  *
@@ -5640,7 +5640,7 @@ var LockfileImporter = class extends effect.Schema.Class("LockfileImporter")({
5640
5640
  dependencies: effect.Schema.Array(ImporterDependency)
5641
5641
  }) {};
5642
5642
  //#endregion
5643
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/ResolvedPackage.js
5643
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/ResolvedPackage.js
5644
5644
  const EMPTY_DEPENDENCIES = {};
5645
5645
  const EMPTY_PEER_META = {};
5646
5646
  const EMPTY_EDGE_NAMES = [];
@@ -5730,7 +5730,7 @@ var ResolvedPackage = class extends effect.Schema.Class("ResolvedPackage")({
5730
5730
  unresolvedEdges: effect.Schema.Array(effect.Schema.String).pipe(effect.Schema.withDecodingDefaultKey(effect.Effect.succeed(EMPTY_EDGE_NAMES)), effect.Schema.withConstructorDefault(effect.Effect.succeed(EMPTY_EDGE_NAMES)))
5731
5731
  }) {};
5732
5732
  //#endregion
5733
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/WorkspaceDependency.js
5733
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/WorkspaceDependency.js
5734
5734
  /**
5735
5735
  * A directed dependency edge between two workspace packages as recorded in
5736
5736
  * the lockfile.
@@ -5752,7 +5752,7 @@ var WorkspaceDependency = class extends effect.Schema.Class("WorkspaceDependency
5752
5752
  constraint: effect.Schema.String
5753
5753
  }) {};
5754
5754
  //#endregion
5755
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/PnpmExtension.js
5755
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/PnpmExtension.js
5756
5756
  /**
5757
5757
  * Extension data specific to pnpm lockfiles, attached to `Lockfile.extension`
5758
5758
  * when the format is `"pnpm"`.
@@ -5777,7 +5777,7 @@ var PnpmExtension = class extends effect.Schema.Class("PnpmExtension")({
5777
5777
  }))
5778
5778
  }) {};
5779
5779
  //#endregion
5780
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/LockfileFormat.js
5780
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/LockfileFormat.js
5781
5781
  /**
5782
5782
  * The lockfile formats this package parses: bun's `bun.lock` (JSONC), npm's
5783
5783
  * `package-lock.json` (JSON), pnpm's `pnpm-lock.yaml` and yarn Berry's
@@ -5819,7 +5819,7 @@ const FILENAMES = {
5819
5819
  */
5820
5820
  const filenameFor = (format) => FILENAMES[format][0];
5821
5821
  //#endregion
5822
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/shared.js
5822
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/shared.js
5823
5823
  /**
5824
5824
  * The four dependency sections of a manifest, in a stable order — the shared
5825
5825
  * dependency-sections table (v3's `DEP_SECTIONS`). Each entry is both the
@@ -7821,7 +7821,7 @@ var JsoncModifier = class {
7821
7821
  });
7822
7822
  };
7823
7823
  //#endregion
7824
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/bun.js
7824
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/bun.js
7825
7825
  const DepRecord$2 = effect.Schema.optionalKey(effect.Schema.Record(effect.Schema.String, effect.Schema.String));
7826
7826
  const OptionalPeers = effect.Schema.optionalKey(effect.Schema.Array(effect.Schema.String));
7827
7827
  const BunWorkspaceEntry = effect.Schema.Struct({
@@ -7998,7 +7998,7 @@ const toFields$3 = (raw) => effect.Effect.gen(function* () {
7998
7998
  };
7999
7999
  });
8000
8000
  //#endregion
8001
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/npm.js
8001
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/npm.js
8002
8002
  const DepRecord$1 = effect.Schema.optionalKey(effect.Schema.Record(effect.Schema.String, effect.Schema.String));
8003
8003
  const PeerMetaRecord = effect.Schema.optionalKey(effect.Schema.Record(effect.Schema.String, effect.Schema.Struct({ optional: effect.Schema.optionalKey(effect.Schema.Boolean) })));
8004
8004
  const NpmPackageEntry = effect.Schema.Struct({
@@ -15866,7 +15866,7 @@ function deepEqualValues(a, b) {
15866
15866
  return false;
15867
15867
  }
15868
15868
  //#endregion
15869
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/documents.js
15869
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/documents.js
15870
15870
  /**
15871
15871
  * An empty YAML document composes to `null` (`Yaml.parseAll("")` is `[null]`,
15872
15872
  * and the trailing document of an env-only `pnpm-lock.yaml` is `null` too).
@@ -15936,7 +15936,7 @@ const selectSoleDocument = (content) => effect.Effect.gen(function* () {
15936
15936
  };
15937
15937
  });
15938
15938
  //#endregion
15939
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/pnpm.js
15939
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/pnpm.js
15940
15940
  const PnpmImporterDeps = effect.Schema.optionalKey(effect.Schema.Record(effect.Schema.String, effect.Schema.Struct({
15941
15941
  specifier: effect.Schema.String,
15942
15942
  version: effect.Schema.String
@@ -15945,7 +15945,8 @@ const PnpmImporter = effect.Schema.Struct({
15945
15945
  dependencies: PnpmImporterDeps,
15946
15946
  devDependencies: PnpmImporterDeps,
15947
15947
  peerDependencies: PnpmImporterDeps,
15948
- optionalDependencies: PnpmImporterDeps
15948
+ optionalDependencies: PnpmImporterDeps,
15949
+ publishDirectory: effect.Schema.optionalKey(effect.Schema.String)
15949
15950
  });
15950
15951
  /**
15951
15952
  * The version gate's own input: `lockfileVersion` and nothing else.
@@ -16020,9 +16021,23 @@ const parsePnpm = (content) => effect.Effect.gen(function* () {
16020
16021
  * resolution, which names no instance in this lockfile, from becoming a
16021
16022
  * plausible lie.
16022
16023
  *
16024
+ * A failed composition gets one second reading: the recorded version ITSELF as
16025
+ * an instance id. That is how pnpm spells an `npm:` alias — the dependency
16026
+ * `typescript-classic: npm:typescript@^6.0.3` is recorded as
16027
+ * `typescript-classic: typescript@6.0.3`, the referenced instance's own key,
16028
+ * peer suffix included when one applies. Still compose-then-verify, not a
16029
+ * guess: a plain version (`6.0.3`) can never be an instance id, because ids
16030
+ * always carry a name, so the reading admits exactly the alias shape.
16031
+ *
16032
+ * Unlike {@link resolveImporterEdges}, there is no `workspace:`-specifier
16033
+ * ancestor walk here — a snapshot body records no specifier, so that evidence
16034
+ * does not exist on this path. The publish-directory map needs no specifier:
16035
+ * the importer entry's own `publishDirectory` declaration is exact evidence,
16036
+ * available to both paths, and is consulted unconditionally.
16037
+ *
16023
16038
  * @internal
16024
16039
  */
16025
- const resolveEdges = (sections, instanceIds) => {
16040
+ const resolveEdges = (sections, instanceIds, publishDirTargets) => {
16026
16041
  const edges = /* @__PURE__ */ new Map();
16027
16042
  const unnameable = /* @__PURE__ */ new Set();
16028
16043
  for (const section of sections) {
@@ -16032,11 +16047,13 @@ const resolveEdges = (sections, instanceIds) => {
16032
16047
  if (version.startsWith(LINK_PREFIX)) {
16033
16048
  const target = resolveLinkTarget("", version.slice(LINK_PREFIX.length));
16034
16049
  if (target !== void 0 && instanceIds.has(target)) edges.set(name, target);
16050
+ else if (target !== void 0 && publishDirTargets.has(target)) edges.set(name, publishDirTargets.get(target));
16035
16051
  else unnameable.add(name);
16036
16052
  continue;
16037
16053
  }
16038
16054
  const bare = `${name}@${version}`;
16039
16055
  if (instanceIds.has(bare)) edges.set(name, bare);
16056
+ else if (instanceIds.has(version)) edges.set(name, version);
16040
16057
  else unnameable.add(name);
16041
16058
  }
16042
16059
  }
@@ -16052,6 +16069,13 @@ const LINK_PREFIX = "link:";
16052
16069
  * workspace edge can name the workspace importer's instance id.
16053
16070
  * Total: a target that walks above the root yields `undefined`.
16054
16071
  *
16072
+ * A target that normalizes to NOTHING — `link:.` recorded root-relative —
16073
+ * also yields `undefined` rather than the root importer's ".": the root
16074
+ * importer deliberately emits no `ResolvedPackage` row (its path cannot serve
16075
+ * as a package name), so mapping the empty target to "." would hand back an id
16076
+ * no row carries, and no pnpm output recording that shape has been observed.
16077
+ * The edge stays honestly unnameable instead.
16078
+ *
16055
16079
  * @internal
16056
16080
  */
16057
16081
  const resolveLinkTarget = (importerPath, target) => {
@@ -16098,22 +16122,28 @@ const owningImporter = (target, importerPaths) => {
16098
16122
  * naming another importer — normalized against this importer's own path. Both
16099
16123
  * are checked against the lockfile's instance ids before being emitted.
16100
16124
  *
16101
- * A `link:` target that is no importer gets one further chance, and only under
16102
- * a `workspace:` SPECIFIER: pnpm resolved that edge through the workspace, so
16103
- * the target directory is known to belong to a workspace package, and
16104
- * {@link owningImporter} names it. The specifier is what makes this a
16105
- * resolution rather than a guess a hand-written `link:../vendor/stub`
16106
- * specifier names a directory pnpm never claimed was a workspace package, and
16107
- * attributing it to whichever importer happens to contain it would answer with
16108
- * the wrong package's peers instead of admitting it could not name the edge.
16109
- *
16110
- * The snapshot path ({@link resolveEdges}) deliberately does NOT do this: a
16111
- * snapshot body records `name: link:<path>` with no specifier beside it, so the
16112
- * evidence this rule turns on is not available there.
16125
+ * A `link:` target that is no importer gets two further chances. First the
16126
+ * publish-directory map: an importer that DECLARES `publishDirectory` has told
16127
+ * the lockfile exactly which build directory its links point at, so a target
16128
+ * matching a declared publish directory names that importer on evidence, no
16129
+ * specifier required {@link resolveEdges} consults the same map for the same
16130
+ * reason. Then, and only under a `workspace:` SPECIFIER, the ancestor walk:
16131
+ * pnpm resolved that edge through the workspace, so the target directory is
16132
+ * known to belong to a workspace package, and {@link owningImporter} names it.
16133
+ * The specifier is what makes the walk a resolution rather than a guess — a
16134
+ * hand-written `link:../vendor/stub` specifier names a directory pnpm never
16135
+ * claimed was a workspace package, and attributing it to whichever importer
16136
+ * happens to contain it would answer with the wrong package's peers instead of
16137
+ * admitting it could not name the edge. The snapshot path has no specifier and
16138
+ * therefore no walk; the publish-directory map is the evidence it does get.
16139
+ *
16140
+ * A failed `name@version` composition gets the same alias reading as
16141
+ * {@link resolveEdges}: the recorded version itself as an instance id, which is
16142
+ * how pnpm spells `npm:` aliases.
16113
16143
  *
16114
16144
  * @internal
16115
16145
  */
16116
- const resolveImporterEdges = (importer, importerPath, instanceIds, importerPaths) => {
16146
+ const resolveImporterEdges = (importer, importerPath, instanceIds, importerPaths, publishDirTargets) => {
16117
16147
  const edges = /* @__PURE__ */ new Map();
16118
16148
  const unnameable = /* @__PURE__ */ new Set();
16119
16149
  for (const group of importerDepGroups(importer)) {
@@ -16122,13 +16152,14 @@ const resolveImporterEdges = (importer, importerPath, instanceIds, importerPaths
16122
16152
  if (name === "") continue;
16123
16153
  if (info.version.startsWith(LINK_PREFIX)) {
16124
16154
  const target = resolveLinkTarget(importerPath, info.version.slice(5));
16125
- const owner = target === void 0 ? void 0 : instanceIds.has(target) ? target : info.specifier.startsWith(WORKSPACE_PREFIX) ? owningImporter(target, importerPaths) : void 0;
16155
+ const owner = target === void 0 ? void 0 : instanceIds.has(target) ? target : publishDirTargets.get(target) ?? (info.specifier.startsWith(WORKSPACE_PREFIX) ? owningImporter(target, importerPaths) : void 0);
16126
16156
  if (owner !== void 0) edges.set(name, owner);
16127
16157
  else unnameable.add(name);
16128
16158
  continue;
16129
16159
  }
16130
16160
  const bare = `${name}@${info.version}`;
16131
16161
  if (instanceIds.has(bare)) edges.set(name, bare);
16162
+ else if (instanceIds.has(info.version)) edges.set(name, info.version);
16132
16163
  else unnameable.add(name);
16133
16164
  }
16134
16165
  }
@@ -16184,6 +16215,13 @@ const toFields$1 = (raw) => effect.Effect.gen(function* () {
16184
16215
  ...Object.keys(raw.importers)
16185
16216
  ]);
16186
16217
  const importerPaths = new Set(Object.keys(raw.importers).filter((path) => path !== "." && path !== ""));
16218
+ const publishDirTargets = /* @__PURE__ */ new Map();
16219
+ for (const [importerPath, importer] of Object.entries(raw.importers)) {
16220
+ if (importerPath === "") continue;
16221
+ if (importer.publishDirectory === void 0) continue;
16222
+ const key = resolveLinkTarget(importerPath, importer.publishDirectory);
16223
+ if (key !== void 0) publishDirTargets.set(key, importerPath);
16224
+ }
16187
16225
  const emitted = /* @__PURE__ */ new Set();
16188
16226
  for (const [importerPath, importer] of Object.entries(raw.importers)) {
16189
16227
  if (importerPath === "." || importerPath === "") continue;
@@ -16193,7 +16231,7 @@ const toFields$1 = (raw) => effect.Effect.gen(function* () {
16193
16231
  instanceId: importerPath,
16194
16232
  isWorkspace: true,
16195
16233
  relativePath: importerPath,
16196
- ...resolveImporterEdges(importer, importerPath, instanceIds, importerPaths)
16234
+ ...resolveImporterEdges(importer, importerPath, instanceIds, importerPaths, publishDirTargets)
16197
16235
  }));
16198
16236
  }
16199
16237
  const emit = (instanceId, meta, edges) => effect.Effect.gen(function* () {
@@ -16211,7 +16249,7 @@ const toFields$1 = (raw) => effect.Effect.gen(function* () {
16211
16249
  ...integrity !== void 0 ? { integrity } : {},
16212
16250
  isWorkspace: false,
16213
16251
  ...peerDeclarations(meta?.peerDependencies, meta?.peerDependenciesMeta),
16214
- ...resolveEdges(edges, instanceIds)
16252
+ ...resolveEdges(edges, instanceIds, publishDirTargets)
16215
16253
  }));
16216
16254
  });
16217
16255
  if (snapshots) for (const [key, snapshot] of Object.entries(snapshots)) {
@@ -16238,7 +16276,7 @@ const toFields$1 = (raw) => effect.Effect.gen(function* () {
16238
16276
  };
16239
16277
  });
16240
16278
  //#endregion
16241
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/internal/yarn.js
16279
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/internal/yarn.js
16242
16280
  const YarnLockfileRaw = effect.Schema.Record(effect.Schema.String, effect.Schema.Unknown);
16243
16281
  const DepRecord = effect.Schema.optionalKey(effect.Schema.Record(effect.Schema.String, effect.Schema.String));
16244
16282
  const YarnEntry = effect.Schema.Struct({
@@ -16414,7 +16452,7 @@ const cleanYarnDeps = (deps) => {
16414
16452
  return Object.fromEntries(Object.entries(deps).map(([name, value]) => [name, value.startsWith("npm:") ? value.slice(4) : value]));
16415
16453
  };
16416
16454
  //#endregion
16417
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/Lockfile.js
16455
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/Lockfile.js
16418
16456
  const EMPTY_IMPORTERS = [];
16419
16457
  /**
16420
16458
  * Failure of `Lockfile.parse`: the given content is not a valid lockfile of
@@ -16663,7 +16701,7 @@ var Lockfile = class Lockfile extends effect.Schema.Class("Lockfile")({
16663
16701
  }
16664
16702
  };
16665
16703
  //#endregion
16666
- //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.1_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_dc2ae50ba9ac4d16371f19ff9a80bde5/node_modules/@effected/lockfiles/LockfileIntegrity.js
16704
+ //#region ../../node_modules/.pnpm/@effected+lockfiles@0.6.2_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__@effected+npm@0.11_ef94318d813876db7fdc8ffae2f92869/node_modules/@effected/lockfiles/LockfileIntegrity.js
16667
16705
  /**
16668
16706
  * The minimal manifest shape {@link LockfileIntegrity.compare} checks a
16669
16707
  * lockfile against: a package name plus the four optional dependency maps.
@@ -19476,7 +19514,7 @@ var Package = class Package extends effect.Schema.Class("Package")({
19476
19514
  }
19477
19515
  };
19478
19516
  //#endregion
19479
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspacePackage.js
19517
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspacePackage.js
19480
19518
  const EMPTY$1 = Object.freeze(Object.create(null));
19481
19519
  const EMPTY_MANIFEST = Object.freeze(Object.create(null));
19482
19520
  /**
@@ -20074,7 +20112,7 @@ var Walker$1 = class {
20074
20112
  static findRoot = findRoot$1;
20075
20113
  };
20076
20114
  //#endregion
20077
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceRoot.js
20115
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceRoot.js
20078
20116
  /**
20079
20117
  * The marker filenames {@link WorkspaceRoot} probes for, in priority order.
20080
20118
  *
@@ -20261,7 +20299,7 @@ var WorkspaceRoot = class WorkspaceRoot extends effect.Context.Service()("@effec
20261
20299
  static layerTest = (root) => effect.Layer.effect(WorkspaceRoot, WorkspaceRoot.makeTest(root)).pipe(effect.Layer.provide(effect.Path.layer));
20262
20300
  };
20263
20301
  //#endregion
20264
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/limits.js
20302
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/limits.js
20265
20303
  /**
20266
20304
  * Hard ceiling on directories the enumerator will visit for one pattern set.
20267
20305
  * Guards the pathological case a depth cap alone does not: a wide, shallow
@@ -20279,7 +20317,7 @@ const MAX_ENUMERATION_ENTRIES = 1e5;
20279
20317
  */
20280
20318
  const PRUNED_DIRECTORIES = /* @__PURE__ */ new Set([".git", "node_modules"]);
20281
20319
  //#endregion
20282
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/traverse.js
20320
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/traverse.js
20283
20321
  /** Directory names never descended into. */
20284
20322
  const isPruned = (entry) => PRUNED_DIRECTORIES.has(entry);
20285
20323
  /** Join root-relative POSIX segments; `""` is the root itself. */
@@ -20369,7 +20407,7 @@ var Traversal = class {
20369
20407
  }
20370
20408
  };
20371
20409
  //#endregion
20372
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/enumerate.js
20410
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/enumerate.js
20373
20411
  /** Strip a trailing slash from `GlobPattern.enumerationPrefix` to get a relative directory. */
20374
20412
  const baseOf = (pattern) => pattern.enumerationPrefix.replace(/\/$/, "");
20375
20413
  /**
@@ -20439,7 +20477,7 @@ const enumerate = (root, globs, options) => effect.Effect.gen(function* () {
20439
20477
  return results;
20440
20478
  });
20441
20479
  //#endregion
20442
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/patterns.js
20480
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/patterns.js
20443
20481
  const stringsOf = (value) => Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : void 0;
20444
20482
  /** The `packages:` list of a `pnpm-workspace.yaml` document. Total on a parsed document. */
20445
20483
  const pnpmPatternsOf = (document) => {
@@ -20496,7 +20534,7 @@ const readPatterns = (root) => effect.Effect.gen(function* () {
20496
20534
  return manifestPatternsOf(manifest);
20497
20535
  });
20498
20536
  //#endregion
20499
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceDiscovery.js
20537
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceDiscovery.js
20500
20538
  /**
20501
20539
  * Raised when a workspace member's `package.json` cannot be read, parsed, or
20502
20540
  * used — it is missing, malformed, or lacks a `name` or `version`.
@@ -20952,7 +20990,7 @@ var WorkspaceDiscovery = class WorkspaceDiscovery extends effect.Context.Service
20952
20990
  };
20953
20991
  const isStringRecord$2 = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((entry) => typeof entry === "string");
20954
20992
  //#endregion
20955
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/DependencyGraph.js
20993
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/DependencyGraph.js
20956
20994
  /**
20957
20995
  * Raised when the workspace dependency graph cannot be topologically ordered
20958
20996
  * because it contains a cycle.
@@ -24648,7 +24686,7 @@ var Git = class Git extends effect.Context.Service()("@effected/git/Git") {
24648
24686
  static layerTest = (overrides = {}) => effect.Layer.succeed(Git, Git.makeTest(overrides));
24649
24687
  };
24650
24688
  //#endregion
24651
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/ChangeDetector.js
24689
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/ChangeDetector.js
24652
24690
  /**
24653
24691
  * Which git refs to compare, and whether to fold in the working tree.
24654
24692
  *
@@ -24904,7 +24942,7 @@ function resolveFromCatalog(catalogs, wantedDependency) {
24904
24942
  };
24905
24943
  }
24906
24944
  //#endregion
24907
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/catalogs.js
24945
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/catalogs.js
24908
24946
  /** Project a pnpm-workspace manifest's `catalog` / `catalogs` fields into a `Catalogs` map. */
24909
24947
  const inlineCatalogs = (manifest) => {
24910
24948
  if (manifest.catalog === void 0 && manifest.catalogs === void 0) return {};
@@ -25433,7 +25471,7 @@ var ConfigDependencyHooks = class ConfigDependencyHooks extends effect.Context.S
25433
25471
  }));
25434
25472
  };
25435
25473
  //#endregion
25436
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/PackageManagerName.js
25474
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/PackageManagerName.js
25437
25475
  /**
25438
25476
  * The four package managers this package understands.
25439
25477
  *
@@ -25808,7 +25846,7 @@ var PackageManagerDetector = class PackageManagerDetector extends effect.Context
25808
25846
  static layerTest = (overrides = {}) => effect.Layer.succeed(PackageManagerDetector, PackageManagerDetector.makeTest(overrides));
25809
25847
  };
25810
25848
  //#endregion
25811
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/LockfileReader.js
25849
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/LockfileReader.js
25812
25850
  /**
25813
25851
  * Raised when the workspace's lockfile cannot be read off disk.
25814
25852
  *
@@ -25988,7 +26026,7 @@ var LockfileReader = class LockfileReader extends effect.Context.Service()("@eff
25988
26026
  static layerTest = (overrides = {}) => effect.Layer.succeed(LockfileReader, LockfileReader.makeTest(overrides));
25989
26027
  };
25990
26028
  //#endregion
25991
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/Publishability.js
26029
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/Publishability.js
25992
26030
  /** The public npm registry, used when `publishConfig.registry` says nothing. */
25993
26031
  const DEFAULT_REGISTRY = "https://registry.npmjs.org/";
25994
26032
  /**
@@ -26147,7 +26185,7 @@ var PublishabilityDetector = class extends effect.Context.Service()("@effected/w
26147
26185
  static layerNone = effect.Layer.succeed(this, this.none);
26148
26186
  };
26149
26187
  //#endregion
26150
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/importerVersions.js
26188
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/internal/importerVersions.js
26151
26189
  /**
26152
26190
  * Strip pnpm's peer-disambiguation suffix from a recorded importer version.
26153
26191
  *
@@ -26233,7 +26271,7 @@ const unanimousVersionOf = (index, dependency) => {
26233
26271
  return agreed;
26234
26272
  };
26235
26273
  //#endregion
26236
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceCatalogs.js
26274
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceCatalogs.js
26237
26275
  /**
26238
26276
  * An immutable, fully-normalized catalog collection — the one catalog
26239
26277
  * resolution semantic in the package.
@@ -26670,7 +26708,8 @@ var WorkspaceCatalogs = class WorkspaceCatalogs extends effect.Context.Service()
26670
26708
  }),
26671
26709
  importerVersions: effect.Effect.fn("WorkspaceCatalogs.importerVersions")(function* () {
26672
26710
  return (yield* memo).importerVersions;
26673
- })
26711
+ }),
26712
+ refresh: () => invalidate
26674
26713
  };
26675
26714
  });
26676
26715
  /**
@@ -26735,6 +26774,11 @@ var WorkspaceCatalogs = class WorkspaceCatalogs extends effect.Context.Service()
26735
26774
  * the importer index from the lockfile's importer blocks — neither is in a
26736
26775
  * `CatalogSet`) and always die unless stubbed.
26737
26776
  *
26777
+ * `refresh` defaults to `Effect.void` honestly: the double holds no memo,
26778
+ * so "drop the memoized assembly" is genuinely a no-op — the stubs answer
26779
+ * fresh on every call already. This mirrors `WorkspaceDiscovery.makeTest`'s
26780
+ * `refresh`.
26781
+ *
26738
26782
  * @example
26739
26783
  * ```ts
26740
26784
  * import { CatalogSet, WorkspaceCatalogs } from "@effected/workspaces";
@@ -26754,6 +26798,7 @@ var WorkspaceCatalogs = class WorkspaceCatalogs extends effect.Context.Service()
26754
26798
  peerDependencyRules: () => unstubbed$1("peerDependencyRules"),
26755
26799
  releaseAgeGate: () => unstubbed$1("releaseAgeGate"),
26756
26800
  importerVersions: () => unstubbed$1("importerVersions"),
26801
+ refresh: () => effect.Effect.void,
26757
26802
  ...overrides
26758
26803
  };
26759
26804
  };
@@ -26803,7 +26848,7 @@ var WorkspaceCatalogs = class WorkspaceCatalogs extends effect.Context.Service()
26803
26848
  }));
26804
26849
  };
26805
26850
  //#endregion
26806
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceStateSnapshot.js
26851
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceStateSnapshot.js
26807
26852
  const EMPTY = Object.freeze(Object.create(null));
26808
26853
  const DependencyMap = effect.Schema.Record(effect.Schema.String, effect.Schema.String).pipe(effect.Schema.withDecodingDefaultKey(effect.Effect.succeed(EMPTY)), effect.Schema.withConstructorDefault(effect.Effect.succeed(EMPTY)));
26809
26854
  /**
@@ -27026,7 +27071,7 @@ var WorkspaceStateSnapshot = class extends effect.Schema.Class("WorkspaceStateSn
27026
27071
  }
27027
27072
  };
27028
27073
  //#endregion
27029
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceSnapshots.js
27074
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/WorkspaceSnapshots.js
27030
27075
  /** Whether `value` is a non-null, non-array object. */
27031
27076
  const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
27032
27077
  /** Whether every value in a record is a string — a usable dependency map. */
@@ -27303,7 +27348,7 @@ var WorkspaceSnapshots = class WorkspaceSnapshots extends effect.Context.Service
27303
27348
  static layerTest = (overrides = {}) => effect.Layer.succeed(WorkspaceSnapshots, WorkspaceSnapshots.makeTest(overrides));
27304
27349
  };
27305
27350
  //#endregion
27306
- //#region ../../node_modules/.pnpm/@effected+workspaces@0.16.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/Workspaces.js
27351
+ //#region ../../node_modules/.pnpm/@effected+workspaces@0.17.0_@effected+jsonc@0.7.0_effect@4.0.0-rc.109__effect@4.0.0-rc.109/node_modules/@effected/workspaces/Workspaces.js
27307
27352
  const compose = (options, catalogsFactory) => {
27308
27353
  const roots = WorkspaceRoot.layer;
27309
27354
  const detector = PackageManagerDetector.layer;