s4s-packager / src /packager /load-project.js
soiz1's picture
Upload 225 files
7aec436 verified
import {readAsArrayBuffer} from '../common/readers';
import request from '../common/request';
import { AbortError } from '../common/errors';
const downloadProject = async (buffer, progressCallback) => {
const controller = typeof AbortController === 'function' && new AbortController();
const downloadProject = await import(/* webpackChunkName: "downloader" */ './download-project.js');
let reject;
return {
promise: new Promise((_resolve, _reject) => {
reject = _reject;
downloadProject.downloadProject(buffer, progressCallback, controller && controller.signal)
.then(result => _resolve(result))
.catch(err => _reject(err));
}),
terminate: () => {
reject(new AbortError());
if (controller) {
controller.abort();
}
}
};
};
const fromURL = async (url, progressCallback) => {
const buffer = await request({
url,
type: 'arraybuffer',
progressCallback: (progress) => {
progressCallback('fetch', progress);
}
});
return downloadProject(buffer, progressCallback);
};
const fromID = (id, token, progressCallback) => {
const tokenPart = token ? `?token=${token}` : '';
const url = `https://projects.penguinmod.com/api/projects/getPublished?type=file&id=${id}`;
return fromURL(url, progressCallback);
};
const fromFile = async (file, progressCallback) => {
const buffer = await readAsArrayBuffer(file);
return downloadProject(buffer, progressCallback);
};
export default {
fromID,
fromURL,
fromFile
};