@hot-updater/protocol 1.1.4 → 1.2.0-rc.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.
- package/dist/index.cjs +12 -256
- package/dist/index.mjs +1 -245
- package/dist/native-artifact.cjs +1098 -0
- package/dist/native-artifact.d.cts +179 -0
- package/dist/native-artifact.d.mts +179 -0
- package/dist/native-artifact.mjs +1090 -0
- package/dist/uuid-DC9FQNxo.cjs +299 -0
- package/dist/uuid-kZvLA0Ly.mjs +246 -0
- package/package.json +6 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
//#region src/nativeArtifact/byteSource.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Random access to an artifact's bytes, so a reader takes only the parts it
|
|
4
|
+
* needs of a file of hundreds of megabytes: a file on disk (Node's
|
|
5
|
+
* `fs.openAsBlob`), or bytes in memory.
|
|
6
|
+
*/
|
|
7
|
+
interface ByteSource {
|
|
8
|
+
/** The artifact's length in bytes. */
|
|
9
|
+
readonly size: number;
|
|
10
|
+
/** The bytes in `[offset, offset + length)`, fewer only at the end. */
|
|
11
|
+
read(offset: number, length: number): Promise<Uint8Array>;
|
|
12
|
+
}
|
|
13
|
+
/** A `Blob`, such as Node's `fs.openAsBlob`, read by slices. */
|
|
14
|
+
declare const blobSource: (blob: Blob) => ByteSource;
|
|
15
|
+
/** Why an artifact can't be read, or can't serve as a native build. */
|
|
16
|
+
declare class NativeArtifactError extends Error {
|
|
17
|
+
readonly code: NativeArtifactProblemCode;
|
|
18
|
+
readonly name = "NativeArtifactError";
|
|
19
|
+
constructor(code: NativeArtifactProblemCode, message: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* What can keep an artifact from being imported as a native build: the
|
|
23
|
+
* codes `native-build import --json` reports.
|
|
24
|
+
*/
|
|
25
|
+
type NativeArtifactProblemCode = "UNSUPPORTED_FILE" | "UNREADABLE" | "NO_BUILT_IN_BUNDLE" | "NO_MIN_BUNDLE_ID" | "AMBIGUOUS_MIN_BUNDLE_ID" | "NO_FINGERPRINT" | "AMBIGUOUS_FINGERPRINT" | "NO_APP_VERSION" | "INVALID_SCOPE" | "APP_ID_MISMATCH" | "ALREADY_IMPORTED";
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/nativeArtifact/readNativeArtifact.d.ts
|
|
28
|
+
/**
|
|
29
|
+
* The kinds of artifact a build made elsewhere can be imported from: the
|
|
30
|
+
* store artifacts, and a simulator `.app` as one zip archive (`.app.zip`,
|
|
31
|
+
* the `.app` directory at its root, as Finder and `ditto` archive it).
|
|
32
|
+
*/
|
|
33
|
+
type NativeArtifactKind = "ipa" | "aab" | "apk" | "app";
|
|
34
|
+
/** A value the artifact holds as something import can't read exactly. */
|
|
35
|
+
interface UnreadableValue {
|
|
36
|
+
readonly unreadable: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* What a store artifact compiled in, read from the artifact alone: what its
|
|
40
|
+
* app reports at runtime, and the built-in bundle it ships.
|
|
41
|
+
*/
|
|
42
|
+
interface NativeArtifactInfo {
|
|
43
|
+
readonly platform: "ios" | "android";
|
|
44
|
+
readonly kind: NativeArtifactKind;
|
|
45
|
+
/** The bundle identifier or application ID. */
|
|
46
|
+
readonly appId: string | null;
|
|
47
|
+
/** `CFBundleShortVersionString` or `versionName`. */
|
|
48
|
+
readonly appVersion: string | UnreadableValue | null;
|
|
49
|
+
/** `CFBundleVersion` or `versionCode`. */
|
|
50
|
+
readonly buildNumber: string | null;
|
|
51
|
+
/**
|
|
52
|
+
* `HOT_UPDATER_CHANNEL` or the `com.hotupdater.CHANNEL` meta-data: null
|
|
53
|
+
* without one, which the native SDK reports as `production`.
|
|
54
|
+
*/
|
|
55
|
+
readonly channel: string | UnreadableValue | null;
|
|
56
|
+
/**
|
|
57
|
+
* The UUIDv7 string literals in the app's code. MIN_BUNDLE_ID is one: the
|
|
58
|
+
* native SDK's build step compiles it in.
|
|
59
|
+
*/
|
|
60
|
+
readonly minBundleIdCandidates: readonly string[];
|
|
61
|
+
/**
|
|
62
|
+
* The SHA-256 hex string literals in the app's code. A build of an app
|
|
63
|
+
* with fingerprint.json compiles its fingerprint in as one.
|
|
64
|
+
*/
|
|
65
|
+
readonly fingerprintCandidates: readonly string[];
|
|
66
|
+
/** The JavaScript bundle the build packed, the built-in bundle. */
|
|
67
|
+
readonly builtInBundle: {
|
|
68
|
+
readonly path: string;
|
|
69
|
+
readonly byteSize: number;
|
|
70
|
+
} | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Reads a store artifact (`.ipa`, `.aab` or `.apk`) by its file name's
|
|
74
|
+
* extension: what its app reports at runtime, and its built-in bundle. It
|
|
75
|
+
* reads the archive's directory, the manifest or Info.plist, and the app's
|
|
76
|
+
* code, but not the built-in bundle, so a large artifact is never held
|
|
77
|
+
* whole. Whether the result can be imported is `checkNativeArtifact`'s.
|
|
78
|
+
*/
|
|
79
|
+
declare const readNativeArtifact: (source: ByteSource, fileName: string, { timeoutMs }?: {
|
|
80
|
+
readonly timeoutMs?: number;
|
|
81
|
+
}) => Promise<NativeArtifactInfo>;
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/nativeArtifact/checkNativeArtifact.d.ts
|
|
84
|
+
/** Why an artifact can't be imported, as `native-build import` says it. */
|
|
85
|
+
interface NativeArtifactProblem {
|
|
86
|
+
readonly code: NativeArtifactProblemCode;
|
|
87
|
+
readonly message: string;
|
|
88
|
+
/** With `ALREADY_IMPORTED`, the native build already registered. */
|
|
89
|
+
readonly nativeBuildId?: string;
|
|
90
|
+
}
|
|
91
|
+
/** What an importable artifact registers as: a native build and its scope. */
|
|
92
|
+
interface ImportableNativeBuild {
|
|
93
|
+
readonly platform: "ios" | "android";
|
|
94
|
+
readonly kind: NativeArtifactKind;
|
|
95
|
+
readonly appId: string | null;
|
|
96
|
+
readonly buildNumber: string | null;
|
|
97
|
+
/** The MIN_BUNDLE_ID compiled in, the built-in bundle's ID. */
|
|
98
|
+
readonly minBundleId: string;
|
|
99
|
+
/** The channel the app reports: its own, or `production` without one. */
|
|
100
|
+
readonly channel: string;
|
|
101
|
+
readonly fingerprintHash: string | null;
|
|
102
|
+
readonly appVersion: string | null;
|
|
103
|
+
/** The built-in bundle's entry in the archive. */
|
|
104
|
+
readonly builtInBundlePath: string;
|
|
105
|
+
}
|
|
106
|
+
type NativeArtifactCheck = ({
|
|
107
|
+
readonly ok: true;
|
|
108
|
+
readonly build: ImportableNativeBuild;
|
|
109
|
+
} | {
|
|
110
|
+
readonly ok: false;
|
|
111
|
+
readonly problems: readonly NativeArtifactProblem[];
|
|
112
|
+
}) & {
|
|
113
|
+
/**
|
|
114
|
+
* What may be wrong, but doesn't stop the import: an app ID that no
|
|
115
|
+
* `nativeBuild` scheme declares, which a scheme names only as a hint.
|
|
116
|
+
*/
|
|
117
|
+
readonly warnings: readonly NativeArtifactProblem[];
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Whether a read artifact can be imported as a native build, whose built-in
|
|
121
|
+
* bundle OTAs patch from, and what it registers as. It refuses an artifact
|
|
122
|
+
* that ships no built-in bundle, such as a debug build, which loads its
|
|
123
|
+
* JavaScript from Metro, one built without the native SDK's build step (no MIN_BUNDLE_ID), and
|
|
124
|
+
* one the project's update strategy can't place: no fingerprint under the
|
|
125
|
+
* fingerprint strategy, or no app version a device compares under the
|
|
126
|
+
* appVersion strategy. With `appIds`, the identifiers the project's
|
|
127
|
+
* `nativeBuild` schemes name, it warns about an artifact of another app.
|
|
128
|
+
*/
|
|
129
|
+
declare const checkNativeArtifact: (info: NativeArtifactInfo, { updateStrategy, appIds, channel: channelOverride }: {
|
|
130
|
+
readonly updateStrategy: "fingerprint" | "appVersion";
|
|
131
|
+
readonly appIds?: readonly string[];
|
|
132
|
+
/**
|
|
133
|
+
* The channel the app reports, when it isn't the one the artifact
|
|
134
|
+
* compiled in: one its code sets, such as `HotUpdaterOptions(channel)`,
|
|
135
|
+
* or one it switches to at runtime.
|
|
136
|
+
*/
|
|
137
|
+
readonly channel?: string;
|
|
138
|
+
}) => NativeArtifactCheck;
|
|
139
|
+
/**
|
|
140
|
+
* The refusal of an artifact whose built-in bundle is already registered:
|
|
141
|
+
* the registry takes a MIN_BUNDLE_ID once.
|
|
142
|
+
*/
|
|
143
|
+
declare const alreadyImportedProblem: (minBundleId: string, nativeBuildId: string | null) => NativeArtifactProblem;
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/nativeArtifact/zip.d.ts
|
|
146
|
+
/** One file of a zip archive, from its central directory. */
|
|
147
|
+
interface ZipEntry {
|
|
148
|
+
readonly name: string;
|
|
149
|
+
/**
|
|
150
|
+
* A name no artifact holds: absolute, with a `..` segment, a backslash or
|
|
151
|
+
* a NUL. No lookup matches it.
|
|
152
|
+
*/
|
|
153
|
+
readonly unsafe: boolean;
|
|
154
|
+
/** A symbolic link, whose data is a path, not a file's bytes. */
|
|
155
|
+
readonly symlink: boolean;
|
|
156
|
+
/** 0 stored, 8 deflated. */
|
|
157
|
+
readonly method: number;
|
|
158
|
+
readonly compressedSize: number;
|
|
159
|
+
readonly uncompressedSize: number;
|
|
160
|
+
readonly localHeaderOffset: number;
|
|
161
|
+
}
|
|
162
|
+
/** Every entry of a zip archive, reading only its central directory. */
|
|
163
|
+
declare const readZipDirectory: (source: ByteSource) => Promise<ZipEntry[]>;
|
|
164
|
+
/**
|
|
165
|
+
* The one entry an artifact's reader takes by `name`: a symbolic link, or a
|
|
166
|
+
* name the archive holds twice, which could hand the reader other bytes
|
|
167
|
+
* than an installer reads, is refused. Unsafe names match nothing.
|
|
168
|
+
*/
|
|
169
|
+
declare const findZipEntry: (entries: readonly ZipEntry[], match: string | ((name: string) => boolean)) => ZipEntry | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* An entry's uncompressed bytes as a stream, read from the source a chunk at
|
|
172
|
+
* a time, so a large entry is never held whole.
|
|
173
|
+
*/
|
|
174
|
+
declare const openZipEntry: (source: ByteSource, entry: ZipEntry, { maxBytes }?: {
|
|
175
|
+
/** The most the entry may inflate to, whatever its header says. */
|
|
176
|
+
readonly maxBytes?: number;
|
|
177
|
+
}) => Promise<ReadableStream<Uint8Array>>;
|
|
178
|
+
//#endregion
|
|
179
|
+
export { type ByteSource, type ImportableNativeBuild, type NativeArtifactCheck, NativeArtifactError, type NativeArtifactInfo, type NativeArtifactKind, type NativeArtifactProblem, type NativeArtifactProblemCode, type UnreadableValue, type ZipEntry, alreadyImportedProblem, blobSource, checkNativeArtifact, findZipEntry, openZipEntry, readNativeArtifact, readZipDirectory };
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
//#region src/nativeArtifact/byteSource.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Random access to an artifact's bytes, so a reader takes only the parts it
|
|
4
|
+
* needs of a file of hundreds of megabytes: a file on disk (Node's
|
|
5
|
+
* `fs.openAsBlob`), or bytes in memory.
|
|
6
|
+
*/
|
|
7
|
+
interface ByteSource {
|
|
8
|
+
/** The artifact's length in bytes. */
|
|
9
|
+
readonly size: number;
|
|
10
|
+
/** The bytes in `[offset, offset + length)`, fewer only at the end. */
|
|
11
|
+
read(offset: number, length: number): Promise<Uint8Array>;
|
|
12
|
+
}
|
|
13
|
+
/** A `Blob`, such as Node's `fs.openAsBlob`, read by slices. */
|
|
14
|
+
declare const blobSource: (blob: Blob) => ByteSource;
|
|
15
|
+
/** Why an artifact can't be read, or can't serve as a native build. */
|
|
16
|
+
declare class NativeArtifactError extends Error {
|
|
17
|
+
readonly code: NativeArtifactProblemCode;
|
|
18
|
+
readonly name = "NativeArtifactError";
|
|
19
|
+
constructor(code: NativeArtifactProblemCode, message: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* What can keep an artifact from being imported as a native build: the
|
|
23
|
+
* codes `native-build import --json` reports.
|
|
24
|
+
*/
|
|
25
|
+
type NativeArtifactProblemCode = "UNSUPPORTED_FILE" | "UNREADABLE" | "NO_BUILT_IN_BUNDLE" | "NO_MIN_BUNDLE_ID" | "AMBIGUOUS_MIN_BUNDLE_ID" | "NO_FINGERPRINT" | "AMBIGUOUS_FINGERPRINT" | "NO_APP_VERSION" | "INVALID_SCOPE" | "APP_ID_MISMATCH" | "ALREADY_IMPORTED";
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/nativeArtifact/readNativeArtifact.d.ts
|
|
28
|
+
/**
|
|
29
|
+
* The kinds of artifact a build made elsewhere can be imported from: the
|
|
30
|
+
* store artifacts, and a simulator `.app` as one zip archive (`.app.zip`,
|
|
31
|
+
* the `.app` directory at its root, as Finder and `ditto` archive it).
|
|
32
|
+
*/
|
|
33
|
+
type NativeArtifactKind = "ipa" | "aab" | "apk" | "app";
|
|
34
|
+
/** A value the artifact holds as something import can't read exactly. */
|
|
35
|
+
interface UnreadableValue {
|
|
36
|
+
readonly unreadable: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* What a store artifact compiled in, read from the artifact alone: what its
|
|
40
|
+
* app reports at runtime, and the built-in bundle it ships.
|
|
41
|
+
*/
|
|
42
|
+
interface NativeArtifactInfo {
|
|
43
|
+
readonly platform: "ios" | "android";
|
|
44
|
+
readonly kind: NativeArtifactKind;
|
|
45
|
+
/** The bundle identifier or application ID. */
|
|
46
|
+
readonly appId: string | null;
|
|
47
|
+
/** `CFBundleShortVersionString` or `versionName`. */
|
|
48
|
+
readonly appVersion: string | UnreadableValue | null;
|
|
49
|
+
/** `CFBundleVersion` or `versionCode`. */
|
|
50
|
+
readonly buildNumber: string | null;
|
|
51
|
+
/**
|
|
52
|
+
* `HOT_UPDATER_CHANNEL` or the `com.hotupdater.CHANNEL` meta-data: null
|
|
53
|
+
* without one, which the native SDK reports as `production`.
|
|
54
|
+
*/
|
|
55
|
+
readonly channel: string | UnreadableValue | null;
|
|
56
|
+
/**
|
|
57
|
+
* The UUIDv7 string literals in the app's code. MIN_BUNDLE_ID is one: the
|
|
58
|
+
* native SDK's build step compiles it in.
|
|
59
|
+
*/
|
|
60
|
+
readonly minBundleIdCandidates: readonly string[];
|
|
61
|
+
/**
|
|
62
|
+
* The SHA-256 hex string literals in the app's code. A build of an app
|
|
63
|
+
* with fingerprint.json compiles its fingerprint in as one.
|
|
64
|
+
*/
|
|
65
|
+
readonly fingerprintCandidates: readonly string[];
|
|
66
|
+
/** The JavaScript bundle the build packed, the built-in bundle. */
|
|
67
|
+
readonly builtInBundle: {
|
|
68
|
+
readonly path: string;
|
|
69
|
+
readonly byteSize: number;
|
|
70
|
+
} | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Reads a store artifact (`.ipa`, `.aab` or `.apk`) by its file name's
|
|
74
|
+
* extension: what its app reports at runtime, and its built-in bundle. It
|
|
75
|
+
* reads the archive's directory, the manifest or Info.plist, and the app's
|
|
76
|
+
* code, but not the built-in bundle, so a large artifact is never held
|
|
77
|
+
* whole. Whether the result can be imported is `checkNativeArtifact`'s.
|
|
78
|
+
*/
|
|
79
|
+
declare const readNativeArtifact: (source: ByteSource, fileName: string, { timeoutMs }?: {
|
|
80
|
+
readonly timeoutMs?: number;
|
|
81
|
+
}) => Promise<NativeArtifactInfo>;
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/nativeArtifact/checkNativeArtifact.d.ts
|
|
84
|
+
/** Why an artifact can't be imported, as `native-build import` says it. */
|
|
85
|
+
interface NativeArtifactProblem {
|
|
86
|
+
readonly code: NativeArtifactProblemCode;
|
|
87
|
+
readonly message: string;
|
|
88
|
+
/** With `ALREADY_IMPORTED`, the native build already registered. */
|
|
89
|
+
readonly nativeBuildId?: string;
|
|
90
|
+
}
|
|
91
|
+
/** What an importable artifact registers as: a native build and its scope. */
|
|
92
|
+
interface ImportableNativeBuild {
|
|
93
|
+
readonly platform: "ios" | "android";
|
|
94
|
+
readonly kind: NativeArtifactKind;
|
|
95
|
+
readonly appId: string | null;
|
|
96
|
+
readonly buildNumber: string | null;
|
|
97
|
+
/** The MIN_BUNDLE_ID compiled in, the built-in bundle's ID. */
|
|
98
|
+
readonly minBundleId: string;
|
|
99
|
+
/** The channel the app reports: its own, or `production` without one. */
|
|
100
|
+
readonly channel: string;
|
|
101
|
+
readonly fingerprintHash: string | null;
|
|
102
|
+
readonly appVersion: string | null;
|
|
103
|
+
/** The built-in bundle's entry in the archive. */
|
|
104
|
+
readonly builtInBundlePath: string;
|
|
105
|
+
}
|
|
106
|
+
type NativeArtifactCheck = ({
|
|
107
|
+
readonly ok: true;
|
|
108
|
+
readonly build: ImportableNativeBuild;
|
|
109
|
+
} | {
|
|
110
|
+
readonly ok: false;
|
|
111
|
+
readonly problems: readonly NativeArtifactProblem[];
|
|
112
|
+
}) & {
|
|
113
|
+
/**
|
|
114
|
+
* What may be wrong, but doesn't stop the import: an app ID that no
|
|
115
|
+
* `nativeBuild` scheme declares, which a scheme names only as a hint.
|
|
116
|
+
*/
|
|
117
|
+
readonly warnings: readonly NativeArtifactProblem[];
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Whether a read artifact can be imported as a native build, whose built-in
|
|
121
|
+
* bundle OTAs patch from, and what it registers as. It refuses an artifact
|
|
122
|
+
* that ships no built-in bundle, such as a debug build, which loads its
|
|
123
|
+
* JavaScript from Metro, one built without the native SDK's build step (no MIN_BUNDLE_ID), and
|
|
124
|
+
* one the project's update strategy can't place: no fingerprint under the
|
|
125
|
+
* fingerprint strategy, or no app version a device compares under the
|
|
126
|
+
* appVersion strategy. With `appIds`, the identifiers the project's
|
|
127
|
+
* `nativeBuild` schemes name, it warns about an artifact of another app.
|
|
128
|
+
*/
|
|
129
|
+
declare const checkNativeArtifact: (info: NativeArtifactInfo, { updateStrategy, appIds, channel: channelOverride }: {
|
|
130
|
+
readonly updateStrategy: "fingerprint" | "appVersion";
|
|
131
|
+
readonly appIds?: readonly string[];
|
|
132
|
+
/**
|
|
133
|
+
* The channel the app reports, when it isn't the one the artifact
|
|
134
|
+
* compiled in: one its code sets, such as `HotUpdaterOptions(channel)`,
|
|
135
|
+
* or one it switches to at runtime.
|
|
136
|
+
*/
|
|
137
|
+
readonly channel?: string;
|
|
138
|
+
}) => NativeArtifactCheck;
|
|
139
|
+
/**
|
|
140
|
+
* The refusal of an artifact whose built-in bundle is already registered:
|
|
141
|
+
* the registry takes a MIN_BUNDLE_ID once.
|
|
142
|
+
*/
|
|
143
|
+
declare const alreadyImportedProblem: (minBundleId: string, nativeBuildId: string | null) => NativeArtifactProblem;
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/nativeArtifact/zip.d.ts
|
|
146
|
+
/** One file of a zip archive, from its central directory. */
|
|
147
|
+
interface ZipEntry {
|
|
148
|
+
readonly name: string;
|
|
149
|
+
/**
|
|
150
|
+
* A name no artifact holds: absolute, with a `..` segment, a backslash or
|
|
151
|
+
* a NUL. No lookup matches it.
|
|
152
|
+
*/
|
|
153
|
+
readonly unsafe: boolean;
|
|
154
|
+
/** A symbolic link, whose data is a path, not a file's bytes. */
|
|
155
|
+
readonly symlink: boolean;
|
|
156
|
+
/** 0 stored, 8 deflated. */
|
|
157
|
+
readonly method: number;
|
|
158
|
+
readonly compressedSize: number;
|
|
159
|
+
readonly uncompressedSize: number;
|
|
160
|
+
readonly localHeaderOffset: number;
|
|
161
|
+
}
|
|
162
|
+
/** Every entry of a zip archive, reading only its central directory. */
|
|
163
|
+
declare const readZipDirectory: (source: ByteSource) => Promise<ZipEntry[]>;
|
|
164
|
+
/**
|
|
165
|
+
* The one entry an artifact's reader takes by `name`: a symbolic link, or a
|
|
166
|
+
* name the archive holds twice, which could hand the reader other bytes
|
|
167
|
+
* than an installer reads, is refused. Unsafe names match nothing.
|
|
168
|
+
*/
|
|
169
|
+
declare const findZipEntry: (entries: readonly ZipEntry[], match: string | ((name: string) => boolean)) => ZipEntry | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* An entry's uncompressed bytes as a stream, read from the source a chunk at
|
|
172
|
+
* a time, so a large entry is never held whole.
|
|
173
|
+
*/
|
|
174
|
+
declare const openZipEntry: (source: ByteSource, entry: ZipEntry, { maxBytes }?: {
|
|
175
|
+
/** The most the entry may inflate to, whatever its header says. */
|
|
176
|
+
readonly maxBytes?: number;
|
|
177
|
+
}) => Promise<ReadableStream<Uint8Array>>;
|
|
178
|
+
//#endregion
|
|
179
|
+
export { type ByteSource, type ImportableNativeBuild, type NativeArtifactCheck, NativeArtifactError, type NativeArtifactInfo, type NativeArtifactKind, type NativeArtifactProblem, type NativeArtifactProblemCode, type UnreadableValue, type ZipEntry, alreadyImportedProblem, blobSource, checkNativeArtifact, findZipEntry, openZipEntry, readNativeArtifact, readZipDirectory };
|