@codefast/cli 0.11.0 → 0.12.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.
Files changed (222) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +57 -46
  3. package/dist/arrange/command.js +24 -25
  4. package/dist/arrange/domain/ast/collectors-cn.d.ts +2 -2
  5. package/dist/arrange/domain/ast/collectors-cn.js +2 -2
  6. package/dist/arrange/domain/ast/collectors-jsx.d.ts +2 -2
  7. package/dist/arrange/domain/ast/collectors-jsx.js +1 -1
  8. package/dist/arrange/domain/ast/collectors-tv.d.ts +2 -2
  9. package/dist/arrange/domain/ast/collectors-tv.js +5 -5
  10. package/dist/arrange/domain/ast/helpers.d.ts +2 -2
  11. package/dist/arrange/domain/ast/helpers.js +3 -4
  12. package/dist/arrange/domain/ast/simplify-targets.d.ts +1 -1
  13. package/dist/arrange/domain/ast/simplify-targets.js +5 -5
  14. package/dist/arrange/domain/ast/targets.d.ts +2 -2
  15. package/dist/arrange/domain/ast/targets.js +9 -9
  16. package/dist/arrange/domain/ast/translator.d.ts +1 -1
  17. package/dist/arrange/domain/ast/translator.js +1 -1
  18. package/dist/arrange/domain/constants.d.ts +1 -1
  19. package/dist/arrange/domain/grouping-service.d.ts +2 -2
  20. package/dist/arrange/domain/grouping-service.js +3 -3
  21. package/dist/arrange/domain/grouping.js +3 -3
  22. package/dist/arrange/domain/imports.d.ts +1 -1
  23. package/dist/arrange/domain/imports.js +2 -2
  24. package/dist/arrange/domain/source-text-formatters.js +1 -1
  25. package/dist/arrange/domain/tailwind-token.js +1 -1
  26. package/dist/arrange/domain/token-classifier.d.ts +1 -1
  27. package/dist/arrange/domain/token-classifier.js +2 -2
  28. package/dist/arrange/domain/types.d.ts +3 -3
  29. package/dist/arrange/group/cli-result.d.ts +1 -1
  30. package/dist/arrange/group/output.d.ts +1 -1
  31. package/dist/arrange/group/output.js +1 -1
  32. package/dist/arrange/group/suggest.d.ts +2 -2
  33. package/dist/arrange/group/suggest.js +2 -2
  34. package/dist/arrange/inspect/cli-result.d.ts +1 -1
  35. package/dist/arrange/inspect/domain/analyze-service.d.ts +2 -2
  36. package/dist/arrange/inspect/domain/analyze-service.js +7 -7
  37. package/dist/arrange/inspect/output.d.ts +1 -1
  38. package/dist/arrange/inspect/output.js +2 -2
  39. package/dist/arrange/inspect/run.d.ts +4 -4
  40. package/dist/arrange/inspect/run.js +6 -6
  41. package/dist/arrange/prepare.d.ts +4 -4
  42. package/dist/arrange/prepare.js +5 -5
  43. package/dist/arrange/regroup/cli-result.d.ts +1 -1
  44. package/dist/arrange/regroup/cli-result.js +1 -1
  45. package/dist/arrange/regroup/output.d.ts +2 -2
  46. package/dist/arrange/regroup/output.js +2 -2
  47. package/dist/arrange/regroup/process-file.d.ts +2 -2
  48. package/dist/arrange/regroup/process-file.js +3 -3
  49. package/dist/arrange/regroup/run.d.ts +5 -5
  50. package/dist/arrange/regroup/run.js +4 -4
  51. package/dist/arrange/resolve-target.d.ts +1 -1
  52. package/dist/arrange/resolve-target.js +2 -2
  53. package/dist/arrange/scan-target.d.ts +1 -1
  54. package/dist/arrange/scan-target.js +3 -3
  55. package/dist/arrange/simplify/cli-result.d.ts +1 -1
  56. package/dist/arrange/simplify/fold-targets.d.ts +3 -3
  57. package/dist/arrange/simplify/fold-targets.js +3 -3
  58. package/dist/arrange/simplify/output.d.ts +1 -1
  59. package/dist/arrange/simplify/output.js +1 -1
  60. package/dist/arrange/simplify/process-file.d.ts +3 -3
  61. package/dist/arrange/simplify/process-file.js +5 -5
  62. package/dist/arrange/simplify/run.d.ts +4 -4
  63. package/dist/arrange/simplify/run.js +4 -4
  64. package/dist/arrange/simplify/variant-classname-probe.js +1 -1
  65. package/dist/arrange/source-parse.d.ts +1 -1
  66. package/dist/arrange/source-parse.js +3 -3
  67. package/dist/audit/command.js +45 -28
  68. package/dist/audit/comments/cli-result.d.ts +1 -1
  69. package/dist/audit/comments/cli-result.js +1 -1
  70. package/dist/audit/comments/output.d.ts +1 -1
  71. package/dist/audit/comments/output.js +1 -1
  72. package/dist/audit/comments/prepare.d.ts +4 -4
  73. package/dist/audit/comments/prepare.js +1 -1
  74. package/dist/audit/comments/run.d.ts +4 -4
  75. package/dist/audit/comments/run.js +9 -9
  76. package/dist/audit/display-names/cli-result.d.ts +1 -1
  77. package/dist/audit/display-names/cli-result.js +1 -1
  78. package/dist/audit/display-names/domain/display-names.d.ts +1 -1
  79. package/dist/audit/display-names/output.d.ts +1 -1
  80. package/dist/audit/display-names/output.js +1 -1
  81. package/dist/audit/display-names/prepare.d.ts +4 -4
  82. package/dist/audit/display-names/prepare.js +1 -1
  83. package/dist/audit/display-names/run.d.ts +4 -4
  84. package/dist/audit/display-names/run.js +5 -5
  85. package/dist/audit/domain/types.d.ts +43 -0
  86. package/dist/audit/imports/cli-result.d.ts +1 -1
  87. package/dist/audit/imports/cli-result.js +1 -1
  88. package/dist/audit/imports/domain/import-policy.d.ts +1 -1
  89. package/dist/audit/imports/output.d.ts +1 -1
  90. package/dist/audit/imports/output.js +1 -1
  91. package/dist/audit/imports/prepare.d.ts +4 -4
  92. package/dist/audit/imports/prepare.js +1 -1
  93. package/dist/audit/imports/run.d.ts +4 -4
  94. package/dist/audit/imports/run.js +6 -6
  95. package/dist/audit/links/cli-result.d.ts +1 -1
  96. package/dist/audit/links/cli-result.js +1 -1
  97. package/dist/audit/links/domain/markdown-links.d.ts +3 -3
  98. package/dist/audit/links/domain/markdown-links.js +22 -8
  99. package/dist/audit/links/output.d.ts +1 -1
  100. package/dist/audit/links/output.js +1 -1
  101. package/dist/audit/links/prepare.d.ts +4 -4
  102. package/dist/audit/links/prepare.js +1 -1
  103. package/dist/audit/links/run.d.ts +4 -4
  104. package/dist/audit/links/run.js +4 -4
  105. package/dist/audit/prepare.d.ts +4 -4
  106. package/dist/audit/prepare.js +4 -4
  107. package/dist/audit/publish/cli-result.d.ts +13 -0
  108. package/dist/audit/publish/cli-result.js +22 -0
  109. package/dist/audit/publish/cli-schema.d.ts +18 -0
  110. package/dist/audit/publish/cli-schema.js +12 -0
  111. package/dist/audit/publish/domain/legacy-subpath.d.ts +8 -0
  112. package/dist/audit/publish/domain/legacy-subpath.js +22 -0
  113. package/dist/audit/publish/output.d.ts +7 -0
  114. package/dist/audit/publish/output.js +24 -0
  115. package/dist/audit/publish/prepare.d.ts +16 -0
  116. package/dist/audit/publish/prepare.js +12 -0
  117. package/dist/audit/publish/run.d.ts +14 -0
  118. package/dist/audit/publish/run.js +62 -0
  119. package/dist/audit/rtl/cli-result.d.ts +1 -1
  120. package/dist/audit/rtl/cli-result.js +1 -1
  121. package/dist/audit/rtl/domain/audit-file.d.ts +1 -1
  122. package/dist/audit/rtl/domain/audit-file.js +2 -2
  123. package/dist/audit/rtl/domain/tokenize.d.ts +1 -1
  124. package/dist/audit/rtl/output.d.ts +1 -1
  125. package/dist/audit/rtl/output.js +1 -1
  126. package/dist/audit/rtl/prepare.d.ts +4 -4
  127. package/dist/audit/rtl/prepare.js +5 -5
  128. package/dist/audit/rtl/run.d.ts +4 -4
  129. package/dist/audit/rtl/run.js +4 -4
  130. package/dist/bin.js +1 -1
  131. package/dist/cli.js +5 -5
  132. package/dist/core/cli/command-pipeline.d.ts +4 -5
  133. package/dist/core/cli/command-pipeline.js +7 -7
  134. package/dist/core/cli/format-error.d.ts +1 -1
  135. package/dist/core/cli/resolve-root.d.ts +3 -3
  136. package/dist/core/cli/resolve-root.js +3 -3
  137. package/dist/core/cli/result-handle.d.ts +2 -2
  138. package/dist/core/cli/result-handle.js +4 -4
  139. package/dist/core/config/define-config.d.ts +1 -1
  140. package/dist/core/config/loader.d.ts +2 -2
  141. package/dist/core/config/loader.js +2 -2
  142. package/dist/core/config/warnings.js +1 -1
  143. package/dist/core/config.d.ts +4 -4
  144. package/dist/core/config.js +4 -4
  145. package/dist/core/filesystem/node.d.ts +1 -1
  146. package/dist/core/schema-parse.d.ts +2 -2
  147. package/dist/core/schema-parse.js +2 -2
  148. package/dist/core/workspace/markdown-walk.d.ts +1 -1
  149. package/dist/core/workspace/markdown-walk.js +1 -1
  150. package/dist/core/workspace/package-version.d.ts +1 -1
  151. package/dist/core/workspace/package-version.js +2 -2
  152. package/dist/core/workspace/resolver.d.ts +1 -1
  153. package/dist/core/workspace/resolver.js +5 -5
  154. package/dist/core/workspace/source-walk.d.ts +1 -1
  155. package/dist/core/workspace/source-walk.js +1 -1
  156. package/dist/core/workspace/typescript-walk.d.ts +1 -1
  157. package/dist/core/workspace/typescript-walk.js +1 -1
  158. package/dist/core/workspace/walk-files.d.ts +1 -1
  159. package/dist/core/workspace/walk-files.js +1 -1
  160. package/dist/index.d.ts +3 -3
  161. package/dist/index.js +2 -2
  162. package/dist/mirror/cli-result.d.ts +1 -1
  163. package/dist/mirror/cli-result.js +1 -1
  164. package/dist/mirror/cli-schema.d.ts +1 -1
  165. package/dist/mirror/command.js +7 -7
  166. package/dist/mirror/dist-filesystem-node.d.ts +2 -2
  167. package/dist/mirror/dist-filesystem-node.js +2 -2
  168. package/dist/mirror/domain/dirent-guard.d.ts +1 -1
  169. package/dist/mirror/domain/exports.d.ts +2 -2
  170. package/dist/mirror/domain/exports.js +1 -1
  171. package/dist/mirror/domain/types.d.ts +2 -2
  172. package/dist/mirror/output.d.ts +1 -1
  173. package/dist/mirror/output.js +2 -2
  174. package/dist/mirror/package-path.d.ts +3 -3
  175. package/dist/mirror/package-path.js +3 -3
  176. package/dist/mirror/prepare.d.ts +5 -5
  177. package/dist/mirror/prepare.js +4 -4
  178. package/dist/mirror/run.d.ts +6 -6
  179. package/dist/mirror/run.js +7 -7
  180. package/dist/mirror/supplement-exports.d.ts +1 -1
  181. package/dist/mirror/supplement-exports.js +2 -2
  182. package/dist/mirror/sync-workspace-package.d.ts +3 -3
  183. package/dist/mirror/sync-workspace-package.js +11 -14
  184. package/dist/mirror/write-exports.d.ts +2 -2
  185. package/dist/mirror/write-exports.js +3 -3
  186. package/dist/pack-slim/cli-result.d.ts +1 -1
  187. package/dist/pack-slim/cli-result.js +1 -1
  188. package/dist/pack-slim/command.js +9 -9
  189. package/dist/pack-slim/domain/transform.d.ts +22 -1
  190. package/dist/pack-slim/domain/transform.js +65 -8
  191. package/dist/pack-slim/output.d.ts +1 -1
  192. package/dist/pack-slim/output.js +1 -1
  193. package/dist/pack-slim/prepare.d.ts +3 -3
  194. package/dist/pack-slim/prepare.js +2 -2
  195. package/dist/pack-slim/run.d.ts +5 -5
  196. package/dist/pack-slim/run.js +5 -5
  197. package/dist/pack-slim/working-tree.d.ts +2 -2
  198. package/dist/pack-slim/working-tree.js +2 -2
  199. package/dist/tag/cli-result.d.ts +1 -1
  200. package/dist/tag/cli-result.js +1 -1
  201. package/dist/tag/cli-schema.d.ts +1 -1
  202. package/dist/tag/command.js +7 -7
  203. package/dist/tag/domain/skip-filter.d.ts +1 -1
  204. package/dist/tag/domain/skip-filter.js +1 -1
  205. package/dist/tag/domain/types.d.ts +1 -1
  206. package/dist/tag/domain/version-summary.d.ts +1 -1
  207. package/dist/tag/output.d.ts +1 -1
  208. package/dist/tag/output.js +1 -1
  209. package/dist/tag/prepare.d.ts +4 -4
  210. package/dist/tag/prepare.js +4 -4
  211. package/dist/tag/run.d.ts +4 -4
  212. package/dist/tag/run.js +7 -7
  213. package/dist/tag/target/candidates.d.ts +2 -2
  214. package/dist/tag/target/candidates.js +2 -2
  215. package/dist/tag/target/resolve-path.d.ts +1 -1
  216. package/dist/tag/target/runner.d.ts +2 -2
  217. package/dist/tag/target/runner.js +3 -3
  218. package/dist/tag/writer/since-writer.d.ts +2 -2
  219. package/dist/tag/writer/since-writer.js +1 -1
  220. package/dist/tag/writer/version-resolver.d.ts +1 -1
  221. package/dist/tag/writer/version-resolver.js +1 -1
  222. package/package.json +7 -7
@@ -1,9 +1,9 @@
1
- import { AppError } from "#/core/errors";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { Result } from "#/core/result";
4
- import type { GlobalStats } from "#/mirror/domain/types";
5
- import type { MirrorSyncExecutionInput } from "#/mirror/domain/types";
6
- export type { MirrorSyncExecutionInput } from "#/mirror/domain/types";
1
+ import { AppError } from "#core/errors";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { Result } from "#core/result";
4
+ import type { GlobalStats } from "#mirror/domain/types";
5
+ import type { MirrorSyncExecutionInput } from "#mirror/domain/types";
6
+ export type { MirrorSyncExecutionInput } from "#mirror/domain/types";
7
7
  /**
8
8
  * Runs the mirror sync across the targeted packages and returns the aggregate stats.
9
9
  *
@@ -1,11 +1,11 @@
1
1
  import path from "node:path";
2
- import { AppError } from "#/core/errors";
3
- import { messageFrom } from "#/core/errors";
4
- import { err, ok } from "#/core/result";
5
- import { listWorkspacePackageDirectories } from "#/core/workspace/resolver";
6
- import { normalizePath } from "#/mirror/domain/path-normalizer";
7
- import { resolvePackageFilterUnderRoot } from "#/mirror/package-path";
8
- import { syncExportsForWorkspacePackage } from "#/mirror/sync-workspace-package";
2
+ import { AppError } from "#core/errors";
3
+ import { messageFrom } from "#core/errors";
4
+ import { err, ok } from "#core/result";
5
+ import { listWorkspacePackageDirectories } from "#core/workspace/resolver";
6
+ import { normalizePath } from "#mirror/domain/path-normalizer";
7
+ import { resolvePackageFilterUnderRoot } from "#mirror/package-path";
8
+ import { syncExportsForWorkspacePackage } from "#mirror/sync-workspace-package";
9
9
  /**
10
10
  * Runs the mirror sync across the targeted packages and returns the aggregate stats.
11
11
  *
@@ -1,4 +1,4 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
2
  /**
3
3
  * The export specifiers a preserve-mode run added conditions to.
4
4
  *
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
- import { distDirName } from "#/core/workspace/well-known-files";
3
- import { writePackageJsonExportsAtomic } from "#/mirror/write-exports";
2
+ import { distDirName } from "#core/workspace/well-known-files";
3
+ import { writePackageJsonExportsAtomic } from "#mirror/write-exports";
4
4
  const DTS_EXTENSIONS = [".d.mts", ".d.ts", ".d.cts"];
5
5
  const JS_EXTENSIONS = [".mjs", ".js"];
6
6
  /**
@@ -1,6 +1,6 @@
1
- import type { MirrorConfig } from "#/core/config/schema";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { PackageStats } from "#/mirror/domain/types";
1
+ import type { MirrorConfig } from "#core/config/schema";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { PackageStats } from "#mirror/domain/types";
4
4
  /**
5
5
  * Regenerates one package's `package.json#exports` from its `dist/` and returns the package's stats.
6
6
  *
@@ -1,24 +1,21 @@
1
1
  import path from "node:path";
2
- import { messageFrom } from "#/core/errors";
3
- import { distDirName, packageJsonFileName } from "#/core/workspace/well-known-files";
4
- import { createMirrorDistFilesystem } from "#/mirror/dist-filesystem-node";
5
- import { createPathTransform, generateExports } from "#/mirror/domain/exports";
6
- import { resolvePackageDisplayName } from "#/mirror/domain/package-display-name";
7
- import { buildSourcePathResolver, supplementExportsInPackageJson } from "#/mirror/supplement-exports";
8
- import { writePackageJsonExportsAtomic } from "#/mirror/write-exports";
2
+ import { messageFrom } from "#core/errors";
3
+ import { distDirName, packageJsonFileName } from "#core/workspace/well-known-files";
4
+ import { createMirrorDistFilesystem } from "#mirror/dist-filesystem-node";
5
+ import { createPathTransform, generateExports } from "#mirror/domain/exports";
6
+ import { resolvePackageDisplayName } from "#mirror/domain/package-display-name";
7
+ import { buildSourcePathResolver, supplementExportsInPackageJson } from "#mirror/supplement-exports";
8
+ import { writePackageJsonExportsAtomic } from "#mirror/write-exports";
9
9
  /**
10
10
  * Regenerates one package's `package.json#exports` from its `dist/` and returns the package's stats.
11
11
  *
12
12
  * @since 0.3.16-canary.0
13
13
  */
14
14
  export async function syncExportsForWorkspacePackage(fs, rootDir, packagePathStr, config, write = true) {
15
- const pathJoin = path.join;
16
- const pathResolve = path.resolve;
17
- const pathBasename = path.basename;
18
- const packageDir = pathResolve(rootDir, packagePathStr);
19
- const distDir = pathJoin(packageDir, distDirName);
20
- const packageJsonPath = pathJoin(packageDir, packageJsonFileName);
21
- const folderBasename = pathBasename(packageDir);
15
+ const packageDir = path.resolve(rootDir, packagePathStr);
16
+ const distDir = path.join(packageDir, distDirName);
17
+ const packageJsonPath = path.join(packageDir, packageJsonFileName);
18
+ const folderBasename = path.basename(packageDir);
22
19
  const distFilesystem = createMirrorDistFilesystem(fs);
23
20
  const pkgStats = {
24
21
  name: folderBasename,
@@ -1,5 +1,5 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
2
- import type { ExportMapData, ExportOriginalPathBySpecifier } from "#/mirror/domain/types";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
+ import type { ExportMapData, ExportOriginalPathBySpecifier } from "#mirror/domain/types";
3
3
  /**
4
4
  * Writes `exports` into `package.json` via a temp file + rename (atomic on same volume).
5
5
  * Preserves a trailing newline after JSON.
@@ -1,6 +1,6 @@
1
- import { messageFrom } from "#/core/errors";
2
- import { PACKAGE_JSON_EXPORT } from "#/mirror/domain/constants";
3
- import { MirrorError, MirrorErrorCode } from "#/mirror/domain/errors";
1
+ import { messageFrom } from "#core/errors";
2
+ import { PACKAGE_JSON_EXPORT } from "#mirror/domain/constants";
3
+ import { MirrorError, MirrorErrorCode } from "#mirror/domain/errors";
4
4
  /**
5
5
  * Writes `exports` into `package.json` via a temp file + rename (atomic on same volume).
6
6
  * Preserves a trailing newline after JSON.
@@ -1,4 +1,4 @@
1
- import type { PackSlimRunStats } from "#/pack-slim/domain/types";
1
+ import type { PackSlimRunStats } from "#pack-slim/domain/types";
2
2
  /**
3
3
  * Maps a pack-slim run's stats to the process exit code.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#/core/exit-codes";
1
+ import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#core/exit-codes";
2
2
  /**
3
3
  * Maps a pack-slim run's stats to the process exit code.
4
4
  *
@@ -1,13 +1,13 @@
1
1
  import { Command } from "commander";
2
- import { applyCommandPipeline } from "#/core/cli/command-pipeline";
3
- import { nodeFilesystem } from "#/core/filesystem/node";
4
- import { ok } from "#/core/result";
5
- import { exitCodeForPackSlimResult, formatPackSlimJsonOutput } from "#/pack-slim/cli-result";
6
- import { packSlimRunRequestSchema } from "#/pack-slim/cli-schema";
7
- import { PackSlimProgressPresenter } from "#/pack-slim/output";
8
- import { preparePackSlim } from "#/pack-slim/prepare";
9
- import { runPackSlim } from "#/pack-slim/run";
10
- import { ensureWorkingTreeClean } from "#/pack-slim/working-tree";
2
+ import { applyCommandPipeline } from "#core/cli/command-pipeline";
3
+ import { nodeFilesystem } from "#core/filesystem/node";
4
+ import { ok } from "#core/result";
5
+ import { exitCodeForPackSlimResult, formatPackSlimJsonOutput } from "#pack-slim/cli-result";
6
+ import { packSlimRunRequestSchema } from "#pack-slim/cli-schema";
7
+ import { PackSlimProgressPresenter } from "#pack-slim/output";
8
+ import { preparePackSlim } from "#pack-slim/prepare";
9
+ import { runPackSlim } from "#pack-slim/run";
10
+ import { ensureWorkingTreeClean } from "#pack-slim/working-tree";
11
11
  const packSlimPipeline = {
12
12
  positional: { name: "[package]", help: "Optional package path relative to repo root (e.g. packages/ui)" },
13
13
  schema: packSlimRunRequestSchema,
@@ -54,12 +54,33 @@ export declare function isLifecycleScript(name: string): boolean;
54
54
  * Produces a publish manifest carrying only what a consumer's `tsc` and Node read.
55
55
  *
56
56
  * @remarks Operates on a structural clone, so the caller's manifest is left intact. A consumer never enables `source`
57
- * and resolves `#/` through `types`/`default` to `dist`, so dropping the source lane, the `imports` left pointing
57
+ * and resolves `#` through `types`/`default` to `dist`, so dropping the source lane, the `imports` left pointing
58
58
  * outside `files`, the scripts that are not lifecycle hooks, and `devDependencies` leaves the published surface whole.
59
59
  *
60
60
  * @since 0.8.1
61
61
  */
62
62
  export declare function slimPublishManifest(manifest: Record<string, unknown>): SlimManifestResult;
63
+ /**
64
+ * A published `exports`/`imports` target the slimmed manifest points at but does not ship.
65
+ *
66
+ * @since 0.12.0
67
+ */
68
+ export interface UnshippedTarget {
69
+ readonly field: "exports" | "imports";
70
+ readonly subpath: string;
71
+ readonly target: string;
72
+ }
73
+ /**
74
+ * The publish targets a package would resolve to a file it does not ship.
75
+ *
76
+ * @remarks Runs the same slim the publish step applies, then checks each surviving `exports`/`imports`
77
+ * target against the shipped `files`. A non-empty result means a consumer resolves that subpath to a
78
+ * missing file — the failure dropping a stylesheet's `src` subtree produces. With no `files` field npm
79
+ * ships everything, so nothing is unshipped.
80
+ *
81
+ * @since 0.12.0
82
+ */
83
+ export declare function unshippedPublishTargets(manifest: Record<string, unknown>): Array<UnshippedTarget>;
63
84
  /**
64
85
  * Strips every `sourceMappingURL` directive line from an emitted file's text.
65
86
  *
@@ -58,16 +58,16 @@ export function isLifecycleScript(name) {
58
58
  * Produces a publish manifest carrying only what a consumer's `tsc` and Node read.
59
59
  *
60
60
  * @remarks Operates on a structural clone, so the caller's manifest is left intact. A consumer never enables `source`
61
- * and resolves `#/` through `types`/`default` to `dist`, so dropping the source lane, the `imports` left pointing
61
+ * and resolves `#` through `types`/`default` to `dist`, so dropping the source lane, the `imports` left pointing
62
62
  * outside `files`, the scripts that are not lifecycle hooks, and `devDependencies` leaves the published surface whole.
63
63
  *
64
64
  * @since 0.8.1
65
65
  */
66
66
  export function slimPublishManifest(manifest) {
67
67
  const draft = structuredClone(manifest);
68
- const filesSrcRemoved = removeSrcFromFiles(draft);
69
68
  const exportsSourceRemoved = deleteSourceConditions(draft.exports);
70
69
  const importsSourceRemoved = deleteSourceConditions(draft.imports);
70
+ const filesSrcRemoved = removeSrcFromFiles(draft);
71
71
  const importsUnshippedRemoved = deleteUnshippedImports(draft);
72
72
  const scriptsRemoved = deleteDevOnlyScripts(draft);
73
73
  const devDependenciesRemoved = deleteDevDependencies(draft);
@@ -85,6 +85,44 @@ export function slimPublishManifest(manifest) {
85
85
  },
86
86
  };
87
87
  }
88
+ /**
89
+ * The publish targets a package would resolve to a file it does not ship.
90
+ *
91
+ * @remarks Runs the same slim the publish step applies, then checks each surviving `exports`/`imports`
92
+ * target against the shipped `files`. A non-empty result means a consumer resolves that subpath to a
93
+ * missing file — the failure dropping a stylesheet's `src` subtree produces. With no `files` field npm
94
+ * ships everything, so nothing is unshipped.
95
+ *
96
+ * @since 0.12.0
97
+ */
98
+ export function unshippedPublishTargets(manifest) {
99
+ const { manifest: slimmed } = slimPublishManifest(manifest);
100
+ const files = Array.isArray(slimmed.files)
101
+ ? slimmed.files.filter((entry) => typeof entry === "string")
102
+ : [];
103
+ if (files.length === 0) {
104
+ return [];
105
+ }
106
+ const unshipped = [];
107
+ for (const field of ["exports", "imports"]) {
108
+ const node = slimmed[field];
109
+ if (!isRecord(node)) {
110
+ continue;
111
+ }
112
+ for (const subpath of Object.keys(node)) {
113
+ for (const target of collectTargets(node[subpath])) {
114
+ // Only relative file targets can be unshipped; npm always includes package.json.
115
+ if (!target.startsWith("./") || stripDotSlash(target) === "package.json") {
116
+ continue;
117
+ }
118
+ if (!isShippedTarget(target, files)) {
119
+ unshipped.push({ field, subpath, target });
120
+ }
121
+ }
122
+ }
123
+ }
124
+ return unshipped;
125
+ }
88
126
  /**
89
127
  * Strips every `sourceMappingURL` directive line from an emitted file's text.
90
128
  *
@@ -98,18 +136,37 @@ export function stripSourceMappingComment(text) {
98
136
  }
99
137
  return { text: kept.join("\n"), stripped: true };
100
138
  }
139
+ // Replaces the `src` files entry with only the src subtrees the published surface still points into —
140
+ // a stylesheet export like `./css/*` -> `./src/css/*` ships Tailwind source, so dropping all of src
141
+ // would ship a broken export. Runs after the source conditions are stripped, so the `#*` source lane
142
+ // no longer counts; with nothing left pointing into src the entry is dropped outright.
101
143
  function removeSrcFromFiles(manifest) {
102
144
  const files = manifest.files;
103
- if (!Array.isArray(files)) {
145
+ if (!Array.isArray(files) || !files.includes("src")) {
104
146
  return false;
105
147
  }
106
- const next = files.filter((entry) => entry !== "src");
107
- if (next.length === files.length) {
108
- return false;
109
- }
110
- manifest.files = next;
148
+ const keep = srcPathsShippedBySurface(manifest);
149
+ manifest.files = files.flatMap((entry) => (entry === "src" ? keep : [entry]));
111
150
  return true;
112
151
  }
152
+ // The src subtrees a surviving `exports`/`imports` target still ships, e.g. `./src/css/*` -> `src/css`.
153
+ function srcPathsShippedBySurface(manifest) {
154
+ const targets = [...collectTargets(manifest.exports), ...collectTargets(manifest.imports)];
155
+ const kept = new Set();
156
+ for (const target of targets) {
157
+ const relative = stripDotSlash(target);
158
+ if (relative !== "src" && !relative.startsWith("src/")) {
159
+ continue;
160
+ }
161
+ const segments = relative.split("/");
162
+ // A glob tail (`*`, `**`) ships its directory; a concrete file ships itself.
163
+ if (segments.at(-1)?.includes("*")) {
164
+ segments.pop();
165
+ }
166
+ kept.add(segments.join("/"));
167
+ }
168
+ return [...kept].sort();
169
+ }
113
170
  // Walks a conditions tree deleting every `source` key. A subpath key always starts with ".", so only real condition
114
171
  // objects match; an `imports` entry this leaves empty is what the unshipped pass removes.
115
172
  function deleteSourceConditions(node) {
@@ -1,4 +1,4 @@
1
- import type { PackSlimPackageStats, PackSlimProgressListener, PackSlimRunStats } from "#/pack-slim/domain/types";
1
+ import type { PackSlimPackageStats, PackSlimProgressListener, PackSlimRunStats } from "#pack-slim/domain/types";
2
2
  /**
3
3
  * A progress listener that renders pack-slim run events as human-readable CLI lines.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { logger } from "#/core/logger";
1
+ import { logger } from "#core/logger";
2
2
  /**
3
3
  * A progress listener that renders pack-slim run events as human-readable CLI lines.
4
4
  *
@@ -1,6 +1,6 @@
1
- import type { AppError } from "#/core/errors";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { Result } from "#/core/result";
1
+ import type { AppError } from "#core/errors";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { Result } from "#core/result";
4
4
  /**
5
5
  * The repo root and package filter a pack-slim run starts from.
6
6
  *
@@ -1,5 +1,5 @@
1
- import { resolveProjectRootResult } from "#/core/cli/resolve-root";
2
- import { ok } from "#/core/result";
1
+ import { resolveProjectRootResult } from "#core/cli/resolve-root";
2
+ import { ok } from "#core/result";
3
3
  /**
4
4
  * Resolves the repo root and optional package filter into the prelude a pack-slim run starts from.
5
5
  *
@@ -1,8 +1,8 @@
1
- import { AppError } from "#/core/errors";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { Result } from "#/core/result";
4
- import type { PackSlimRunRequest } from "#/pack-slim/cli-schema";
5
- import type { PackSlimProgressListener, PackSlimRunStats } from "#/pack-slim/domain/types";
1
+ import { AppError } from "#core/errors";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { Result } from "#core/result";
4
+ import type { PackSlimRunRequest } from "#pack-slim/cli-schema";
5
+ import type { PackSlimProgressListener, PackSlimRunStats } from "#pack-slim/domain/types";
6
6
  /**
7
7
  * A pack-slim run request paired with an optional progress listener.
8
8
  *
@@ -1,9 +1,9 @@
1
1
  import path from "node:path";
2
- import { AppError, messageFrom } from "#/core/errors";
3
- import { err, ok } from "#/core/result";
4
- import { listWorkspacePackageDirectories } from "#/core/workspace/resolver";
5
- import { distDirName, packageJsonFileName } from "#/core/workspace/well-known-files";
6
- import { isMapAnnotatedFile, isSourceMapFile, slimPublishManifest, stripSourceMappingComment, } from "#/pack-slim/domain/transform";
2
+ import { AppError, messageFrom } from "#core/errors";
3
+ import { err, ok } from "#core/result";
4
+ import { listWorkspacePackageDirectories } from "#core/workspace/resolver";
5
+ import { distDirName, packageJsonFileName } from "#core/workspace/well-known-files";
6
+ import { isMapAnnotatedFile, isSourceMapFile, slimPublishManifest, stripSourceMappingComment, } from "#pack-slim/domain/transform";
7
7
  /**
8
8
  * Slims every published package's manifest and build output for publish and returns the aggregate stats.
9
9
  *
@@ -1,5 +1,5 @@
1
- import { AppError } from "#/core/errors";
2
- import type { Result } from "#/core/result";
1
+ import { AppError } from "#core/errors";
2
+ import type { Result } from "#core/result";
3
3
  /**
4
4
  * Whether git's tracked-only porcelain output reports any uncommitted change.
5
5
  *
@@ -1,6 +1,6 @@
1
1
  import { execFileSync } from "node:child_process";
2
- import { AppError, messageFrom } from "#/core/errors";
3
- import { err, ok } from "#/core/result";
2
+ import { AppError, messageFrom } from "#core/errors";
3
+ import { err, ok } from "#core/result";
4
4
  /**
5
5
  * Whether git's tracked-only porcelain output reports any uncommitted change.
6
6
  *
@@ -1,4 +1,4 @@
1
- import type { TagResult } from "#/tag/domain/types";
1
+ import type { TagResult } from "#tag/domain/types";
2
2
  /**
3
3
  * Maps a tag run's result to the process exit code.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#/core/exit-codes";
1
+ import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#core/exit-codes";
2
2
  /**
3
3
  * Maps a tag run's result to the process exit code.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import type { TagRunRequest } from "#/tag/domain/types";
2
+ import type { TagRunRequest } from "#tag/domain/types";
3
3
  /**
4
4
  * Zod schema validating a `TagRunRequest`.
5
5
  *
@@ -1,11 +1,11 @@
1
1
  import { Command } from "commander";
2
- import { applyCommandPipeline } from "#/core/cli/command-pipeline";
3
- import { nodeFilesystem } from "#/core/filesystem/node";
4
- import { exitCodeForTagResult, formatTagJsonOutput } from "#/tag/cli-result";
5
- import { tagRunRequestSchema } from "#/tag/cli-schema";
6
- import { presentTagResult, TagProgressPresenter } from "#/tag/output";
7
- import { prepareTag } from "#/tag/prepare";
8
- import { runTag } from "#/tag/run";
2
+ import { applyCommandPipeline } from "#core/cli/command-pipeline";
3
+ import { nodeFilesystem } from "#core/filesystem/node";
4
+ import { exitCodeForTagResult, formatTagJsonOutput } from "#tag/cli-result";
5
+ import { tagRunRequestSchema } from "#tag/cli-schema";
6
+ import { presentTagResult, TagProgressPresenter } from "#tag/output";
7
+ import { prepareTag } from "#tag/prepare";
8
+ import { runTag } from "#tag/run";
9
9
  const tagPipeline = {
10
10
  positional: { name: "[target]", help: "Directory or file to tag (default: auto-discover workspace packages)" },
11
11
  schema: tagRunRequestSchema,
@@ -1,4 +1,4 @@
1
- import type { TagTargetCandidate } from "#/tag/domain/types";
1
+ import type { TagTargetCandidate } from "#tag/domain/types";
2
2
  /**
3
3
  * Partitions tag target candidates into those to tag and those to skip, matching each candidate's
4
4
  * package name against `skipPackages` as glob patterns.
@@ -1,4 +1,4 @@
1
- import { createAnyGlobMatcher } from "#/core/glob";
1
+ import { createAnyGlobMatcher } from "#core/glob";
2
2
  /**
3
3
  * Partitions tag target candidates into those to tag and those to skip, matching each candidate's
4
4
  * package name against `skipPackages` as glob patterns.
@@ -1,4 +1,4 @@
1
- import type { CodefastConfig } from "#/core/config/schema";
1
+ import type { CodefastConfig } from "#core/config/schema";
2
2
  /**
3
3
  * Per-file outcome of a tag run.
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { TagTargetExecutionResult } from "#/tag/domain/types";
1
+ import type { TagTargetExecutionResult } from "#tag/domain/types";
2
2
  /**
3
3
  * Collects the distinct, non-empty package versions stamped across a run's target results.
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { TagProgressListener, TagResolvedTarget, TagResult, TagTargetExecutionResult } from "#/tag/domain/types";
1
+ import type { TagProgressListener, TagResolvedTarget, TagResult, TagTargetExecutionResult } from "#tag/domain/types";
2
2
  /**
3
3
  * A progress listener that prints a line as each tag target starts and completes.
4
4
  *
@@ -1,4 +1,4 @@
1
- import { logger } from "#/core/logger";
1
+ import { logger } from "#core/logger";
2
2
  /**
3
3
  * A progress listener that prints a line as each tag target starts and completes.
4
4
  *
@@ -1,7 +1,7 @@
1
- import type { AppError } from "#/core/errors";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { Result } from "#/core/result";
4
- import type { TagCommandPrelude } from "#/tag/domain/types";
1
+ import type { AppError } from "#core/errors";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { Result } from "#core/result";
4
+ import type { TagCommandPrelude } from "#tag/domain/types";
5
5
  /**
6
6
  * Resolves the repo root, config, and optional target path into the prelude a tag run starts from.
7
7
  *
@@ -1,7 +1,7 @@
1
- import { loadCodefastConfig } from "#/core/config";
2
- import { ok } from "#/core/result";
3
- import { resolveProjectRoot } from "#/core/workspace/resolver";
4
- import { resolveProvidedTagTargetPath } from "#/tag/target/resolve-path";
1
+ import { loadCodefastConfig } from "#core/config";
2
+ import { ok } from "#core/result";
3
+ import { resolveProjectRoot } from "#core/workspace/resolver";
4
+ import { resolveProvidedTagTargetPath } from "#tag/target/resolve-path";
5
5
  /**
6
6
  * Resolves the repo root, config, and optional target path into the prelude a tag run starts from.
7
7
  *
package/dist/tag/run.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { AppError } from "#/core/errors";
2
- import type { Filesystem } from "#/core/filesystem/filesystem";
3
- import type { Result } from "#/core/result";
4
- import type { TagExecutionInput, TagResult } from "#/tag/domain/types";
1
+ import { AppError } from "#core/errors";
2
+ import type { Filesystem } from "#core/filesystem/filesystem";
3
+ import type { Result } from "#core/result";
4
+ import type { TagExecutionInput, TagResult } from "#tag/domain/types";
5
5
  /**
6
6
  * Applies `@since` tags across the selected targets and returns the aggregate result.
7
7
  *
package/dist/tag/run.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import path from "node:path";
2
- import { AppError } from "#/core/errors";
3
- import { messageFrom } from "#/core/errors";
4
- import { err, ok } from "#/core/result";
5
- import { filterSkippedCandidates } from "#/tag/domain/skip-filter";
6
- import { extractDistinctVersions, summarizeVersions } from "#/tag/domain/version-summary";
7
- import { resolveTagTargetCandidates } from "#/tag/target/candidates";
8
- import { runTagOnTarget } from "#/tag/target/runner";
2
+ import { AppError } from "#core/errors";
3
+ import { messageFrom } from "#core/errors";
4
+ import { err, ok } from "#core/result";
5
+ import { filterSkippedCandidates } from "#tag/domain/skip-filter";
6
+ import { extractDistinctVersions, summarizeVersions } from "#tag/domain/version-summary";
7
+ import { resolveTagTargetCandidates } from "#tag/target/candidates";
8
+ import { runTagOnTarget } from "#tag/target/runner";
9
9
  /**
10
10
  * Applies `@since` tags across the selected targets and returns the aggregate result.
11
11
  *
@@ -1,5 +1,5 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
2
- import type { TagTargetCandidate } from "#/tag/domain/types";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
+ import type { TagTargetCandidate } from "#tag/domain/types";
3
3
  /**
4
4
  * Resolves the candidate targets for a tag run: the explicit target, or the discovered workspace packages.
5
5
  *
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import * as z from "zod";
3
- import { listWorkspacePackageDirectories } from "#/core/workspace/resolver";
4
- import { packageJsonFileName } from "#/core/workspace/well-known-files";
3
+ import { listWorkspacePackageDirectories } from "#core/workspace/resolver";
4
+ import { packageJsonFileName } from "#core/workspace/well-known-files";
5
5
  const packageJsonNameSchema = z.looseObject({
6
6
  name: z.string().min(1).optional(),
7
7
  });
@@ -1,4 +1,4 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
2
  /**
3
3
  * Canonicalizes the user-provided target path, or returns `undefined` when none was given.
4
4
  *
@@ -1,5 +1,5 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
2
- import type { TagRunOptions, TagRunResult } from "#/tag/domain/types";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
+ import type { TagRunOptions, TagRunResult } from "#tag/domain/types";
3
3
  /**
4
4
  * Stamps `@since` tags across one target's TypeScript files and returns the run result.
5
5
  *
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
- import { walkTsxFiles } from "#/core/workspace/typescript-walk";
3
- import { TagSinceWriter } from "#/tag/writer/since-writer";
4
- import { resolveNearestPackageVersion } from "#/tag/writer/version-resolver";
2
+ import { walkTsxFiles } from "#core/workspace/typescript-walk";
3
+ import { TagSinceWriter } from "#tag/writer/since-writer";
4
+ import { resolveNearestPackageVersion } from "#tag/writer/version-resolver";
5
5
  /**
6
6
  * Stamps `@since` tags across one target's TypeScript files and returns the run result.
7
7
  *
@@ -1,5 +1,5 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
2
- import type { TagFileResult } from "#/tag/domain/types";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
+ import type { TagFileResult } from "#tag/domain/types";
3
3
  /**
4
4
  * The writer that adds missing `@since` tags to a file's exported declarations.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  import { parseSync } from "oxc-parser";
2
- import { applyEditsDescending, indentOfLineContaining } from "#/core/source-text-edit";
2
+ import { applyEditsDescending, indentOfLineContaining } from "#core/source-text-edit";
3
3
  /**
4
4
  * Top-level statement kinds that carry a `@since` tag: function, class, interface,
5
5
  * type alias, enum, and variable declaration.
@@ -1,4 +1,4 @@
1
- import type { Filesystem } from "#/core/filesystem/filesystem";
1
+ import type { Filesystem } from "#core/filesystem/filesystem";
2
2
  /**
3
3
  * Returns the `version` of the nearest enclosing `package.json` above a target path.
4
4
  *