@zukhruf/docker 0.3.33 → 0.3.35
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/README.md +26 -12
- package/dist/container-process.d.ts +35 -0
- package/dist/container-process.d.ts.map +1 -0
- package/dist/container-process.js +91 -0
- package/dist/container-process.js.map +1 -0
- package/dist/containers.d.ts +160 -0
- package/dist/containers.d.ts.map +1 -0
- package/dist/containers.js +700 -0
- package/dist/containers.js.map +1 -0
- package/dist/docker.d.ts +25 -2
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +43 -7
- package/dist/docker.js.map +1 -1
- package/dist/engine-api.d.ts +369 -0
- package/dist/engine-api.d.ts.map +1 -1
- package/dist/engine-client.d.ts +52 -4
- package/dist/engine-client.d.ts.map +1 -1
- package/dist/engine-client.js +167 -31
- package/dist/engine-client.js.map +1 -1
- package/dist/errors.d.ts +95 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +156 -6
- package/dist/errors.js.map +1 -1
- package/dist/images.d.ts +40 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +173 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/multiplexed-stream.d.ts +11 -0
- package/dist/multiplexed-stream.d.ts.map +1 -0
- package/dist/multiplexed-stream.js +81 -0
- package/dist/multiplexed-stream.js.map +1 -0
- package/dist/ndjson.d.ts +7 -0
- package/dist/ndjson.d.ts.map +1 -0
- package/dist/ndjson.js +21 -0
- package/dist/ndjson.js.map +1 -0
- package/dist/networks.d.ts +46 -0
- package/dist/networks.d.ts.map +1 -0
- package/dist/networks.js +170 -0
- package/dist/networks.js.map +1 -0
- package/dist/output.d.ts +18 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +21 -0
- package/dist/output.js.map +1 -0
- package/dist/progress.d.ts +9 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +20 -0
- package/dist/progress.js.map +1 -0
- package/dist/ssh-connection.d.ts +3 -0
- package/dist/ssh-connection.d.ts.map +1 -1
- package/dist/ssh-connection.js +46 -10
- package/dist/ssh-connection.js.map +1 -1
- package/dist/tar-reader.d.ts +22 -0
- package/dist/tar-reader.d.ts.map +1 -0
- package/dist/tar-reader.js +163 -0
- package/dist/tar-reader.js.map +1 -0
- package/dist/tar-writer.d.ts +16 -0
- package/dist/tar-writer.d.ts.map +1 -0
- package/dist/tar-writer.js +114 -0
- package/dist/tar-writer.js.map +1 -0
- package/dist/transport.d.ts +11 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +34 -2
- package/dist/transport.js.map +1 -1
- package/dist/volumes.d.ts +41 -0
- package/dist/volumes.d.ts.map +1 -0
- package/dist/volumes.js +119 -0
- package/dist/volumes.js.map +1 -0
- package/package.json +5 -2
package/dist/errors.js
CHANGED
|
@@ -51,14 +51,164 @@ export class UnsupportedEngineError extends DockerError {
|
|
|
51
51
|
export class DockerEngineError extends DockerError {
|
|
52
52
|
/** The HTTP status; undefined for an error in the progress of a pull, a push or a load. */
|
|
53
53
|
status;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
constructor(message,
|
|
54
|
+
/** The request that got the error. */
|
|
55
|
+
request;
|
|
56
|
+
constructor(message, answer, options) {
|
|
57
57
|
super(message, options);
|
|
58
58
|
this.name = 'DockerEngineError';
|
|
59
|
-
this.status =
|
|
60
|
-
this.
|
|
61
|
-
|
|
59
|
+
this.status = answer.status;
|
|
60
|
+
this.request = Object.freeze({
|
|
61
|
+
method: answer.request.method,
|
|
62
|
+
path: answer.request.path,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** A request about a container got 404. */
|
|
67
|
+
export class ContainerNotFoundError extends DockerEngineError {
|
|
68
|
+
container;
|
|
69
|
+
constructor(message, answer, container, options) {
|
|
70
|
+
super(message, answer, options);
|
|
71
|
+
this.name = 'ContainerNotFoundError';
|
|
72
|
+
this.container = container;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** An exec or a kill got 409, or an attach found the container exited or paused. */
|
|
76
|
+
export class ContainerNotRunningError extends DockerEngineError {
|
|
77
|
+
container;
|
|
78
|
+
/** From an inspect after the 409: 'created', 'exited', 'paused', 'restarting', 'removing' or 'dead'. */
|
|
79
|
+
state;
|
|
80
|
+
constructor(message, answer, container, state, options) {
|
|
81
|
+
super(message, answer, options);
|
|
82
|
+
this.name = 'ContainerNotRunningError';
|
|
83
|
+
this.container = container;
|
|
84
|
+
this.state = state;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** A create of a container, network or volume found the name taken. */
|
|
88
|
+
export class NameConflictError extends DockerEngineError {
|
|
89
|
+
kind;
|
|
90
|
+
/** The name that another resource has. Not `name`: that is the name of the error class. */
|
|
91
|
+
takenName;
|
|
92
|
+
constructor(message, answer, kind, takenName, options) {
|
|
93
|
+
super(message, answer, options);
|
|
94
|
+
this.name = 'NameConflictError';
|
|
95
|
+
this.kind = kind;
|
|
96
|
+
this.takenName = takenName;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** A removal without `force` got 409, and an inspect showed that the container runs. */
|
|
100
|
+
export class ContainerRunningError extends DockerEngineError {
|
|
101
|
+
container;
|
|
102
|
+
constructor(message, answer, container, options) {
|
|
103
|
+
super(message, answer, options);
|
|
104
|
+
this.name = 'ContainerRunningError';
|
|
105
|
+
this.container = container;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** A create got 404 and the image is not on the engine, a pull got 404, or a push found no image of the reference on the engine. */
|
|
109
|
+
export class ImageNotFoundError extends DockerEngineError {
|
|
110
|
+
image;
|
|
111
|
+
constructor(message, answer, image, options) {
|
|
112
|
+
super(message, answer, options);
|
|
113
|
+
this.name = 'ImageNotFoundError';
|
|
114
|
+
this.image = image;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** A start got 404 while the container exists, and a lookup of its networks found one missing; or a request about a network got 404. */
|
|
118
|
+
export class NetworkNotFoundError extends DockerEngineError {
|
|
119
|
+
network;
|
|
120
|
+
constructor(message, answer, network, options) {
|
|
121
|
+
super(message, answer, options);
|
|
122
|
+
this.name = 'NetworkNotFoundError';
|
|
123
|
+
this.network = network;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** A request about a volume got 404. */
|
|
127
|
+
export class VolumeNotFoundError extends DockerEngineError {
|
|
128
|
+
volume;
|
|
129
|
+
constructor(message, answer, volume, options) {
|
|
130
|
+
super(message, answer, options);
|
|
131
|
+
this.name = 'VolumeNotFoundError';
|
|
132
|
+
this.volume = volume;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** A volume removal got 409: a container uses the volume. */
|
|
136
|
+
export class VolumeInUseError extends DockerEngineError {
|
|
137
|
+
volume;
|
|
138
|
+
constructor(message, answer, volume, options) {
|
|
139
|
+
super(message, answer, options);
|
|
140
|
+
this.name = 'VolumeInUseError';
|
|
141
|
+
this.volume = volume;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** A network removal got 403 while containers are connected. */
|
|
145
|
+
export class NetworkInUseError extends DockerEngineError {
|
|
146
|
+
network;
|
|
147
|
+
/** The IDs of the connected containers, from an inspect after the 403. */
|
|
148
|
+
containers;
|
|
149
|
+
constructor(message, answer, network, containers, options) {
|
|
150
|
+
super(message, answer, options);
|
|
151
|
+
this.name = 'NetworkInUseError';
|
|
152
|
+
this.network = network;
|
|
153
|
+
this.containers = containers;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** An image removal got 409. */
|
|
157
|
+
export class ImageInUseError extends DockerEngineError {
|
|
158
|
+
image;
|
|
159
|
+
constructor(message, answer, image, options) {
|
|
160
|
+
super(message, answer, options);
|
|
161
|
+
this.name = 'ImageInUseError';
|
|
162
|
+
this.image = image;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** A create or a start refused a bind mount whose source does not exist on the host of the engine. */
|
|
166
|
+
export class BindSourceNotFoundError extends DockerEngineError {
|
|
167
|
+
/** The path on the host of the engine. */
|
|
168
|
+
source;
|
|
169
|
+
constructor(message, answer, source, options) {
|
|
170
|
+
super(message, answer, options);
|
|
171
|
+
this.name = 'BindSourceNotFoundError';
|
|
172
|
+
this.source = source;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** A file request got 404, and the container exists. */
|
|
176
|
+
export class PathNotFoundError extends DockerEngineError {
|
|
177
|
+
container;
|
|
178
|
+
/** The path in the container. */
|
|
179
|
+
path;
|
|
180
|
+
constructor(message, answer, container, path, options) {
|
|
181
|
+
super(message, answer, options);
|
|
182
|
+
this.name = 'PathNotFoundError';
|
|
183
|
+
this.container = container;
|
|
184
|
+
this.path = path;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/** readFile() found a directory, a link or another kind of entry. */
|
|
188
|
+
export class NotAFileError extends DockerEngineError {
|
|
189
|
+
container;
|
|
190
|
+
/** The path in the container. */
|
|
191
|
+
path;
|
|
192
|
+
/** The kind of the entry: 'directory', 'symlink', 'link' or 'other'. */
|
|
193
|
+
kind;
|
|
194
|
+
constructor(message, answer, container, path, kind, options) {
|
|
195
|
+
super(message, answer, options);
|
|
196
|
+
this.name = 'NotAFileError';
|
|
197
|
+
this.container = container;
|
|
198
|
+
this.path = path;
|
|
199
|
+
this.kind = kind;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/** The engine refused an extraction, and an inspect showed that the directory is on a read-only root filesystem or in a read-only mount. */
|
|
203
|
+
export class ReadOnlyPathError extends DockerEngineError {
|
|
204
|
+
container;
|
|
205
|
+
/** The path in the container. */
|
|
206
|
+
path;
|
|
207
|
+
constructor(message, answer, container, path, options) {
|
|
208
|
+
super(message, answer, options);
|
|
209
|
+
this.name = 'ReadOnlyPathError';
|
|
210
|
+
this.container = container;
|
|
211
|
+
this.path = path;
|
|
62
212
|
}
|
|
63
213
|
}
|
|
64
214
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,yGAAyG;AACzG,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAC3C,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAsB;QAC9C,KAAK,CAAC,mCAAmC,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,mDAAmD;AACnD,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAC1C,IAAI,CAAS;IAEtB,YAAY,IAAY;QACtB,KAAK,CACH,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4DAA4D,CAC7F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,mDAAmD;AACnD,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAC1C,OAAO,CAAS;IAEzB,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CACH,+CAA+C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EACzE,OAAO,CACR,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,oGAAoG;AACpG,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IAC5C,IAAI,CAAS;IACtB,6CAA6C;IACpC,aAAa,CAAS;IAC/B,wDAAwD;IAC/C,cAAc,CAAS;IAEhC,YAAY,IAAY,EAAE,aAAqB,EAAE,cAAsB;QACrE,KAAK,CACH,iBAAiB,IAAI,oBAAoB,aAAa,2BAA2B,cAAc,4BAA4B,CAC5H,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/images.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type * as EngineApi from './engine-api.ts';
|
|
2
|
+
import { type EngineClient } from './engine-client.ts';
|
|
3
|
+
import type { CancelOptions, Filters } from './options.ts';
|
|
4
|
+
/** The images of one engine. Images have no owner, so no handle removes one on disposal. */
|
|
5
|
+
export declare class Images {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(client: EngineClient);
|
|
8
|
+
/** undefined for 404. */
|
|
9
|
+
inspect(reference: string, options?: CancelOptions): Promise<EngineApi.ImageInspect | undefined>;
|
|
10
|
+
/** Pulls the image and reads the progress of the engine to its end. */
|
|
11
|
+
pull(reference: string, options?: CancelOptions & {
|
|
12
|
+
platform?: string;
|
|
13
|
+
auth?: EngineApi.AuthConfig;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
list(options?: CancelOptions & {
|
|
16
|
+
all?: boolean;
|
|
17
|
+
filters?: Filters;
|
|
18
|
+
}): Promise<EngineApi.ImageSummary[]>;
|
|
19
|
+
/** Gives the image a second name, such as a registry name before a push. target: 'repository:tag'; with no tag, the tag is 'latest', as the Docker CLI does. */
|
|
20
|
+
tag(reference: string, target: string, options?: CancelOptions): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Pushes the image and reads the progress of the engine to its end. The
|
|
23
|
+
* engine answers a push of an image that it does not have with 200, and
|
|
24
|
+
* then reports the error in the progress: an inspect of the reference tells
|
|
25
|
+
* a missing image from another error.
|
|
26
|
+
*/
|
|
27
|
+
push(reference: string, options: CancelOptions & {
|
|
28
|
+
auth: EngineApi.AuthConfig;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
/** A tar archive of the images, as `docker save` writes it. */
|
|
31
|
+
save(references: string[], options?: CancelOptions): Promise<ReadableStream<Uint8Array>>;
|
|
32
|
+
/** Loads the images of a tar archive and reads the progress of the engine to its end. */
|
|
33
|
+
load(archive: ReadableStream<Uint8Array> | Uint8Array, options?: CancelOptions): Promise<void>;
|
|
34
|
+
/** Resolves for 404. A 409 is an ImageInUseError: a container uses the image, or, by ID, several names refer to it. */
|
|
35
|
+
remove(reference: string, options?: CancelOptions & {
|
|
36
|
+
force?: boolean;
|
|
37
|
+
noprune?: boolean;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAM7E,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA+B3D,4FAA4F;AAC5F,qBAAa,MAAM;;gBAGL,MAAM,EAAE,YAAY;IAIhC,yBAAyB;IACnB,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC;IAS9C,uEAAuE;IACjE,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAa,GAAG;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC;KACxB,GACL,OAAO,CAAC,IAAI,CAAC;IAkChB,IAAI,CACF,OAAO,GAAE,aAAa,GAAG;QAAE,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GACjE,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IAOpC,gKAAgK;IAC1J,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;OAKG;IACG,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC,UAAU,CAAA;KAAE,GACtD,OAAO,CAAC,IAAI,CAAC;IAgChB,+DAA+D;IACzD,IAAI,CACR,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAQtC,yFAAyF;IACnF,IAAI,CACR,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,EAChD,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAUhB,uHAAuH;IACjH,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAa,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GACnE,OAAO,CAAC,IAAI,CAAC;CAgBjB"}
|
package/dist/images.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { isSuccess, parseBody } from "./engine-client.js";
|
|
3
|
+
import { DockerEngineError, ImageInUseError, ImageNotFoundError, } from "./errors.js";
|
|
4
|
+
import { readProgress } from "./progress.js";
|
|
5
|
+
/**
|
|
6
|
+
* The repository and the tag of a reference. A reference with a digest has no
|
|
7
|
+
* tag, and its repository is the whole reference.
|
|
8
|
+
*/
|
|
9
|
+
function splitReference(reference) {
|
|
10
|
+
const colon = reference.lastIndexOf(':');
|
|
11
|
+
if (reference.includes('@') || colon <= reference.lastIndexOf('/')) {
|
|
12
|
+
return { repository: reference, tag: undefined };
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
repository: reference.slice(0, colon),
|
|
16
|
+
tag: reference.slice(colon + 1),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A reference with no tag and no digest pulls each tag of the repository, so
|
|
21
|
+
* the pull names the tag 'latest', as the Docker CLI does.
|
|
22
|
+
*/
|
|
23
|
+
function pullQuery(reference, platform) {
|
|
24
|
+
const bare = !reference.includes('@') && splitReference(reference).tag === undefined;
|
|
25
|
+
return { fromImage: reference, tag: bare ? 'latest' : undefined, platform };
|
|
26
|
+
}
|
|
27
|
+
/** The images of one engine. Images have no owner, so no handle removes one on disposal. */
|
|
28
|
+
export class Images {
|
|
29
|
+
#client;
|
|
30
|
+
constructor(client) {
|
|
31
|
+
this.#client = client;
|
|
32
|
+
}
|
|
33
|
+
/** undefined for 404. */
|
|
34
|
+
async inspect(reference, options = {}) {
|
|
35
|
+
const method = 'GET';
|
|
36
|
+
const path = `/images/${encodeURIComponent(reference)}/json`;
|
|
37
|
+
const response = await this.#client.exchange(method, path, options);
|
|
38
|
+
if (response.status === 404)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (!isSuccess(response))
|
|
41
|
+
throw this.#client.error(response, method, path);
|
|
42
|
+
return parseBody(response);
|
|
43
|
+
}
|
|
44
|
+
/** Pulls the image and reads the progress of the engine to its end. */
|
|
45
|
+
async pull(reference, options = {}) {
|
|
46
|
+
const { platform, auth, signal } = options;
|
|
47
|
+
const method = 'POST';
|
|
48
|
+
const path = '/images/create';
|
|
49
|
+
const progress = await this.#client
|
|
50
|
+
.stream(method, path, {
|
|
51
|
+
query: pullQuery(reference, platform),
|
|
52
|
+
// The same X-Registry-Auth encoding is in push(): mirror a fix in both.
|
|
53
|
+
// Moby decodes it with the padded URLEncoding of Go, so the '=' stays.
|
|
54
|
+
headers: auth === undefined
|
|
55
|
+
? undefined
|
|
56
|
+
: {
|
|
57
|
+
'X-Registry-Auth': Buffer.from(JSON.stringify(auth))
|
|
58
|
+
.toString('base64')
|
|
59
|
+
.replaceAll('+', '-')
|
|
60
|
+
.replaceAll('/', '_'),
|
|
61
|
+
},
|
|
62
|
+
signal,
|
|
63
|
+
})
|
|
64
|
+
.catch((error) => {
|
|
65
|
+
if (error instanceof DockerEngineError && error.status === 404) {
|
|
66
|
+
throw new ImageNotFoundError(error.message, { status: 404, request: { method, path } }, reference, { cause: error });
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
});
|
|
70
|
+
await readProgress(progress, { method, path });
|
|
71
|
+
}
|
|
72
|
+
list(options = {}) {
|
|
73
|
+
return this.#client.json('GET', '/images/json', {
|
|
74
|
+
query: { all: options.all, filters: options.filters },
|
|
75
|
+
signal: options.signal,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** Gives the image a second name, such as a registry name before a push. target: 'repository:tag'; with no tag, the tag is 'latest', as the Docker CLI does. */
|
|
79
|
+
async tag(reference, target, options = {}) {
|
|
80
|
+
const method = 'POST';
|
|
81
|
+
const path = `/images/${encodeURIComponent(reference)}/tag`;
|
|
82
|
+
const { repository, tag = 'latest' } = splitReference(target);
|
|
83
|
+
const response = await this.#client.exchange(method, path, {
|
|
84
|
+
query: { repo: repository, tag },
|
|
85
|
+
signal: options.signal,
|
|
86
|
+
});
|
|
87
|
+
if (isSuccess(response))
|
|
88
|
+
return;
|
|
89
|
+
const error = this.#client.error(response, method, path);
|
|
90
|
+
if (response.status === 404) {
|
|
91
|
+
throw new ImageNotFoundError(error.message, error, reference, {
|
|
92
|
+
cause: error,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Pushes the image and reads the progress of the engine to its end. The
|
|
99
|
+
* engine answers a push of an image that it does not have with 200, and
|
|
100
|
+
* then reports the error in the progress: an inspect of the reference tells
|
|
101
|
+
* a missing image from another error.
|
|
102
|
+
*/
|
|
103
|
+
async push(reference, options) {
|
|
104
|
+
const { auth, signal } = options;
|
|
105
|
+
const { repository, tag = 'latest' } = splitReference(reference);
|
|
106
|
+
const method = 'POST';
|
|
107
|
+
const path = `/images/${encodeURIComponent(repository)}/push`;
|
|
108
|
+
try {
|
|
109
|
+
const progress = await this.#client.stream(method, path, {
|
|
110
|
+
query: { tag },
|
|
111
|
+
// The same X-Registry-Auth encoding is in pull(): mirror a fix in both.
|
|
112
|
+
// Moby decodes it with the padded URLEncoding of Go, so the '=' stays.
|
|
113
|
+
headers: {
|
|
114
|
+
'X-Registry-Auth': Buffer.from(JSON.stringify(auth))
|
|
115
|
+
.toString('base64')
|
|
116
|
+
.replaceAll('+', '-')
|
|
117
|
+
.replaceAll('/', '_'),
|
|
118
|
+
},
|
|
119
|
+
signal,
|
|
120
|
+
});
|
|
121
|
+
await readProgress(progress, { method, path });
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (!(error instanceof DockerEngineError))
|
|
125
|
+
throw error;
|
|
126
|
+
const missing = error.status === 404 ||
|
|
127
|
+
(error.status === undefined &&
|
|
128
|
+
(await this.inspect(reference, options)) === undefined);
|
|
129
|
+
if (!missing)
|
|
130
|
+
throw error;
|
|
131
|
+
throw new ImageNotFoundError(error.message, error, reference, {
|
|
132
|
+
cause: error,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** A tar archive of the images, as `docker save` writes it. */
|
|
137
|
+
async save(references, options = {}) {
|
|
138
|
+
const response = await this.#client.stream('GET', '/images/get', {
|
|
139
|
+
query: { names: references },
|
|
140
|
+
signal: options.signal,
|
|
141
|
+
});
|
|
142
|
+
return Readable.toWeb(response);
|
|
143
|
+
}
|
|
144
|
+
/** Loads the images of a tar archive and reads the progress of the engine to its end. */
|
|
145
|
+
async load(archive, options = {}) {
|
|
146
|
+
const method = 'POST';
|
|
147
|
+
const path = '/images/load';
|
|
148
|
+
const progress = await this.#client.stream(method, path, {
|
|
149
|
+
content: { type: 'application/x-tar', data: archive },
|
|
150
|
+
signal: options.signal,
|
|
151
|
+
});
|
|
152
|
+
await readProgress(progress, { method, path });
|
|
153
|
+
}
|
|
154
|
+
/** Resolves for 404. A 409 is an ImageInUseError: a container uses the image, or, by ID, several names refer to it. */
|
|
155
|
+
async remove(reference, options = {}) {
|
|
156
|
+
const method = 'DELETE';
|
|
157
|
+
const path = `/images/${encodeURIComponent(reference)}`;
|
|
158
|
+
const response = await this.#client.exchange(method, path, {
|
|
159
|
+
query: { force: options.force, noprune: options.noprune },
|
|
160
|
+
signal: options.signal,
|
|
161
|
+
});
|
|
162
|
+
if (isSuccess(response) || response.status === 404)
|
|
163
|
+
return;
|
|
164
|
+
const error = this.#client.error(response, method, path);
|
|
165
|
+
if (response.status === 409) {
|
|
166
|
+
throw new ImageInUseError(error.message, error, reference, {
|
|
167
|
+
cause: error,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
export type { ContainerProcess } from './container-process.ts';
|
|
2
|
+
export { Container, type ContainerFile, type Containers, type Created, type LogQuery, OwnedContainer, } from './containers.ts';
|
|
1
3
|
export type { DockerContext, Environment } from './context-store.ts';
|
|
2
4
|
export { type ConnectOptions, Docker } from './docker.ts';
|
|
3
|
-
export { ConnectionFailedError, ContextNotFoundError, DockerEngineError, DockerError, UnsupportedEngineError, UnsupportedHostError, } from './errors.ts';
|
|
5
|
+
export { BindSourceNotFoundError, ConnectionFailedError, ContainerNotFoundError, ContainerNotRunningError, ContainerRunningError, ContextNotFoundError, DockerEngineError, DockerError, ImageInUseError, ImageNotFoundError, NameConflictError, NetworkInUseError, NetworkNotFoundError, NotAFileError, PathNotFoundError, ReadOnlyPathError, UnsupportedEngineError, UnsupportedHostError, VolumeInUseError, VolumeNotFoundError, } from './errors.ts';
|
|
6
|
+
export type { Images } from './images.ts';
|
|
7
|
+
export { Network, type Networks, OwnedNetwork } from './networks.ts';
|
|
8
|
+
export type { OutputChunk } from './multiplexed-stream.ts';
|
|
4
9
|
export type { CancelOptions, Filters } from './options.ts';
|
|
10
|
+
export type { ExecResult, Output } from './output.ts';
|
|
11
|
+
export { OwnedVolume, Volume, type Volumes } from './volumes.ts';
|
|
5
12
|
/** The bodies and answers of the Engine API, with the names of its reference. Types only. */
|
|
6
13
|
export type * as EngineApi from './engine-api.ts';
|
|
7
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAEjE,6FAA6F;AAC7F,YAAY,KAAK,SAAS,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { Container, OwnedContainer, } from "./containers.js";
|
|
1
2
|
export { Docker } from "./docker.js";
|
|
2
|
-
export { ConnectionFailedError, ContextNotFoundError, DockerEngineError, DockerError, UnsupportedEngineError, UnsupportedHostError, } from "./errors.js";
|
|
3
|
+
export { BindSourceNotFoundError, ConnectionFailedError, ContainerNotFoundError, ContainerNotRunningError, ContainerRunningError, ContextNotFoundError, DockerEngineError, DockerError, ImageInUseError, ImageNotFoundError, NameConflictError, NetworkInUseError, NetworkNotFoundError, NotAFileError, PathNotFoundError, ReadOnlyPathError, UnsupportedEngineError, UnsupportedHostError, VolumeInUseError, VolumeNotFoundError, } from "./errors.js";
|
|
4
|
+
export { Network, OwnedNetwork } from "./networks.js";
|
|
5
|
+
export { OwnedVolume, Volume } from "./volumes.js";
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAKT,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAuB,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,OAAO,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAIrE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** One piece of output of a container process: its stream and its bytes. */
|
|
2
|
+
export interface OutputChunk {
|
|
3
|
+
stream: 'stdout' | 'stderr';
|
|
4
|
+
data: Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The output chunks of a multiplexed stream or of a raw stream, as the
|
|
8
|
+
* Content-Type of the answer names it.
|
|
9
|
+
*/
|
|
10
|
+
export declare function outputChunks(bytes: AsyncIterable<Uint8Array>, contentType: string): AsyncGenerator<OutputChunk>;
|
|
11
|
+
//# sourceMappingURL=multiplexed-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiplexed-stream.d.ts","sourceRoot":"","sources":["../src/multiplexed-stream.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,UAAU,CAAC;CAClB;AA6ED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,WAAW,CAAC,CAG7B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { DockerError } from "./errors.js";
|
|
2
|
+
/** The media type of the output of a container that has no TTY. */
|
|
3
|
+
const MULTIPLEXED_STREAM = 'application/vnd.docker.multiplexed-stream';
|
|
4
|
+
/** The length of the header of a frame: the stream, three zero bytes, and the length, big-endian. */
|
|
5
|
+
const HEADER_LENGTH = 8;
|
|
6
|
+
/**
|
|
7
|
+
* The stream of a frame. The engine marks the input of a TTY as stdin (0),
|
|
8
|
+
* and stdcopy of Moby writes it to standard output; 3 is an error of the
|
|
9
|
+
* engine in the stream.
|
|
10
|
+
*/
|
|
11
|
+
function streamOf(marker) {
|
|
12
|
+
if (marker === 0 || marker === 1)
|
|
13
|
+
return 'stdout';
|
|
14
|
+
if (marker === 2)
|
|
15
|
+
return 'stderr';
|
|
16
|
+
return 'error';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The frames of a multiplexed stream as output chunks. A frame can span chunk
|
|
20
|
+
* borders: the part of a frame that a chunk has comes as its own output chunk,
|
|
21
|
+
* so a large frame never waits in memory. The bytes are read at the pace of
|
|
22
|
+
* the caller.
|
|
23
|
+
*/
|
|
24
|
+
async function* frames(bytes) {
|
|
25
|
+
let header = new Uint8Array(0);
|
|
26
|
+
let stream = 'stdout';
|
|
27
|
+
let remaining = 0;
|
|
28
|
+
let error = '';
|
|
29
|
+
const decoder = new TextDecoder();
|
|
30
|
+
for await (const chunk of bytes) {
|
|
31
|
+
let offset = 0;
|
|
32
|
+
while (offset < chunk.byteLength) {
|
|
33
|
+
if (remaining === 0) {
|
|
34
|
+
const needed = HEADER_LENGTH - header.byteLength;
|
|
35
|
+
const part = chunk.subarray(offset, offset + needed);
|
|
36
|
+
header = concat(header, part);
|
|
37
|
+
offset += part.byteLength;
|
|
38
|
+
if (header.byteLength < HEADER_LENGTH)
|
|
39
|
+
break;
|
|
40
|
+
const view = new DataView(header.buffer, header.byteOffset);
|
|
41
|
+
stream = streamOf(view.getUint8(0));
|
|
42
|
+
remaining = view.getUint32(4);
|
|
43
|
+
header = new Uint8Array(0);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const data = chunk.subarray(offset, offset + remaining);
|
|
47
|
+
offset += data.byteLength;
|
|
48
|
+
remaining -= data.byteLength;
|
|
49
|
+
if (stream === 'error') {
|
|
50
|
+
error += decoder.decode(data, { stream: remaining > 0 });
|
|
51
|
+
if (remaining === 0)
|
|
52
|
+
throw new DockerError(error);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
yield { stream, data };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function concat(left, right) {
|
|
61
|
+
const joined = new Uint8Array(left.byteLength + right.byteLength);
|
|
62
|
+
joined.set(left);
|
|
63
|
+
joined.set(right, left.byteLength);
|
|
64
|
+
return joined;
|
|
65
|
+
}
|
|
66
|
+
/** A raw stream has no frames: each chunk is standard output. */
|
|
67
|
+
async function* raw(bytes) {
|
|
68
|
+
for await (const data of bytes) {
|
|
69
|
+
if (data.byteLength > 0)
|
|
70
|
+
yield { stream: 'stdout', data };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The output chunks of a multiplexed stream or of a raw stream, as the
|
|
75
|
+
* Content-Type of the answer names it.
|
|
76
|
+
*/
|
|
77
|
+
export function outputChunks(bytes, contentType) {
|
|
78
|
+
const mediaType = contentType.split(';')[0]?.trim();
|
|
79
|
+
return mediaType === MULTIPLEXED_STREAM ? frames(bytes) : raw(bytes);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=multiplexed-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiplexed-stream.js","sourceRoot":"","sources":["../src/multiplexed-stream.ts"],"names":[],"mappings":"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"}
|
package/dist/ndjson.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The values of a stream of newline-delimited JSON. A chunk can end inside a
|
|
3
|
+
* line, or inside a UTF-8 character: the line waits for the next chunk. An
|
|
4
|
+
* empty line has no value.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ndjson(chunks: AsyncIterable<Uint8Array>): AsyncGenerator<unknown>;
|
|
7
|
+
//# sourceMappingURL=ndjson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.d.ts","sourceRoot":"","sources":["../src/ndjson.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAuB,MAAM,CAC3B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAChC,cAAc,CAAC,OAAO,CAAC,CAWzB"}
|
package/dist/ndjson.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The values of a stream of newline-delimited JSON. A chunk can end inside a
|
|
3
|
+
* line, or inside a UTF-8 character: the line waits for the next chunk. An
|
|
4
|
+
* empty line has no value.
|
|
5
|
+
*/
|
|
6
|
+
export async function* ndjson(chunks) {
|
|
7
|
+
const decoder = new TextDecoder();
|
|
8
|
+
let rest = '';
|
|
9
|
+
for await (const chunk of chunks) {
|
|
10
|
+
rest += decoder.decode(chunk, { stream: true });
|
|
11
|
+
const lines = rest.split('\n');
|
|
12
|
+
rest = lines.pop() ?? '';
|
|
13
|
+
for (const line of lines)
|
|
14
|
+
if (line.trim())
|
|
15
|
+
yield JSON.parse(line);
|
|
16
|
+
}
|
|
17
|
+
rest += decoder.decode();
|
|
18
|
+
if (rest.trim())
|
|
19
|
+
yield JSON.parse(rest);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ndjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../src/ndjson.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,CAC3B,MAAiC;IAEjC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
|