@salesforce/source-deploy-retrieve 13.11.0 → 13.12.0-compute.5
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/lib/src/client/index.d.ts +1 -0
- package/lib/src/client/index.js.map +1 -1
- package/lib/src/client/metadataApiDeploy.d.ts +7 -0
- package/lib/src/client/metadataApiDeploy.js +24 -7
- package/lib/src/client/metadataApiDeploy.js.map +1 -1
- package/lib/src/client/metadataApiRetrieve.d.ts +7 -0
- package/lib/src/client/metadataApiRetrieve.js +23 -6
- package/lib/src/client/metadataApiRetrieve.js.map +1 -1
- package/lib/src/client/metadataTransfer.d.ts +3 -0
- package/lib/src/client/metadataTransfer.js +11 -1
- package/lib/src/client/metadataTransfer.js.map +1 -1
- package/lib/src/client/transports/computeAppTransport.d.ts +12 -0
- package/lib/src/client/transports/computeAppTransport.js +176 -0
- package/lib/src/client/transports/computeAppTransport.js.map +1 -0
- package/lib/src/client/transports/computeSourceBundle.d.ts +10 -0
- package/lib/src/client/transports/computeSourceBundle.js +293 -0
- package/lib/src/client/transports/computeSourceBundle.js.map +1 -0
- package/lib/src/client/transports/index.d.ts +2 -0
- package/lib/src/client/transports/index.js +18 -0
- package/lib/src/client/transports/index.js.map +1 -0
- package/lib/src/client/transports/transportCoordinator.d.ts +20 -0
- package/lib/src/client/transports/transportCoordinator.js +82 -0
- package/lib/src/client/transports/transportCoordinator.js.map +1 -0
- package/lib/src/client/transports/transportPipeline.d.ts +55 -0
- package/lib/src/client/transports/transportPipeline.js +189 -0
- package/lib/src/client/transports/transportPipeline.js.map +1 -0
- package/lib/src/client/transports/types.d.ts +45 -0
- package/lib/src/client/transports/types.js +18 -0
- package/lib/src/client/transports/types.js.map +1 -0
- package/lib/src/client/types.d.ts +8 -0
- package/lib/src/collections/componentSet.d.ts +9 -0
- package/lib/src/collections/componentSet.js +130 -1
- package/lib/src/collections/componentSet.js.map +1 -1
- package/lib/src/convert/convertContext/convertContext.js.map +1 -1
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/registry/metadataRegistry.json +24 -1
- package/lib/src/registry/types.d.ts +3 -0
- package/lib/src/registry/types.js +2 -0
- package/lib/src/registry/types.js.map +1 -1
- package/lib/src/resolve/pseudoTypes/agentResolver.js.map +1 -1
- package/lib/src/utils/filePathGenerator.js +1 -3
- package/lib/src/utils/filePathGenerator.js.map +1 -1
- package/package.json +13 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeAppTransport.js","sourceRoot":"","sources":["../../../../src/client/transports/computeAppTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const MAX_COMPRESSED_BYTES: number;
|
|
2
|
+
export type PackagedBundle = {
|
|
3
|
+
buffer: Buffer;
|
|
4
|
+
fileCount: number;
|
|
5
|
+
};
|
|
6
|
+
export type UnpackedBundle = {
|
|
7
|
+
fileCount: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function packageComputeBundle(appDir: string, name: string): Promise<PackagedBundle>;
|
|
10
|
+
export declare function unpackComputeBundle(buffer: Buffer, appDir: string): Promise<UnpackedBundle>;
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026, Salesforce, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.MAX_COMPRESSED_BYTES = void 0;
|
|
52
|
+
exports.packageComputeBundle = packageComputeBundle;
|
|
53
|
+
exports.unpackComputeBundle = unpackComputeBundle;
|
|
54
|
+
const promises_1 = require("node:fs/promises");
|
|
55
|
+
const node_path_1 = require("node:path");
|
|
56
|
+
const node_zlib_1 = require("node:zlib");
|
|
57
|
+
const consumers_1 = require("node:stream/consumers");
|
|
58
|
+
const tarStream = __importStar(require("tar-stream"));
|
|
59
|
+
const core_1 = require("@salesforce/core");
|
|
60
|
+
const forceIgnore_1 = require("../../resolve/forceIgnore");
|
|
61
|
+
const logger = core_1.Logger.childFromRoot('computeSourceBundle');
|
|
62
|
+
// Compute source bundles are app source, not dependency caches or compiled artifacts.
|
|
63
|
+
// Cap the gzip layer and the tar entries retained in memory when unpacking.
|
|
64
|
+
exports.MAX_COMPRESSED_BYTES = 40 * 1024 * 1024;
|
|
65
|
+
const MAX_TAR_BYTES = 64 * 1024 * 1024;
|
|
66
|
+
const MAX_ENTRY_BYTES = 16 * 1024 * 1024;
|
|
67
|
+
const MAX_TOTAL_ENTRY_BYTES = 40 * 1024 * 1024;
|
|
68
|
+
const MAX_ENTRIES = 1000;
|
|
69
|
+
// Upload shape: deployment-bundle.tar.gz containing api-spec.yaml plus a
|
|
70
|
+
// nested source.tar.gz with the app's source files. Downloads return only that
|
|
71
|
+
// source.tar.gz (see unpackComputeBundle).
|
|
72
|
+
async function packageComputeBundle(appDir, name) {
|
|
73
|
+
const apiSpecPath = (0, node_path_1.join)(appDir, 'api-spec.yaml');
|
|
74
|
+
try {
|
|
75
|
+
await (0, promises_1.access)(apiSpecPath);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
throw new core_1.SfError(`ComputeApp '${name}' is missing required api-spec.yaml in ${appDir}`, 'MissingApiSpec');
|
|
79
|
+
}
|
|
80
|
+
const metaFileName = `${name}.computeApp-meta.xml`;
|
|
81
|
+
const excluded = new Set([metaFileName, '.forceignore']);
|
|
82
|
+
// Both files are consumed at build/runtime, so a broad .forceignore must not
|
|
83
|
+
// remove them from the nested source archive.
|
|
84
|
+
const alwaysIncluded = new Set(['api-spec.yaml', 'project.toml']);
|
|
85
|
+
const forceIgnore = forceIgnore_1.ForceIgnore.findAndCreate(appDir);
|
|
86
|
+
const sourceRelativePaths = await listFilesRecursive(appDir, (file) => !excluded.has(file) && (alwaysIncluded.has(file) || forceIgnore.accepts((0, node_path_1.join)(appDir, file))));
|
|
87
|
+
logger.debug('packaging %s: %d files after exclusions/.forceignore', appDir, sourceRelativePaths.length);
|
|
88
|
+
const apiSpec = await (0, promises_1.readFile)(apiSpecPath);
|
|
89
|
+
if (apiSpec.length > MAX_ENTRY_BYTES) {
|
|
90
|
+
throw new Error(`Compute source bundle: api-spec.yaml entry size limit (${MAX_ENTRY_BYTES} bytes) exceeded`);
|
|
91
|
+
}
|
|
92
|
+
let sourceBytes = 0;
|
|
93
|
+
for (const relativePath of sourceRelativePaths) {
|
|
94
|
+
// eslint-disable-next-line no-await-in-loop
|
|
95
|
+
const { size } = await (0, promises_1.lstat)((0, node_path_1.join)(appDir, relativePath));
|
|
96
|
+
if (size > MAX_ENTRY_BYTES) {
|
|
97
|
+
throw new Error(`Compute source bundle: entry size limit (${MAX_ENTRY_BYTES} bytes) exceeded for ${relativePath}`);
|
|
98
|
+
}
|
|
99
|
+
sourceBytes += size;
|
|
100
|
+
if (sourceBytes > MAX_TOTAL_ENTRY_BYTES) {
|
|
101
|
+
throw new Error(`Compute source bundle: total size limit (${MAX_TOTAL_ENTRY_BYTES} bytes) exceeded`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const sourceEntries = await Promise.all(sourceRelativePaths.map(async (relativePath) => ({
|
|
105
|
+
name: relativePath,
|
|
106
|
+
data: await (0, promises_1.readFile)((0, node_path_1.join)(appDir, relativePath)),
|
|
107
|
+
})));
|
|
108
|
+
// The source may change between stat and read; check actual bytes before assembling.
|
|
109
|
+
if (sourceEntries.some(({ data }) => data.length > MAX_ENTRY_BYTES)) {
|
|
110
|
+
throw new Error(`Compute source bundle: entry size limit (${MAX_ENTRY_BYTES} bytes) exceeded`);
|
|
111
|
+
}
|
|
112
|
+
if (sourceEntries.reduce((total, { data }) => total + data.length, 0) > MAX_TOTAL_ENTRY_BYTES) {
|
|
113
|
+
throw new Error(`Compute source bundle: total size limit (${MAX_TOTAL_ENTRY_BYTES} bytes) exceeded`);
|
|
114
|
+
}
|
|
115
|
+
const sourceTarGz = await tarGzip(sourceEntries);
|
|
116
|
+
if (sourceTarGz.length > exports.MAX_COMPRESSED_BYTES) {
|
|
117
|
+
throw new Error(`Compute source bundle: source.tar.gz entry size limit (${exports.MAX_COMPRESSED_BYTES} bytes) exceeded`);
|
|
118
|
+
}
|
|
119
|
+
if (apiSpec.length + sourceTarGz.length > MAX_TOTAL_ENTRY_BYTES) {
|
|
120
|
+
throw new Error(`Compute source bundle: outer total size limit (${MAX_TOTAL_ENTRY_BYTES} bytes) exceeded`);
|
|
121
|
+
}
|
|
122
|
+
const buffer = await tarGzip([
|
|
123
|
+
{ name: 'api-spec.yaml', data: apiSpec },
|
|
124
|
+
{ name: 'source.tar.gz', data: sourceTarGz },
|
|
125
|
+
]);
|
|
126
|
+
if (buffer.length > exports.MAX_COMPRESSED_BYTES) {
|
|
127
|
+
throw new Error(`Compute source bundle: compressed size limit (${exports.MAX_COMPRESSED_BYTES} bytes) exceeded`);
|
|
128
|
+
}
|
|
129
|
+
logger.debug('packaged %s into %d bytes (%d files)', appDir, buffer.length, sourceEntries.length);
|
|
130
|
+
return { buffer, fileCount: sourceEntries.length };
|
|
131
|
+
}
|
|
132
|
+
// Download shape: a flat source.tar.gz of the latest build's source files,
|
|
133
|
+
// which already include api-spec.yaml and project.toml.
|
|
134
|
+
async function unpackComputeBundle(buffer, appDir) {
|
|
135
|
+
const entries = await untarGzip(buffer);
|
|
136
|
+
const names = Object.keys(entries);
|
|
137
|
+
if (names.length === 0) {
|
|
138
|
+
throw new Error('Malformed compute source bundle: archive contains no files');
|
|
139
|
+
}
|
|
140
|
+
const resolvedAppDir = (0, node_path_1.resolve)(appDir);
|
|
141
|
+
const files = Object.entries(entries).map(([relativePath, data]) => {
|
|
142
|
+
const filePath = (0, node_path_1.resolve)(appDir, relativePath);
|
|
143
|
+
// tar-slip guard: reject entries that escape appDir
|
|
144
|
+
if (!filePath.startsWith(resolvedAppDir + node_path_1.sep)) {
|
|
145
|
+
throw new Error(`Malformed compute source bundle: unsafe entry path "${relativePath}"`);
|
|
146
|
+
}
|
|
147
|
+
return { filePath, data };
|
|
148
|
+
});
|
|
149
|
+
// Check every output path before writing so a rejected entry leaves the app directory untouched.
|
|
150
|
+
await rejectSymlinks(resolvedAppDir);
|
|
151
|
+
await Promise.all(files.map(({ filePath }) => rejectSymlinks(filePath)));
|
|
152
|
+
await (0, promises_1.mkdir)(appDir, { recursive: true });
|
|
153
|
+
// Settle every write before reporting a failure so no write is still in flight when the caller sees the error.
|
|
154
|
+
const writes = await Promise.allSettled(files.map(async ({ filePath, data }) => {
|
|
155
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(filePath), { recursive: true });
|
|
156
|
+
await rejectSymlinks(filePath);
|
|
157
|
+
await (0, promises_1.writeFile)(filePath, data);
|
|
158
|
+
}));
|
|
159
|
+
const failed = writes.find((write) => write.status === 'rejected');
|
|
160
|
+
if (failed)
|
|
161
|
+
throw failed.reason;
|
|
162
|
+
return { fileCount: names.length };
|
|
163
|
+
}
|
|
164
|
+
async function rejectSymlinks(filePath) {
|
|
165
|
+
let current = (0, node_path_1.resolve)(filePath);
|
|
166
|
+
const root = (0, node_path_1.parse)(current).root;
|
|
167
|
+
// The filesystem root is trusted; inspect every component beneath it, including
|
|
168
|
+
// ancestors of an already-existing app or output file.
|
|
169
|
+
while (current !== root) {
|
|
170
|
+
try {
|
|
171
|
+
// eslint-disable-next-line no-await-in-loop
|
|
172
|
+
const stat = await (0, promises_1.lstat)(current);
|
|
173
|
+
if (stat.isSymbolicLink()) {
|
|
174
|
+
// macOS exposes /var as a system alias for /private/var. Do not reject
|
|
175
|
+
// ordinary output paths in its temporary directory for that alias.
|
|
176
|
+
// eslint-disable-next-line no-await-in-loop
|
|
177
|
+
if (!(process.platform === 'darwin' && current === '/var' && (await (0, promises_1.realpath)(current)) === '/private/var')) {
|
|
178
|
+
throw new Error(`Malformed compute source bundle: symlink in output path "${current}"`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
if (err.code !== 'ENOENT')
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
current = (0, node_path_1.dirname)(current);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function untarGzip(buffer) {
|
|
190
|
+
return new Promise((resolveEntries, reject) => {
|
|
191
|
+
if (buffer.length > exports.MAX_COMPRESSED_BYTES) {
|
|
192
|
+
reject(new Error(`Malformed compute source bundle: compressed size limit (${exports.MAX_COMPRESSED_BYTES} bytes) exceeded`));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
let decompressed;
|
|
196
|
+
try {
|
|
197
|
+
decompressed = (0, node_zlib_1.gunzipSync)(buffer, { maxOutputLength: MAX_TAR_BYTES });
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
reject(new Error(err.code === 'ERR_BUFFER_TOO_LARGE'
|
|
201
|
+
? `Malformed compute source bundle: decompressed size limit (${MAX_TAR_BYTES} bytes) exceeded`
|
|
202
|
+
: 'Malformed compute source bundle: not a valid gzip archive'));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const entries = {};
|
|
206
|
+
const extract = tarStream.extract();
|
|
207
|
+
let entryCount = 0;
|
|
208
|
+
let totalBytes = 0;
|
|
209
|
+
extract.on('entry', (header, stream, next) => {
|
|
210
|
+
// Archives made by system tar list directories; files below them create those paths when written.
|
|
211
|
+
if (header.type === 'directory') {
|
|
212
|
+
stream.on('end', next);
|
|
213
|
+
stream.resume();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (header.type && header.type !== 'file' && header.type !== 'contiguous-file') {
|
|
217
|
+
reject(new Error(`Malformed compute source bundle: unsupported ${header.type} entry "${header.name}"`));
|
|
218
|
+
extract.destroy();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
entryCount++;
|
|
222
|
+
if (entryCount > MAX_ENTRIES) {
|
|
223
|
+
reject(new Error(`Malformed compute source bundle: entry count limit (${MAX_ENTRIES}) exceeded`));
|
|
224
|
+
extract.destroy();
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if ((header.size && header.size > MAX_ENTRY_BYTES) ||
|
|
228
|
+
(header.size && totalBytes + header.size > MAX_TOTAL_ENTRY_BYTES)) {
|
|
229
|
+
reject(new Error(`Malformed compute source bundle: entry size limit (${MAX_ENTRY_BYTES} bytes) or total size limit (${MAX_TOTAL_ENTRY_BYTES} bytes) exceeded`));
|
|
230
|
+
extract.destroy();
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const chunks = [];
|
|
234
|
+
stream.on('data', (chunk) => {
|
|
235
|
+
totalBytes += chunk.length;
|
|
236
|
+
if (totalBytes > MAX_TOTAL_ENTRY_BYTES) {
|
|
237
|
+
reject(new Error(`Malformed compute source bundle: total size limit (${MAX_TOTAL_ENTRY_BYTES} bytes) exceeded`));
|
|
238
|
+
extract.destroy();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
chunks.push(chunk);
|
|
242
|
+
});
|
|
243
|
+
stream.on('end', () => {
|
|
244
|
+
entries[header.name] = Buffer.concat(chunks);
|
|
245
|
+
next();
|
|
246
|
+
});
|
|
247
|
+
stream.on('error', reject);
|
|
248
|
+
stream.resume();
|
|
249
|
+
});
|
|
250
|
+
extract.on('finish', () => resolveEntries(entries));
|
|
251
|
+
extract.on('error', () => reject(new Error('Malformed compute source bundle: not a valid tar archive')));
|
|
252
|
+
extract.end(decompressed);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async function tarGzip(entries) {
|
|
256
|
+
const pack = tarStream.pack();
|
|
257
|
+
// Pipe BEFORE writing entries to avoid deadlock: pack is a Readable with
|
|
258
|
+
// a 16KB highWaterMark — without a consumer attached, backpressure stalls
|
|
259
|
+
// the entry callbacks once buffered bytes exceed the threshold.
|
|
260
|
+
const gzippedBufferPromise = (0, consumers_1.buffer)(pack.pipe((0, node_zlib_1.createGzip)()));
|
|
261
|
+
await entries.reduce((previous, { name, data }) => previous.then(async () => new Promise((resolveEntry, reject) => {
|
|
262
|
+
pack.entry({ name, size: data.length }, data, (err) => (err ? reject(err) : resolveEntry()));
|
|
263
|
+
})), Promise.resolve());
|
|
264
|
+
pack.finalize();
|
|
265
|
+
return gzippedBufferPromise;
|
|
266
|
+
}
|
|
267
|
+
async function listFilesRecursive(base, accepts) {
|
|
268
|
+
const files = [];
|
|
269
|
+
async function walk(dir) {
|
|
270
|
+
const entries = await (0, promises_1.readdir)(dir, { withFileTypes: true });
|
|
271
|
+
for (const entry of entries) {
|
|
272
|
+
if (entry.name.startsWith('.'))
|
|
273
|
+
continue;
|
|
274
|
+
const full = (0, node_path_1.join)(dir, entry.name);
|
|
275
|
+
if (entry.isDirectory()) {
|
|
276
|
+
// eslint-disable-next-line no-await-in-loop
|
|
277
|
+
await walk(full);
|
|
278
|
+
}
|
|
279
|
+
else if (entry.isFile()) {
|
|
280
|
+
const file = (0, node_path_1.relative)(base, full).split(node_path_1.sep).join('/');
|
|
281
|
+
if (accepts(file)) {
|
|
282
|
+
if (files.length === MAX_ENTRIES) {
|
|
283
|
+
throw new Error(`Compute source bundle: entry count limit (${MAX_ENTRIES}) exceeded`);
|
|
284
|
+
}
|
|
285
|
+
files.push(file);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
await walk(base);
|
|
291
|
+
return files;
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=computeSourceBundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeSourceBundle.js","sourceRoot":"","sources":["../../../../src/client/transports/computeSourceBundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026, Salesforce, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/client/transports/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RequestStatus } from '../types';
|
|
2
|
+
import { DeployResult } from '../metadataApiDeploy';
|
|
3
|
+
import { RetrieveResult } from '../metadataApiRetrieve';
|
|
4
|
+
import { TransportContext } from './types';
|
|
5
|
+
import { TransportGroup, TransportPipeline } from './transportPipeline';
|
|
6
|
+
type TransportOperation = 'deploy' | 'retrieve';
|
|
7
|
+
type TransportResult = DeployResult | RetrieveResult;
|
|
8
|
+
export declare class TransportCoordinator {
|
|
9
|
+
private readonly pipeline;
|
|
10
|
+
private readonly groups;
|
|
11
|
+
private readonly context;
|
|
12
|
+
private readonly operation;
|
|
13
|
+
private beforeMetadataResults;
|
|
14
|
+
private readonly beforeAdded;
|
|
15
|
+
private readonly afterStarted;
|
|
16
|
+
constructor(pipeline: TransportPipeline, groups: TransportGroup[], context: TransportContext, operation: TransportOperation);
|
|
17
|
+
runBeforeMetadata(): Promise<void>;
|
|
18
|
+
processResult(result: TransportResult, status: RequestStatus): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026, Salesforce, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.TransportCoordinator = void 0;
|
|
19
|
+
const componentSet_1 = require("../../collections/componentSet");
|
|
20
|
+
const types_1 = require("../types");
|
|
21
|
+
const metadataApiRetrieve_1 = require("../metadataApiRetrieve");
|
|
22
|
+
class TransportCoordinator {
|
|
23
|
+
pipeline;
|
|
24
|
+
groups;
|
|
25
|
+
context;
|
|
26
|
+
operation;
|
|
27
|
+
beforeMetadataResults = {
|
|
28
|
+
fileResponses: [],
|
|
29
|
+
asyncHandles: [],
|
|
30
|
+
operationResults: [],
|
|
31
|
+
};
|
|
32
|
+
beforeAdded = new WeakSet();
|
|
33
|
+
afterStarted = new WeakSet();
|
|
34
|
+
constructor(pipeline, groups, context, operation) {
|
|
35
|
+
this.pipeline = pipeline;
|
|
36
|
+
this.groups = groups;
|
|
37
|
+
this.context = context;
|
|
38
|
+
this.operation = operation;
|
|
39
|
+
}
|
|
40
|
+
async runBeforeMetadata() {
|
|
41
|
+
const result = await this.pipeline.runBeforeMetadata(this.context, this.groups, this.operation);
|
|
42
|
+
this.beforeMetadataResults = result;
|
|
43
|
+
}
|
|
44
|
+
async processResult(result, status) {
|
|
45
|
+
if (!this.beforeAdded.has(result)) {
|
|
46
|
+
this.beforeAdded.add(result);
|
|
47
|
+
result.addTransportResults(this.beforeMetadataResults.fileResponses, this.beforeMetadataResults.asyncHandles, this.beforeMetadataResults.operationResults);
|
|
48
|
+
}
|
|
49
|
+
if (status !== types_1.RequestStatus.Succeeded)
|
|
50
|
+
return;
|
|
51
|
+
if (this.afterStarted.has(result))
|
|
52
|
+
return;
|
|
53
|
+
this.afterStarted.add(result);
|
|
54
|
+
if (this.operation === 'retrieve' && result instanceof metadataApiRetrieve_1.RetrieveResult) {
|
|
55
|
+
const extracted = result.components.getSourceComponents().toArray();
|
|
56
|
+
const extractedByKey = new Map(extracted.map((component) => [`${component.type.name}#${component.fullName}`, component]));
|
|
57
|
+
for (const group of this.groups) {
|
|
58
|
+
const named = new Set(group.components
|
|
59
|
+
.filter((component) => component.fullName !== componentSet_1.ComponentSet.WILDCARD)
|
|
60
|
+
.map((component) => `${component.type.name}#${component.fullName}`));
|
|
61
|
+
// a wildcard member (`Type:*`) resolves to every component of that type the org returned
|
|
62
|
+
group.components = group.components.flatMap((component) => {
|
|
63
|
+
const key = `${component.type.name}#${component.fullName}`;
|
|
64
|
+
if (component.fullName !== componentSet_1.ComponentSet.WILDCARD)
|
|
65
|
+
return [extractedByKey.get(key) ?? component];
|
|
66
|
+
return extracted.filter((candidate) => {
|
|
67
|
+
const candidateKey = `${candidate.type.name}#${candidate.fullName}`;
|
|
68
|
+
if (candidate.type.name !== component.type.name || named.has(candidateKey))
|
|
69
|
+
return false;
|
|
70
|
+
named.add(candidateKey);
|
|
71
|
+
return true;
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const groups = this.groups.filter((group) => group.components.length > 0);
|
|
77
|
+
const afterMetadataResults = await this.pipeline.runAfterMetadata(this.context, groups, this.operation);
|
|
78
|
+
result.addTransportResults(afterMetadataResults.fileResponses, afterMetadataResults.asyncHandles, afterMetadataResults.operationResults);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.TransportCoordinator = TransportCoordinator;
|
|
82
|
+
//# sourceMappingURL=transportCoordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportCoordinator.js","sourceRoot":"","sources":["../../../../src/client/transports/transportCoordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { DestructiveChangesType } from '../../collections/types';
|
|
2
|
+
import { TransportName } from '../../registry/types';
|
|
3
|
+
import { SourceComponent } from '../../resolve/sourceComponent';
|
|
4
|
+
import { FileResponse } from '../types';
|
|
5
|
+
import { AsyncTransportHandle, TransportContext, TransportOperationResult, TransportProvider } from './types';
|
|
6
|
+
export type TransportGroup = {
|
|
7
|
+
transport: TransportProvider;
|
|
8
|
+
components: SourceComponent[];
|
|
9
|
+
};
|
|
10
|
+
export type GroupedComponents = {
|
|
11
|
+
metadataApi: SourceComponent[];
|
|
12
|
+
transports: TransportGroup[];
|
|
13
|
+
};
|
|
14
|
+
export type TransportPlan = {
|
|
15
|
+
phases: TransportPlanPhase[];
|
|
16
|
+
};
|
|
17
|
+
export type TransportPlanPhase = {
|
|
18
|
+
phase: 'before-metadata' | 'metadata-api' | 'after-metadata';
|
|
19
|
+
label: string;
|
|
20
|
+
endpoint: string;
|
|
21
|
+
components: TransportPlanComponent[];
|
|
22
|
+
};
|
|
23
|
+
export type TransportPlanComponent = {
|
|
24
|
+
fullName: string;
|
|
25
|
+
type: string;
|
|
26
|
+
/** Set when the component is deleted by the metadata API instead of deployed. */
|
|
27
|
+
destructiveChangesType?: DestructiveChangesType;
|
|
28
|
+
};
|
|
29
|
+
export type TransportPipelineResult = {
|
|
30
|
+
fileResponses: FileResponse[];
|
|
31
|
+
asyncHandles: AsyncTransportHandle[];
|
|
32
|
+
operationResults: TransportOperationResult[];
|
|
33
|
+
};
|
|
34
|
+
export type TransportStageEvent = {
|
|
35
|
+
transportName: TransportName;
|
|
36
|
+
label: string;
|
|
37
|
+
operation: 'deploy' | 'retrieve';
|
|
38
|
+
stage: 'start' | 'complete' | 'error';
|
|
39
|
+
componentCount: number;
|
|
40
|
+
componentNames: string[];
|
|
41
|
+
errorMessage?: string;
|
|
42
|
+
};
|
|
43
|
+
export declare class TransportPipeline {
|
|
44
|
+
private readonly transports;
|
|
45
|
+
private readonly logger;
|
|
46
|
+
constructor(transports?: TransportProvider[]);
|
|
47
|
+
static withBuiltinTransports(): TransportPipeline;
|
|
48
|
+
groupByTransport(components: SourceComponent[]): GroupedComponents;
|
|
49
|
+
explain(components: SourceComponent[], operation?: 'deploy' | 'retrieve'): TransportPlan;
|
|
50
|
+
runBeforeMetadata(context: TransportContext, groups: TransportGroup[], operation?: 'deploy' | 'retrieve'): Promise<TransportPipelineResult>;
|
|
51
|
+
runAfterMetadata(context: TransportContext, groups: TransportGroup[], operation?: 'deploy' | 'retrieve'): Promise<TransportPipelineResult>;
|
|
52
|
+
hasTransports(components: SourceComponent[]): boolean;
|
|
53
|
+
private findTransportFor;
|
|
54
|
+
private runTransportGroups;
|
|
55
|
+
}
|