@salesforce/b2c-tooling-sdk 1.7.0 → 1.8.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/cjs/config/dw-json.d.ts +2 -0
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/mapping.js +5 -0
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/types.d.ts +2 -0
- package/dist/cjs/operations/code/download.d.ts +17 -6
- package/dist/cjs/operations/code/download.js +189 -87
- package/dist/cjs/operations/code/download.js.map +1 -1
- package/dist/cjs/operations/code/index.d.ts +3 -1
- package/dist/cjs/operations/code/index.js +3 -1
- package/dist/cjs/operations/code/index.js.map +1 -1
- package/dist/cjs/operations/code/upload-files.d.ts +47 -0
- package/dist/cjs/operations/code/upload-files.js +116 -0
- package/dist/cjs/operations/code/upload-files.js.map +1 -0
- package/dist/cjs/operations/code/watch.js +18 -92
- package/dist/cjs/operations/code/watch.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +2 -0
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/mapping.js +5 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/types.d.ts +2 -0
- package/dist/esm/operations/code/download.d.ts +17 -6
- package/dist/esm/operations/code/download.js +189 -87
- package/dist/esm/operations/code/download.js.map +1 -1
- package/dist/esm/operations/code/index.d.ts +3 -1
- package/dist/esm/operations/code/index.js +3 -1
- package/dist/esm/operations/code/index.js.map +1 -1
- package/dist/esm/operations/code/upload-files.d.ts +47 -0
- package/dist/esm/operations/code/upload-files.js +116 -0
- package/dist/esm/operations/code/upload-files.js.map +1 -0
- package/dist/esm/operations/code/watch.js +18 -92
- package/dist/esm/operations/code/watch.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,30 +4,13 @@
|
|
|
4
4
|
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
5
|
*/
|
|
6
6
|
import path from 'node:path';
|
|
7
|
-
import fs from 'node:fs';
|
|
8
7
|
import { watch } from 'chokidar';
|
|
9
|
-
import JSZip from 'jszip';
|
|
10
8
|
import { getLogger } from '../../logging/logger.js';
|
|
11
9
|
import { findCartridges } from './cartridges.js';
|
|
10
|
+
import { fileToCartridgePath, uploadFiles } from './upload-files.js';
|
|
12
11
|
import { getActiveCodeVersion } from './versions.js';
|
|
13
|
-
const UNZIP_BODY = new URLSearchParams({ method: 'UNZIP' }).toString();
|
|
14
12
|
/** Default debounce time in ms for batching file uploads */
|
|
15
13
|
const DEFAULT_DEBOUNCE_TIME = parseInt(process.env.SFCC_UPLOAD_DEBOUNCE_TIME ?? '100', 10);
|
|
16
|
-
/**
|
|
17
|
-
* Maps an absolute file path to its cartridge-relative destination.
|
|
18
|
-
*/
|
|
19
|
-
function fileToCartridgePath(absolutePath, cartridges) {
|
|
20
|
-
const cartridge = cartridges.find((c) => absolutePath.startsWith(c.src));
|
|
21
|
-
if (!cartridge) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
const relativePath = absolutePath.substring(cartridge.src.length);
|
|
25
|
-
const destPath = path.join(cartridge.dest, relativePath);
|
|
26
|
-
return {
|
|
27
|
-
src: absolutePath,
|
|
28
|
-
dest: destPath,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
14
|
/**
|
|
32
15
|
* Creates a debounced function that batches calls.
|
|
33
16
|
*/
|
|
@@ -97,8 +80,8 @@ export async function watchCartridges(instance, directory, options = {}) {
|
|
|
97
80
|
for (const c of cartridges) {
|
|
98
81
|
logger.info({ cartridgeName: c.name, path: c.src }, ` ${c.name}`);
|
|
99
82
|
}
|
|
100
|
-
const
|
|
101
|
-
const
|
|
83
|
+
// Re-bind as const so TypeScript knows it's a string inside closures
|
|
84
|
+
const resolvedCodeVersion = codeVersion;
|
|
102
85
|
const cwd = process.cwd();
|
|
103
86
|
// Sets for batching file changes
|
|
104
87
|
const filesToUpload = new Set();
|
|
@@ -123,84 +106,27 @@ export async function watchCartridges(instance, directory, options = {}) {
|
|
|
123
106
|
logger.debug({ waitTime }, 'Rate limiting after recent error, waiting...');
|
|
124
107
|
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
125
108
|
}
|
|
126
|
-
const
|
|
109
|
+
const uploadChanges = Array.from(filesToUpload)
|
|
127
110
|
.map((f) => fileToCartridgePath(f, cartridges))
|
|
128
111
|
.filter((f) => f !== undefined);
|
|
129
|
-
const
|
|
112
|
+
const deleteChanges = Array.from(filesToDelete)
|
|
130
113
|
.map((f) => fileToCartridgePath(f, cartridges))
|
|
131
114
|
.filter((f) => f !== undefined);
|
|
132
115
|
filesToUpload.clear();
|
|
133
116
|
filesToDelete.clear();
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
return true;
|
|
141
|
-
});
|
|
142
|
-
// Upload files
|
|
143
|
-
if (validUploadFiles.length > 0) {
|
|
144
|
-
const uploadPath = `${webdavLocation}/_upload-${Date.now()}.zip`;
|
|
145
|
-
try {
|
|
146
|
-
const zip = new JSZip();
|
|
147
|
-
for (const f of validUploadFiles) {
|
|
148
|
-
try {
|
|
149
|
-
const content = await fs.promises.readFile(f.src);
|
|
150
|
-
zip.file(f.dest, content);
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
logger.warn({ file: f.src, error }, 'Failed to add file to archive');
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
const buffer = await zip.generateAsync({
|
|
157
|
-
type: 'nodebuffer',
|
|
158
|
-
compression: 'DEFLATE',
|
|
159
|
-
compressionOptions: { level: 5 },
|
|
160
|
-
});
|
|
161
|
-
await webdav.put(uploadPath, buffer, 'application/zip');
|
|
162
|
-
logger.debug({ uploadPath }, 'Archive uploaded');
|
|
163
|
-
const response = await webdav.request(uploadPath, {
|
|
164
|
-
method: 'POST',
|
|
165
|
-
body: UNZIP_BODY,
|
|
166
|
-
headers: {
|
|
167
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
168
|
-
},
|
|
169
|
-
});
|
|
170
|
-
if (!response.ok) {
|
|
171
|
-
throw new Error(`Unzip failed: ${response.status}`);
|
|
172
|
-
}
|
|
173
|
-
await webdav.delete(uploadPath);
|
|
174
|
-
logger.debug({ fileCount: validUploadFiles.length, server: instance.config.hostname }, `Uploaded ${validUploadFiles.length} file(s)`);
|
|
175
|
-
options.onUpload?.(validUploadFiles.map((f) => f.dest));
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
lastErrorTime = Date.now();
|
|
179
|
-
// Re-queue so the while loop retries after rate-limit wait
|
|
180
|
-
for (const f of validUploadFiles) {
|
|
181
|
-
filesToUpload.add(f.src);
|
|
182
|
-
}
|
|
183
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
184
|
-
logger.error({ error: err }, `Upload error: ${err.message}`);
|
|
185
|
-
options.onError?.(err);
|
|
186
|
-
}
|
|
117
|
+
try {
|
|
118
|
+
await uploadFiles(instance, resolvedCodeVersion, uploadChanges, deleteChanges, {
|
|
119
|
+
onUpload: options.onUpload,
|
|
120
|
+
onDelete: options.onDelete,
|
|
121
|
+
onError: options.onError,
|
|
122
|
+
});
|
|
187
123
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
for (const f of filesToDeleteFiltered) {
|
|
194
|
-
const deletePath = `${webdavLocation}/${f.dest}`;
|
|
195
|
-
try {
|
|
196
|
-
await webdav.delete(deletePath);
|
|
197
|
-
logger.info({ path: deletePath }, `Deleted: ${deletePath}`);
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
logger.debug({ path: deletePath, error }, `Failed to delete ${deletePath}`);
|
|
201
|
-
}
|
|
124
|
+
catch {
|
|
125
|
+
lastErrorTime = Date.now();
|
|
126
|
+
// Re-queue so the while loop retries after rate-limit wait
|
|
127
|
+
for (const f of uploadChanges) {
|
|
128
|
+
filesToUpload.add(f.src);
|
|
202
129
|
}
|
|
203
|
-
options.onDelete?.(filesToDeleteFiltered.map((f) => f.dest));
|
|
204
130
|
}
|
|
205
131
|
}
|
|
206
132
|
}
|
|
@@ -235,11 +161,11 @@ export async function watchCartridges(instance, directory, options = {}) {
|
|
|
235
161
|
logger.error({ error }, 'Watcher error');
|
|
236
162
|
options.onError?.(error);
|
|
237
163
|
});
|
|
238
|
-
logger.debug({ server: instance.config.hostname, codeVersion }, 'Watching for changes...');
|
|
164
|
+
logger.debug({ server: instance.config.hostname, codeVersion: resolvedCodeVersion }, 'Watching for changes...');
|
|
239
165
|
return {
|
|
240
166
|
watcher,
|
|
241
167
|
cartridges,
|
|
242
|
-
codeVersion,
|
|
168
|
+
codeVersion: resolvedCodeVersion,
|
|
243
169
|
stop: async () => {
|
|
244
170
|
await watcher.close();
|
|
245
171
|
logger.debug('Watcher stopped');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../../src/operations/code/watch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../../src/operations/code/watch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/b2c-tooling-sdk",
|
|
3
3
|
"description": "Core tooling library for Salesforce B2C Commerce CLI",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.8.0",
|
|
5
5
|
"author": "Charles Lavery",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": "SalesforceCommerceCloud/b2c-developer-tooling",
|