putitoutthere 0.3.17 → 0.3.19

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 (92) hide show
  1. package/dist/check/check-cargo-shape-findings.d.ts +4 -0
  2. package/dist/check/check-cargo-shape-findings.d.ts.map +1 -0
  3. package/dist/check/check-cargo-shape-findings.js +10 -0
  4. package/dist/check/check-cargo-shape-findings.js.map +1 -0
  5. package/dist/check/check-crates-package-metadata.d.ts +4 -0
  6. package/dist/check/check-crates-package-metadata.d.ts.map +1 -0
  7. package/dist/check/check-crates-package-metadata.js +11 -0
  8. package/dist/check/check-crates-package-metadata.js.map +1 -0
  9. package/dist/check/check-depends-on.d.ts +4 -0
  10. package/dist/check/check-depends-on.d.ts.map +1 -0
  11. package/dist/check/check-depends-on.js +13 -0
  12. package/dist/check/check-depends-on.js.map +1 -0
  13. package/dist/check/check-globs-match-tracked-files.d.ts +4 -0
  14. package/dist/check/check-globs-match-tracked-files.d.ts.map +1 -0
  15. package/dist/check/check-globs-match-tracked-files.js +18 -0
  16. package/dist/check/check-globs-match-tracked-files.js.map +1 -0
  17. package/dist/check/check-npm-repository.d.ts +4 -0
  18. package/dist/check/check-npm-repository.d.ts.map +1 -0
  19. package/dist/check/check-npm-repository.js +14 -0
  20. package/dist/check/check-npm-repository.js.map +1 -0
  21. package/dist/check/check-npm-target-triples.d.ts +4 -0
  22. package/dist/check/check-npm-target-triples.d.ts.map +1 -0
  23. package/dist/check/check-npm-target-triples.js +27 -0
  24. package/dist/check/check-npm-target-triples.js.map +1 -0
  25. package/dist/check/check-package-json-shape-findings.d.ts +4 -0
  26. package/dist/check/check-package-json-shape-findings.d.ts.map +1 -0
  27. package/dist/check/check-package-json-shape-findings.js +10 -0
  28. package/dist/check/check-package-json-shape-findings.js.map +1 -0
  29. package/dist/check/check-paths.d.ts +4 -0
  30. package/dist/check/check-paths.d.ts.map +1 -0
  31. package/dist/check/check-paths.js +13 -0
  32. package/dist/check/check-paths.js.map +1 -0
  33. package/dist/check/check-pypi-version.d.ts +4 -0
  34. package/dist/check/check-pypi-version.d.ts.map +1 -0
  35. package/dist/check/check-pypi-version.js +11 -0
  36. package/dist/check/check-pypi-version.js.map +1 -0
  37. package/dist/check/check-pyproject-and-bundle-cli.d.ts +4 -0
  38. package/dist/check/check-pyproject-and-bundle-cli.d.ts.map +1 -0
  39. package/dist/check/check-pyproject-and-bundle-cli.js +52 -0
  40. package/dist/check/check-pyproject-and-bundle-cli.js.map +1 -0
  41. package/dist/check/check-pyproject-shape-findings.d.ts +4 -0
  42. package/dist/check/check-pyproject-shape-findings.d.ts.map +1 -0
  43. package/dist/check/check-pyproject-shape-findings.js +10 -0
  44. package/dist/check/check-pyproject-shape-findings.js.map +1 -0
  45. package/dist/check/check-repo-url-match-findings.d.ts +4 -0
  46. package/dist/check/check-repo-url-match-findings.d.ts.map +1 -0
  47. package/dist/check/check-repo-url-match-findings.js +17 -0
  48. package/dist/check/check-repo-url-match-findings.js.map +1 -0
  49. package/dist/check/check-tag-template-collisions.d.ts +4 -0
  50. package/dist/check/check-tag-template-collisions.d.ts.map +1 -0
  51. package/dist/check/check-tag-template-collisions.js +22 -0
  52. package/dist/check/check-tag-template-collisions.js.map +1 -0
  53. package/dist/check/collect-bins-from-manifest.d.ts +2 -0
  54. package/dist/check/collect-bins-from-manifest.d.ts.map +1 -0
  55. package/dist/check/collect-bins-from-manifest.js +27 -0
  56. package/dist/check/collect-bins-from-manifest.js.map +1 -0
  57. package/dist/check/list-tracked-files.d.ts +2 -0
  58. package/dist/check/list-tracked-files.d.ts.map +1 -0
  59. package/dist/check/list-tracked-files.js +11 -0
  60. package/dist/check/list-tracked-files.js.map +1 -0
  61. package/dist/check/parse-cargo-toml.d.ts +2 -0
  62. package/dist/check/parse-cargo-toml.d.ts.map +1 -0
  63. package/dist/check/parse-cargo-toml.js +11 -0
  64. package/dist/check/parse-cargo-toml.js.map +1 -0
  65. package/dist/check/read-declared-bins.d.ts +2 -0
  66. package/dist/check/read-declared-bins.d.ts.map +1 -0
  67. package/dist/check/read-declared-bins.js +33 -0
  68. package/dist/check/read-declared-bins.js.map +1 -0
  69. package/dist/check/workspace-member-manifests.d.ts +2 -0
  70. package/dist/check/workspace-member-manifests.d.ts.map +1 -0
  71. package/dist/check/workspace-member-manifests.js +23 -0
  72. package/dist/check/workspace-member-manifests.js.map +1 -0
  73. package/dist/check.d.ts +6 -5
  74. package/dist/check.d.ts.map +1 -1
  75. package/dist/check.js +21 -307
  76. package/dist/check.js.map +1 -1
  77. package/dist/handlers/classify-npm-view-failure.d.ts +35 -0
  78. package/dist/handlers/classify-npm-view-failure.d.ts.map +1 -0
  79. package/dist/handlers/classify-npm-view-failure.js +77 -0
  80. package/dist/handlers/classify-npm-view-failure.js.map +1 -0
  81. package/dist/handlers/crates.d.ts +6 -4
  82. package/dist/handlers/crates.d.ts.map +1 -1
  83. package/dist/handlers/crates.js +18 -6
  84. package/dist/handlers/crates.js.map +1 -1
  85. package/dist/handlers/npm.d.ts.map +1 -1
  86. package/dist/handlers/npm.js +37 -6
  87. package/dist/handlers/npm.js.map +1 -1
  88. package/dist/write-dependent-version-reqs.d.ts +50 -0
  89. package/dist/write-dependent-version-reqs.d.ts.map +1 -0
  90. package/dist/write-dependent-version-reqs.js +158 -0
  91. package/dist/write-dependent-version-reqs.js.map +1 -0
  92. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkCargoShapeFindings(packages: readonly Package[], cwd: string, findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-cargo-shape-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-cargo-shape-findings.d.ts","sourceRoot":"","sources":["../../src/check/check-cargo-shape-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,10 @@
1
+ import { checkCargoShape } from '../preflight.js';
2
+ export async function checkCargoShapeFindings(packages, cwd, findings) {
3
+ for (const f of await checkCargoShape(packages, { cwd })) {
4
+ findings.push({
5
+ package: f.package,
6
+ message: `[${f.code}] ${f.cargoTomlPath}: ${f.detail}`,
7
+ });
8
+ }
9
+ }
10
+ //# sourceMappingURL=check-cargo-shape-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-cargo-shape-findings.js","sourceRoot":"","sources":["../../src/check/check-cargo-shape-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAA4B,EAC5B,GAAW,EACX,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,MAAM,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkCratesPackageMetadata(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-crates-package-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-crates-package-metadata.d.ts","sourceRoot":"","sources":["../../src/check/check-crates-package-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,11 @@
1
+ import { ErrorCodes } from '../error-codes.js';
2
+ import { checkCratesMetadata } from '../preflight.js';
3
+ export async function checkCratesPackageMetadata(packages, findings) {
4
+ for (const f of await checkCratesMetadata(packages)) {
5
+ findings.push({
6
+ package: f.package,
7
+ message: `[${ErrorCodes.CRATES_MISSING_METADATA}] ${f.cargoTomlPath} missing required Cargo.toml [package] field(s): ${f.missing.join(', ')}. crates.io rejects the publish after cargo's verification build.`,
8
+ });
9
+ }
10
+ }
11
+ //# sourceMappingURL=check-crates-package-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-crates-package-metadata.js","sourceRoot":"","sources":["../../src/check/check-crates-package-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAA4B,EAC5B,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,UAAU,CAAC,uBAAuB,KAAK,CAAC,CAAC,aAAa,oDAAoD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mEAAmE;SAC/M,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkDependsOn(packages: readonly Package[], findings: CheckFinding[]): void;
4
+ //# sourceMappingURL=check-depends-on.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-depends-on.d.ts","sourceRoot":"","sources":["../../src/check/check-depends-on.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAQ3F"}
@@ -0,0 +1,13 @@
1
+ import { assertNoCycles } from '../cascade.js';
2
+ import { toError } from '../to-error.js';
3
+ export function checkDependsOn(packages, findings) {
4
+ try {
5
+ assertNoCycles(packages);
6
+ }
7
+ catch (err) {
8
+ findings.push({
9
+ message: toError(err).message,
10
+ });
11
+ }
12
+ }
13
+ //# sourceMappingURL=check-depends-on.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-depends-on.js","sourceRoot":"","sources":["../../src/check/check-depends-on.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,MAAM,UAAU,cAAc,CAAC,QAA4B,EAAE,QAAwB;IACnF,IAAI,CAAC;QACH,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO;SAC9B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkGlobsMatchTrackedFiles(packages: readonly Package[], cwd: string, findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-globs-match-tracked-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-globs-match-tracked-files.d.ts","sourceRoot":"","sources":["../../src/check/check-globs-match-tracked-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,18 @@
1
+ import { matchesAny } from '../glob.js';
2
+ import { listTrackedFiles } from './list-tracked-files.js';
3
+ export async function checkGlobsMatchTrackedFiles(packages, cwd, findings) {
4
+ const tracked = await listTrackedFiles(cwd);
5
+ if (tracked === null) {
6
+ return;
7
+ }
8
+ for (const p of packages) {
9
+ const matched = tracked.some((f) => matchesAny(p.globs, f));
10
+ if (!matched) {
11
+ findings.push({
12
+ package: p.name,
13
+ message: `globs ${JSON.stringify(p.globs)} matched no tracked files. Empty globs mean the package will never cascade on a real commit.`,
14
+ });
15
+ }
16
+ }
17
+ }
18
+ //# sourceMappingURL=check-globs-match-tracked-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-globs-match-tracked-files.js","sourceRoot":"","sources":["../../src/check/check-globs-match-tracked-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAA4B,EAC5B,GAAW,EACX,QAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,8FAA8F;aACxI,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkNpmRepository(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-npm-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-npm-repository.d.ts","sourceRoot":"","sources":["../../src/check/check-npm-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9G"}
@@ -0,0 +1,14 @@
1
+ import { ErrorCodes } from '../error-codes.js';
2
+ import { checkProvenanceMetadata } from '../preflight.js';
3
+ export async function checkNpmRepository(packages, findings) {
4
+ for (const f of await checkProvenanceMetadata(packages)) {
5
+ const reason = f.reason === 'missing'
6
+ ? `${f.packageJsonPath} not found`
7
+ : `${f.packageJsonPath} has missing or empty \`repository\``;
8
+ findings.push({
9
+ package: f.package,
10
+ message: `[${ErrorCodes.NPM_MISSING_REPOSITORY}] ${reason}. \`npm publish --provenance\` hard-requires a non-empty repository.url.`,
11
+ });
12
+ }
13
+ }
14
+ //# sourceMappingURL=check-npm-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-npm-repository.js","sourceRoot":"","sources":["../../src/check/check-npm-repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAA4B,EAAE,QAAwB;IAC7F,KAAK,MAAM,CAAC,IAAI,MAAM,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GACV,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,YAAY;YAClC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,sCAAsC,CAAC;QACjE,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,UAAU,CAAC,sBAAsB,KAAK,MAAM,0EAA0E;SACpI,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkNpmTargetTriples(packages: readonly Package[], findings: CheckFinding[]): void;
4
+ //# sourceMappingURL=check-npm-target-triples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-npm-target-triples.d.ts","sourceRoot":"","sources":["../../src/check/check-npm-target-triples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,IAAI,CAiBN"}
@@ -0,0 +1,27 @@
1
+ import { assertTripleSupported } from '../handlers/npm-platform.js';
2
+ import { toError } from '../to-error.js';
3
+ import { normalizeTarget } from '../types.js';
4
+ export function checkNpmTargetTriples(packages, findings) {
5
+ for (const p of packages) {
6
+ if (p.kind !== 'npm') {
7
+ continue;
8
+ }
9
+ const targets = p.targets;
10
+ if (!targets) {
11
+ continue;
12
+ }
13
+ for (const t of targets) {
14
+ const { triple } = normalizeTarget(t);
15
+ try {
16
+ assertTripleSupported(triple, p.name);
17
+ }
18
+ catch (err) {
19
+ findings.push({
20
+ package: p.name,
21
+ message: toError(err).message,
22
+ });
23
+ }
24
+ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=check-npm-target-triples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-npm-target-triples.js","sourceRoot":"","sources":["../../src/check/check-npm-target-triples.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAGhE,MAAM,UAAU,qBAAqB,CACnC,QAA4B,EAC5B,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACjC,MAAM,OAAO,GAAI,CAAiC,CAAC,OAAO,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;oBACf,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkPackageJsonShapeFindings(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-package-json-shape-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-package-json-shape-findings.d.ts","sourceRoot":"","sources":["../../src/check/check-package-json-shape-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,10 @@
1
+ import { checkPackageJsonShape } from '../preflight.js';
2
+ export async function checkPackageJsonShapeFindings(packages, findings) {
3
+ for (const f of await checkPackageJsonShape(packages)) {
4
+ findings.push({
5
+ package: f.package,
6
+ message: `[${f.code}] ${f.packageJsonPath}: ${f.detail}`,
7
+ });
8
+ }
9
+ }
10
+ //# sourceMappingURL=check-package-json-shape-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-package-json-shape-findings.js","sourceRoot":"","sources":["../../src/check/check-package-json-shape-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,QAA4B,EAC5B,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,MAAM,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,MAAM,EAAE;SACzD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkPaths(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-paths.d.ts","sourceRoot":"","sources":["../../src/check/check-paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAStG"}
@@ -0,0 +1,13 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { pathExists } from '../utils/path-exists.js';
3
+ export async function checkPaths(packages, findings) {
4
+ for (const p of packages) {
5
+ if (!(await pathExists(p.path)) || !(await stat(p.path)).isDirectory()) {
6
+ findings.push({
7
+ package: p.name,
8
+ message: `path "${p.path}" does not exist or is not a directory in the worktree`,
9
+ });
10
+ }
11
+ }
12
+ }
13
+ //# sourceMappingURL=check-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-paths.js","sourceRoot":"","sources":["../../src/check/check-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAA4B,EAAE,QAAwB;IACrF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,wDAAwD;aACjF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkPypiVersion(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-pypi-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pypi-version.d.ts","sourceRoot":"","sources":["../../src/check/check-pypi-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,11 @@
1
+ import { ErrorCodes } from '../error-codes.js';
2
+ import { checkPypiVersionSource } from '../preflight.js';
3
+ export async function checkPypiVersion(packages, findings) {
4
+ for (const f of await checkPypiVersionSource(packages)) {
5
+ findings.push({
6
+ package: f.package,
7
+ message: `[${ErrorCodes.PYPI_STATIC_VERSION}] ${f.pyprojectPath} declares a static \`[project].version\` literal. Use \`[project].dynamic = ["version"]\` with hatch-vcs (recommended), setuptools-scm, or the maturin Cargo.toml-driven path — putitoutthere does not edit pyproject.toml at release time, so a literal silently ships the previous release.`,
8
+ });
9
+ }
10
+ }
11
+ //# sourceMappingURL=check-pypi-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pypi-version.js","sourceRoot":"","sources":["../../src/check/check-pypi-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAA4B,EAC5B,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,MAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,UAAU,CAAC,mBAAmB,KAAK,CAAC,CAAC,aAAa,+RAA+R;SAC/V,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkPyprojectAndBundleCli(packages: readonly Package[], cwd: string, findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-pyproject-and-bundle-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pyproject-and-bundle-cli.d.ts","sourceRoot":"","sources":["../../src/check/check-pyproject-and-bundle-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -0,0 +1,52 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { isAbsolute, join, resolve } from 'node:path';
3
+ import { pathExists } from '../utils/path-exists.js';
4
+ import { readDeclaredBins } from './read-declared-bins.js';
5
+ export async function checkPyprojectAndBundleCli(packages, cwd, findings) {
6
+ for (const p of packages) {
7
+ if (p.kind !== 'pypi') {
8
+ continue;
9
+ }
10
+ const pyprojectPath = join(p.path, 'pyproject.toml');
11
+ if (!(await pathExists(pyprojectPath))) {
12
+ findings.push({
13
+ package: p.name,
14
+ message: `pyproject.toml not found at ${pyprojectPath}`,
15
+ });
16
+ continue;
17
+ }
18
+ if (p.build !== 'maturin' || p.bundle_cli === undefined) {
19
+ continue;
20
+ }
21
+ const bundleCli = p.bundle_cli;
22
+ // `bundle_cli.crate_path` is documented as relative to the repo
23
+ // root (see config.ts: default = "."). Resolve against `cwd`,
24
+ // not the package path.
25
+ const cratePathAbs = isAbsolute(bundleCli.crate_path)
26
+ ? bundleCli.crate_path
27
+ : resolve(cwd, bundleCli.crate_path);
28
+ const cargoTomlPath = join(cratePathAbs, 'Cargo.toml');
29
+ if (!(await pathExists(cratePathAbs)) || !(await stat(cratePathAbs)).isDirectory()) {
30
+ findings.push({
31
+ package: p.name,
32
+ message: `bundle_cli.crate_path "${bundleCli.crate_path}" does not exist or is not a directory`,
33
+ });
34
+ continue;
35
+ }
36
+ if (!(await pathExists(cargoTomlPath))) {
37
+ findings.push({
38
+ package: p.name,
39
+ message: `bundle_cli.crate_path "${bundleCli.crate_path}" has no Cargo.toml`,
40
+ });
41
+ continue;
42
+ }
43
+ const declaredBins = await readDeclaredBins(cargoTomlPath);
44
+ if (!declaredBins.includes(bundleCli.bin)) {
45
+ findings.push({
46
+ package: p.name,
47
+ message: `bundle_cli.bin "${bundleCli.bin}" is not declared as a [[bin]] in ${cargoTomlPath}. Declared bins: ${declaredBins.length === 0 ? '(none)' : declaredBins.join(', ')}.`,
48
+ });
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=check-pyproject-and-bundle-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pyproject-and-bundle-cli.js","sourceRoot":"","sources":["../../src/check/check-pyproject-and-bundle-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAA4B,EAC5B,GAAW,EACX,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,+BAA+B,aAAa,EAAE;aACxD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACpE,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC;QAC/B,gEAAgE;QAChE,8DAA8D;QAC9D,wBAAwB;QACxB,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC;YACnD,CAAC,CAAC,SAAS,CAAC,UAAU;YACtB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACnF,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,0BAA0B,SAAS,CAAC,UAAU,wCAAwC;aAChG,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,0BAA0B,SAAS,CAAC,UAAU,qBAAqB;aAC7E,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,OAAO,EAAE,mBAAmB,SAAS,CAAC,GAAG,qCAAqC,aAAa,oBAAoB,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACjL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkPyprojectShapeFindings(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-pyproject-shape-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pyproject-shape-findings.d.ts","sourceRoot":"","sources":["../../src/check/check-pyproject-shape-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,10 @@
1
+ import { checkPyprojectShape } from '../preflight.js';
2
+ export async function checkPyprojectShapeFindings(packages, findings) {
3
+ for (const f of await checkPyprojectShape(packages)) {
4
+ findings.push({
5
+ package: f.package,
6
+ message: `[${f.code}] ${f.pyprojectPath}: ${f.detail}`,
7
+ });
8
+ }
9
+ }
10
+ //# sourceMappingURL=check-pyproject-shape-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pyproject-shape-findings.js","sourceRoot":"","sources":["../../src/check/check-pyproject-shape-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAA4B,EAC5B,QAAwB;IAExB,KAAK,MAAM,CAAC,IAAI,MAAM,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,MAAM,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkRepoUrlMatchFindings(packages: readonly Package[], findings: CheckFinding[]): Promise<void>;
4
+ //# sourceMappingURL=check-repo-url-match-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-repo-url-match-findings.d.ts","sourceRoot":"","sources":["../../src/check/check-repo-url-match-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,17 @@
1
+ import { ErrorCodes } from '../error-codes.js';
2
+ import { checkRepoUrlMatch } from '../preflight.js';
3
+ export async function checkRepoUrlMatchFindings(packages, findings) {
4
+ // Sourced from GHA's process env at PR time when this runs inside the
5
+ // reusable workflow. Locally invoked `putitoutthere check` outside any
6
+ // GHA context will skip the check (the preflight returns no findings
7
+ // when GITHUB_REPOSITORY is unset), which is the right behaviour:
8
+ // there is no workflow source to disagree with.
9
+ const githubRepository = process.env.GITHUB_REPOSITORY;
10
+ for (const f of await checkRepoUrlMatch(packages, { githubRepository })) {
11
+ findings.push({
12
+ package: f.package,
13
+ message: `[${ErrorCodes.REPO_URL_MISMATCH}] ${f.manifestPath}: declared repository "${f.declaredOwnerRepo}" does not match GITHUB_REPOSITORY "${f.expectedOwnerRepo}". npm rejects \`--provenance\` publishes whose package.json#repository.url disagrees with the OIDC source claim (422); crates.io / PyPI trusted-publisher paths carry the same risk.`,
14
+ });
15
+ }
16
+ }
17
+ //# sourceMappingURL=check-repo-url-match-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-repo-url-match-findings.js","sourceRoot":"","sources":["../../src/check/check-repo-url-match-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAA4B,EAC5B,QAAwB;IAExB,sEAAsE;IACtE,uEAAuE;IACvE,qEAAqE;IACrE,kEAAkE;IAClE,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACxE,QAAQ,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,IAAI,UAAU,CAAC,iBAAiB,KAAK,CAAC,CAAC,YAAY,0BAA0B,CAAC,CAAC,iBAAiB,uCAAuC,CAAC,CAAC,iBAAiB,uLAAuL;SAC3V,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Package } from '../config.js';
2
+ import type { CheckFinding } from '../check.js';
3
+ export declare function checkTagTemplateCollisions(packages: readonly Package[], findings: CheckFinding[]): void;
4
+ //# sourceMappingURL=check-tag-template-collisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-tag-template-collisions.d.ts","sourceRoot":"","sources":["../../src/check/check-tag-template-collisions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,YAAY,EAAE,GACvB,IAAI,CAkBN"}
@@ -0,0 +1,22 @@
1
+ import { formatTag } from '../tag-template.js';
2
+ export function checkTagTemplateCollisions(packages, findings) {
3
+ // Templates collide when they resolve to the same tag at the same
4
+ // version — typically when `{name}` is omitted and every package
5
+ // thereafter races for one tag slot. A sentinel version is enough:
6
+ // differing templates differ on every version, identical templates
7
+ // collide on every version.
8
+ const seen = new Map();
9
+ for (const p of packages) {
10
+ const sentinel = formatTag(p.tag_format, { name: p.name, version: '0.0.0' });
11
+ const prior = seen.get(sentinel);
12
+ if (prior !== undefined) {
13
+ findings.push({
14
+ message: `tag_format collision: "${p.name}" and "${prior}" both resolve to tag "${sentinel}" at the same version. Include {name} in tag_format to disambiguate.`,
15
+ });
16
+ }
17
+ else {
18
+ seen.set(sentinel, p.name);
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=check-tag-template-collisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-tag-template-collisions.js","sourceRoot":"","sources":["../../src/check/check-tag-template-collisions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,UAAU,0BAA0B,CACxC,QAA4B,EAC5B,QAAwB;IAExB,kEAAkE;IAClE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,4BAA4B;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,0BAA0B,CAAC,CAAC,IAAI,UAAU,KAAK,0BAA0B,QAAQ,sEAAsE;aACjK,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function collectBinsFromManifest(parsed: Record<string, unknown>): string[];
2
+ //# sourceMappingURL=collect-bins-from-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-bins-from-manifest.d.ts","sourceRoot":"","sources":["../../src/check/collect-bins-from-manifest.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAqBjF"}
@@ -0,0 +1,27 @@
1
+ export function collectBinsFromManifest(parsed) {
2
+ const result = [];
3
+ const bins = parsed.bin;
4
+ if (Array.isArray(bins)) {
5
+ for (const entry of bins) {
6
+ if (typeof entry === 'object' && entry !== null) {
7
+ const name = entry.name;
8
+ if (typeof name === 'string') {
9
+ result.push(name);
10
+ }
11
+ }
12
+ }
13
+ }
14
+ // Cargo's implicit-binary rule: a crate without any explicit [[bin]]
15
+ // table ships a binary named after `[package].name` when
16
+ // `src/main.rs` exists. Include that name as a candidate so the
17
+ // common single-binary shape (one crate, one bin, no [[bin]] block)
18
+ // doesn't spuriously fail this check.
19
+ if (result.length === 0) {
20
+ const pkg = parsed.package;
21
+ if (pkg && typeof pkg.name === 'string') {
22
+ result.push(pkg.name);
23
+ }
24
+ }
25
+ return result;
26
+ }
27
+ //# sourceMappingURL=collect-bins-from-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-bins-from-manifest.js","sourceRoot":"","sources":["../../src/check/collect-bins-from-manifest.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;gBAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAA,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IACD,qEAAqE;IACrE,yDAAyD;IACzD,gEAAgE;IAChE,oEAAoE;IACpE,sCAAsC;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAyC,CAAC;QAC7D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAA,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function listTrackedFiles(cwd: string): Promise<string[] | null>;
2
+ //# sourceMappingURL=list-tracked-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tracked-files.d.ts","sourceRoot":"","sources":["../../src/check/list-tracked-files.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAO5E"}
@@ -0,0 +1,11 @@
1
+ import { execCapture } from '../utils/exec-capture.js';
2
+ export async function listTrackedFiles(cwd) {
3
+ try {
4
+ const { stdout } = await execCapture('git', ['ls-files'], { cwd });
5
+ return stdout.split('\n').filter((l) => l.length > 0);
6
+ }
7
+ catch {
8
+ return null;
9
+ }
10
+ }
11
+ //# sourceMappingURL=list-tracked-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tracked-files.js","sourceRoot":"","sources":["../../src/check/list-tracked-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function parseCargoToml(path: string): Promise<Record<string, unknown> | null>;
2
+ //# sourceMappingURL=parse-cargo-toml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-cargo-toml.d.ts","sourceRoot":"","sources":["../../src/check/parse-cargo-toml.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAM1F"}
@@ -0,0 +1,11 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parse as parseToml } from 'smol-toml';
3
+ export async function parseCargoToml(path) {
4
+ try {
5
+ return parseToml(await readFile(path, 'utf8'));
6
+ }
7
+ catch {
8
+ return null;
9
+ }
10
+ }
11
+ //# sourceMappingURL=parse-cargo-toml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-cargo-toml.js","sourceRoot":"","sources":["../../src/check/parse-cargo-toml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function readDeclaredBins(cargoTomlPath: string): Promise<string[]>;
2
+ //# sourceMappingURL=read-declared-bins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-declared-bins.d.ts","sourceRoot":"","sources":["../../src/check/read-declared-bins.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB/E"}
@@ -0,0 +1,33 @@
1
+ import { collectBinsFromManifest } from './collect-bins-from-manifest.js';
2
+ import { parseCargoToml } from './parse-cargo-toml.js';
3
+ import { workspaceMemberManifests } from './workspace-member-manifests.js';
4
+ export async function readDeclaredBins(cargoTomlPath) {
5
+ const parsed = await parseCargoToml(cargoTomlPath);
6
+ if (parsed === null) {
7
+ return [];
8
+ }
9
+ const result = collectBinsFromManifest(parsed);
10
+ // Workspace manifests delegate [[bin]] declarations to member crates
11
+ // (#337). `cargo build --bin X` from anywhere in the workspace
12
+ // resolves X transparently, so a check that only reads the
13
+ // workspace-root manifest reports bins as missing even when they
14
+ // exist in a member. Walk `[workspace].members` so `crate_path = "."`
15
+ // (the default) satisfies the standard cargo-workspace shape.
16
+ // `members` entries are globs, expanded against the filesystem the way
17
+ // cargo resolves them. parseCargoToml returns null for missing /
18
+ // malformed manifests, so stray entries silently drop out — cargo's
19
+ // own diagnostics own surfacing those.
20
+ for (const memberManifest of await workspaceMemberManifests(parsed, cargoTomlPath)) {
21
+ const memberParsed = await parseCargoToml(memberManifest);
22
+ if (memberParsed === null) {
23
+ continue;
24
+ }
25
+ for (const b of collectBinsFromManifest(memberParsed)) {
26
+ if (!result.includes(b)) {
27
+ result.push(b);
28
+ }
29
+ }
30
+ }
31
+ return result;
32
+ }
33
+ //# sourceMappingURL=read-declared-bins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-declared-bins.js","sourceRoot":"","sources":["../../src/check/read-declared-bins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,aAAqB;IAC1D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAAA,OAAO,EAAE,CAAC;IAAA,CAAC;IACjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,qEAAqE;IACrE,+DAA+D;IAC/D,2DAA2D;IAC3D,iEAAiE;IACjE,sEAAsE;IACtE,8DAA8D;IAC9D,uEAAuE;IACvE,iEAAiE;IACjE,oEAAoE;IACpE,uCAAuC;IACvC,KAAK,MAAM,cAAc,IAAI,MAAM,wBAAwB,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;QACnF,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAAA,SAAS;QAAA,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAA,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function workspaceMemberManifests(parsed: Record<string, unknown>, cargoTomlPath: string): Promise<string[]>;
2
+ //# sourceMappingURL=workspace-member-manifests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-member-manifests.d.ts","sourceRoot":"","sources":["../../src/check/workspace-member-manifests.ts"],"names":[],"mappings":"AAIA,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB"}