@sanity/export 2.21.10-shopify.5 → 2.21.12-purple-unicorn.1302

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/jest.config.js CHANGED
@@ -1,6 +1,7 @@
1
- const createConfig = require('../../../createJestConfig')
1
+ const {createJestConfig} = require('../../../test/config')
2
2
 
3
- module.exports = createConfig({
3
+ /** @type {import('@jest/types').Config.InitialOptions} */
4
+ module.exports = createJestConfig({
4
5
  displayName: require('./package.json').name,
5
6
  testEnvironment: 'node',
6
7
  })
@@ -1,105 +1,64 @@
1
1
  "use strict";
2
2
 
3
- var _excluded = ["asset"];
4
-
5
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
-
7
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
-
9
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
-
11
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
12
-
13
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
14
-
15
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
-
17
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
18
-
19
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
20
-
21
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
22
-
23
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
24
-
25
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
26
-
27
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
28
-
29
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
30
4
 
31
- var path = require('path');
5
+ const path = require('path');
32
6
 
33
- var crypto = require('crypto');
7
+ const crypto = require('crypto');
34
8
 
35
- var _require = require('url'),
36
- parseUrl = _require.parse,
37
- formatUrl = _require.format;
9
+ const {
10
+ parse: parseUrl,
11
+ format: formatUrl
12
+ } = require('url');
38
13
 
39
- var fse = require('fs-extra');
14
+ const fse = require('fs-extra');
40
15
 
41
- var miss = require('mississippi');
16
+ const miss = require('mississippi');
42
17
 
43
- var PQueue = require('p-queue');
18
+ const PQueue = require('p-queue');
44
19
 
45
- var _require2 = require('lodash'),
46
- omit = _require2.omit,
47
- noop = _require2.noop;
20
+ const {
21
+ omit,
22
+ noop
23
+ } = require('lodash');
48
24
 
49
- var pkg = require('../package.json');
25
+ const pkg = require('../package.json');
50
26
 
51
- var requestStream = require('./requestStream');
27
+ const requestStream = require('./requestStream');
52
28
 
53
- var debug = require('./debug');
29
+ const debug = require('./debug');
54
30
 
55
- var EXCLUDE_PROPS = ['_id', '_type', 'assetId', 'extension', 'mimeType', 'path', 'url'];
56
- var ACTION_REMOVE = 'remove';
57
- var ACTION_REWRITE = 'rewrite';
58
- var ASSET_DOWNLOAD_CONCURRENCY = 8;
31
+ const EXCLUDE_PROPS = ['_id', '_type', 'assetId', 'extension', 'mimeType', 'path', 'url'];
32
+ const ACTION_REMOVE = 'remove';
33
+ const ACTION_REWRITE = 'rewrite';
34
+ const ASSET_DOWNLOAD_CONCURRENCY = 8;
59
35
 
60
36
  class AssetHandler {
61
37
  constructor(options) {
62
- var _this = this;
63
-
64
- _defineProperty(this, "rewriteAssets", miss.through.obj( /*#__PURE__*/function () {
65
- var _ref = _asyncToGenerator(function* (doc, enc, callback) {
66
- if (['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type)) {
67
- var type = doc._type === 'sanity.imageAsset' ? 'image' : 'file';
68
- var filePath = "".concat(type, "s/").concat(generateFilename(doc._id));
69
-
70
- _this.assetsSeen.set(doc._id, type);
71
-
72
- _this.queueAssetDownload(doc, filePath, type);
73
-
74
- callback();
75
- return;
76
- }
77
-
78
- callback(null, _this.findAndModify(doc, ACTION_REWRITE));
79
- });
80
-
81
- return function (_x, _x2, _x3) {
82
- return _ref.apply(this, arguments);
83
- };
84
- }()));
38
+ _defineProperty(this, "rewriteAssets", miss.through.obj(async (doc, enc, callback) => {
39
+ if (['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type)) {
40
+ const type = doc._type === 'sanity.imageAsset' ? 'image' : 'file';
41
+ const filePath = "".concat(type, "s/").concat(generateFilename(doc._id));
42
+ this.assetsSeen.set(doc._id, type);
43
+ this.queueAssetDownload(doc, filePath, type);
44
+ callback();
45
+ return;
46
+ }
85
47
 
86
- _defineProperty(this, "stripAssets", miss.through.obj( /*#__PURE__*/function () {
87
- var _ref2 = _asyncToGenerator(function* (doc, enc, callback) {
88
- if (['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type)) {
89
- callback();
90
- return;
91
- }
48
+ callback(null, this.findAndModify(doc, ACTION_REWRITE));
49
+ }));
92
50
 
93
- callback(null, _this.findAndModify(doc, ACTION_REMOVE));
94
- });
51
+ _defineProperty(this, "stripAssets", miss.through.obj(async (doc, enc, callback) => {
52
+ if (['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type)) {
53
+ callback();
54
+ return;
55
+ }
95
56
 
96
- return function (_x4, _x5, _x6) {
97
- return _ref2.apply(this, arguments);
98
- };
99
- }()));
57
+ callback(null, this.findAndModify(doc, ACTION_REMOVE));
58
+ }));
100
59
 
101
60
  _defineProperty(this, "skipAssets", miss.through.obj((doc, enc, callback) => {
102
- var isAsset = ['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type);
61
+ const isAsset = ['sanity.imageAsset', 'sanity.fileAsset'].includes(doc._type);
103
62
 
104
63
  if (isAsset) {
105
64
  callback();
@@ -113,7 +72,7 @@ class AssetHandler {
113
72
 
114
73
  _defineProperty(this, "findAndModify", (item, action) => {
115
74
  if (Array.isArray(item)) {
116
- var children = item.map(child => this.findAndModify(child, action));
75
+ const children = item.map(child => this.findAndModify(child, action));
117
76
  return children.filter(Boolean);
118
77
  }
119
78
 
@@ -121,30 +80,32 @@ class AssetHandler {
121
80
  return item;
122
81
  }
123
82
 
124
- var isAsset = isAssetField(item);
83
+ const isAsset = isAssetField(item);
125
84
 
126
85
  if (isAsset && action === ACTION_REMOVE) {
127
86
  return undefined;
128
87
  }
129
88
 
130
89
  if (isAsset && action === ACTION_REWRITE) {
131
- var asset = item.asset,
132
- other = _objectWithoutProperties(item, _excluded);
133
-
134
- var assetId = asset._ref;
135
- var assetType = getAssetType(item);
136
- var filePath = "".concat(assetType, "s/").concat(generateFilename(assetId));
137
- return _objectSpread({
138
- _sanityAsset: "".concat(assetType, "@file://./").concat(filePath)
139
- }, this.findAndModify(other, action));
90
+ const {
91
+ asset,
92
+ ...other
93
+ } = item;
94
+ const assetId = asset._ref;
95
+ const assetType = getAssetType(item);
96
+ const filePath = "".concat(assetType, "s/").concat(generateFilename(assetId));
97
+ return {
98
+ _sanityAsset: "".concat(assetType, "@file://./").concat(filePath),
99
+ ...this.findAndModify(other, action)
100
+ };
140
101
  }
141
102
 
142
- var newItem = {};
143
- var keys = Object.keys(item);
103
+ const newItem = {};
104
+ const keys = Object.keys(item);
144
105
 
145
- for (var i = 0; i < keys.length; i++) {
146
- var key = keys[i];
147
- var value = item[key];
106
+ for (let i = 0; i < keys.length; i++) {
107
+ const key = keys[i];
108
+ const value = item[key];
148
109
  newItem[key] = this.findAndModify(value, action);
149
110
 
150
111
  if (typeof newItem[key] === 'undefined') {
@@ -155,7 +116,7 @@ class AssetHandler {
155
116
  return newItem;
156
117
  });
157
118
 
158
- var concurrency = options.concurrency || ASSET_DOWNLOAD_CONCURRENCY;
119
+ const concurrency = options.concurrency || ASSET_DOWNLOAD_CONCURRENCY;
159
120
  debug('Using asset download concurrency of %d', concurrency);
160
121
  this.client = options.client;
161
122
  this.tmpDir = options.tmpDir;
@@ -222,18 +183,18 @@ class AssetHandler {
222
183
  }
223
184
 
224
185
  getAssetRequestOptions(assetDoc) {
225
- var token = this.client.config().token;
226
- var headers = {
186
+ const token = this.client.config().token;
187
+ const headers = {
227
188
  'User-Agent': "".concat(pkg.name, "@").concat(pkg.version)
228
189
  };
229
- var isImage = assetDoc._type === 'sanity.imageAsset';
230
- var url = parseUrl(assetDoc.url, true);
190
+ const isImage = assetDoc._type === 'sanity.imageAsset';
191
+ const url = parseUrl(assetDoc.url, true);
231
192
 
232
193
  if (isImage && ['cdn.sanity.io', 'cdn.sanity.work'].includes(url.hostname)) {
233
194
  headers.Authorization = "Bearer ".concat(token);
234
- url.query = _objectSpread(_objectSpread({}, url.query || {}), {}, {
195
+ url.query = { ...(url.query || {}),
235
196
  dlRaw: 'true'
236
- });
197
+ };
237
198
  }
238
199
 
239
200
  return {
@@ -242,96 +203,81 @@ class AssetHandler {
242
203
  };
243
204
  }
244
205
 
245
- downloadAsset(assetDoc, dstPath) {
246
- var _arguments = arguments,
247
- _this2 = this;
248
-
249
- return _asyncToGenerator(function* () {
250
- var attemptNum = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : 0;
251
- var url = assetDoc.url;
252
-
253
- var options = _this2.getAssetRequestOptions(assetDoc);
254
-
255
- var stream;
256
-
257
- try {
258
- stream = yield requestStream(options);
259
- } catch (err) {
260
- _this2.reject(err);
261
-
262
- return false;
263
- }
264
-
265
- if (stream.statusCode !== 200) {
266
- _this2.queue.clear();
267
-
268
- var err = yield tryGetErrorFromStream(stream);
269
- var errMsg = "Referenced asset URL \"".concat(url, "\" returned HTTP ").concat(stream.statusCode);
270
-
271
- if (err) {
272
- errMsg = "".concat(errMsg, ":\n\n").concat(err);
273
- }
274
-
275
- _this2.reject(new Error(errMsg));
276
-
277
- return false;
278
- }
279
-
280
- _this2.maybeCreateAssetDirs();
281
-
282
- debug('Asset stream ready, writing to filesystem at %s', dstPath);
283
- var tmpPath = path.join(_this2.tmpDir, dstPath);
284
-
285
- var _yield$writeHashedStr = yield writeHashedStream(tmpPath, stream),
286
- sha1 = _yield$writeHashedStr.sha1,
287
- md5 = _yield$writeHashedStr.md5,
288
- size = _yield$writeHashedStr.size; // Verify it against our downloaded stream to make sure we have the same copy
289
-
206
+ async downloadAsset(assetDoc, dstPath) {
207
+ let attemptNum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
208
+ const {
209
+ url
210
+ } = assetDoc;
211
+ const options = this.getAssetRequestOptions(assetDoc);
212
+ let stream;
213
+
214
+ try {
215
+ stream = await requestStream(options);
216
+ } catch (err) {
217
+ this.reject(err);
218
+ return false;
219
+ }
290
220
 
291
- var contentLength = stream.headers['content-length'];
292
- var remoteSha1 = stream.headers['x-sanity-sha1'];
293
- var remoteMd5 = stream.headers['x-sanity-md5'];
294
- var hasHash = Boolean(remoteSha1 || remoteMd5);
295
- var method = md5 ? 'md5' : 'sha1';
296
- var differs = false;
221
+ if (stream.statusCode !== 200) {
222
+ this.queue.clear();
223
+ const err = await tryGetErrorFromStream(stream);
224
+ let errMsg = "Referenced asset URL \"".concat(url, "\" returned HTTP ").concat(stream.statusCode);
297
225
 
298
- if (remoteMd5 && md5) {
299
- differs = remoteMd5 !== md5;
300
- } else if (remoteSha1 && sha1) {
301
- differs = remoteSha1 !== sha1;
226
+ if (err) {
227
+ errMsg = "".concat(errMsg, ":\n\n").concat(err);
302
228
  }
303
229
 
304
- if (differs && attemptNum < 3) {
305
- debug('%s does not match downloaded asset, retrying (#%d) [%s]', method, attemptNum + 1, url);
306
- return _this2.downloadAsset(assetDoc, dstPath, attemptNum + 1);
307
- } else if (differs) {
308
- var details = [hasHash && (method === 'md5' ? "md5 should be ".concat(remoteMd5, ", got ").concat(md5) : "sha1 should be ".concat(remoteSha1, ", got ").concat(sha1)), contentLength && parseInt(contentLength, 10) !== size && "Asset should be ".concat(contentLength, " bytes, got ").concat(size), "Did not succeed after ".concat(attemptNum, " attempts.")];
309
- var detailsString = "Details:\n - ".concat(details.filter(Boolean).join('\n - '));
310
- yield fse.unlink(tmpPath);
311
-
312
- _this2.queue.clear();
313
-
314
- var error = new Error("Failed to download asset at ".concat(assetDoc.url, ", giving up. ").concat(detailsString));
315
-
316
- _this2.reject(error);
230
+ this.reject(new Error(errMsg));
231
+ return false;
232
+ }
317
233
 
318
- return false;
319
- }
234
+ this.maybeCreateAssetDirs();
235
+ debug('Asset stream ready, writing to filesystem at %s', dstPath);
236
+ const tmpPath = path.join(this.tmpDir, dstPath);
237
+ const {
238
+ sha1,
239
+ md5,
240
+ size
241
+ } = await writeHashedStream(tmpPath, stream); // Verify it against our downloaded stream to make sure we have the same copy
242
+
243
+ const contentLength = stream.headers['content-length'];
244
+ const remoteSha1 = stream.headers['x-sanity-sha1'];
245
+ const remoteMd5 = stream.headers['x-sanity-md5'];
246
+ const hasHash = Boolean(remoteSha1 || remoteMd5);
247
+ const method = md5 ? 'md5' : 'sha1';
248
+ let differs = false;
249
+
250
+ if (remoteMd5 && md5) {
251
+ differs = remoteMd5 !== md5;
252
+ } else if (remoteSha1 && sha1) {
253
+ differs = remoteSha1 !== sha1;
254
+ }
320
255
 
321
- var isImage = assetDoc._type === 'sanity.imageAsset';
322
- var type = isImage ? 'image' : 'file';
323
- var id = "".concat(type, "-").concat(sha1);
324
- var metaProps = omit(assetDoc, EXCLUDE_PROPS);
256
+ if (differs && attemptNum < 3) {
257
+ debug('%s does not match downloaded asset, retrying (#%d) [%s]', method, attemptNum + 1, url);
258
+ return this.downloadAsset(assetDoc, dstPath, attemptNum + 1);
259
+ } else if (differs) {
260
+ const details = [hasHash && (method === 'md5' ? "md5 should be ".concat(remoteMd5, ", got ").concat(md5) : "sha1 should be ".concat(remoteSha1, ", got ").concat(sha1)), contentLength && parseInt(contentLength, 10) !== size && "Asset should be ".concat(contentLength, " bytes, got ").concat(size), "Did not succeed after ".concat(attemptNum, " attempts.")];
261
+ const detailsString = "Details:\n - ".concat(details.filter(Boolean).join('\n - '));
262
+ await fse.unlink(tmpPath);
263
+ this.queue.clear();
264
+ const error = new Error("Failed to download asset at ".concat(assetDoc.url, ", giving up. ").concat(detailsString));
265
+ this.reject(error);
266
+ return false;
267
+ }
325
268
 
326
- if (Object.keys(metaProps).length > 0) {
327
- _this2.assetMap[id] = metaProps;
328
- }
269
+ const isImage = assetDoc._type === 'sanity.imageAsset';
270
+ const type = isImage ? 'image' : 'file';
271
+ const id = "".concat(type, "-").concat(sha1);
272
+ const metaProps = omit(assetDoc, EXCLUDE_PROPS);
329
273
 
330
- _this2.downloading.splice(_this2.downloading.findIndex(datUrl => datUrl === url), 1);
274
+ if (Object.keys(metaProps).length > 0) {
275
+ this.assetMap[id] = metaProps;
276
+ }
331
277
 
332
- _this2.filesWritten++;
333
- return true;
334
- })();
278
+ this.downloading.splice(this.downloading.findIndex(datUrl => datUrl === url), 1);
279
+ this.filesWritten++;
280
+ return true;
335
281
  }
336
282
 
337
283
  }
@@ -345,10 +291,7 @@ function getAssetType(item) {
345
291
  return null;
346
292
  }
347
293
 
348
- var _ref3 = item.asset._ref.match(/^(image|file)-/) || [],
349
- _ref4 = _slicedToArray(_ref3, 2),
350
- type = _ref4[1];
351
-
294
+ const [, type] = item.asset._ref.match(/^(image|file)-/) || [];
352
295
  return type || null;
353
296
  }
354
297
 
@@ -357,20 +300,16 @@ function isSanityAsset(assetId) {
357
300
  }
358
301
 
359
302
  function generateFilename(assetId) {
360
- var _ref5 = assetId.match(/^(image|file)-(.*?)(-[a-z]+)?$/) || [],
361
- _ref6 = _slicedToArray(_ref5, 4),
362
- asset = _ref6[2],
363
- ext = _ref6[3];
364
-
365
- var extension = (ext || 'bin').replace(/^-/, '');
303
+ const [,, asset, ext] = assetId.match(/^(image|file)-(.*?)(-[a-z]+)?$/) || [];
304
+ const extension = (ext || 'bin').replace(/^-/, '');
366
305
  return asset ? "".concat(asset, ".").concat(extension) : "".concat(assetId, ".bin");
367
306
  }
368
307
 
369
308
  function writeHashedStream(filePath, stream) {
370
- var size = 0;
371
- var md5 = crypto.createHash('md5');
372
- var sha1 = crypto.createHash('sha1');
373
- var hasher = miss.through((chunk, enc, cb) => {
309
+ let size = 0;
310
+ const md5 = crypto.createHash('md5');
311
+ const sha1 = crypto.createHash('sha1');
312
+ const hasher = miss.through((chunk, enc, cb) => {
374
313
  size += chunk.length;
375
314
  md5.update(chunk);
376
315
  sha1.update(chunk);
@@ -396,7 +335,7 @@ function tryGetErrorFromStream(stream) {
396
335
 
397
336
  function parse(body) {
398
337
  try {
399
- var parsed = JSON.parse(body.toString('utf8'));
338
+ const parsed = JSON.parse(body.toString('utf8'));
400
339
  resolve(parsed.message || parsed.error || null);
401
340
  } catch (err) {
402
341
  resolve(body.toString('utf8').slice(0, 16000));