@crbroughton/recul 0.1.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/dist/bin/recul.d.ts +3 -0
  4. package/dist/bin/recul.d.ts.map +1 -0
  5. package/dist/bin/recul.js +96 -0
  6. package/dist/bin/recul.js.map +1 -0
  7. package/dist/src/adapters/npm.d.ts +10 -0
  8. package/dist/src/adapters/npm.d.ts.map +1 -0
  9. package/dist/src/adapters/npm.js +26 -0
  10. package/dist/src/adapters/npm.js.map +1 -0
  11. package/dist/src/adapters/pnpm.d.ts +34 -0
  12. package/dist/src/adapters/pnpm.d.ts.map +1 -0
  13. package/dist/src/adapters/pnpm.js +97 -0
  14. package/dist/src/adapters/pnpm.js.map +1 -0
  15. package/dist/src/audit.d.ts +19 -0
  16. package/dist/src/audit.d.ts.map +1 -0
  17. package/dist/src/audit.js +65 -0
  18. package/dist/src/audit.js.map +1 -0
  19. package/dist/src/config.d.ts +23 -0
  20. package/dist/src/config.d.ts.map +1 -0
  21. package/dist/src/config.js +67 -0
  22. package/dist/src/config.js.map +1 -0
  23. package/dist/src/index.d.ts +6 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js +5 -0
  26. package/dist/src/index.js.map +1 -0
  27. package/dist/src/init.d.ts +2 -0
  28. package/dist/src/init.d.ts.map +1 -0
  29. package/dist/src/init.js +113 -0
  30. package/dist/src/init.js.map +1 -0
  31. package/dist/src/lockfile.d.ts +24 -0
  32. package/dist/src/lockfile.d.ts.map +1 -0
  33. package/dist/src/lockfile.js +54 -0
  34. package/dist/src/lockfile.js.map +1 -0
  35. package/dist/src/output.d.ts +13 -0
  36. package/dist/src/output.d.ts.map +1 -0
  37. package/dist/src/output.js +198 -0
  38. package/dist/src/output.js.map +1 -0
  39. package/dist/src/resolve.d.ts +25 -0
  40. package/dist/src/resolve.d.ts.map +1 -0
  41. package/dist/src/resolve.js +55 -0
  42. package/dist/src/resolve.js.map +1 -0
  43. package/dist/src/semver.d.ts +29 -0
  44. package/dist/src/semver.d.ts.map +1 -0
  45. package/dist/src/semver.js +39 -0
  46. package/dist/src/semver.js.map +1 -0
  47. package/dist/src/types.d.ts +70 -0
  48. package/dist/src/types.d.ts.map +1 -0
  49. package/dist/src/types.js +2 -0
  50. package/dist/src/types.js.map +1 -0
  51. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { DeclaredSpecifier, RangeSpecifier } from './types.js';
2
+ /** Strip leading range characters (^, ~, >=, etc.) to get a bare version. */
3
+ export declare function bareVersion(version: string): string;
4
+ /**
5
+ * Compare two bare semver strings.
6
+ * Returns negative if a < b, 0 if equal, positive if a > b.
7
+ */
8
+ interface SemverCompareOptions {
9
+ versionA: string;
10
+ versionB: string;
11
+ }
12
+ export declare function semverCompare({ versionA, versionB }: SemverCompareOptions): number;
13
+ /**
14
+ * Compare two bare semver strings with awareness of the configured specifier.
15
+ *
16
+ * - exact → compare all three components (major.minor.patch)
17
+ * - tilde → compare major.minor only (patch drift is acceptable)
18
+ * - caret → compare major only (minor + patch drift is acceptable)
19
+ */
20
+ interface SemverCompareForSpecifierOptions {
21
+ versionA: string;
22
+ versionB: string;
23
+ specifier: RangeSpecifier;
24
+ }
25
+ export declare function semverCompareForSpecifier({ versionA, versionB, specifier }: SemverCompareForSpecifierOptions): number;
26
+ /** Detect the range specifier prefix declared in a raw version string. */
27
+ export declare function detectSpecifier(raw: string): DeclaredSpecifier;
28
+ export {};
29
+ //# sourceMappingURL=semver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/semver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKnE,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,UAAU,oBAAoB;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAErE,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,GAAG,MAAM,CASlF;AAED;;;;;;GAMG;AACH,UAAU,gCAAgC;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE;AAE5G,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gCAAgC,GAAG,MAAM,CAWrH;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAQ9D"}
@@ -0,0 +1,39 @@
1
+ const LEADING_NON_DIGIT = /^\D*/;
2
+ const STARTS_WITH_DIGIT = /^\d/;
3
+ /** Strip leading range characters (^, ~, >=, etc.) to get a bare version. */
4
+ export function bareVersion(version) {
5
+ return version.replace(LEADING_NON_DIGIT, '');
6
+ }
7
+ export function semverCompare({ versionA, versionB }) {
8
+ const partsA = versionA.split('.').map(Number);
9
+ const partsB = versionB.split('.').map(Number);
10
+ for (let i = 0; i < 3; i++) {
11
+ const diff = (partsA[i] ?? 0) - (partsB[i] ?? 0);
12
+ if (diff !== 0)
13
+ return diff;
14
+ }
15
+ return 0;
16
+ }
17
+ export function semverCompareForSpecifier({ versionA, versionB, specifier }) {
18
+ const partsA = versionA.split('.').map(Number);
19
+ const partsB = versionB.split('.').map(Number);
20
+ const depthBySpecifier = { exact: 3, tilde: 2, caret: 1 };
21
+ const depth = depthBySpecifier[specifier];
22
+ for (let i = 0; i < depth; i++) {
23
+ const diff = (partsA[i] ?? 0) - (partsB[i] ?? 0);
24
+ if (diff !== 0)
25
+ return diff;
26
+ }
27
+ return 0;
28
+ }
29
+ /** Detect the range specifier prefix declared in a raw version string. */
30
+ export function detectSpecifier(raw) {
31
+ if (raw.startsWith('^'))
32
+ return 'caret';
33
+ if (raw.startsWith('~'))
34
+ return 'tilde';
35
+ if (STARTS_WITH_DIGIT.test(raw))
36
+ return 'exact';
37
+ return 'other';
38
+ }
39
+ //# sourceMappingURL=semver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/semver.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAChC,MAAM,iBAAiB,GAAG,KAAK,CAAA;AAE/B,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,IAAI,IAAI,KAAK,CAAC;YACZ,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAWD,MAAM,UAAU,yBAAyB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAoC;IAC3G,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,gBAAgB,GAAmC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACzF,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,IAAI,IAAI,KAAK,CAAC;YACZ,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,OAAO,OAAO,CAAA;IAChB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,OAAO,OAAO,CAAA;IAChB,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,OAAO,OAAO,CAAA;IAChB,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,70 @@
1
+ export type PackageManager = 'npm' | 'pnpm';
2
+ export type BehindBehavior = 'ignore' | 'report';
3
+ export type RangeSpecifier = 'exact' | 'caret' | 'tilde';
4
+ /**
5
+ * Either a single specifier applied to all packages, or a per-package map.
6
+ * The "default" key in the map acts as the fallback for unlisted packages.
7
+ *
8
+ * @example
9
+ * "exact"
10
+ * { "default": "exact", "react": "tilde", "lodash": "caret" }
11
+ */
12
+ export type RangeSpecifierConfig = RangeSpecifier | Record<string, RangeSpecifier>;
13
+ export interface Config {
14
+ lag: number;
15
+ file: string;
16
+ pm: PackageManager;
17
+ ignore: string[];
18
+ behindBehavior: BehindBehavior;
19
+ rangeSpecifier: RangeSpecifierConfig;
20
+ minimumReleaseAge?: number;
21
+ preReleaseFilter: string[];
22
+ }
23
+ /** Shape of recul.config.json(c) */
24
+ export interface ConfigFile {
25
+ lag?: number;
26
+ packageManager?: PackageManager;
27
+ packageFile?: string;
28
+ behindBehavior?: BehindBehavior;
29
+ rangeSpecifier?: RangeSpecifierConfig;
30
+ ignore?: string[];
31
+ minimumReleaseAge?: number;
32
+ preReleaseFilter?: string[];
33
+ }
34
+ export interface ResolvedPackage {
35
+ name: string;
36
+ stableVersions: string[];
37
+ latest: string | null;
38
+ target: string | null;
39
+ }
40
+ /** name → installed version, resolved from a lockfile. */
41
+ export type InstalledVersionMap = Record<string, string>;
42
+ export type AuditStatus = 'ok' | 'pin' | 'behind' | 'unresolved';
43
+ /** The range prefix declared in package.json. */
44
+ export type DeclaredSpecifier = 'exact' | 'caret' | 'tilde' | 'other';
45
+ export interface AuditResult {
46
+ name: string;
47
+ /** Raw version string as declared in package.json, e.g. "^1.3.4". */
48
+ declared: string;
49
+ /** Bare version with range prefix stripped, e.g. "1.3.4". */
50
+ current: string;
51
+ /** Actually installed version from lockfile, or null if no lockfile. */
52
+ installed: string | null;
53
+ target: string | null;
54
+ latest: string | null;
55
+ status: AuditStatus;
56
+ /** The resolved rangeSpecifier for this specific package. */
57
+ rangeSpecifier: RangeSpecifier;
58
+ declaredSpecifier: DeclaredSpecifier;
59
+ /** True when declaredSpecifier doesn't match the configured rangeSpecifier. */
60
+ specifierMismatch: boolean;
61
+ /** True when the version was declared as a pnpm catalog reference. */
62
+ fromCatalog: boolean;
63
+ error?: string;
64
+ }
65
+ /** Shape of what we read from package.json. */
66
+ export interface PackageJson {
67
+ dependencies?: Record<string, string>;
68
+ devDependencies?: Record<string, string>;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAA;AAE3C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAElF,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,cAAc,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,oBAAoB,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEhE,iDAAiD;AACjD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAErE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,WAAW,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,+EAA+E;IAC/E,iBAAiB,EAAE,OAAO,CAAA;IAC1B,sEAAsE;IACtE,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@crbroughton/recul",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Stay N versions behind the latest published release of your npm dependencies to avoid supply chain attacks.",
6
+ "author": {
7
+ "name": "Craig R Broughton",
8
+ "email": "CRBroughton@posteo.uk",
9
+ "url": "https://CRBroughton.me"
10
+ },
11
+ "license": "MIT",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/CRBroughton/recul"
15
+ },
16
+ "keywords": [
17
+ "npm",
18
+ "security",
19
+ "dependencies",
20
+ "supply-chain",
21
+ "audit",
22
+ "version-pinning"
23
+ ],
24
+ "exports": {
25
+ ".": "./dist/src/index.js"
26
+ },
27
+ "bin": {
28
+ "recul": "./dist/bin/recul.js"
29
+ },
30
+ "files": [
31
+ "dist/bin/",
32
+ "dist/src/"
33
+ ],
34
+ "engines": {
35
+ "node": ">=18"
36
+ },
37
+ "dependencies": {
38
+ "citty": "0.2.0",
39
+ "confbox": "0.2.2",
40
+ "defu": "6.1.4",
41
+ "destr": "2.0.3"
42
+ },
43
+ "devDependencies": {
44
+ "@antfu/eslint-config": "8.0.0",
45
+ "@changesets/cli": "2.30.0",
46
+ "@types/node": "25.3.5",
47
+ "@vitest/coverage-v8": "4.1.0",
48
+ "eslint": "10.2.0",
49
+ "jiti": "2.6.1",
50
+ "typescript": "5.9.2",
51
+ "vite": "8.0.1",
52
+ "vitest": "4.1.0"
53
+ },
54
+ "scripts": {
55
+ "build": "tsc",
56
+ "dev": "tsc --watch",
57
+ "start": "node dist/bin/recul.js",
58
+ "test": "vitest run",
59
+ "test:coverage": "vitest run --coverage",
60
+ "lint": "eslint",
61
+ "lint:fix": "eslint --fix",
62
+ "changeset": "changeset",
63
+ "changeset:status": "changeset status --verbose",
64
+ "changeset:version": "changeset version"
65
+ }
66
+ }