@microwiseai/snapshot 0.5.0 → 0.5.2

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 (113) hide show
  1. package/dist/commands/install.d.ts.map +1 -1
  2. package/dist/commands/install.js +195 -34
  3. package/dist/commands/install.js.map +1 -1
  4. package/dist/commands/preflight.d.ts +31 -0
  5. package/dist/commands/preflight.d.ts.map +1 -0
  6. package/dist/commands/preflight.js +83 -0
  7. package/dist/commands/preflight.js.map +1 -0
  8. package/dist/commands/publish.d.ts +4 -0
  9. package/dist/commands/publish.d.ts.map +1 -1
  10. package/dist/commands/publish.js +35 -1
  11. package/dist/commands/publish.js.map +1 -1
  12. package/dist/index.js +13 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/distkit-closure-bridge.d.ts +102 -0
  15. package/dist/lib/distkit-closure-bridge.d.ts.map +1 -0
  16. package/dist/lib/distkit-closure-bridge.js +177 -0
  17. package/dist/lib/distkit-closure-bridge.js.map +1 -0
  18. package/dist/lib/distkit-closure-parity.d.ts +110 -0
  19. package/dist/lib/distkit-closure-parity.d.ts.map +1 -0
  20. package/dist/lib/distkit-closure-parity.js +134 -0
  21. package/dist/lib/distkit-closure-parity.js.map +1 -0
  22. package/dist/lib/distkit-routing-port.d.ts +37 -0
  23. package/dist/lib/distkit-routing-port.d.ts.map +1 -0
  24. package/dist/lib/distkit-routing-port.js +72 -0
  25. package/dist/lib/distkit-routing-port.js.map +1 -0
  26. package/dist/lib/install-timeline.d.ts +81 -0
  27. package/dist/lib/install-timeline.d.ts.map +1 -0
  28. package/dist/lib/install-timeline.js +243 -0
  29. package/dist/lib/install-timeline.js.map +1 -0
  30. package/dist/lib/preflight-adapter.d.ts +52 -0
  31. package/dist/lib/preflight-adapter.d.ts.map +1 -0
  32. package/dist/lib/preflight-adapter.js +224 -0
  33. package/dist/lib/preflight-adapter.js.map +1 -0
  34. package/dist/lib/transitive-resolver.d.ts +121 -0
  35. package/dist/lib/transitive-resolver.d.ts.map +1 -1
  36. package/dist/lib/transitive-resolver.js +190 -0
  37. package/dist/lib/transitive-resolver.js.map +1 -1
  38. package/node_modules/@gitdot/clone-lib/README.md +117 -0
  39. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts +9 -0
  40. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.d.ts.map +1 -0
  41. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js +154 -0
  42. package/node_modules/@gitdot/clone-lib/dist/bin/gitdot-resolve.js.map +1 -0
  43. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts +21 -0
  44. package/node_modules/@gitdot/clone-lib/dist/clone.d.ts.map +1 -0
  45. package/node_modules/@gitdot/clone-lib/dist/clone.js +228 -0
  46. package/node_modules/@gitdot/clone-lib/dist/clone.js.map +1 -0
  47. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts +10 -0
  48. package/node_modules/@gitdot/clone-lib/dist/dotpath.d.ts.map +1 -0
  49. package/node_modules/@gitdot/clone-lib/dist/dotpath.js +27 -0
  50. package/node_modules/@gitdot/clone-lib/dist/dotpath.js.map +1 -0
  51. package/node_modules/@gitdot/clone-lib/dist/git.d.ts +23 -0
  52. package/node_modules/@gitdot/clone-lib/dist/git.d.ts.map +1 -0
  53. package/node_modules/@gitdot/clone-lib/dist/git.js +134 -0
  54. package/node_modules/@gitdot/clone-lib/dist/git.js.map +1 -0
  55. package/node_modules/@gitdot/clone-lib/dist/index.d.ts +17 -0
  56. package/node_modules/@gitdot/clone-lib/dist/index.d.ts.map +1 -0
  57. package/node_modules/@gitdot/clone-lib/dist/index.js +35 -0
  58. package/node_modules/@gitdot/clone-lib/dist/index.js.map +1 -0
  59. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts +24 -0
  60. package/node_modules/@gitdot/clone-lib/dist/lock.d.ts.map +1 -0
  61. package/node_modules/@gitdot/clone-lib/dist/lock.js +97 -0
  62. package/node_modules/@gitdot/clone-lib/dist/lock.js.map +1 -0
  63. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts +15 -0
  64. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.d.ts.map +1 -0
  65. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js +124 -0
  66. package/node_modules/@gitdot/clone-lib/dist/resolve/gitlab.js.map +1 -0
  67. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts +12 -0
  68. package/node_modules/@gitdot/clone-lib/dist/resolve/index.d.ts.map +1 -0
  69. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js +31 -0
  70. package/node_modules/@gitdot/clone-lib/dist/resolve/index.js.map +1 -0
  71. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts +32 -0
  72. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.d.ts.map +1 -0
  73. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js +159 -0
  74. package/node_modules/@gitdot/clone-lib/dist/resolve/manifest.js.map +1 -0
  75. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts +44 -0
  76. package/node_modules/@gitdot/clone-lib/dist/resolve/member.d.ts.map +1 -0
  77. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js +163 -0
  78. package/node_modules/@gitdot/clone-lib/dist/resolve/member.js.map +1 -0
  79. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts +18 -0
  80. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.d.ts.map +1 -0
  81. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js +155 -0
  82. package/node_modules/@gitdot/clone-lib/dist/resolve/resolve.js.map +1 -0
  83. package/node_modules/@gitdot/clone-lib/dist/types.d.ts +225 -0
  84. package/node_modules/@gitdot/clone-lib/dist/types.d.ts.map +1 -0
  85. package/node_modules/@gitdot/clone-lib/dist/types.js +9 -0
  86. package/node_modules/@gitdot/clone-lib/dist/types.js.map +1 -0
  87. package/node_modules/@gitdot/clone-lib/package.json +53 -0
  88. package/node_modules/@microwiseai/install-preflight/dist/index.d.ts +27 -0
  89. package/node_modules/@microwiseai/install-preflight/dist/index.d.ts.map +1 -0
  90. package/node_modules/@microwiseai/install-preflight/dist/index.js +26 -0
  91. package/node_modules/@microwiseai/install-preflight/dist/index.js.map +1 -0
  92. package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts +42 -0
  93. package/node_modules/@microwiseai/install-preflight/dist/policy.d.ts.map +1 -0
  94. package/node_modules/@microwiseai/install-preflight/dist/policy.js +79 -0
  95. package/node_modules/@microwiseai/install-preflight/dist/policy.js.map +1 -0
  96. package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts +18 -0
  97. package/node_modules/@microwiseai/install-preflight/dist/preflight.d.ts.map +1 -0
  98. package/node_modules/@microwiseai/install-preflight/dist/preflight.js +0 -0
  99. package/node_modules/@microwiseai/install-preflight/dist/preflight.js.map +1 -0
  100. package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts +26 -0
  101. package/node_modules/@microwiseai/install-preflight/dist/resolvers.d.ts.map +1 -0
  102. package/node_modules/@microwiseai/install-preflight/dist/resolvers.js +63 -0
  103. package/node_modules/@microwiseai/install-preflight/dist/resolvers.js.map +1 -0
  104. package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts +45 -0
  105. package/node_modules/@microwiseai/install-preflight/dist/semver.d.ts.map +1 -0
  106. package/node_modules/@microwiseai/install-preflight/dist/semver.js +195 -0
  107. package/node_modules/@microwiseai/install-preflight/dist/semver.js.map +1 -0
  108. package/node_modules/@microwiseai/install-preflight/dist/types.d.ts +136 -0
  109. package/node_modules/@microwiseai/install-preflight/dist/types.d.ts.map +1 -0
  110. package/node_modules/@microwiseai/install-preflight/dist/types.js +11 -0
  111. package/node_modules/@microwiseai/install-preflight/dist/types.js.map +1 -0
  112. package/node_modules/@microwiseai/install-preflight/package.json +49 -0
  113. package/package.json +12 -4
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Public type surface for @gitdot/clone-lib (RESOLVED-LOCK-SPEC S2/S3/S4).
3
+ *
4
+ * Consumers (snapshot / skit / glpkg) import these to type their adapters:
5
+ * import type { ResolvedLock, Member, CloneReport, Manifest } from '@gitdot/clone-lib';
6
+ */
7
+ /** Clone strategy: pin an exact commit, or track the default-branch HEAD. */
8
+ export type CloneMode = 'pinned' | 'head';
9
+ /** Resolved repo visibility (drives the S3 credential pre-flight). */
10
+ export type Visibility = 'public' | 'private' | 'unknown';
11
+ /** How a coordinate was resolved (makes GAP-1 guesswork explicit + checkable). */
12
+ export type Provenance = 'manifest-repository' | 'gitlab-api' | 'package-lock-projectid' | 'convention-guess' | null;
13
+ /** Member kind (reused enum from SUBSET-MANIFEST). */
14
+ export type MemberType = 'npm-lib' | 'app/worker' | 'static-asset' | 'meta';
15
+ /** Structured git failure kind emitted by the GitRunner. */
16
+ export type GitErrorKind = 'not-found' | 'no-access' | 'failed';
17
+ /** A real, git-clonable coordinate. `cloneUrl` is REQUIRED for a finished lock. */
18
+ export interface RepoCoordinate {
19
+ cloneUrl?: string;
20
+ projectPath?: string;
21
+ projectId?: number;
22
+ }
23
+ /** Full resolved ref; `sha` === Member.commitSha. */
24
+ export interface Ref {
25
+ branch: string | null;
26
+ tag: string | null;
27
+ sha: string | null;
28
+ dirty: boolean;
29
+ }
30
+ /** One fully-resolved node of the install closure. */
31
+ export interface Member {
32
+ /** declared gitdot dot-identity, separate from npmName (F2). */
33
+ id: string;
34
+ npmName: string;
35
+ /** resolved GitLab group — pinned PER MEMBER (multi-tenant rule S2). */
36
+ gitlabGroup: string | null;
37
+ repoCoordinate: RepoCoordinate;
38
+ visibility: Visibility;
39
+ version: string | null;
40
+ /** exact commit the version was published from (tag → sha pin). */
41
+ commitSha: string | null;
42
+ ref: Ref;
43
+ memberType: MemberType;
44
+ /** install channel that declared it (glpkg | npm-proxy | skit | …). */
45
+ installer: string;
46
+ provenance: Provenance;
47
+ }
48
+ /** `source` block — the only part that differs between skit/snapshot/glpkg locks. */
49
+ export interface LockSource {
50
+ manifest: string | null;
51
+ manifestVersion: string | null;
52
+ registry: Record<string, unknown>;
53
+ derivedFrom: 'package-lock.json' | 'manifest' | string;
54
+ }
55
+ /** The one resolved-lock schema; skit/snapshot/glpkg.lock.json are instances of it. */
56
+ export interface ResolvedLock {
57
+ lockVersion: 1;
58
+ kind: 'resolved-lock';
59
+ subset?: string;
60
+ source: LockSource;
61
+ resolvedAt: string;
62
+ members: Member[];
63
+ edges: Array<[string, string]>;
64
+ }
65
+ export interface ClonedEntry {
66
+ id: string;
67
+ sha: string;
68
+ path: string;
69
+ coordinate: string;
70
+ visibility: Visibility;
71
+ provenance: Provenance;
72
+ }
73
+ export interface SkippedEntry {
74
+ id: string;
75
+ reason: string;
76
+ }
77
+ export interface NoAccessEntry {
78
+ id: string;
79
+ visibility: Visibility;
80
+ reason: string;
81
+ }
82
+ export interface BucketEntry {
83
+ id: string;
84
+ reason: string;
85
+ }
86
+ /** Structured, --json-serializable clone outcome. Every member lands in one bucket. */
87
+ export interface CloneReport {
88
+ mode: CloneMode;
89
+ credentialsNeeded: number;
90
+ cloned: ClonedEntry[];
91
+ skipped: SkippedEntry[];
92
+ 'skipped-no-access': NoAccessEntry[];
93
+ 'not-found': BucketEntry[];
94
+ failed: BucketEntry[];
95
+ closureSize: number;
96
+ }
97
+ /** The git surface cloneFromLock depends on; inject a fake for deterministic tests. */
98
+ export interface GitRunner {
99
+ exists(absPath: string): boolean;
100
+ isRepo(absPath: string): boolean;
101
+ clone(cloneUrl: string, absPath: string): void;
102
+ checkout(absPath: string, sha: string): void;
103
+ headSha(absPath: string): string;
104
+ }
105
+ export interface GitLabProject {
106
+ id: number | string;
107
+ path_with_namespace?: string;
108
+ http_url_to_repo?: string;
109
+ visibility?: Visibility;
110
+ default_branch?: string;
111
+ [k: string]: unknown;
112
+ }
113
+ export interface GitLabTag {
114
+ name: string;
115
+ commit?: {
116
+ id?: string;
117
+ sha?: string;
118
+ };
119
+ }
120
+ export interface PackumentVersion {
121
+ dist?: {
122
+ tarball?: string;
123
+ };
124
+ dependencies?: Record<string, string>;
125
+ [k: string]: unknown;
126
+ }
127
+ export interface Packument {
128
+ name?: string;
129
+ 'dist-tags'?: {
130
+ latest?: string;
131
+ };
132
+ versions?: Record<string, PackumentVersion>;
133
+ [k: string]: unknown;
134
+ }
135
+ /** Read-only GitLab client; inject a fake in tests. */
136
+ export interface GitLabApi {
137
+ getProject(id: number | string): Promise<GitLabProject>;
138
+ getTags(id: number | string): Promise<GitLabTag[]>;
139
+ getPackument(name: string, opts?: {
140
+ group?: string;
141
+ }): Promise<Packument>;
142
+ }
143
+ /** scope → group (+ optional url) default table. */
144
+ export type RegistryMap = Record<string, {
145
+ group: string;
146
+ url?: string;
147
+ }>;
148
+ /** Install block: channelled ({channel:{name:ver}}) OR a flat {name:ver} map. */
149
+ export type InstallBlock = Record<string, Record<string, string>> | Record<string, string>;
150
+ /** snapshot.json-like input consumed by resolveFromManifest (B2). */
151
+ export interface Manifest {
152
+ name?: string;
153
+ version?: string;
154
+ subset?: string;
155
+ registry?: RegistryMap;
156
+ install?: InstallBlock;
157
+ [k: string]: unknown;
158
+ }
159
+ /** Object form of a skit `dependencies.npm` value (source-pinned). */
160
+ export interface NpmDependencySpec {
161
+ version: string;
162
+ source?: 'npm' | 'proxy';
163
+ }
164
+ /**
165
+ * skit.json (SkitManifest) shape — documented for consumers that map it into a
166
+ * {@link Manifest} before calling resolveFromManifest (a thin per-distribution shim).
167
+ */
168
+ export interface SkitManifest {
169
+ name: string;
170
+ version: string;
171
+ registry?: RegistryMap;
172
+ dependencies?: {
173
+ npm?: Record<string, string | NpmDependencySpec>;
174
+ skit?: Record<string, string>;
175
+ };
176
+ glpkg?: {
177
+ groups?: Record<string, string[]>;
178
+ policy?: string;
179
+ };
180
+ [k: string]: unknown;
181
+ }
182
+ export interface CloneFromLockOptions {
183
+ mode?: CloneMode;
184
+ dest: string;
185
+ only?: string[];
186
+ installer?: string[];
187
+ git?: GitRunner;
188
+ workspaceDir?: string;
189
+ }
190
+ /** Reader that returns an installed package.json (path-1 manifest-repository). */
191
+ export type ReadInstalledManifest = (name: string) => {
192
+ repository?: unknown;
193
+ [k: string]: unknown;
194
+ } | null;
195
+ export interface ResolveLockOptions {
196
+ packageLockPath: string;
197
+ nodeModulesDir?: string;
198
+ subset: string;
199
+ scopes?: string[];
200
+ source?: Partial<Pick<LockSource, 'manifest' | 'manifestVersion'>> & {
201
+ registry?: Record<string, unknown>;
202
+ };
203
+ api: GitLabApi;
204
+ installer?: string;
205
+ readInstalledManifest?: ReadInstalledManifest;
206
+ now?: () => string;
207
+ warn?: (msg: string) => void;
208
+ }
209
+ export interface ResolveFromManifestOptions {
210
+ api: GitLabApi;
211
+ scopes?: string[];
212
+ subset?: string;
213
+ source?: {
214
+ manifest?: string | null;
215
+ manifestVersion?: string | null;
216
+ };
217
+ readInstalledManifest?: ReadInstalledManifest;
218
+ now?: () => string;
219
+ warn?: (msg: string) => void;
220
+ }
221
+ export interface ResolveResult {
222
+ lock: ResolvedLock;
223
+ warnings: string[];
224
+ }
225
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Public type surface for @gitdot/clone-lib (RESOLVED-LOCK-SPEC S2/S3/S4).
4
+ *
5
+ * Consumers (snapshot / skit / glpkg) import these to type their adapters:
6
+ * import type { ResolvedLock, Member, CloneReport, Manifest } from '@gitdot/clone-lib';
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@gitdot/clone-lib",
3
+ "version": "0.2.0",
4
+ "description": "Shared resolved-lock library (TypeScript): resolve a distribution's install closure (from a package-lock or a snapshot.json manifest) into a resolved-lock (RESOLVED-LOCK-SPEC S2), then clone that closure. Zero runtime dependencies.",
5
+ "type": "commonjs",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./resolve": {
14
+ "types": "./dist/resolve/index.d.ts",
15
+ "default": "./dist/resolve/index.js"
16
+ },
17
+ "./package.json": "./package.json"
18
+ },
19
+ "bin": {
20
+ "gitdot-resolve": "dist/bin/gitdot-resolve.js"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "scripts": {
27
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
28
+ "build": "npm run clean && tsc -p tsconfig.json",
29
+ "typecheck": "tsc --noEmit",
30
+ "test": "npm run build && node --test",
31
+ "prepublishOnly": "npm run build"
32
+ },
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "keywords": [
37
+ "gitdot",
38
+ "resolved-lock",
39
+ "clone",
40
+ "gitlab",
41
+ "monorepo",
42
+ "typescript"
43
+ ],
44
+ "license": "UNLICENSED",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://gitlab.com/microwiseai/gitdot.clone-lib.git"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^20.19.43",
51
+ "typescript": "^5.9.3"
52
+ }
53
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @microwiseai/install-preflight
3
+ *
4
+ * Registry-agnostic install preflight engine. Given a flat list of package
5
+ * requests (direct + pre-expanded transitive closure), each tagged with a
6
+ * channel and an auth mode, it verifies:
7
+ *
8
+ * [A] Resolvability for the declared auth mode (use `anonymous` to reproduce a
9
+ * first-time end-user): 401 (private/hidden), 404 (unpublished/phantom),
10
+ * and range-unsatisfied are reported per package.
11
+ * [B] SemVer / dist-tag discipline: a stable tag (default `latest`) must not
12
+ * point at a prerelease, and unversioned installs must resolve to stable.
13
+ *
14
+ * The engine knows nothing about snapshot/glpkg/skit — callers map their own
15
+ * manifest into channels + package requests.
16
+ *
17
+ * Usage:
18
+ * import { preflight, createNpmPackumentResolver } from '@microwiseai/install-preflight';
19
+ * const report = await preflight({ channels, packages, policy });
20
+ * if (!report.ok) throw new Error(formatReport(report));
21
+ */
22
+ export type { AuthMode, ResolverStrategy, RegistryChannel, PackageRequest, PreflightPolicy, PreflightCode, PreflightFinding, ResolvedPin, PreflightReport, PackumentResult, Resolver, PreflightInput, } from './types.js';
23
+ export { preflight, formatReport } from './preflight.js';
24
+ export { createNpmPackumentResolver, encodePackageName, type NpmPackumentResolverOptions, } from './resolvers.js';
25
+ export { DEFAULT_POLICY, withDefaults, isDefaultResolveRange, resolveVersion, checkStableRelease, type VersionResolution, } from './policy.js';
26
+ export { parse as parseSemver, isValid as isValidSemver, isPrerelease, compare as compareSemver, satisfies, maxSatisfying, isSupportedRange, type SemVer, } from './semver.js';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,eAAe,EACf,QAAQ,EACR,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,IAAI,aAAa,EACxB,YAAY,EACZ,OAAO,IAAI,aAAa,EACxB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,KAAK,MAAM,GACZ,MAAM,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @microwiseai/install-preflight
3
+ *
4
+ * Registry-agnostic install preflight engine. Given a flat list of package
5
+ * requests (direct + pre-expanded transitive closure), each tagged with a
6
+ * channel and an auth mode, it verifies:
7
+ *
8
+ * [A] Resolvability for the declared auth mode (use `anonymous` to reproduce a
9
+ * first-time end-user): 401 (private/hidden), 404 (unpublished/phantom),
10
+ * and range-unsatisfied are reported per package.
11
+ * [B] SemVer / dist-tag discipline: a stable tag (default `latest`) must not
12
+ * point at a prerelease, and unversioned installs must resolve to stable.
13
+ *
14
+ * The engine knows nothing about snapshot/glpkg/skit — callers map their own
15
+ * manifest into channels + package requests.
16
+ *
17
+ * Usage:
18
+ * import { preflight, createNpmPackumentResolver } from '@microwiseai/install-preflight';
19
+ * const report = await preflight({ channels, packages, policy });
20
+ * if (!report.ok) throw new Error(formatReport(report));
21
+ */
22
+ export { preflight, formatReport } from './preflight.js';
23
+ export { createNpmPackumentResolver, encodePackageName, } from './resolvers.js';
24
+ export { DEFAULT_POLICY, withDefaults, isDefaultResolveRange, resolveVersion, checkStableRelease, } from './policy.js';
25
+ export { parse as parseSemver, isValid as isValidSemver, isPrerelease, compare as compareSemver, satisfies, maxSatisfying, isSupportedRange, } from './semver.js';
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAiBH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,IAAI,aAAa,EACxB,YAAY,EACZ,OAAO,IAAI,aAAa,EACxB,SAAS,EACT,aAAa,EACb,gBAAgB,GAEjB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * [B] SemVer / dist-tag discipline.
3
+ *
4
+ * Two rules:
5
+ * (b1) A release promoted to a "stable" dist-tag (default: latest) must NOT
6
+ * carry a prerelease identifier. `checkStableRelease` enforces this for a
7
+ * single version (e.g. the manifest/snapshot being published).
8
+ * (b2) A default-resolve install (`install @x/y`, no version) must land on a
9
+ * stable release — enforced per-pin in the engine via `isDefaultResolve`
10
+ * + this policy's `forbidPrereleaseDefaultResolve`.
11
+ */
12
+ import type { PackumentResult, PreflightFinding, PreflightPolicy } from './types.js';
13
+ export declare const DEFAULT_POLICY: Required<PreflightPolicy>;
14
+ export declare function withDefaults(policy?: PreflightPolicy): Required<PreflightPolicy>;
15
+ /** A range that means "give me the default (latest) version". */
16
+ export declare function isDefaultResolveRange(range: string): boolean;
17
+ export interface VersionResolution {
18
+ /** Resolved concrete version, or null if nothing satisfies. */
19
+ version: string | null;
20
+ /** Whether resolution went through the default (latest) path. */
21
+ viaDefaultResolve: boolean;
22
+ /** True when the range form could not be evaluated. */
23
+ unsupported?: boolean;
24
+ }
25
+ /**
26
+ * Resolve a requested selector against a package's metadata, mirroring how a
27
+ * client picks a version: default-resolve → `latest` dist-tag; named dist-tag →
28
+ * its target; exact/range → highest satisfying published version.
29
+ */
30
+ export declare function resolveVersion(range: string, packument: Pick<PackumentResult, 'distTags' | 'versions'>, isSupported: (r: string) => boolean): VersionResolution;
31
+ /**
32
+ * (b1) Is `version` acceptable for `distTag`? Returns a finding when a stable
33
+ * tag would point at a prerelease, else null. Registry-agnostic; the caller
34
+ * supplies package/channel context.
35
+ */
36
+ export declare function checkStableRelease(version: string, ctx: {
37
+ package: string;
38
+ channel: string;
39
+ requested?: string;
40
+ requestedBy?: string;
41
+ }, policy?: PreflightPolicy): PreflightFinding | null;
42
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGrF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,eAAe,CAIpD,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,CAOhF;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iEAAiE;IACjE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,CAAC,EACzD,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAClC,iBAAiB,CAwBnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACnF,MAAM,CAAC,EAAE,eAAe,GACvB,gBAAgB,GAAG,IAAI,CAezB"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * [B] SemVer / dist-tag discipline.
3
+ *
4
+ * Two rules:
5
+ * (b1) A release promoted to a "stable" dist-tag (default: latest) must NOT
6
+ * carry a prerelease identifier. `checkStableRelease` enforces this for a
7
+ * single version (e.g. the manifest/snapshot being published).
8
+ * (b2) A default-resolve install (`install @x/y`, no version) must land on a
9
+ * stable release — enforced per-pin in the engine via `isDefaultResolve`
10
+ * + this policy's `forbidPrereleaseDefaultResolve`.
11
+ */
12
+ import { isPrerelease, isValid, maxSatisfying } from './semver.js';
13
+ export const DEFAULT_POLICY = {
14
+ distTag: 'latest',
15
+ requireStableForTags: ['latest'],
16
+ forbidPrereleaseDefaultResolve: true,
17
+ };
18
+ export function withDefaults(policy) {
19
+ return {
20
+ distTag: policy?.distTag ?? DEFAULT_POLICY.distTag,
21
+ requireStableForTags: policy?.requireStableForTags ?? DEFAULT_POLICY.requireStableForTags,
22
+ forbidPrereleaseDefaultResolve: policy?.forbidPrereleaseDefaultResolve ?? DEFAULT_POLICY.forbidPrereleaseDefaultResolve,
23
+ };
24
+ }
25
+ /** A range that means "give me the default (latest) version". */
26
+ export function isDefaultResolveRange(range) {
27
+ const r = range.trim();
28
+ return r === '' || r === '*' || r === 'latest' || r === 'x' || r === 'X';
29
+ }
30
+ /**
31
+ * Resolve a requested selector against a package's metadata, mirroring how a
32
+ * client picks a version: default-resolve → `latest` dist-tag; named dist-tag →
33
+ * its target; exact/range → highest satisfying published version.
34
+ */
35
+ export function resolveVersion(range, packument, isSupported) {
36
+ const distTags = packument.distTags ?? {};
37
+ const versions = packument.versions ?? [];
38
+ const r = range.trim();
39
+ if (isDefaultResolveRange(r)) {
40
+ const latest = distTags.latest;
41
+ if (latest)
42
+ return { version: latest, viaDefaultResolve: true };
43
+ // No latest tag: fall back to highest published version.
44
+ const max = maxSatisfying(versions, '*');
45
+ return { version: max, viaDefaultResolve: true };
46
+ }
47
+ // Named dist-tag (e.g. "beta", "next").
48
+ if (!isValid(r) && distTags[r]) {
49
+ return { version: distTags[r], viaDefaultResolve: false };
50
+ }
51
+ if (!isSupported(r)) {
52
+ return { version: null, viaDefaultResolve: false, unsupported: true };
53
+ }
54
+ const match = maxSatisfying(versions, r);
55
+ return { version: match, viaDefaultResolve: false };
56
+ }
57
+ /**
58
+ * (b1) Is `version` acceptable for `distTag`? Returns a finding when a stable
59
+ * tag would point at a prerelease, else null. Registry-agnostic; the caller
60
+ * supplies package/channel context.
61
+ */
62
+ export function checkStableRelease(version, ctx, policy) {
63
+ const p = withDefaults(policy);
64
+ if (!p.requireStableForTags.includes(p.distTag))
65
+ return null;
66
+ if (!isPrerelease(version))
67
+ return null;
68
+ return {
69
+ code: 'PRERELEASE_ON_STABLE_TAG',
70
+ package: ctx.package,
71
+ requested: ctx.requested ?? version,
72
+ resolved: version,
73
+ channel: ctx.channel,
74
+ requestedBy: ctx.requestedBy,
75
+ message: `"${version}" is a prerelease but is being promoted to the "${p.distTag}" tag. ` +
76
+ `Prereleases must publish to a dev/beta dist-tag only.`,
77
+ };
78
+ }
79
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Preflight engine core.
3
+ *
4
+ * For every package request, probe its channel (with that channel's auth mode)
5
+ * and decide whether an install would succeed and comply with semver/dist-tag
6
+ * policy. Closure expansion is the CALLER's job — the engine probes exactly the
7
+ * requests it is given. This keeps it registry-agnostic and lets a caller
8
+ * token-discover the true closure, then hand it here to probe anonymously.
9
+ */
10
+ import type { PreflightInput, PreflightReport } from './types.js';
11
+ /**
12
+ * Run preflight. Never throws for per-package failures — everything becomes a
13
+ * finding. Only argument/programming errors throw.
14
+ */
15
+ export declare function preflight(input: PreflightInput): Promise<PreflightReport>;
16
+ /** Human-readable, fail-loud rendering of a report's findings. */
17
+ export declare function formatReport(report: PreflightReport): string;
18
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,cAAc,EACd,eAAe,EAIhB,MAAM,YAAY,CAAC;AAmBpB;;;GAGG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA2H/E;AAmCD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAa5D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Default resolver: fetch an npm-style packument through a registry.
3
+ *
4
+ * `GET {registryUrl}/{name}` returns `{ "dist-tags": {...}, "versions": {...} }`.
5
+ * The auth mode decides whether an Authorization header is sent — omitting it
6
+ * reproduces a first-time, anonymous end-user (the whole point of preflight).
7
+ *
8
+ * Status mapping is HTTP-faithful: 401/403/404 flow straight to findings so the
9
+ * three real incidents (private 401, unpublished 404, phantom pin 404) are
10
+ * attributed per-package.
11
+ */
12
+ import type { Resolver } from './types.js';
13
+ /** Encode a (possibly scoped) package name for a registry path: @s/p → @s%2fp. */
14
+ export declare function encodePackageName(name: string): string;
15
+ export interface NpmPackumentResolverOptions {
16
+ /** Injectable fetch (defaults to global fetch). */
17
+ fetchImpl?: typeof fetch;
18
+ /** Per-request timeout in ms (default 15000). */
19
+ timeoutMs?: number;
20
+ }
21
+ /**
22
+ * Build the default npm-packument resolver. Reused for every channel whose
23
+ * strategy is 'npm-packument' (or unset).
24
+ */
25
+ export declare function createNpmPackumentResolver(opts?: NpmPackumentResolverOptions): Resolver;
26
+ //# sourceMappingURL=resolvers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAoC,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7E,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAMD,MAAM,WAAW,2BAA2B;IAC1C,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,2BAAgC,GAAG,QAAQ,CA2C3F"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Default resolver: fetch an npm-style packument through a registry.
3
+ *
4
+ * `GET {registryUrl}/{name}` returns `{ "dist-tags": {...}, "versions": {...} }`.
5
+ * The auth mode decides whether an Authorization header is sent — omitting it
6
+ * reproduces a first-time, anonymous end-user (the whole point of preflight).
7
+ *
8
+ * Status mapping is HTTP-faithful: 401/403/404 flow straight to findings so the
9
+ * three real incidents (private 401, unpublished 404, phantom pin 404) are
10
+ * attributed per-package.
11
+ */
12
+ /** Encode a (possibly scoped) package name for a registry path: @s/p → @s%2fp. */
13
+ export function encodePackageName(name) {
14
+ return name.replace('/', '%2f');
15
+ }
16
+ function joinUrl(base, path) {
17
+ return `${base.replace(/\/+$/, '')}/${path}`;
18
+ }
19
+ /**
20
+ * Build the default npm-packument resolver. Reused for every channel whose
21
+ * strategy is 'npm-packument' (or unset).
22
+ */
23
+ export function createNpmPackumentResolver(opts = {}) {
24
+ const doFetch = opts.fetchImpl ?? globalThis.fetch;
25
+ const timeoutMs = opts.timeoutMs ?? 15000;
26
+ return {
27
+ async fetchPackument(name, channel) {
28
+ if (!doFetch) {
29
+ return { status: 0, error: 'no fetch implementation available' };
30
+ }
31
+ const url = joinUrl(channel.registryUrl, encodePackageName(name));
32
+ const headers = { Accept: 'application/json' };
33
+ if (channel.auth.kind === 'token') {
34
+ headers.Authorization = `Bearer ${channel.auth.token}`;
35
+ }
36
+ const controller = new AbortController();
37
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
38
+ try {
39
+ const res = await doFetch(url, { headers, signal: controller.signal });
40
+ if (!res.ok) {
41
+ const body = await res.text().catch(() => '');
42
+ return { status: res.status, error: body || res.statusText };
43
+ }
44
+ const data = (await res.json());
45
+ return {
46
+ status: 200,
47
+ distTags: data['dist-tags'] ?? {},
48
+ versions: data.versions ? Object.keys(data.versions) : [],
49
+ };
50
+ }
51
+ catch (err) {
52
+ return {
53
+ status: 0,
54
+ error: err instanceof Error ? err.message : String(err),
55
+ };
56
+ }
57
+ finally {
58
+ clearTimeout(timer);
59
+ }
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=resolvers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACzC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;AAC/C,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAoC,EAAE;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAE1C,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,OAAwB;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;YACnE,CAAC;YAED,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACvE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,OAAO,CAAC,aAAa,GAAG,UAAU,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzD,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9C,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC/D,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC1D,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}