@savvy-web/silk-effects 1.4.0 → 1.5.1

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.
Files changed (69) hide show
  1. package/changesets/categories/types.js +0 -1
  2. package/changesets/changelog/index.js +0 -2
  3. package/changesets/constants.js +0 -1
  4. package/changesets/errors.js +0 -1
  5. package/changesets/index.js +1 -1
  6. package/changesets/markdownlint/index.js +1 -1
  7. package/changesets/markdownlint/rules/dependency-table-format.js +2 -2
  8. package/changesets/markdownlint/rules/utils.js +1 -1
  9. package/changesets/remark/rules/uncategorized-content.js +1 -1
  10. package/changesets/schemas/changeset.js +0 -1
  11. package/changesets/schemas/dependency-table.js +0 -1
  12. package/changesets/schemas/git.js +0 -1
  13. package/changesets/schemas/github.js +0 -1
  14. package/changesets/schemas/options.js +0 -1
  15. package/changesets/schemas/package-scope.js +0 -1
  16. package/changesets/schemas/primitives.js +0 -1
  17. package/changesets/schemas/release-plan.js +0 -1
  18. package/changesets/schemas/version-files.js +0 -1
  19. package/changesets/services/branch-analyzer.js +0 -1
  20. package/changesets/services/config-inspector.js +1 -2
  21. package/changesets/services/release-planner.js +1 -2
  22. package/changesets/services/workspace-snapshot.js +0 -1
  23. package/changesets/utils/jsonpath.js +1 -1
  24. package/changesets/utils/publishability.js +2 -3
  25. package/changesets/utils/remark-pipeline.js +1 -1
  26. package/changesets/utils/worktree-snapshot.js +2 -2
  27. package/commitlint/config/factory.js +1 -1
  28. package/commitlint/config/schema.js +1 -1
  29. package/commitlint/hook/diagnostics/package-manager.js +1 -1
  30. package/commitlint/index.js +1 -2
  31. package/errors/BiomeSyncError.js +2 -1
  32. package/errors/ChangesetConfigError.js +2 -1
  33. package/errors/ConfigNotFoundError.js +2 -1
  34. package/errors/SectionParseError.js +1 -0
  35. package/errors/SectionValidationError.js +1 -0
  36. package/errors/SectionWriteError.js +1 -0
  37. package/errors/TagFormatError.js +2 -1
  38. package/errors/ToolNotFoundError.js +1 -0
  39. package/errors/ToolResolutionError.js +1 -0
  40. package/errors/ToolVersionMismatchError.js +1 -0
  41. package/errors/VersioningDetectionError.js +2 -1
  42. package/errors/WorkspaceAnalysisError.js +2 -1
  43. package/index.d.ts +265 -84
  44. package/lint/handlers/PnpmWorkspace.js +1 -1
  45. package/lint/index.js +1 -1
  46. package/package.json +2 -2
  47. package/schemas/CommentStyle.js +1 -0
  48. package/schemas/ResolvedTool.js +2 -1
  49. package/schemas/SavvySections.js +6 -1
  50. package/schemas/SectionBlock.js +3 -2
  51. package/schemas/SectionDefinition.js +4 -2
  52. package/schemas/SectionResults.js +12 -3
  53. package/schemas/TagStrategySchemas.js +2 -1
  54. package/schemas/ToolDefinition.js +2 -1
  55. package/schemas/ToolResults.js +18 -4
  56. package/schemas/VersioningSchemas.js +8 -4
  57. package/schemas/WorkspaceAnalysisSchemas.js +3 -0
  58. package/services/BiomeSchemaSync.js +4 -0
  59. package/services/ChangesetConfig.js +2 -0
  60. package/services/ChangesetConfigReader.js +4 -2
  61. package/services/ConfigDiscovery.js +2 -0
  62. package/services/ManagedSection.js +2 -0
  63. package/services/SilkPublishability.js +16 -12
  64. package/services/SilkWorkspaceAnalyzer.js +4 -2
  65. package/services/TagStrategy.js +3 -1
  66. package/services/ToolDiscovery.js +2 -0
  67. package/services/VersioningStrategy.js +2 -0
  68. package/turbo/index.js +1 -1
  69. package/utils/ToolCommand.js +2 -1
@@ -58,7 +58,7 @@ var PnpmWorkspace = class PnpmWorkspace {
58
58
  /**
59
59
  * Keys whose array values should be sorted alphabetically.
60
60
  */
61
- static SORTABLE_ARRAY_KEYS = new Set([
61
+ static SORTABLE_ARRAY_KEYS = /* @__PURE__ */ new Set([
62
62
  "packages",
63
63
  "onlyBuiltDependencies",
64
64
  "publicHoistPattern"
package/lint/index.js CHANGED
@@ -50,4 +50,4 @@ var lint_exports = /* @__PURE__ */ __exportAll({
50
50
  });
51
51
 
52
52
  //#endregion
53
- export { lint_exports };
53
+ export { Biome, Command, DEFAULT_CONFIG_PATH, Filter, HUSKY_HOOK_PATH, Handler, LegacySavvyLintHygieneDef, MARKDOWNLINT_CONFIG, MARKDOWNLINT_CONFIG_PATH, MARKDOWNLINT_SCHEMA, MARKDOWNLINT_TEMPLATE, Markdown, POST_CHECKOUT_HOOK_PATH, POST_COMMIT_HOOK_PATH, POST_MERGE_HOOK_PATH, PackageJson, PnpmWorkspace, Preset, SavvyLintSectionDef, ShellScripts, TypeScript, Yaml, createConfig, generateManagedContent, getWorkspacePackagePaths, getWorkspacePackages, getWorkspaceRoot, isWorkspacePackagePath, lint_exports, resetWorkspaceCache, savvyLintBlock };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@savvy-web/silk-effects",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "private": false,
5
5
  "description": "Shared Effect library for Silk Suite conventions",
6
6
  "homepage": "https://github.com/savvy-web/systems/tree/main/packages/silk-effects",
@@ -41,7 +41,7 @@
41
41
  "remark-parse": "^11.0.0",
42
42
  "remark-stringify": "^11.0.0",
43
43
  "semver-effect": "^0.2.1",
44
- "shell-quote": "^1.8.4",
44
+ "shell-quote": "^1.9.0",
45
45
  "sort-package-json": "^4.0.0",
46
46
  "tinyglobby": "^0.2.17",
47
47
  "unified": "^11.0.5",
@@ -9,6 +9,7 @@ import { Schema } from "effect";
9
9
  * - `"//"` — C-style, suitable for JavaScript/TypeScript files.
10
10
  *
11
11
  * @since 0.1.0
12
+ * @public
12
13
  */
13
14
  const CommentStyle = Schema.Literal("#", "//");
14
15
 
@@ -8,9 +8,10 @@ const PackageManager = Schema.Literal("npm", "pnpm", "yarn", "bun");
8
8
  /**
9
9
  * Result of resolving a {@link ToolDefinition}.
10
10
  *
11
- * Provides {@link exec} and {@link dlx} to build commands for the resolved tool.
11
+ * Provides `exec` and `dlx` to build commands for the resolved tool.
12
12
  *
13
13
  * @since 0.2.0
14
+ * @public
14
15
  */
15
16
  var ResolvedTool = class ResolvedTool extends Schema.TaggedClass()("ResolvedTool", {
16
17
  name: Schema.String,
@@ -12,6 +12,7 @@ import { ShellSectionDefinition } from "./SectionDefinition.js";
12
12
  * ```
13
13
  *
14
14
  * @since 0.5.0
15
+ * @public
15
16
  */
16
17
  const SavvyBaseSection = ShellSectionDefinition.make({ toolName: "savvy-base" });
17
18
  /**
@@ -20,6 +21,7 @@ const SavvyBaseSection = ShellSectionDefinition.make({ toolName: "savvy-base" })
20
21
  * `toolName` is `"savvy-hooks"`; pair with {@link savvyHooksHygiene}.
21
22
  *
22
23
  * @since 0.5.0
24
+ * @public
23
25
  */
24
26
  const SavvyHooksSection = ShellSectionDefinition.make({ toolName: "savvy-hooks" });
25
27
  /**
@@ -34,6 +36,7 @@ const SavvyHooksSection = ShellSectionDefinition.make({ toolName: "savvy-hooks"
34
36
  * @returns The preamble shell, with no surrounding markers or trailing newline.
35
37
  *
36
38
  * @since 0.5.0
39
+ * @public
37
40
  */
38
41
  function savvyBasePreamble() {
39
42
  return `ROOT=$(git rev-parse --show-toplevel)
@@ -71,6 +74,7 @@ pm_exec() {
71
74
  * @returns The hygiene shell, with no surrounding markers or trailing newline.
72
75
  *
73
76
  * @since 0.5.0
77
+ * @public
74
78
  */
75
79
  function savvyHooksHygiene() {
76
80
  return `if ! { [ -n "$CI" ] || [ -n "$GITHUB_ACTIONS" ]; }; then
@@ -89,7 +93,7 @@ fi`;
89
93
  *
90
94
  * **Precondition:** a {@link SavvyBaseSection} block must precede this section in the same
91
95
  * hook file so `in_ci` and `pm_exec` are defined. Consumers guarantee this by passing both
92
- * to {@link ManagedSection.syncMany | ManagedSection.syncMany} in order:
96
+ * to `ManagedSection.syncMany` in order:
93
97
  *
94
98
  * @example
95
99
  * ```ts
@@ -104,6 +108,7 @@ fi`;
104
108
  * @returns A shell {@link SectionBlock} (`commentStyle: "#"`) for `toolName`.
105
109
  *
106
110
  * @since 0.5.0
111
+ * @public
107
112
  */
108
113
  function savvyToolSection(toolName, command) {
109
114
  return ShellSectionDefinition.make({ toolName }).block(`in_ci || pm_exec ${command}`);
@@ -6,10 +6,11 @@ import { Equal, Function, Hash, Schema } from "effect";
6
6
  /**
7
7
  * The content between managed section markers.
8
8
  *
9
- * {@link Equal} compares normalized content only (trimmed, whitespace-collapsed).
10
- * Use {@link SectionBlock.diff | diff} to compute line-level differences.
9
+ * `Equal` compares normalized content only (trimmed, whitespace-collapsed).
10
+ * Use `diff` to compute line-level differences.
11
11
  *
12
12
  * @since 0.2.0
13
+ * @public
13
14
  */
14
15
  var SectionBlock = class SectionBlock extends Schema.TaggedClass()("SectionBlock", {
15
16
  toolName: Schema.String,
@@ -8,11 +8,12 @@ import { Effect, Equal, Function, Hash, Schema } from "effect";
8
8
  /**
9
9
  * Identity envelope for a managed section type.
10
10
  *
11
- * {@link Equal} compares on `toolName` + `commentStyle`.
11
+ * `Equal` compares on `toolName` + `commentStyle`.
12
12
  * Use {@link SectionDefinition.block | block()} to create a {@link SectionBlock},
13
- * or {@link SectionDefinition.generate | generate()} for a typed factory.
13
+ * or `generate()` for a typed factory.
14
14
  *
15
15
  * @since 0.2.0
16
+ * @public
16
17
  */
17
18
  var SectionDefinition = class SectionDefinition extends Schema.TaggedClass()("SectionDefinition", {
18
19
  toolName: Schema.String,
@@ -91,6 +92,7 @@ var SectionDefinition = class SectionDefinition extends Schema.TaggedClass()("Se
91
92
  * `commentStyle` is always `"#"` — only `toolName` is required.
92
93
  *
93
94
  * @since 0.2.0
95
+ * @public
94
96
  */
95
97
  var ShellSectionDefinition = class extends Schema.TaggedClass()("ShellSectionDefinition", { toolName: Schema.String }) {
96
98
  get commentStyle() {
@@ -1,11 +1,20 @@
1
1
  import { Data } from "effect";
2
2
 
3
3
  //#region src/schemas/SectionResults.ts
4
- /** @since 0.2.0 */
4
+ /**
5
+ * @since 0.2.0
6
+ * @public
7
+ */
5
8
  const SectionDiff = Data.taggedEnum();
6
- /** @since 0.2.0 */
9
+ /**
10
+ * @since 0.2.0
11
+ * @public
12
+ */
7
13
  const SyncResult = Data.taggedEnum();
8
- /** @since 0.2.0 */
14
+ /**
15
+ * @since 0.2.0
16
+ * @public
17
+ */
9
18
  const CheckResult = Data.taggedEnum();
10
19
 
11
20
  //#endregion
@@ -8,9 +8,10 @@ import { Schema } from "effect";
8
8
  * - `"single"` — one shared tag for the entire release (e.g. `1.2.3`).
9
9
  * - `"scoped"` — a per-package tag that includes the package name (e.g. `@my-org/pkg@1.2.3`).
10
10
  *
11
- * Determined by {@link TagStrategy.determine} based on the {@link VersioningStrategyResult}.
11
+ * Determined by `TagStrategy.determine` based on the {@link (VersioningStrategyResult:type)}.
12
12
  *
13
13
  * @since 0.1.0
14
+ * @public
14
15
  */
15
16
  const TagStrategyType = Schema.Literal("single", "scoped");
16
17
 
@@ -6,9 +6,10 @@ const NameSchema = Schema.Struct({ name: Schema.String });
6
6
  /**
7
7
  * Declares a CLI tool's identity and resolution constraints.
8
8
  *
9
- * {@link Equal} compares on `name` only (identity).
9
+ * `Equal` compares on `name` only (identity).
10
10
  *
11
11
  * @since 0.2.0
12
+ * @public
12
13
  */
13
14
  var ToolDefinition = class ToolDefinition {
14
15
  _tag = "ToolDefinition";
@@ -1,13 +1,27 @@
1
1
  import { Data, Schema } from "effect";
2
2
 
3
3
  //#region src/schemas/ToolResults.ts
4
- /** Where a tool was resolved from. @since 0.2.0 */
4
+ /**
5
+ * Where a tool was resolved from.
6
+ *
7
+ * @since 0.2.0
8
+ * @public
9
+ */
5
10
  const ToolSource = Schema.Literal("global", "local");
6
- /** @since 0.2.0 */
11
+ /**
12
+ * @since 0.2.0
13
+ * @public
14
+ */
7
15
  const VersionExtractor = Data.taggedEnum();
8
- /** @since 0.2.0 */
16
+ /**
17
+ * @since 0.2.0
18
+ * @public
19
+ */
9
20
  const ResolutionPolicy = Data.taggedEnum();
10
- /** @since 0.2.0 */
21
+ /**
22
+ * @since 0.2.0
23
+ * @public
24
+ */
11
25
  const SourceRequirement = Data.taggedEnum();
12
26
 
13
27
  //#endregion
@@ -34,11 +34,12 @@ const SnapshotConfig = Schema.Struct({
34
34
  *
35
35
  * @remarks
36
36
  * Represents the parsed `.changeset/config.json` file. All fields are optional
37
- * to allow partial configs. Use {@link SilkChangesetConfigFile} when the Silk changelog
37
+ * to allow partial configs. Use {@link (SilkChangesetConfigFile:type)} when the Silk changelog
38
38
  * adapter is detected.
39
39
  *
40
40
  * @since 0.1.0
41
41
  */
42
+ /** @public */
42
43
  const ChangesetConfigFile = Schema.Struct({
43
44
  changelog: Schema.optional(Schema.Union(Schema.String, Schema.Array(Schema.Unknown), Schema.Literal(false))),
44
45
  commit: Schema.optional(Schema.Union(Schema.Boolean, Schema.String, Schema.Array(Schema.Unknown))),
@@ -58,12 +59,13 @@ const ChangesetConfigFile = Schema.Struct({
58
59
  * Extended changeset config for repos using the `@savvy-web/changesets` changelog adapter.
59
60
  *
60
61
  * @remarks
61
- * Extends {@link ChangesetConfigFile} with a `_isSilk` marker flag that is automatically
62
+ * Extends {@link (ChangesetConfigFile:type)} with a `_isSilk` marker flag that is automatically
62
63
  * set to `true`. Detected by {@link ChangesetConfigReader} when the `changelog` field
63
64
  * references `@savvy-web/changesets`.
64
65
  *
65
66
  * @since 0.1.0
66
67
  */
68
+ /** @public */
67
69
  const SilkChangesetConfigFile = Schema.extend(ChangesetConfigFile, Schema.Struct({ _isSilk: Schema.optionalWith(Schema.Boolean, { default: () => true }) }));
68
70
  /**
69
71
  * Versioning strategy classification for a workspace.
@@ -74,16 +76,18 @@ const SilkChangesetConfigFile = Schema.extend(ChangesetConfigFile, Schema.Struct
74
76
  * - `"independent"` — multiple publishable packages with independent version bumps.
75
77
  *
76
78
  * @since 0.1.0
79
+ * @public
77
80
  */
78
81
  const VersioningStrategyType = Schema.Literal("single", "fixed-group", "independent");
79
82
  /**
80
83
  * Output of the versioning strategy detection, combining the strategy type with group metadata.
81
84
  *
82
85
  * @remarks
83
- * Produced by {@link VersioningStrategy.detect} and consumed by {@link TagStrategy.determine}
86
+ * Produced by `VersioningStrategy.detect` and consumed by `TagStrategy.determine`
84
87
  * to decide on the appropriate git-tag format.
85
88
  *
86
89
  * @since 0.1.0
90
+ * @public
87
91
  */
88
92
  const VersioningStrategyResult = Schema.Struct({
89
93
  type: VersioningStrategyType,
@@ -92,4 +96,4 @@ const VersioningStrategyResult = Schema.Struct({
92
96
  });
93
97
 
94
98
  //#endregion
95
- export { ChangesetConfigFile, SilkChangesetConfigFile, VersioningStrategyResult };
99
+ export { ChangesetConfigFile, SilkChangesetConfigFile, VersioningStrategyResult, VersioningStrategyType };
@@ -23,6 +23,7 @@ const PublishTargetObject = Schema.Struct({
23
23
  * Silk `targets` extension for multi-registry publishing.
24
24
  *
25
25
  * @since 0.2.0
26
+ * @public
26
27
  */
27
28
  var SilkPublishConfig = class extends PublishConfig.extend("SilkPublishConfig")({ targets: Schema.optional(Schema.Array(Schema.Union(PublishTargetShorthand, PublishTargetObject))) }) {};
28
29
  const KNOWN_REGISTRIES = {
@@ -45,6 +46,7 @@ const WorkspaceVersion = Schema.Struct({ current: Schema.String });
45
46
  * and release group membership.
46
47
  *
47
48
  * @since 0.2.0
49
+ * @public
48
50
  */
49
51
  var AnalyzedWorkspace = class AnalyzedWorkspace extends Schema.TaggedClass()("AnalyzedWorkspace", {
50
52
  name: Schema.String,
@@ -134,6 +136,7 @@ const PackageManagerInfo = Schema.Struct({
134
136
  * and project-level configuration.
135
137
  *
136
138
  * @since 0.2.0
139
+ * @public
137
140
  */
138
141
  var WorkspaceAnalysis = class WorkspaceAnalysis extends Schema.TaggedClass()("WorkspaceAnalysis", {
139
142
  root: Schema.String,
@@ -11,6 +11,7 @@ import { parse } from "jsonc-effect";
11
11
  * @returns The bare semver string (e.g. `"1.9.3"`).
12
12
  *
13
13
  * @since 0.1.0
14
+ * @public
14
15
  */
15
16
  function extractSemver(version) {
16
17
  return version.replace(/^[\^~>=<v]+/, "");
@@ -22,6 +23,7 @@ function extractSemver(version) {
22
23
  * @returns The canonical `biomejs.dev` schema URL for that version.
23
24
  *
24
25
  * @since 0.1.0
26
+ * @public
25
27
  */
26
28
  function buildSchemaUrl(version) {
27
29
  return `https://biomejs.dev/schemas/${version}/schema.json`;
@@ -58,6 +60,7 @@ function findBiomeConfigs(cwd, fs) {
58
60
  * ```
59
61
  *
60
62
  * @since 0.1.0
63
+ * @public
61
64
  */
62
65
  var BiomeSchemaSync = class extends Context.Tag("@savvy-web/silk-effects/BiomeSchemaSync")() {};
63
66
  /**
@@ -68,6 +71,7 @@ var BiomeSchemaSync = class extends Context.Tag("@savvy-web/silk-effects/BiomeSc
68
71
  * `BunContext.layer` to satisfy this dependency.
69
72
  *
70
73
  * @since 0.1.0
74
+ * @public
71
75
  */
72
76
  const BiomeSchemaSyncLive = Layer.effect(BiomeSchemaSync, Effect.gen(function* () {
73
77
  const fs = yield* FileSystem.FileSystem;
@@ -11,6 +11,7 @@ import { Context, Effect, Layer, Option } from "effect";
11
11
  * to `mode: "none"` and empty/false defaults.
12
12
  *
13
13
  * @since 0.4.0
14
+ * @public
14
15
  */
15
16
  var ChangesetConfig = class extends Context.Tag("@savvy-web/silk-effects/ChangesetConfig")() {
16
17
  /**
@@ -36,6 +37,7 @@ const isSilk = (cfg) => "_isSilk" in cfg && cfg._isSilk === true;
36
37
  * `ChangesetConfigReaderLive` + a platform layer (`NodeContext.layer`).
37
38
  *
38
39
  * @since 0.4.0
40
+ * @public
39
41
  */
40
42
  const ChangesetConfigLive = Layer.effect(ChangesetConfig, Effect.gen(function* () {
41
43
  const reader = yield* ChangesetConfigReader;
@@ -26,8 +26,8 @@ function isSilkChangelog(changelog) {
26
26
  *
27
27
  * @remarks
28
28
  * Automatically detects whether the config uses the Silk changelog adapter
29
- * (`@savvy-web/changesets`) and decodes as {@link SilkChangesetConfigFile} or the
30
- * standard {@link ChangesetConfigFile} accordingly.
29
+ * (`@savvy-web/changesets`) and decodes as {@link (SilkChangesetConfigFile:type)} or the
30
+ * standard {@link (ChangesetConfigFile:type)} accordingly.
31
31
  *
32
32
  * @example
33
33
  * ```typescript
@@ -43,6 +43,7 @@ function isSilkChangelog(changelog) {
43
43
  * ```
44
44
  *
45
45
  * @since 0.1.0
46
+ * @public
46
47
  */
47
48
  var ChangesetConfigReader = class extends Context.Tag("@savvy-web/silk-effects/ChangesetConfigReader")() {};
48
49
  /**
@@ -53,6 +54,7 @@ var ChangesetConfigReader = class extends Context.Tag("@savvy-web/silk-effects/C
53
54
  * `BunContext.layer` to satisfy this dependency.
54
55
  *
55
56
  * @since 0.1.0
57
+ * @public
56
58
  */
57
59
  const ChangesetConfigReaderLive = Layer.effect(ChangesetConfigReader, Effect.gen(function* () {
58
60
  const fs = yield* FileSystem.FileSystem;
@@ -26,6 +26,7 @@ import { FileSystem } from "@effect/platform";
26
26
  * ```
27
27
  *
28
28
  * @since 0.1.0
29
+ * @public
29
30
  */
30
31
  var ConfigDiscovery = class extends Context.Tag("@savvy-web/silk-effects/ConfigDiscovery")() {};
31
32
  /**
@@ -42,6 +43,7 @@ function safeExists(fs, path) {
42
43
  * `BunContext.layer` to satisfy this dependency.
43
44
  *
44
45
  * @since 0.1.0
46
+ * @public
45
47
  */
46
48
  const ConfigDiscoveryLive = Layer.effect(ConfigDiscovery, Effect.gen(function* () {
47
49
  const fs = yield* FileSystem.FileSystem;
@@ -70,12 +70,14 @@ function findAllSections(content) {
70
70
  * Content operations (`write`, `sync`, `check`) take a {@link SectionBlock}.
71
71
  *
72
72
  * @since 0.2.0
73
+ * @public
73
74
  */
74
75
  var ManagedSection = class extends Context.Tag("@savvy-web/silk-effects/ManagedSection")() {};
75
76
  /**
76
77
  * Live implementation of {@link ManagedSection} backed by `@effect/platform` FileSystem.
77
78
  *
78
79
  * @since 0.2.0
80
+ * @public
79
81
  */
80
82
  const ManagedSectionLive = Layer.effect(ManagedSection, Effect.gen(function* () {
81
83
  const fs = yield* FileSystem.FileSystem;
@@ -20,7 +20,7 @@ const DEFAULT_REGISTRIES = {
20
20
  *
21
21
  * @remarks
22
22
  * The npm public registry and GitHub Packages both accept provenance attestations through the
23
- * Sigstore/OIDC trusted-publishing flow, so a {@link PublishTarget} bound to either is marked
23
+ * Sigstore/OIDC trusted-publishing flow, so a `PublishTarget` bound to either is marked
24
24
  * `provenance: true` by default — this is what gates the release action's attestation step. JSR
25
25
  * and custom registries do not participate and resolve to `false`. Matching is endpoint-based
26
26
  * (not target-key based) so a custom key pointed at one of these registries still opts in.
@@ -36,7 +36,7 @@ const provenanceForRegistry = (registry) => {
36
36
  return hostname === "registry.npmjs.org" || hostname === "npm.pkg.github.com";
37
37
  };
38
38
  /**
39
- * Silk publishability rules over `workspaces-effect`'s {@link PublishTarget}.
39
+ * Silk publishability rules over `workspaces-effect`'s `PublishTarget`.
40
40
  *
41
41
  * @remarks
42
42
  * In silk mode `private: true` is the norm on workspace `package.json`; publishability is
@@ -44,6 +44,7 @@ const provenanceForRegistry = (registry) => {
44
44
  * default. All helpers are static so a consumer sees the full rule surface in one place.
45
45
  *
46
46
  * @since 0.4.0
47
+ * @public
47
48
  */
48
49
  var SilkPublishability = class {
49
50
  /**
@@ -52,7 +53,7 @@ var SilkPublishability = class {
52
53
  *
53
54
  * - A non-empty `publishConfig.targets` map (the bundler's Record-map form) makes the
54
55
  * package publishable regardless of `private`. With a `binding` (post-prod-build), one
55
- * {@link PublishTarget} is emitted per resolved registry target, its `directory` set to
56
+ * `PublishTarget` is emitted per resolved registry target, its `directory` set to
56
57
  * the bound group's `dist/prod/<group>/pkg` dir. Without a binding (pre-build), one
57
58
  * placeholder target is emitted per declared key so publishability and target counts
58
59
  * are correct; the directory is best-effort and unused until the build writes the
@@ -115,7 +116,7 @@ var SilkPublishability = class {
115
116
  return [];
116
117
  }
117
118
  /**
118
- * Resolve a package's publish targets via {@link PublishabilityDetector}, then drop any
119
+ * Resolve a package's publish targets via {@link SilkPublishability}, then drop any
119
120
  * whose built `directory` package.json is `private: true`. Returned targets keep the
120
121
  * detector's original (possibly package-relative) `directory`.
121
122
  */
@@ -131,7 +132,7 @@ var SilkPublishability = class {
131
132
  }
132
133
  /**
133
134
  * The publishable, non-ignored packages, resolved through the single
134
- * {@link PublishabilityDetector} (which already honors changeset ignore in adaptive mode).
135
+ * {@link SilkPublishability} (which already honors changeset ignore in adaptive mode).
135
136
  */
136
137
  static listPublishable(root) {
137
138
  return Effect.gen(function* () {
@@ -167,24 +168,26 @@ const readRaw = (fs, packageJsonPath) => fs.readFileString(packageJsonPath).pipe
167
168
  *
168
169
  * @remarks
169
170
  * Returns `null` when the file is missing/unreadable/malformed — i.e. before the prod build
170
- * has run. {@link SilkPublishability.detect} falls back to declared-key placeholders in that
171
- * case. Used by the silk {@link PublishabilityDetector} layers and the workspace analyzer.
171
+ * has run. `SilkPublishability.detect` falls back to declared-key placeholders in that
172
+ * case. Used by the silk {@link SilkPublishability} layers and the workspace analyzer.
172
173
  *
173
174
  * @param fs - The FileSystem service.
174
175
  * @param pkgPath - Absolute path to the package directory.
175
176
  * @since 1.0.0
177
+ * @public
176
178
  */
177
179
  const readTargetsBinding = (fs, pkgPath) => fs.readFileString(join(pkgPath, "dist", "prod", "targets.json")).pipe(Effect.flatMap((content) => Effect.try({
178
180
  try: () => JSON.parse(content),
179
181
  catch: () => /* @__PURE__ */ new Error("invalid targets.json")
180
182
  })), Effect.orElseSucceed(() => null));
181
183
  /**
182
- * Override of `workspaces-effect`'s {@link PublishabilityDetector} Tag with pure silk rules.
184
+ * Override of `workspaces-effect`'s {@link SilkPublishability} Tag with pure silk rules.
183
185
  *
184
186
  * @remarks Requires `FileSystem` (captured at layer build); `detect` reads the raw
185
- * `package.json` from `pkg.packageJsonPath` and applies {@link SilkPublishability.detect}.
187
+ * `package.json` from `pkg.packageJsonPath` and applies `SilkPublishability.detect`.
186
188
  *
187
189
  * @since 0.4.0
190
+ * @public
188
191
  */
189
192
  const SilkPublishabilityDetectorLive = Layer.effect(PublishabilityDetector, Effect.gen(function* () {
190
193
  const fs = yield* FileSystem.FileSystem;
@@ -196,13 +199,14 @@ const SilkPublishabilityDetectorLive = Layer.effect(PublishabilityDetector, Effe
196
199
  }) };
197
200
  }));
198
201
  /**
199
- * Ignore-aware override of {@link PublishabilityDetector}. `detect` short-circuits to `[]`
200
- * for changeset-ignored packages, then dispatches on {@link ChangesetConfig.mode}:
201
- * `none` → `[]`; `silk` → {@link SilkPublishability.detect}; `vanilla` → the library default.
202
+ * Ignore-aware override of {@link SilkPublishability}. `detect` short-circuits to `[]`
203
+ * for changeset-ignored packages, then dispatches on `ChangesetConfig.mode`:
204
+ * `none` → `[]`; `silk` → `SilkPublishability.detect`; `vanilla` → the library default.
202
205
  *
203
206
  * @remarks Requires `FileSystem` + {@link ChangesetConfig} at build.
204
207
  *
205
208
  * @since 0.4.0
209
+ * @public
206
210
  */
207
211
  const PublishabilityDetectorAdaptiveLive = Layer.effect(PublishabilityDetector, Effect.gen(function* () {
208
212
  const fs = yield* FileSystem.FileSystem;
@@ -16,7 +16,7 @@ import { PackageManagerDetector, TopologicalSorter, WorkspaceDiscovery } from "w
16
16
  * wiring up fixed/linked release groups.
17
17
  *
18
18
  * @remarks
19
- * Orchestrates {@link WorkspaceDiscovery}, {@link PackageManagerDetector},
19
+ * Orchestrates `WorkspaceDiscovery`, `PackageManagerDetector`,
20
20
  * {@link ChangesetConfigReader}, {@link VersioningStrategy}, and
21
21
  * {@link TagStrategy} to produce a complete {@link WorkspaceAnalysis} for a
22
22
  * given workspace root.
@@ -35,6 +35,7 @@ import { PackageManagerDetector, TopologicalSorter, WorkspaceDiscovery } from "w
35
35
  * ```
36
36
  *
37
37
  * @since 0.2.0
38
+ * @public
38
39
  */
39
40
  var SilkWorkspaceAnalyzer = class extends Context.Tag("@savvy-web/silk-effects/SilkWorkspaceAnalyzer")() {};
40
41
  /**
@@ -105,10 +106,11 @@ function computeReleaseStatus(pkgName, isPrivate, isPublishable, config) {
105
106
  * Live implementation of {@link SilkWorkspaceAnalyzer}.
106
107
  *
107
108
  * @remarks
108
- * Requires {@link WorkspaceDiscovery}, {@link PackageManagerDetector},
109
+ * Requires `WorkspaceDiscovery`, `PackageManagerDetector`,
109
110
  * {@link ChangesetConfigReader}, {@link VersioningStrategy}, and {@link TagStrategy}.
110
111
  *
111
112
  * @since 0.2.0
113
+ * @public
112
114
  */
113
115
  const SilkWorkspaceAnalyzerLive = Layer.effect(SilkWorkspaceAnalyzer, Effect.gen(function* () {
114
116
  const fs = yield* FileSystem.FileSystem;
@@ -6,7 +6,7 @@ import { Context, Effect, Layer } from "effect";
6
6
  * Service that determines and applies the git-tag naming strategy for a release.
7
7
  *
8
8
  * @remarks
9
- * Consumes a {@link VersioningStrategyResult} to pick between `"single"` and `"scoped"`
9
+ * Consumes a {@link (VersioningStrategyResult:type)} to pick between `"single"` and `"scoped"`
10
10
  * tag formats, then formats tag strings accordingly. Independent versioning always
11
11
  * produces scoped tags; single and fixed-group versioning produces a single shared tag.
12
12
  *
@@ -23,6 +23,7 @@ import { Context, Effect, Layer } from "effect";
23
23
  * ```
24
24
  *
25
25
  * @since 0.1.0
26
+ * @public
26
27
  */
27
28
  var TagStrategy = class extends Context.Tag("@savvy-web/silk-effects/TagStrategy")() {};
28
29
  /**
@@ -32,6 +33,7 @@ var TagStrategy = class extends Context.Tag("@savvy-web/silk-effects/TagStrategy
32
33
  * All logic is pure: strategy determination and tag formatting involve no I/O.
33
34
  *
34
35
  * @since 0.1.0
36
+ * @public
35
37
  */
36
38
  const TagStrategyLive = Layer.succeed(TagStrategy, TagStrategy.of({
37
39
  determine: (versioningResult) => {
@@ -27,6 +27,7 @@ import { PackageManagerDetector, WorkspaceRoot } from "workspaces-effect";
27
27
  * ```
28
28
  *
29
29
  * @since 0.2.0
30
+ * @public
30
31
  */
31
32
  var ToolDiscovery = class extends Context.Tag("@savvy-web/silk-effects/ToolDiscovery")() {};
32
33
  /**
@@ -101,6 +102,7 @@ function extractVersion(output, extractor) {
101
102
  * and `WorkspaceRoot` from `workspaces-effect`.
102
103
  *
103
104
  * @since 0.2.0
105
+ * @public
104
106
  */
105
107
  const ToolDiscoveryLive = Layer.effect(ToolDiscovery, Effect.gen(function* () {
106
108
  const executor = yield* CommandExecutor.CommandExecutor;
@@ -25,6 +25,7 @@ import { Context, Effect, Layer } from "effect";
25
25
  * ```
26
26
  *
27
27
  * @since 0.1.0
28
+ * @public
28
29
  */
29
30
  var VersioningStrategy = class extends Context.Tag("@savvy-web/silk-effects/VersioningStrategy")() {};
30
31
  /**
@@ -35,6 +36,7 @@ var VersioningStrategy = class extends Context.Tag("@savvy-web/silk-effects/Vers
35
36
  * If the config file is absent, an empty `fixed` groups array is assumed.
36
37
  *
37
38
  * @since 0.1.0
39
+ * @public
38
40
  */
39
41
  const VersioningStrategyLive = Layer.effect(VersioningStrategy, Effect.gen(function* () {
40
42
  const configReader = yield* ChangesetConfigReader;
package/turbo/index.js CHANGED
@@ -29,4 +29,4 @@ var turbo_exports = /* @__PURE__ */ __exportAll({
29
29
  });
30
30
 
31
31
  //#endregion
32
- export { turbo_exports };
32
+ export { AffectedResult, CacheDiagnosis, DryRunParseError, GlobalHashSummary, GraphNode, MissExplanation, NotATurboRepoError, PackageCacheStatus, TaskGraphResult, TurboCache, TurboDigest, TurboDryRun, TurboDryTask, TurboEnvVars, TurboExecError, TurboGlobalCacheInputs, TurboInspector, TurboInspectorLive, TurboNotInstalledError, turbo_exports };
@@ -2,11 +2,12 @@ import { Command } from "@effect/platform";
2
2
 
3
3
  //#region src/utils/ToolCommand.ts
4
4
  /**
5
- * Wraps `@effect/platform` {@link Command.Command} with instance method ergonomics.
5
+ * Wraps `@effect/platform` `Command.Command` with instance method ergonomics.
6
6
  *
7
7
  * Use `yield* cmd.string()` instead of `yield* Command.string(cmd)`.
8
8
  *
9
9
  * @since 0.2.0
10
+ * @public
10
11
  */
11
12
  var ToolCommand = class ToolCommand {
12
13
  command;