const ScratchStorage = require('scratch-storage'); const ASSET_SERVER = 'https://cdn.assets.scratch.mit.edu/'; const PROJECT_SERVER = 'https://cdn.projects.scratch.mit.edu/'; /** * @param {Asset} asset - calculate a URL for this asset. * @returns {string} a URL to download a project file. */ const getProjectUrl = function (asset) { const assetIdParts = asset.assetId.split('.'); const assetUrlParts = [PROJECT_SERVER, 'internalapi/project/', assetIdParts[0], '/get/']; if (assetIdParts[1]) { assetUrlParts.push(assetIdParts[1]); } return assetUrlParts.join(''); }; /** * @param {Asset} asset - calculate a URL for this asset. * @returns {string} a URL to download a project asset (PNG, WAV, etc.) */ const getAssetUrl = function (asset) { const assetUrlParts = [ ASSET_SERVER, 'internalapi/asset/', asset.assetId, '.', asset.assetType.runtimeFormat, '/get/' ]; return assetUrlParts.join(''); }; /** * Construct a new instance of ScratchStorage, provide it with default web sources, and attach it to the provided VM. * @param {VirtualMachine} vm - the VM which will own the new ScratchStorage instance. */ const attachTestStorage = function (vm) { const storage = new ScratchStorage(); const AssetType = storage.AssetType; storage.addWebSource([AssetType.Project], getProjectUrl); storage.addWebSource([AssetType.ImageVector, AssetType.ImageBitmap, AssetType.Sound], getAssetUrl); vm.attachStorage(storage); }; module.exports = attachTestStorage;