scratch-storage 1.3.4 → 2.0.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.
@@ -3790,7 +3790,7 @@ module.exports = g;
3790
3790
  /***/ (function(module, exports, __webpack_require__) {
3791
3791
 
3792
3792
  module.exports = function() {
3793
- return __webpack_require__(/*! !./node_modules/worker-loader/dist/workers/InlineWorker.js */ "./node_modules/worker-loader/dist/workers/InlineWorker.js")("/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./node_modules/babel-loader/lib/index.js?!./src/FetchWorkerTool.worker.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/babel-loader/lib/index.js?!./src/FetchWorkerTool.worker.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/babel-loader/lib??ref--4!./src/FetchWorkerTool.worker.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n/* eslint-env worker */\nvar jobsActive = 0;\nvar complete = [];\nvar intervalId = null;\n/**\n * Register a step function.\n *\n * Step checks if there are completed jobs and if there are sends them to the\n * parent. Then it checks the jobs count. If there are no further jobs, clear\n * the step.\n */\n\nvar registerStep = function registerStep() {\n intervalId = setInterval(function () {\n if (complete.length) {\n // Send our chunk of completed requests and instruct postMessage to\n // transfer the buffers instead of copying them.\n postMessage(complete.slice(), // Instruct postMessage that these buffers in the sent message\n // should use their Transferable trait. After the postMessage\n // call the \"buffers\" will still be in complete if you looked,\n // but they will all be length 0 as the data they reference has\n // been sent to the window. This lets us send a lot of data\n // without the normal postMessage behaviour of making a copy of\n // all of the data for the window.\n complete.map(function (response) {\n return response.buffer;\n }).filter(Boolean));\n complete.length = 0;\n }\n\n if (jobsActive === 0) {\n clearInterval(intervalId);\n intervalId = null;\n }\n }, 1);\n};\n/**\n * Receive a job from the parent and fetch the requested data.\n * @param {object} options.job A job id, url, and options descriptor to perform.\n */\n\n\nvar onMessage = function onMessage(_ref) {\n var job = _ref.data;\n\n if (jobsActive === 0 && !intervalId) {\n registerStep();\n }\n\n jobsActive++;\n fetch(job.url, job.options).then(function (response) {\n return response.arrayBuffer();\n }).then(function (buffer) {\n return complete.push({\n id: job.id,\n buffer: buffer\n });\n }).catch(function (error) {\n return complete.push({\n id: job.id,\n error: error\n });\n }).then(function () {\n return jobsActive--;\n });\n};\n\nif (self.fetch) {\n postMessage({\n support: {\n fetch: true\n }\n });\n self.addEventListener('message', onMessage);\n} else {\n postMessage({\n support: {\n fetch: false\n }\n });\n self.addEventListener('message', function (_ref2) {\n var job = _ref2.data;\n postMessage([{\n id: job.id,\n error: new Error('fetch is unavailable')\n }]);\n });\n}\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=3325b91e8645157f8dc6.worker.js.map", __webpack_require__.p + "3325b91e8645157f8dc6.worker.js");
3793
+ return __webpack_require__(/*! !./node_modules/worker-loader/dist/workers/InlineWorker.js */ "./node_modules/worker-loader/dist/workers/InlineWorker.js")("/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./node_modules/babel-loader/lib/index.js?!./src/FetchWorkerTool.worker.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/babel-loader/lib/index.js?!./src/FetchWorkerTool.worker.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/babel-loader/lib??ref--4!./src/FetchWorkerTool.worker.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n/* eslint-env worker */\nvar jobsActive = 0;\nvar complete = [];\nvar intervalId = null;\n/**\n * Register a step function.\n *\n * Step checks if there are completed jobs and if there are sends them to the\n * parent. Then it checks the jobs count. If there are no further jobs, clear\n * the step.\n */\n\nvar registerStep = function registerStep() {\n intervalId = setInterval(function () {\n if (complete.length) {\n // Send our chunk of completed requests and instruct postMessage to\n // transfer the buffers instead of copying them.\n postMessage(complete.slice(), // Instruct postMessage that these buffers in the sent message\n // should use their Transferable trait. After the postMessage\n // call the \"buffers\" will still be in complete if you looked,\n // but they will all be length 0 as the data they reference has\n // been sent to the window. This lets us send a lot of data\n // without the normal postMessage behaviour of making a copy of\n // all of the data for the window.\n complete.map(function (response) {\n return response.buffer;\n }).filter(Boolean));\n complete.length = 0;\n }\n\n if (jobsActive === 0) {\n clearInterval(intervalId);\n intervalId = null;\n }\n }, 1);\n};\n/**\n * Receive a job from the parent and fetch the requested data.\n * @param {object} options.job A job id, url, and options descriptor to perform.\n */\n\n\nvar onMessage = function onMessage(_ref) {\n var job = _ref.data;\n\n if (jobsActive === 0 && !intervalId) {\n registerStep();\n }\n\n jobsActive++;\n fetch(job.url, job.options).then(function (result) {\n if (result.ok) return result.arrayBuffer();\n if (result.status === 404) return null;\n return Promise.reject(result.status);\n }).then(function (buffer) {\n return complete.push({\n id: job.id,\n buffer: buffer\n });\n }).catch(function (error) {\n return complete.push({\n id: job.id,\n error: error\n });\n }).then(function () {\n return jobsActive--;\n });\n};\n\nif (self.fetch) {\n postMessage({\n support: {\n fetch: true\n }\n });\n self.addEventListener('message', onMessage);\n} else {\n postMessage({\n support: {\n fetch: false\n }\n });\n self.addEventListener('message', function (_ref2) {\n var job = _ref2.data;\n postMessage([{\n id: job.id,\n error: new Error('fetch is unavailable')\n }]);\n });\n}\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=3770307661f114ec2389.worker.js.map", __webpack_require__.p + "3770307661f114ec2389.worker.js");
3794
3794
  };
3795
3795
 
3796
3796
  /***/ }),
@@ -4140,19 +4140,19 @@ var DefaultAssets = [{
4140
4140
  type: AssetType.ImageBitmap,
4141
4141
  format: DataFormat.PNG,
4142
4142
  id: null,
4143
- data: new Buffer(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultBitmap.png */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultBitmap.png") // eslint-disable-line global-require
4143
+ data: Buffer.from(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultBitmap.png */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultBitmap.png") // eslint-disable-line global-require
4144
4144
  )
4145
4145
  }, {
4146
4146
  type: AssetType.Sound,
4147
4147
  format: DataFormat.WAV,
4148
4148
  id: null,
4149
- data: new Buffer(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultSound.wav */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultSound.wav") // eslint-disable-line global-require
4149
+ data: Buffer.from(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultSound.wav */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultSound.wav") // eslint-disable-line global-require
4150
4150
  )
4151
4151
  }, {
4152
4152
  type: AssetType.ImageVector,
4153
4153
  format: DataFormat.SVG,
4154
4154
  id: null,
4155
- data: new Buffer(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultVector.svg */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultVector.svg") // eslint-disable-line global-require
4155
+ data: Buffer.from(__webpack_require__(/*! arraybuffer-loader!./builtins/defaultVector.svg */ "./node_modules/arraybuffer-loader/index.js!./src/builtins/defaultVector.svg") // eslint-disable-line global-require
4156
4156
  )
4157
4157
  }];
4158
4158
  /**
@@ -4340,6 +4340,9 @@ module.exports = DataFormat;
4340
4340
  /*! no static exports found */
4341
4341
  /***/ (function(module, exports) {
4342
4342
 
4343
+ var _excluded = ["url"],
4344
+ _excluded2 = ["url", "withCredentials"];
4345
+
4343
4346
  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; }
4344
4347
 
4345
4348
  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; }
@@ -4381,14 +4384,16 @@ var FetchTool = /*#__PURE__*/function () {
4381
4384
  key: "get",
4382
4385
  value: function get(_ref) {
4383
4386
  var url = _ref.url,
4384
- options = _objectWithoutProperties(_ref, ["url"]);
4387
+ options = _objectWithoutProperties(_ref, _excluded);
4385
4388
 
4386
4389
  return fetch(url, Object.assign({
4387
4390
  method: 'GET'
4388
4391
  }, options)).then(function (result) {
4389
- return result.arrayBuffer();
4390
- }).then(function (body) {
4391
- return new Uint8Array(body);
4392
+ if (result.ok) return result.arrayBuffer().then(function (b) {
4393
+ return new Uint8Array(b);
4394
+ });
4395
+ if (result.status === 404) return null;
4396
+ return Promise.reject(result.status);
4392
4397
  });
4393
4398
  }
4394
4399
  /**
@@ -4414,7 +4419,7 @@ var FetchTool = /*#__PURE__*/function () {
4414
4419
  var url = _ref2.url,
4415
4420
  _ref2$withCredentials = _ref2.withCredentials,
4416
4421
  withCredentials = _ref2$withCredentials === void 0 ? false : _ref2$withCredentials,
4417
- options = _objectWithoutProperties(_ref2, ["url", "withCredentials"]);
4422
+ options = _objectWithoutProperties(_ref2, _excluded2);
4418
4423
 
4419
4424
  return fetch(url, Object.assign({
4420
4425
  credentials: withCredentials ? 'include' : 'omit'
@@ -4439,6 +4444,8 @@ module.exports = FetchTool;
4439
4444
  /*! no static exports found */
4440
4445
  /***/ (function(module, exports, __webpack_require__) {
4441
4446
 
4447
+ var _excluded = ["url"];
4448
+
4442
4449
  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; }
4443
4450
 
4444
4451
  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; }
@@ -4560,7 +4567,7 @@ var PrivateFetchWorkerTool = /*#__PURE__*/function () {
4560
4567
  var _this2 = this;
4561
4568
 
4562
4569
  var url = _ref2.url,
4563
- options = _objectWithoutProperties(_ref2, ["url"]);
4570
+ options = _objectWithoutProperties(_ref2, _excluded);
4564
4571
 
4565
4572
  return new Promise(function (resolve, reject) {
4566
4573
  // TODO: Use a Scratch standard ID generator ...
@@ -5094,7 +5101,7 @@ var ScratchStorage = /*#__PURE__*/function () {
5094
5101
  * @param {string} assetId - The ID of the asset to fetch: a project ID, MD5, etc.
5095
5102
  * @param {DataFormat} [dataFormat] - Optional: load this format instead of the AssetType's default.
5096
5103
  * @return {Promise.<Asset>} A promise for the requested Asset.
5097
- * If the promise is resolved with non-null, the value is the requested asset or a fallback.
5104
+ * If the promise is resolved with non-null, the value is the requested asset.
5098
5105
  * If the promise is resolved with null, the desired asset could not be found with the current asset sources.
5099
5106
  * If the promise is rejected, there was an error on at least one asset source. HTTP 404 does not count as an
5100
5107
  * error here, but (for example) HTTP 403 does.
@@ -5115,6 +5122,7 @@ var ScratchStorage = /*#__PURE__*/function () {
5115
5122
 
5116
5123
  var tryNextHelper = function tryNextHelper(err) {
5117
5124
  if (err) {
5125
+ // Track the error, but continue looking
5118
5126
  errors.push(err);
5119
5127
  }
5120
5128
 
@@ -5131,8 +5139,8 @@ var ScratchStorage = /*#__PURE__*/function () {
5131
5139
  return loading // TODO: maybe some types of error should prevent trying the next helper?
5132
5140
  .catch(tryNextHelper);
5133
5141
  } else if (errors.length > 0) {
5134
- // At least one thing went wrong and also we couldn't find the
5135
- // asset.
5142
+ // We looked through all the helpers and couldn't find the asset, AND
5143
+ // at least one thing went wrong while we were looking.
5136
5144
  return Promise.reject(errors);
5137
5145
  } // Nothing went wrong but we couldn't find the asset.
5138
5146
 
@@ -5333,7 +5341,8 @@ var WebHelper = /*#__PURE__*/function (_Helper) {
5333
5341
  var errors = [];
5334
5342
  var stores = this.stores.slice().filter(function (store) {
5335
5343
  return store.types.indexOf(assetType.name) >= 0;
5336
- });
5344
+ }); // New empty asset but it doesn't have data yet
5345
+
5337
5346
  var asset = new Asset(assetType, assetId, dataFormat);
5338
5347
  var tool = this.assetTool;
5339
5348
 
@@ -5343,11 +5352,15 @@ var WebHelper = /*#__PURE__*/function (_Helper) {
5343
5352
 
5344
5353
  var storeIndex = 0;
5345
5354
 
5346
- var tryNextSource = function tryNextSource() {
5355
+ var tryNextSource = function tryNextSource(err) {
5356
+ if (err) {
5357
+ errors.push(err);
5358
+ }
5359
+
5347
5360
  var store = stores[storeIndex++];
5348
5361
  /** @type {UrlFunction} */
5349
5362
 
5350
- var reqConfigFunction = store.get;
5363
+ var reqConfigFunction = store && store.get;
5351
5364
 
5352
5365
  if (reqConfigFunction) {
5353
5366
  var reqConfig = ensureRequestConfig(reqConfigFunction(asset));
@@ -5357,7 +5370,12 @@ var WebHelper = /*#__PURE__*/function (_Helper) {
5357
5370
  }
5358
5371
 
5359
5372
  return tool.get(reqConfig).then(function (body) {
5360
- return asset.setData(body, dataFormat);
5373
+ if (body) {
5374
+ asset.setData(body, dataFormat);
5375
+ return asset;
5376
+ }
5377
+
5378
+ return tryNextSource();
5361
5379
  }).catch(tryNextSource);
5362
5380
  } else if (errors.length > 0) {
5363
5381
  return Promise.reject(errors);
@@ -5367,9 +5385,7 @@ var WebHelper = /*#__PURE__*/function (_Helper) {
5367
5385
  return Promise.resolve(null);
5368
5386
  };
5369
5387
 
5370
- return tryNextSource().then(function () {
5371
- return asset;
5372
- });
5388
+ return tryNextSource();
5373
5389
  }
5374
5390
  /**
5375
5391
  * Create or update an asset with provided data. The create function is called if no asset id is provided