limina 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -34,6 +34,7 @@ Limina makes these rules reviewable, runnable, and suitable for CI.
34
34
  - **Compatibility path generation**: writes opt-in `tsconfig.dts.paths.generated.json` files for `workspace:*` dependencies whose package exports still point at build artifacts.
35
35
  - **Checker target runner**: runs configured TypeScript and UI-framework checker entries in `typecheck` or `build` execution mode.
36
36
  - **Published package checks**: validates built package outputs with `publint`, Are The Types Wrong, and a runtime import boundary audit.
37
+ - **Release checks**: verifies npm tarball hygiene, source/packed manifest consistency, and registry-backed workspace publish order.
37
38
  - **Composable pipelines**: combines built-in checks and shell commands into named workflows such as `typecheck`, `package`, and `publish`.
38
39
  - **Typed configuration**: ships `defineConfig(...)` for editor hints and typed user configs.
39
40
 
@@ -95,8 +96,8 @@ export default defineConfig({
95
96
  ],
96
97
  },
97
98
 
98
- packageChecks: {
99
- targets: [
99
+ package: {
100
+ entries: [
100
101
  {
101
102
  name: '@acme/core',
102
103
  outDir: 'packages/core/dist',
@@ -106,7 +107,7 @@ export default defineConfig({
106
107
 
107
108
  pipelines: {
108
109
  package: ['package:check'],
109
- publish: ['graph:check', 'proof:check', 'package:check'],
110
+ publish: ['graph:check', 'proof:check', 'package:check', 'release:check'],
110
111
  },
111
112
  });
112
113
  ```
@@ -151,7 +152,7 @@ A dependency declared as `link:`, `file:`, `catalog:`, or normal semver is treat
151
152
 
152
153
  ### Package checks
153
154
 
154
- Source graph checks do not prove that an installed package works for consumers. `limina package check` inspects built package outputs under `packageChecks.targets[].outDir` and checks the actual package manifest, exports, type resolution, and runtime imports. Publishable outputs whose `package.json` does not set `private: true` must also include root `README.md` and `LICENSE.md` files.
155
+ Source graph checks do not prove that an installed package works for consumers. `limina package check` inspects built package outputs under `package.entries[].outDir` and checks the actual package manifest, exports, type resolution, and runtime imports with `publint`, `attw`, and `boundary`. `limina release check` owns npm publish hygiene: private-output rejection, required README/license files, source map bans, source/packed manifest consistency, and registry-backed workspace publish order.
155
156
 
156
157
  ## CLI
157
158
 
@@ -171,9 +172,11 @@ limina [--config limina.config.mjs] [--mode mode] <command>
171
172
  | `limina checker build` | Run build execution for checker entries that support it. |
172
173
  | `limina checker typecheck` | Run source-only checker entries such as `svelte-check`. |
173
174
  | `limina package check` | Run configured package output checks. |
174
- | `limina package check --package <name>` | Check one configured package target. |
175
+ | `limina package check --package <name>` | Check one configured package entry. |
175
176
  | `limina package check --tool <tool>` | Run only `publint`, `attw`, or `boundary`. |
176
177
  | `limina package check --attw-profile <profile>` | Override the ATTW profile: `strict`, `node16`, or `esm-only`. |
178
+ | `limina release check` | Check release hygiene and dependency consistency for the cwd package entry. |
179
+ | `limina release check --package <name>` | Check release hygiene and dependency consistency for one or more package entries. |
177
180
 
178
181
  ## Configuration reference
179
182
 
@@ -269,11 +272,11 @@ proof: {
269
272
 
270
273
  Checker entries cover files validated by TypeScript or framework-aware tools. Allowlist entries are the final fallback after all configured checker entries fail to cover a source file; they should be rare and must include a reason.
271
274
 
272
- ### `packageChecks`
275
+ ### `package`
273
276
 
274
277
  ```js
275
- packageChecks: {
276
- targets: [
278
+ package: {
279
+ entries: [
277
280
  {
278
281
  name: '@acme/core',
279
282
  outDir: 'packages/core/dist',
@@ -289,7 +292,7 @@ packageChecks: {
289
292
  }
290
293
  ```
291
294
 
292
- `outDir` must point at the built package directory that contains the publish-ready `package.json`. If that manifest does not set `private: true`, the same directory must also contain `README.md` and `LICENSE.md`.
295
+ `outDir` must point at the built package directory that contains the publish-ready `package.json`. `package:check` uses this output for consumer-facing resolver and runtime checks; `release:check` packs the same output and verifies publish hygiene such as README/license files and source map bans.
293
296
 
294
297
  ### `pipelines`
295
298
 
@@ -356,7 +359,7 @@ Run the command from inside the workspace, or pass `--config ./limina.config.mjs
356
359
 
357
360
  Limina infers the workspace root from `pnpm-workspace.yaml`. Place the config inside the workspace or pass a config path located under the workspace root.
358
361
 
359
- ### `packageChecks.targets[x].outDir` is invalid
362
+ ### `package.entries[x].outDir` is invalid
360
363
 
361
364
  Set `outDir` to the built package directory, not the source package directory, unless that directory is itself the publish-ready package output.
362
365
 
@@ -1054,6 +1054,7 @@ const InitLogger = logger.getLoggerByGroup("task.init");
1054
1054
  const PackageLogger = logger.getLoggerByGroup("task.package");
1055
1055
  const PathsLogger = logger.getLoggerByGroup("task.paths");
1056
1056
  const ProofLogger = logger.getLoggerByGroup("task.proof");
1057
+ const ReleaseLogger = logger.getLoggerByGroup("task.release");
1057
1058
  const SourceLogger = logger.getLoggerByGroup("task.source");
1058
1059
  const TypecheckLogger = logger.getLoggerByGroup("task.typecheck");
1059
1060
  function clearCliScreen() {
@@ -2397,4 +2398,4 @@ function createLiminaFlowReporter(options = {}) {
2397
2398
  }
2398
2399
 
2399
2400
  //#endregion
2400
- export { shouldResolveThroughGraph as A, collectGraphProjectRoutes as B, formatArtifactDependencyPolicy as C, isRelativeSpecifier$1 as D, isDtsProjectConfig as E, getPublishDependencySections as F, formatReferences as G, createExtensionPattern as H, isWorkspaceDependencySpecifier as I, isOrdinaryTypecheckConfigPath as J, getDtsCompanionConfigPath as K, collectCheckerEntryProjectRoutes as L, collectWorkspacePackages as M, findPackageForSpecifier as N, parseProject as O, getPackageRootSpecifier as P, resolveReferencePath as Q, collectGraphProjectRoute as R, findTargetProject as S, inferPackageProject as T, createExtraFileExtensions as U, collectSourceGraphProjectExtensions as V, createFormatHost as W, readJsonConfig as X, parseProjectFileNamesForExtensions as Y, resolveProjectConfigPath as Z, normalizeGraphRules as _, runSourceCheck as a, findImporterForFile as b, GraphLogger as c, ProofLogger as d, clearCliScreen as f, getDeniedRefRule as g, getDeniedDepRuleForSpecifier as h, runCheckerTypecheck as i, collectImporters as j, resolveInternalImport as k, PackageLogger as l, getDeniedDepRuleForPackage as m, createLiminaFlowReporter as n, runInit as o, formatErrorMessage$1 as p, getRawReferencePaths as q, runCheckerBuild as r, CliLogger as s, LiminaFlowReporter as t, PathsLogger as u, collectImportsFromFile as v, getTypecheckConfigPath as w, findPackageForFile as x, createFileOwnerLookup as y, collectGraphProjectRouteFromRoot as z };
2401
+ export { resolveReferencePath as $, resolveInternalImport as A, collectGraphProjectRouteFromRoot as B, findTargetProject as C, isDtsProjectConfig as D, inferPackageProject as E, getPackageRootSpecifier as F, createFormatHost as G, collectSourceGraphProjectExtensions as H, getPublishDependencySections as I, getRawReferencePaths as J, formatReferences as K, isWorkspaceDependencySpecifier as L, collectImporters as M, collectWorkspacePackages as N, isRelativeSpecifier$1 as O, findPackageForSpecifier as P, resolveProjectConfigPath as Q, collectCheckerEntryProjectRoutes as R, findPackageForFile as S, getTypecheckConfigPath as T, createExtensionPattern as U, collectGraphProjectRoutes as V, createExtraFileExtensions as W, parseProjectFileNamesForExtensions as X, isOrdinaryTypecheckConfigPath as Y, readJsonConfig as Z, getDeniedRefRule as _, runSourceCheck as a, createFileOwnerLookup as b, GraphLogger as c, ProofLogger as d, ReleaseLogger as f, getDeniedDepRuleForSpecifier as g, getDeniedDepRuleForPackage as h, runCheckerTypecheck as i, shouldResolveThroughGraph as j, parseProject as k, PackageLogger as l, formatErrorMessage$1 as m, createLiminaFlowReporter as n, runInit as o, clearCliScreen as p, getDtsCompanionConfigPath as q, runCheckerBuild as r, CliLogger as s, LiminaFlowReporter as t, PathsLogger as u, normalizeGraphRules as v, formatArtifactDependencyPolicy as w, findImporterForFile as x, collectImportsFromFile as y, collectGraphProjectRoute as z };