@avantf/dsh-plugin-base 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +303 -0
- package/dist/artifact.d.ts +29 -0
- package/dist/artifact.d.ts.map +1 -0
- package/dist/artifact.js +60 -0
- package/dist/artifact.js.map +1 -0
- package/dist/bootstrap.d.ts +54 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +334 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +37 -0
- package/dist/cli.js.map +1 -0
- package/dist/compat.d.ts +413 -0
- package/dist/compat.d.ts.map +1 -0
- package/dist/compat.js +742 -0
- package/dist/compat.js.map +1 -0
- package/dist/conformance.d.ts +55 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +702 -0
- package/dist/conformance.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +28 -0
- package/dist/errors.js.map +1 -0
- package/dist/fs.d.ts +18 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +152 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/integrity.d.ts +5 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +33 -0
- package/dist/integrity.js.map +1 -0
- package/dist/interface.d.ts +262 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/interface.js +136 -0
- package/dist/interface.js.map +1 -0
- package/dist/interface_gate.d.ts +61 -0
- package/dist/interface_gate.d.ts.map +1 -0
- package/dist/interface_gate.js +103 -0
- package/dist/interface_gate.js.map +1 -0
- package/dist/internal.d.ts +23 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +18 -0
- package/dist/internal.js.map +1 -0
- package/dist/kit/family.d.ts +52 -0
- package/dist/kit/family.d.ts.map +1 -0
- package/dist/kit/family.js +65 -0
- package/dist/kit/family.js.map +1 -0
- package/dist/kit/index.d.ts +26 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +26 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/logger.d.ts +41 -0
- package/dist/kit/logger.d.ts.map +1 -0
- package/dist/kit/logger.js +42 -0
- package/dist/kit/logger.js.map +1 -0
- package/dist/kit/prompt_files.d.ts +90 -0
- package/dist/kit/prompt_files.d.ts.map +1 -0
- package/dist/kit/prompt_files.js +121 -0
- package/dist/kit/prompt_files.js.map +1 -0
- package/dist/kit/typert.d.ts +40 -0
- package/dist/kit/typert.d.ts.map +1 -0
- package/dist/kit/typert.js +17 -0
- package/dist/kit/typert.js.map +1 -0
- package/dist/layout.d.ts +28 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +84 -0
- package/dist/layout.js.map +1 -0
- package/dist/lint.d.ts +33 -0
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +271 -0
- package/dist/lint.js.map +1 -0
- package/dist/lock.d.ts +12 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +93 -0
- package/dist/lock.js.map +1 -0
- package/dist/manifest.d.ts +12 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +75 -0
- package/dist/manifest.js.map +1 -0
- package/dist/net.d.ts +23 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +112 -0
- package/dist/net.js.map +1 -0
- package/dist/package-name.d.ts +3 -0
- package/dist/package-name.d.ts.map +1 -0
- package/dist/package-name.js +13 -0
- package/dist/package-name.js.map +1 -0
- package/dist/preset.d.ts +46 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/preset.js +230 -0
- package/dist/preset.js.map +1 -0
- package/dist/providers/archive.d.ts +32 -0
- package/dist/providers/archive.d.ts.map +1 -0
- package/dist/providers/archive.js +248 -0
- package/dist/providers/archive.js.map +1 -0
- package/dist/providers/model.d.ts +25 -0
- package/dist/providers/model.d.ts.map +1 -0
- package/dist/providers/model.js +550 -0
- package/dist/providers/model.js.map +1 -0
- package/dist/providers/npm.d.ts +21 -0
- package/dist/providers/npm.d.ts.map +1 -0
- package/dist/providers/npm.js +458 -0
- package/dist/providers/npm.js.map +1 -0
- package/dist/provisioner.d.ts +21 -0
- package/dist/provisioner.d.ts.map +1 -0
- package/dist/provisioner.js +962 -0
- package/dist/provisioner.js.map +1 -0
- package/dist/semver.d.ts +31 -0
- package/dist/semver.d.ts.map +1 -0
- package/dist/semver.js +244 -0
- package/dist/semver.js.map +1 -0
- package/dist/state.d.ts +71 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +225 -0
- package/dist/state.js.map +1 -0
- package/dist/tar.d.ts +10 -0
- package/dist/tar.d.ts.map +1 -0
- package/dist/tar.js +178 -0
- package/dist/tar.js.map +1 -0
- package/dist/types.d.ts +431 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/zip.d.ts +8 -0
- package/dist/zip.d.ts.map +1 -0
- package/dist/zip.js +109 -0
- package/dist/zip.js.map +1 -0
- package/package.json +84 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The public data model.
|
|
3
|
+
* @module types
|
|
4
|
+
*/
|
|
5
|
+
import type { ProvisionCode } from './errors.js';
|
|
6
|
+
/** The kinds the framework ships providers for; these names are reserved.
|
|
7
|
+
* @stable */
|
|
8
|
+
export type BuiltinKind = 'npm-package' | 'binary-archive' | 'model-cache';
|
|
9
|
+
/** A kind is a namespaced string; third-party kinds must carry a prefix.
|
|
10
|
+
* @stable */
|
|
11
|
+
export type Kind = BuiltinKind | (string & {});
|
|
12
|
+
/** What to do at mount time when the item is not ready.
|
|
13
|
+
* @stable */
|
|
14
|
+
export type AtStartup = 'degrade' | 'refuse';
|
|
15
|
+
/** What to do when the item is used and is not ready.
|
|
16
|
+
* @stable */
|
|
17
|
+
export type AtUse = 'degrade' | 'error';
|
|
18
|
+
/** Whether `ensure()` waits for an item at mount. Default `'blocking'`. */
|
|
19
|
+
export type Startup = 'blocking' | 'background';
|
|
20
|
+
/** Per-item strictness; each field defaults on its own, and an illegal value falls back per field.
|
|
21
|
+
* @stable */
|
|
22
|
+
export interface OnMissing {
|
|
23
|
+
readonly atStartup?: AtStartup;
|
|
24
|
+
readonly atUse?: AtUse;
|
|
25
|
+
}
|
|
26
|
+
/** Mirrors are split by distribution network.
|
|
27
|
+
* @stable */
|
|
28
|
+
export interface MirrorPolicy {
|
|
29
|
+
readonly archive: readonly string[];
|
|
30
|
+
readonly npm?: readonly string[];
|
|
31
|
+
/** Endpoints for `model-cache` items, tried before the built-in default endpoint. */
|
|
32
|
+
readonly model?: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
/** Framework-known per-item policy; provider-private keys must be namespaced.
|
|
35
|
+
* @stable */
|
|
36
|
+
export interface ItemPolicy {
|
|
37
|
+
readonly mirrors?: MirrorPolicy;
|
|
38
|
+
readonly concurrency?: number;
|
|
39
|
+
readonly timeoutMs?: number;
|
|
40
|
+
readonly platforms?: readonly string[];
|
|
41
|
+
readonly [providerScopedKey: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
/** One resource a plugin needs; `target.root` is relative to `home` and carries no version.
|
|
44
|
+
* @stable */
|
|
45
|
+
export interface ProvisionItem {
|
|
46
|
+
/** Stable, plugin-namespaced item id. */
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly kind: Kind;
|
|
49
|
+
/** Interpreted by the provider for this kind (npm range, packs, repository revision, …). */
|
|
50
|
+
readonly spec: unknown;
|
|
51
|
+
readonly target: {
|
|
52
|
+
readonly root: string;
|
|
53
|
+
};
|
|
54
|
+
readonly onMissing?: OnMissing;
|
|
55
|
+
/** Wait for it at mount, or dispatch it and report later. Default `'blocking'`. */
|
|
56
|
+
readonly startup?: Startup;
|
|
57
|
+
/** Other items in the **same** plugin this one needs first. */
|
|
58
|
+
readonly needs?: readonly string[];
|
|
59
|
+
readonly policy?: ItemPolicy;
|
|
60
|
+
/** Descriptor version. */
|
|
61
|
+
readonly schemaVersion: number;
|
|
62
|
+
}
|
|
63
|
+
/** What a plugin declares at startup.
|
|
64
|
+
* @stable */
|
|
65
|
+
export interface Manifest {
|
|
66
|
+
/** Plugin namespace; must match the item id prefix. */
|
|
67
|
+
readonly plugin: string;
|
|
68
|
+
readonly items: readonly ProvisionItem[];
|
|
69
|
+
readonly requires?: {
|
|
70
|
+
readonly capabilities?: readonly string[];
|
|
71
|
+
readonly providers?: readonly {
|
|
72
|
+
readonly package: string;
|
|
73
|
+
readonly kinds: readonly string[];
|
|
74
|
+
}[];
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** @stable */
|
|
78
|
+
export type ResourceSource = 'resolved' | 'managed' | 'installed' | 'system' | 'explicit';
|
|
79
|
+
/** A ready resource: where it is, what it is, and what env it contributes.
|
|
80
|
+
* @stable */
|
|
81
|
+
export interface ResourceHandle {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
/** Normalised resource key `kind+name` — one half of the row identity. */
|
|
84
|
+
readonly key: string;
|
|
85
|
+
readonly kind: Kind;
|
|
86
|
+
readonly version?: string;
|
|
87
|
+
readonly source: ResourceSource;
|
|
88
|
+
/** The usable entry directory (npm: `<versionDir>/node_modules/<name>`). */
|
|
89
|
+
readonly dir: string;
|
|
90
|
+
/** Environment a child process needs (PATH, …). */
|
|
91
|
+
readonly env: Readonly<Record<string, string>>;
|
|
92
|
+
}
|
|
93
|
+
/** The five states `resolve()` can answer with.
|
|
94
|
+
* @stable */
|
|
95
|
+
export type ResourceState = {
|
|
96
|
+
readonly state: 'ready';
|
|
97
|
+
readonly handle: ResourceHandle;
|
|
98
|
+
} | {
|
|
99
|
+
readonly state: 'pending';
|
|
100
|
+
readonly since: number;
|
|
101
|
+
} | {
|
|
102
|
+
readonly state: 'failed';
|
|
103
|
+
readonly code: ProvisionCode;
|
|
104
|
+
readonly detail?: string;
|
|
105
|
+
readonly retryAfter?: number;
|
|
106
|
+
} | {
|
|
107
|
+
readonly state: 'skipped';
|
|
108
|
+
readonly code: ProvisionCode;
|
|
109
|
+
readonly detail?: string;
|
|
110
|
+
} | {
|
|
111
|
+
readonly state: 'missing';
|
|
112
|
+
};
|
|
113
|
+
/** @stable */
|
|
114
|
+
export type PlanAction = 'present' | 'install' | 'skip' | 'unknown';
|
|
115
|
+
/** @stable */
|
|
116
|
+
export type ReportAction = 'present' | 'installed' | 'skipped' | 'failed';
|
|
117
|
+
/** @stable */
|
|
118
|
+
export interface PlanEntry {
|
|
119
|
+
readonly key: string;
|
|
120
|
+
readonly action: PlanAction;
|
|
121
|
+
readonly version?: string;
|
|
122
|
+
readonly source?: ResourceSource;
|
|
123
|
+
readonly urls?: readonly string[];
|
|
124
|
+
}
|
|
125
|
+
/** @stable */
|
|
126
|
+
export interface Plan {
|
|
127
|
+
readonly entries: readonly PlanEntry[];
|
|
128
|
+
readonly offline: boolean;
|
|
129
|
+
}
|
|
130
|
+
/** @stable */
|
|
131
|
+
export interface PlanOptions {
|
|
132
|
+
readonly only?: readonly string[];
|
|
133
|
+
readonly offline?: boolean;
|
|
134
|
+
}
|
|
135
|
+
/** @stable */
|
|
136
|
+
export interface EnsureOptions {
|
|
137
|
+
readonly only?: readonly string[];
|
|
138
|
+
readonly offline?: boolean;
|
|
139
|
+
readonly signal?: AbortSignal;
|
|
140
|
+
/** This call's startup budget, overriding `policy.deadlineMs` for the call. */
|
|
141
|
+
readonly deadlineMs?: number;
|
|
142
|
+
/** Called **once per item** when it reaches a terminal state, with the same line the report
|
|
143
|
+
* carries; a throw is logged and ignored. */
|
|
144
|
+
readonly onSettled?: (entry: ProvisionReportEntry) => void;
|
|
145
|
+
/** Byte-level progress from this call's installs, forwarded to `InstallContext.onProgress`. */
|
|
146
|
+
readonly onProgress?: (event: ProgressEvent) => void;
|
|
147
|
+
}
|
|
148
|
+
/** @stable */
|
|
149
|
+
export interface ProvisionReportEntry {
|
|
150
|
+
readonly plugin: string;
|
|
151
|
+
readonly id: string;
|
|
152
|
+
readonly key: string;
|
|
153
|
+
readonly action: ReportAction;
|
|
154
|
+
readonly source: ResourceSource;
|
|
155
|
+
readonly version?: string;
|
|
156
|
+
readonly ms: number;
|
|
157
|
+
readonly code?: ProvisionCode;
|
|
158
|
+
readonly reason?: string;
|
|
159
|
+
}
|
|
160
|
+
/** @stable */
|
|
161
|
+
export interface ProvisionReport {
|
|
162
|
+
readonly entries: readonly ProvisionReportEntry[];
|
|
163
|
+
readonly ok: boolean;
|
|
164
|
+
}
|
|
165
|
+
/** One row of `status()`; the row identity is `key × version`.
|
|
166
|
+
* @stable */
|
|
167
|
+
export interface ProvisionStatus {
|
|
168
|
+
readonly key: string;
|
|
169
|
+
/** Part of the row identity; the empty string until a version has been resolved. */
|
|
170
|
+
readonly version: string;
|
|
171
|
+
readonly items: readonly string[];
|
|
172
|
+
readonly plugins: readonly string[];
|
|
173
|
+
readonly state: ResourceState;
|
|
174
|
+
readonly source?: ResourceSource;
|
|
175
|
+
readonly updatedAt: number;
|
|
176
|
+
readonly lastError?: {
|
|
177
|
+
readonly code: ProvisionCode;
|
|
178
|
+
readonly detail?: string;
|
|
179
|
+
readonly retryAfter?: number;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** Late-arrival and reporting notifications; the union narrows on `type`.
|
|
183
|
+
* @stable */
|
|
184
|
+
export type ProvisionEvent = {
|
|
185
|
+
readonly type: 'availability';
|
|
186
|
+
readonly key: string;
|
|
187
|
+
readonly state: ResourceState;
|
|
188
|
+
} | {
|
|
189
|
+
readonly type: 'report';
|
|
190
|
+
readonly key: string;
|
|
191
|
+
readonly entry: ProvisionReportEntry;
|
|
192
|
+
};
|
|
193
|
+
/** @stable */
|
|
194
|
+
export interface ProvisionPolicy {
|
|
195
|
+
/** Whether automatic download is allowed: overall, or per-kind override. Default `true`. */
|
|
196
|
+
readonly autoDownload?: boolean | Partial<Record<string, boolean>>;
|
|
197
|
+
/** Maps a kind to the provider that claims it; the only way to lift a `provider/conflict`. */
|
|
198
|
+
readonly kindProviders?: Readonly<Record<string, string>>;
|
|
199
|
+
readonly mirrors?: MirrorPolicy;
|
|
200
|
+
readonly packumentMirrors?: readonly string[];
|
|
201
|
+
/** Startup critical-path budget in ms. Default 15 000. */
|
|
202
|
+
readonly deadlineMs?: number;
|
|
203
|
+
readonly quotaBytes?: number;
|
|
204
|
+
/** Grace period before `.trash` entries may be removed. Default 7 days. */
|
|
205
|
+
readonly trashGraceMs?: number;
|
|
206
|
+
readonly gc?: 'off' | 'background';
|
|
207
|
+
/** Offline/preloaded source directories. */
|
|
208
|
+
readonly preloaded?: readonly string[];
|
|
209
|
+
}
|
|
210
|
+
/** @stable */
|
|
211
|
+
export interface ProvisionLogger {
|
|
212
|
+
debug(message: string, fields?: Record<string, unknown>): void;
|
|
213
|
+
info(message: string, fields?: Record<string, unknown>): void;
|
|
214
|
+
warn(message: string, fields?: Record<string, unknown>): void;
|
|
215
|
+
error(message: string, fields?: Record<string, unknown>): void;
|
|
216
|
+
}
|
|
217
|
+
/** Byte-level progress, only on request.
|
|
218
|
+
* @experimental */
|
|
219
|
+
export interface ProgressEvent {
|
|
220
|
+
readonly key: string;
|
|
221
|
+
readonly phase: 'download' | 'extract';
|
|
222
|
+
readonly loaded: number;
|
|
223
|
+
readonly total?: number;
|
|
224
|
+
}
|
|
225
|
+
/** @stable */
|
|
226
|
+
export interface Disposable {
|
|
227
|
+
dispose(): void;
|
|
228
|
+
}
|
|
229
|
+
/** Data-plane IO. Every mutation goes through this seam.
|
|
230
|
+
* @stable */
|
|
231
|
+
export interface ProvisionFs {
|
|
232
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
233
|
+
writeFile(path: string, data: Uint8Array): Promise<void>;
|
|
234
|
+
/** Same-directory temp file + rename; metadata such as `install.json` must use it. */
|
|
235
|
+
atomicWrite(path: string, data: Uint8Array): Promise<void>;
|
|
236
|
+
rename(from: string, to: string): Promise<void>;
|
|
237
|
+
mkdir(path: string): Promise<void>;
|
|
238
|
+
readdir(path: string): Promise<readonly string[]>;
|
|
239
|
+
stat(path: string): Promise<{
|
|
240
|
+
size: number;
|
|
241
|
+
mtimeMs: number;
|
|
242
|
+
isDirectory: boolean;
|
|
243
|
+
mode: number;
|
|
244
|
+
} | undefined>;
|
|
245
|
+
rm(path: string, options?: {
|
|
246
|
+
recursive?: boolean;
|
|
247
|
+
}): Promise<void>;
|
|
248
|
+
symlink(target: string, path: string): Promise<void>;
|
|
249
|
+
/** The link target when `path` is a symlink, else `undefined`. */
|
|
250
|
+
readlink(path: string): Promise<string | undefined>;
|
|
251
|
+
copyFile(from: string, to: string): Promise<void>;
|
|
252
|
+
chmod(path: string, mode: number): Promise<void>;
|
|
253
|
+
}
|
|
254
|
+
/** Control-plane mutual exclusion; the default is `<home>/.envinit/.lock`.
|
|
255
|
+
* @stable */
|
|
256
|
+
export interface ProvisionLock {
|
|
257
|
+
acquire(path: string, options: {
|
|
258
|
+
timeoutMs: number;
|
|
259
|
+
staleMs: number;
|
|
260
|
+
}): Promise<Disposable>;
|
|
261
|
+
}
|
|
262
|
+
/** @stable */
|
|
263
|
+
export interface ProvisionerOptions {
|
|
264
|
+
/** Family root. Default `~/.avantf/env`. */
|
|
265
|
+
readonly home?: string;
|
|
266
|
+
/** Built-in layout name. Default `v1`. */
|
|
267
|
+
readonly layout?: string;
|
|
268
|
+
/** The framework range this plugin declared (`peerDependencies`, read with
|
|
269
|
+
* `readDependencyRange`); an unsatisfied range skips every declared item. */
|
|
270
|
+
readonly envinitRange?: string;
|
|
271
|
+
readonly policy?: ProvisionPolicy;
|
|
272
|
+
readonly logger: ProvisionLogger;
|
|
273
|
+
readonly fetch?: typeof fetch;
|
|
274
|
+
readonly fs?: ProvisionFs;
|
|
275
|
+
readonly lock?: ProvisionLock;
|
|
276
|
+
readonly clock?: () => number;
|
|
277
|
+
}
|
|
278
|
+
/** The resource identity a provider assigns to an item; the core rejects a provider-supplied key.
|
|
279
|
+
* @stable */
|
|
280
|
+
export interface ResourceIdentity {
|
|
281
|
+
readonly name: string;
|
|
282
|
+
/** The selection range/fingerprint, when the kind has one (npm range, repository revision, …). */
|
|
283
|
+
readonly range?: string;
|
|
284
|
+
}
|
|
285
|
+
/** @stable */
|
|
286
|
+
export type ProbeResult = {
|
|
287
|
+
readonly found: true;
|
|
288
|
+
readonly version?: string;
|
|
289
|
+
readonly dir: string;
|
|
290
|
+
readonly source: ResourceSource;
|
|
291
|
+
/** Environment additions for the handle (a managed binary's PATH). */
|
|
292
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
293
|
+
} | {
|
|
294
|
+
readonly found: false;
|
|
295
|
+
};
|
|
296
|
+
/** @stable */
|
|
297
|
+
export interface PublishMeta {
|
|
298
|
+
readonly name: string;
|
|
299
|
+
readonly version: string;
|
|
300
|
+
readonly integrity?: string;
|
|
301
|
+
readonly tarball?: string;
|
|
302
|
+
readonly source?: ResourceSource;
|
|
303
|
+
/** The executable's path relative to the version directory (archive kinds). */
|
|
304
|
+
readonly entry?: string;
|
|
305
|
+
/** The usable entry **directory**, relative to the version directory (npm: `node_modules/<name>`). */
|
|
306
|
+
readonly entryDir?: string;
|
|
307
|
+
}
|
|
308
|
+
/** What a completed install published: the version directory plus its identity.
|
|
309
|
+
* @stable */
|
|
310
|
+
export interface Resolved {
|
|
311
|
+
/** The normalised resource key; filled by the core, so a provider that does not publish may omit it. */
|
|
312
|
+
readonly key?: string;
|
|
313
|
+
readonly name: string;
|
|
314
|
+
readonly version: string;
|
|
315
|
+
/** The **version directory** (published unit). */
|
|
316
|
+
readonly dir: string;
|
|
317
|
+
/** The usable entry directory. */
|
|
318
|
+
readonly entryDir: string;
|
|
319
|
+
readonly integrity?: string;
|
|
320
|
+
readonly source: ResourceSource;
|
|
321
|
+
/** Environment additions for the handle (a managed binary's PATH). */
|
|
322
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
323
|
+
}
|
|
324
|
+
/** @stable */
|
|
325
|
+
export interface ProviderContext {
|
|
326
|
+
readonly home: string;
|
|
327
|
+
readonly logger: ProvisionLogger;
|
|
328
|
+
readonly policy: ProvisionPolicy;
|
|
329
|
+
/** The data-plane seam the core uses. */
|
|
330
|
+
readonly fs: ProvisionFs;
|
|
331
|
+
readonly fetch?: typeof fetch;
|
|
332
|
+
readonly signal?: AbortSignal;
|
|
333
|
+
/** The core's control-plane lock, so a provider that places files itself can serialise. */
|
|
334
|
+
readonly lock?: ProvisionLock;
|
|
335
|
+
}
|
|
336
|
+
/** Providers never hold the publish lock: download outside, publish through the core.
|
|
337
|
+
* @stable */
|
|
338
|
+
export interface InstallContext extends ProviderContext {
|
|
339
|
+
/** A fresh staging directory under `<home>/.envinit/.tmp/`. */
|
|
340
|
+
stage(): Promise<string>;
|
|
341
|
+
/** Core writes `install.json` here, then renames the staging tree to the version directory. */
|
|
342
|
+
publish(staging: string, meta: PublishMeta): Promise<Resolved>;
|
|
343
|
+
onProgress?(event: ProgressEvent): void;
|
|
344
|
+
}
|
|
345
|
+
/** A provider's plan for one item; the core wraps it into a {@link PlanEntry}.
|
|
346
|
+
* @stable */
|
|
347
|
+
export interface ProviderPlan {
|
|
348
|
+
readonly action: PlanAction;
|
|
349
|
+
readonly version?: string;
|
|
350
|
+
readonly urls?: readonly string[];
|
|
351
|
+
}
|
|
352
|
+
/** @stable */
|
|
353
|
+
export interface Provider {
|
|
354
|
+
/** Provider identity; a third-party provider must use its npm package name. */
|
|
355
|
+
readonly id: string;
|
|
356
|
+
/** Kinds it claims; third-party kinds must be namespaced. */
|
|
357
|
+
readonly kinds: readonly string[];
|
|
358
|
+
/** The resource identity used to build the normalised key. */
|
|
359
|
+
identify(item: ProvisionItem): ResourceIdentity;
|
|
360
|
+
/** Cheap presence/version check. Never downloads, never mutates. */
|
|
361
|
+
probe(item: ProvisionItem, ctx: ProviderContext): Promise<ProbeResult>;
|
|
362
|
+
/** What would be done, as data (pure; no disk, no network). */
|
|
363
|
+
plan(item: ProvisionItem, ctx: ProviderContext): ProviderPlan | Promise<ProviderPlan>;
|
|
364
|
+
/** The **version directory** relative path under `item.target.root` (safe, no `..`). */
|
|
365
|
+
targetDir(item: ProvisionItem, ref: {
|
|
366
|
+
readonly name: string;
|
|
367
|
+
readonly version: string;
|
|
368
|
+
readonly segment: string;
|
|
369
|
+
}): string;
|
|
370
|
+
/** Download/extract outside the lock and publish through `ctx.publish()`. */
|
|
371
|
+
install(item: ProvisionItem, ctx: InstallContext): Promise<Resolved>;
|
|
372
|
+
/** Prove the result is usable; the core quarantines the directory when this throws. */
|
|
373
|
+
verify(item: ProvisionItem, resolved: Resolved, ctx: ProviderContext): Promise<void>;
|
|
374
|
+
}
|
|
375
|
+
/** What the core writes into every version directory.
|
|
376
|
+
* @stable */
|
|
377
|
+
export interface InstallManifest {
|
|
378
|
+
readonly schemaVersion: number;
|
|
379
|
+
readonly name: string;
|
|
380
|
+
readonly version: string;
|
|
381
|
+
readonly dir: string;
|
|
382
|
+
readonly integrity?: string;
|
|
383
|
+
readonly tarball?: string;
|
|
384
|
+
readonly entry?: string;
|
|
385
|
+
/** The usable entry directory relative to the version directory (npm: `node_modules/<name>`). */
|
|
386
|
+
readonly entryDir?: string;
|
|
387
|
+
readonly installed_at: string;
|
|
388
|
+
readonly source: ResourceSource;
|
|
389
|
+
readonly layout: string;
|
|
390
|
+
}
|
|
391
|
+
/** What to keep when reclaiming versions.
|
|
392
|
+
* @experimental */
|
|
393
|
+
export interface PrunePolicy {
|
|
394
|
+
/** Keep the newest N versions per resource. */
|
|
395
|
+
readonly keepVersions?: number;
|
|
396
|
+
/** Keep versions younger than M days. */
|
|
397
|
+
readonly keepDays?: number;
|
|
398
|
+
/** Family-root quota, counting `.trash`. Same name and meaning as `ProvisionPolicy.quotaBytes`. */
|
|
399
|
+
readonly quotaBytes?: number;
|
|
400
|
+
/** Reclaim versions nothing currently declares. Off by default. */
|
|
401
|
+
readonly orphan?: boolean;
|
|
402
|
+
}
|
|
403
|
+
/** What a prune moved aside; `movedBytes` is the moved amount, not the released amount.
|
|
404
|
+
* @experimental */
|
|
405
|
+
export interface PruneReport {
|
|
406
|
+
readonly moved: readonly string[];
|
|
407
|
+
readonly skipped: readonly string[];
|
|
408
|
+
readonly movedBytes: number;
|
|
409
|
+
}
|
|
410
|
+
/** Experimental members; reaching them requires `experimental()`.
|
|
411
|
+
* @experimental */
|
|
412
|
+
export interface ProvisionerExperimental {
|
|
413
|
+
/** No-op in this build: reclamation is not implemented, so it warns and reports nothing. */
|
|
414
|
+
prune(policy?: PrunePolicy): Promise<PruneReport>;
|
|
415
|
+
on(event: 'availability' | 'report', listener: (event: ProvisionEvent) => void): Disposable;
|
|
416
|
+
}
|
|
417
|
+
/** The composition root; every member here is **stable**. Experimental members live on
|
|
418
|
+
* {@link ProvisionerExperimental}. */
|
|
419
|
+
export interface Provisioner {
|
|
420
|
+
register(provider: Provider): Disposable;
|
|
421
|
+
declare(manifest: Manifest): void;
|
|
422
|
+
plan(options?: PlanOptions): Promise<Plan>;
|
|
423
|
+
ensure(options?: EnsureOptions): Promise<ProvisionReport>;
|
|
424
|
+
resolve(itemId: string): ResourceState;
|
|
425
|
+
status(): readonly ProvisionStatus[];
|
|
426
|
+
repair(itemId: string): Promise<ProvisionReport>;
|
|
427
|
+
experimental(): ProvisionerExperimental;
|
|
428
|
+
/** Abort work still in flight and drop subscriptions; the instance is not reused. */
|
|
429
|
+
dispose(): void;
|
|
430
|
+
}
|
|
431
|
+
//# 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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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/zip.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ProvisionFs } from './types.js';
|
|
2
|
+
export interface ZipExtractOptions {
|
|
3
|
+
/** Drop this many leading path segments. */
|
|
4
|
+
readonly strip?: number;
|
|
5
|
+
}
|
|
6
|
+
/** Extract an in-memory zip into `destination`, rejecting any traversal attempt. */
|
|
7
|
+
export declare function extractZip(archive: Uint8Array, destination: string, fs: ProvisionFs, options?: ZipExtractOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=zip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AA+F7C,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,oFAAoF;AACpF,wBAAsB,UAAU,CAC9B,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/zip.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal zero-dependency `zip` reader (stored + deflate) with path-traversal checks.
|
|
3
|
+
* @module zip
|
|
4
|
+
*/
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { inflateRawSync } from 'node:zlib';
|
|
7
|
+
import { ProvisionError } from './errors.js';
|
|
8
|
+
import { safeEntryPath } from './tar.js';
|
|
9
|
+
/** Hard cap for one decompressed entry. */
|
|
10
|
+
const MAX_UNPACKED_BYTES = 1024 * 1024 * 1024;
|
|
11
|
+
const EOCD_SIGNATURE = 0x06054b50;
|
|
12
|
+
const CENTRAL_SIGNATURE = 0x02014b50;
|
|
13
|
+
const LOCAL_SIGNATURE = 0x04034b50;
|
|
14
|
+
const ZIP64_MARKER = 0xffffffff;
|
|
15
|
+
function readU16(bytes, offset) {
|
|
16
|
+
return (bytes[offset] ?? 0) | ((bytes[offset + 1] ?? 0) << 8);
|
|
17
|
+
}
|
|
18
|
+
function readU32(bytes, offset) {
|
|
19
|
+
return ((bytes[offset] ?? 0) | ((bytes[offset + 1] ?? 0) << 8) | ((bytes[offset + 2] ?? 0) << 16) | ((bytes[offset + 3] ?? 0) << 24)) >>> 0;
|
|
20
|
+
}
|
|
21
|
+
/** Locate the end-of-central-directory record, scanning back over a possible comment. */
|
|
22
|
+
function findEndOfCentralDirectory(bytes) {
|
|
23
|
+
const earliest = Math.max(0, bytes.length - 65_557);
|
|
24
|
+
for (let offset = bytes.length - 22; offset >= earliest; offset -= 1) {
|
|
25
|
+
if (readU32(bytes, offset) === EOCD_SIGNATURE)
|
|
26
|
+
return offset;
|
|
27
|
+
}
|
|
28
|
+
throw new ProvisionError('extract/failed', 'zip 缺少中央目录记录(不是有效的 zip?)');
|
|
29
|
+
}
|
|
30
|
+
function readCentralDirectory(bytes) {
|
|
31
|
+
const eocd = findEndOfCentralDirectory(bytes);
|
|
32
|
+
const count = readU16(bytes, eocd + 10);
|
|
33
|
+
const directorySize = readU32(bytes, eocd + 12);
|
|
34
|
+
const directoryOffset = readU32(bytes, eocd + 16);
|
|
35
|
+
if (directoryOffset === ZIP64_MARKER || directorySize === ZIP64_MARKER) {
|
|
36
|
+
throw new ProvisionError('extract/failed', '不支持 ZIP64 归档');
|
|
37
|
+
}
|
|
38
|
+
const entries = [];
|
|
39
|
+
let cursor = directoryOffset;
|
|
40
|
+
for (let index = 0; index < count; index += 1) {
|
|
41
|
+
if (readU32(bytes, cursor) !== CENTRAL_SIGNATURE) {
|
|
42
|
+
throw new ProvisionError('extract/failed', `zip 中央目录第 ${String(index)} 条签名不对`);
|
|
43
|
+
}
|
|
44
|
+
const method = readU16(bytes, cursor + 10);
|
|
45
|
+
const compressedSize = readU32(bytes, cursor + 20);
|
|
46
|
+
const uncompressedSize = readU32(bytes, cursor + 24);
|
|
47
|
+
const nameLength = readU16(bytes, cursor + 28);
|
|
48
|
+
const extraLength = readU16(bytes, cursor + 30);
|
|
49
|
+
const commentLength = readU16(bytes, cursor + 32);
|
|
50
|
+
const localOffset = readU32(bytes, cursor + 42);
|
|
51
|
+
const name = new TextDecoder().decode(bytes.subarray(cursor + 46, cursor + 46 + nameLength));
|
|
52
|
+
if (compressedSize === ZIP64_MARKER || uncompressedSize === ZIP64_MARKER) {
|
|
53
|
+
throw new ProvisionError('extract/failed', `不支持 ZIP64 条目:${name}`);
|
|
54
|
+
}
|
|
55
|
+
entries.push({ name, method, compressedSize, uncompressedSize, localOffset });
|
|
56
|
+
cursor += 46 + nameLength + extraLength + commentLength;
|
|
57
|
+
}
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
/** Read one entry's bytes, following its local header for the actual data offset. */
|
|
61
|
+
function readEntry(bytes, entry) {
|
|
62
|
+
const local = entry.localOffset;
|
|
63
|
+
if (readU32(bytes, local) !== LOCAL_SIGNATURE) {
|
|
64
|
+
throw new ProvisionError('extract/failed', `zip 本地头签名不对:${entry.name}`);
|
|
65
|
+
}
|
|
66
|
+
const nameLength = readU16(bytes, local + 26);
|
|
67
|
+
const extraLength = readU16(bytes, local + 28);
|
|
68
|
+
const start = local + 30 + nameLength + extraLength;
|
|
69
|
+
const end = start + entry.compressedSize;
|
|
70
|
+
const raw = bytes.subarray(start, end);
|
|
71
|
+
if (entry.method === 0)
|
|
72
|
+
return raw;
|
|
73
|
+
if (entry.method === 8) {
|
|
74
|
+
try {
|
|
75
|
+
const inflated = new Uint8Array(inflateRawSync(raw, { maxOutputLength: MAX_UNPACKED_BYTES }));
|
|
76
|
+
// The inflated size must equal the declared uncompressed size.
|
|
77
|
+
if (inflated.byteLength !== entry.uncompressedSize) {
|
|
78
|
+
throw new ProvisionError('extract/failed', `zip 条目 ${entry.name} 的实际大小 ${String(inflated.byteLength)} 与头部声明 ${String(entry.uncompressedSize)} 不符`);
|
|
79
|
+
}
|
|
80
|
+
return inflated;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new ProvisionError('extract/failed', `zip 解压失败:${entry.name}(${error instanceof Error ? error.message : String(error)})`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
throw new ProvisionError('extract/failed', `不支持的 zip 压缩方法 ${String(entry.method)}:${entry.name}`);
|
|
87
|
+
}
|
|
88
|
+
/** Extract an in-memory zip into `destination`, rejecting any traversal attempt. */
|
|
89
|
+
export async function extractZip(archive, destination, fs, options = {}) {
|
|
90
|
+
await fs.mkdir(destination);
|
|
91
|
+
for (const entry of readCentralDirectory(archive)) {
|
|
92
|
+
const relative = safeEntryPath(entry.name);
|
|
93
|
+
if (relative === undefined)
|
|
94
|
+
continue;
|
|
95
|
+
const parts = relative.split('/');
|
|
96
|
+
const strip = options.strip ?? 0;
|
|
97
|
+
if (parts.length <= strip)
|
|
98
|
+
continue;
|
|
99
|
+
const stripped = parts.slice(strip).join('/');
|
|
100
|
+
const target = join(destination, ...stripped.split('/'));
|
|
101
|
+
if (entry.name.endsWith('/')) {
|
|
102
|
+
await fs.mkdir(target);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
await fs.mkdir(dirname(target));
|
|
106
|
+
await fs.writeFile(target, readEntry(archive, entry));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=zip.js.map
|
package/dist/zip.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../src/zip.ts"],"names":[],"mappings":"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"}
|