From 3b386480bfc8d0b2cc232fec62225d4b4c778c6b Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 5 Jun 2018 20:39:35 +0200 Subject: disentangle dataset loader from samplernn --- app/client/dataset/dataset.loader.js | 108 +++++++++ app/client/modules/samplernn/samplernn.actions.js | 115 ++------- app/client/modules/samplernn/samplernn.datasets.js | 1 - public/bundle.js | 269 +++++++++++++-------- public/bundle.js.map | 2 +- 5 files changed, 296 insertions(+), 199 deletions(-) create mode 100644 app/client/dataset/dataset.loader.js diff --git a/app/client/dataset/dataset.loader.js b/app/client/dataset/dataset.loader.js new file mode 100644 index 0000000..6757593 --- /dev/null +++ b/app/client/dataset/dataset.loader.js @@ -0,0 +1,108 @@ + +import actions from '../actions' + +const unsortedFolders = {} + +export const unsortedFolder = (module, instantiate=false) => { + if (!unsortedFolders[module] || instantiate) { + const folder = { + id: 0, + module, + name: 'unsorted', + files: [], + datasets: [], + } + unsortedFolders[module] = folder + } + return unsortedFolders[module] +} + +export const emptyDataset = (module, datasetLookup, name, folder) => { + const dataset = { + name, + input: [], + checkpoints: [], + output: [], + } + datasetLookup[name] = dataset + folder = folder || unsortedFolder(module) + folder.datasets.push(name) + return dataset +} + +export const getDataset = (module, datasetLookup, name, folder, date) => { + const dataset = datasetLookup[name] || emptyDataset(module, datasetLookup, name, folder) + folder = folder || unsortedFolder(module) + if (date) { + dataset.date = (dataset.date && ! isNaN(dataset.date)) ? Math.max(+new Date(date), dataset.date) : +new Date(date) + } + return dataset +} + +export const load = module => { + return Promise.all([ + actions.folder.index({ module }), + actions.file.index({ module }), + ]).then(res => { + const [folders, files] = res + + let datasetLookup = {} + let folderLookup = {} + let fileLookup = {} + + // take all of the folders and put them in a lookup + folderLookup = folders.reduce((folderLookup, folder) => { + folderLookup[folder.id] = { + id: folder.id, + name: folder.name, + folder, + files: [], + datasets: [], + } + return folderLookup + }, { + unsorted: unsortedFolder(module, true) + }) + + // prepare the files by splitting into two groups + const generatedFiles = files.filter(file => file.generated) + const ungeneratedFiles = files.filter(file => !file.generated) + + // build the initial dataset lookup table using the ungenerated files + ungeneratedFiles.reduce((datasetLookup, file) => { + fileLookup[file.id] = file + if (! file.name) { + file.name = (file.opt || {}).token || file.url + } + const name = (file.name || 'unsorted').split('.')[0] + const folder = folderLookup[file.folder_id] || unsortedFolder(module) + const dataset = getDataset(module, datasetLookup, name, folder, file.date || file.created_at) + if (file.url.match(file.name)) file.persisted = true + dataset.input.push(file.id) + folder.files.push(file.id) + return datasetLookup + }, datasetLookup) + + // go over the generated files and add addl datasets (if the files were deleted) + generatedFiles.map(file => { + fileLookup[file.id] = file + const pair = file.name.split('.')[0].split('-') + const folder = folderLookup[file.folder_id] || unsortedFolder(module) + const dataset = getDataset(module, datasetLookup, pair[0], folder, file.date || file.created_at) + dataset.output.push(file.id) + folder.files.push(file.id) + file.epoch = file.epoch || pair[1] + }) + + return { + folderLookup, + fileLookup, + datasetLookup, + folders, + files, + unsortedFolder: folderLookup.unsorted, + } + }).catch(e => { + console.error(e) + }) +} diff --git a/app/client/modules/samplernn/samplernn.actions.js b/app/client/modules/samplernn/samplernn.actions.js index 357617a..2be59ed 100644 --- a/app/client/modules/samplernn/samplernn.actions.js +++ b/app/client/modules/samplernn/samplernn.actions.js @@ -3,111 +3,43 @@ import uuidv1 from 'uuid/v1' import socket from '../../socket' import types from '../../types' +import * as datasetLoader from '../../dataset/dataset.loader' + import actions from '../../actions' import { allProgress } from '../../util' export const load_directories = (id) => (dispatch) => { - // console.log(actions) - dispatch({ type: types.app.load_progress, progress: { i: 0, n: 7 }}) + const module = 'samplernn' allProgress([ - actions.folder.index({ module: 'samplernn' }), - actions.file.index({ module: 'samplernn' }), - actions.task.index({ module: 'samplernn' }), - actions.socket.list_directory({ module: 'samplernn', dir: 'datasets' }), - actions.socket.list_directory({ module: 'samplernn', dir: 'results' }), - actions.socket.list_directory({ module: 'samplernn', dir: 'output' }), - actions.socket.disk_usage({ module: 'samplernn', dir: 'datasets' }), + datasetLoader.load(module), + actions.task.index({ module }), + actions.socket.list_directory({ module, dir: 'datasets' }), + actions.socket.list_directory({ module, dir: 'results' }), + actions.socket.list_directory({ module, dir: 'output' }), + actions.socket.disk_usage({ module, dir: 'datasets' }), load_loss()(dispatch), ], (percent, i, n) => { dispatch({ type: types.app.load_progress, progress: { i, n }}) }).then(res => { // console.log(res) - const [folders, files, tasks, datasets, results, output, datasetUsage, lossReport] = res - + const [datasetApiReport, tasks, datasets, results, output, datasetUsage, lossReport] = res + + const { + folderLookup, + fileLookup, + datasetLookup, + folders, + files, + unsortedFolder, + } = datasetApiReport console.log(datasetUsage) - const unsortedFolder = { - id: 0, - name: 'unsorted', - files: [], - datasets: [], - } - - let datasetLookup = {} - let folderLookup = {} - let fileLookup = {} - let taskLookup = {} - - const get_dataset = (name, folder=unsortedFolder, date) => { - const dataset = datasetLookup[name] || empty_dataset(name, folder) - if (date) { - dataset.date = (dataset.date && ! isNaN(dataset.date)) ? Math.max(+new Date(date), dataset.date) : +new Date(date) - } - return dataset - } - - const empty_dataset = (name, folder=unsortedFolder) => { - const dataset = { - name, - input: [], - checkpoints: [], - output: [], - } - datasetLookup[name] = dataset - folder.datasets.push(name) - return dataset - } - - // take all of the folders and put them in a lookup - folderLookup = folders.reduce((folderLookup, folder) => { - folderLookup[folder.id] = { - id: folder.id, - name: folder.name, - folder, - files: [], - datasets: [], - } - return folderLookup - }, { - unsorted: unsortedFolder - }) - - // prepare the files by splitting into two groups - const generatedFiles = files.filter(file => file.generated) - const ungeneratedFiles = files.filter(file => !file.generated) - - // build the initial dataset lookup table using the ungenerated files - ungeneratedFiles.reduce((datasetLookup, file) => { - fileLookup[file.id] = file - if (! file.name) { - file.name = (file.opt || {}).token || file.url - } - const name = (file.name || 'unsorted').split('.')[0] - const folder = folderLookup[file.folder_id] || unsortedFolder - const dataset = get_dataset(name, folder, file.date || file.created_at) - if (file.url.match(file.name)) file.persisted = true - dataset.input.push(file.id) - folder.files.push(file.id) - return datasetLookup - }, datasetLookup) - - // go over the generated files and add addl datasets (if the files were deleted) - generatedFiles.map(file => { - fileLookup[file.id] = file - const pair = file.name.split('.')[0].split('-') - const folder = folderLookup[file.folder_id] || unsortedFolder - const dataset = get_dataset(pair[0], folder, file.date || file.created_at) - dataset.output.push(file.id) - folder.files.push(file.id) - file.epoch = file.epoch || pair[1] - }) - // also show the various flat audio files we have, in the input area.. const flatDatasets = datasets.filter(s => s.name.match(/(wav|aiff?|flac|mp3)$/) && !s.dir) const builtDatasets = datasets.filter(s => s.dir) builtDatasets.forEach(dir => { - const dataset = get_dataset(dir.name) + const dataset = datasetLoader.getDataset(module, datasetLookup, dir.name) dataset.isBuilt = true }) @@ -115,7 +47,7 @@ export const load_directories = (id) => (dispatch) => { file.uuid = uuidv1() fileLookup[file.uuid] = file const name = file.name.split('.')[0] - const dataset = get_dataset(name, unsortedFolder, file.date) + const dataset = datasetLoader.getDataset(module, datasetLookup, name, unsortedFolder, file.date) file.persisted = false dataset.input.push(file.uuid) }) @@ -131,7 +63,7 @@ export const load_directories = (id) => (dispatch) => { checkpoint.date = s.date checkpoint.dir = s checkpoint.persisted = false - const dataset = get_dataset(checkpoint.name, unsortedFolder, checkpoint.date) + const dataset = datasetLoader.getDataset(module, datasetLookup, checkpoint.name, unsortedFolder, checkpoint.date) const loss = lossReport[checkpoint.name] if (loss) { dataset.epoch = checkpoint.epoch = loss.length @@ -145,7 +77,7 @@ export const load_directories = (id) => (dispatch) => { file.uuid = uuidv1() fileLookup[file.uuid] = file const pair = file.name.split('.')[0].split('-') - const dataset = get_dataset(pair[0], unsortedFolder, file.date) + const dataset = datasetLoader.getDataset(module, datasetLookup, pair[0], unsortedFolder, file.date) file.persisted = false file.epoch = parseInt(file.epoch || pair[1].replace(/^\D+/, '')) || 0 dataset.epoch = Math.max(file.epoch, dataset.epoch || 0) @@ -169,7 +101,6 @@ export const load_directories = (id) => (dispatch) => { folderLookup, fileLookup, datasetLookup, - taskLookup, folders, files, checkpoints, output, diff --git a/app/client/modules/samplernn/samplernn.datasets.js b/app/client/modules/samplernn/samplernn.datasets.js index f8cba29..921d1a2 100644 --- a/app/client/modules/samplernn/samplernn.datasets.js +++ b/app/client/modules/samplernn/samplernn.datasets.js @@ -123,7 +123,6 @@ const mapStateToProps = state => ({ }) const mapDispatchToProps = (dispatch, ownProps) => ({ - samplernnActions: bindActionCreators(samplernnActions, dispatch), }) export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNDatasets) diff --git a/public/bundle.js b/public/bundle.js index 0eb8310..84fe51b 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -3127,6 +3127,142 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), +/***/ "./app/client/dataset/dataset.loader.js": +/*!**********************************************!*\ + !*** ./app/client/dataset/dataset.loader.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.load = exports.getDataset = exports.emptyDataset = exports.unsortedFolder = undefined; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _actions = __webpack_require__(/*! ../actions */ "./app/client/actions.js"); + +var _actions2 = _interopRequireDefault(_actions); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var unsortedFolders = {}; + +var unsortedFolder = exports.unsortedFolder = function unsortedFolder(module) { + var instantiate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!unsortedFolders[module] || instantiate) { + var folder = { + id: 0, + module: module, + name: 'unsorted', + files: [], + datasets: [] + }; + unsortedFolders[module] = folder; + } + return unsortedFolders[module]; +}; + +var emptyDataset = exports.emptyDataset = function emptyDataset(module, datasetLookup, name, folder) { + var dataset = { + name: name, + input: [], + checkpoints: [], + output: [] + }; + datasetLookup[name] = dataset; + folder = folder || unsortedFolder(module); + folder.datasets.push(name); + return dataset; +}; + +var getDataset = exports.getDataset = function getDataset(module, datasetLookup, name, folder, date) { + var dataset = datasetLookup[name] || emptyDataset(module, datasetLookup, name, folder); + folder = folder || unsortedFolder(module); + if (date) { + dataset.date = dataset.date && !isNaN(dataset.date) ? Math.max(+new Date(date), dataset.date) : +new Date(date); + } + return dataset; +}; + +var load = exports.load = function load(module) { + return Promise.all([_actions2.default.folder.index({ module: module }), _actions2.default.file.index({ module: module })]).then(function (res) { + var _res = _slicedToArray(res, 2), + folders = _res[0], + files = _res[1]; + + var datasetLookup = {}; + var folderLookup = {}; + var fileLookup = {}; + + // take all of the folders and put them in a lookup + folderLookup = folders.reduce(function (folderLookup, folder) { + folderLookup[folder.id] = { + id: folder.id, + name: folder.name, + folder: folder, + files: [], + datasets: [] + }; + return folderLookup; + }, { + unsorted: unsortedFolder(module, true) + }); + + // prepare the files by splitting into two groups + var generatedFiles = files.filter(function (file) { + return file.generated; + }); + var ungeneratedFiles = files.filter(function (file) { + return !file.generated; + }); + + // build the initial dataset lookup table using the ungenerated files + ungeneratedFiles.reduce(function (datasetLookup, file) { + fileLookup[file.id] = file; + if (!file.name) { + file.name = (file.opt || {}).token || file.url; + } + var name = (file.name || 'unsorted').split('.')[0]; + var folder = folderLookup[file.folder_id] || unsortedFolder(module); + var dataset = getDataset(module, datasetLookup, name, folder, file.date || file.created_at); + if (file.url.match(file.name)) file.persisted = true; + dataset.input.push(file.id); + folder.files.push(file.id); + return datasetLookup; + }, datasetLookup); + + // go over the generated files and add addl datasets (if the files were deleted) + generatedFiles.map(function (file) { + fileLookup[file.id] = file; + var pair = file.name.split('.')[0].split('-'); + var folder = folderLookup[file.folder_id] || unsortedFolder(module); + var dataset = getDataset(module, datasetLookup, pair[0], folder, file.date || file.created_at); + dataset.output.push(file.id); + folder.files.push(file.id); + file.epoch = file.epoch || pair[1]; + }); + + return { + folderLookup: folderLookup, + fileLookup: fileLookup, + datasetLookup: datasetLookup, + folders: folders, + files: files, + unsortedFolder: folderLookup.unsorted + }; + }).catch(function (e) { + console.error(e); + }); +}; + +/***/ }), + /***/ "./app/client/dataset/dataset.new.js": /*!*******************************************!*\ !*** ./app/client/dataset/dataset.new.js ***! @@ -5104,121 +5240,47 @@ var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); var _types2 = _interopRequireDefault(_types); +var _dataset = __webpack_require__(/*! ../../dataset/dataset.loader */ "./app/client/dataset/dataset.loader.js"); + +var datasetLoader = _interopRequireWildcard(_dataset); + var _actions = __webpack_require__(/*! ../../actions */ "./app/client/actions.js"); var _actions2 = _interopRequireDefault(_actions); var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } var load_directories = exports.load_directories = function load_directories(id) { return function (dispatch) { - // console.log(actions) - dispatch({ type: _types2.default.app.load_progress, progress: { i: 0, n: 7 } }); - (0, _util.allProgress)([_actions2.default.folder.index({ module: 'samplernn' }), _actions2.default.file.index({ module: 'samplernn' }), _actions2.default.task.index({ module: 'samplernn' }), _actions2.default.socket.list_directory({ module: 'samplernn', dir: 'datasets' }), _actions2.default.socket.list_directory({ module: 'samplernn', dir: 'results' }), _actions2.default.socket.list_directory({ module: 'samplernn', dir: 'output' }), _actions2.default.socket.disk_usage({ module: 'samplernn', dir: 'datasets' }), load_loss()(dispatch)], function (percent, i, n) { + var module = 'samplernn'; + (0, _util.allProgress)([datasetLoader.load(module), _actions2.default.task.index({ module: module }), _actions2.default.socket.list_directory({ module: module, dir: 'datasets' }), _actions2.default.socket.list_directory({ module: module, dir: 'results' }), _actions2.default.socket.list_directory({ module: module, dir: 'output' }), _actions2.default.socket.disk_usage({ module: module, dir: 'datasets' }), load_loss()(dispatch)], function (percent, i, n) { dispatch({ type: _types2.default.app.load_progress, progress: { i: i, n: n } }); }).then(function (res) { // console.log(res) - var _res = _slicedToArray(res, 8), - folders = _res[0], - files = _res[1], - tasks = _res[2], - datasets = _res[3], - results = _res[4], - output = _res[5], - datasetUsage = _res[6], - lossReport = _res[7]; + var _res = _slicedToArray(res, 7), + datasetApiReport = _res[0], + tasks = _res[1], + datasets = _res[2], + results = _res[3], + output = _res[4], + datasetUsage = _res[5], + lossReport = _res[6]; + + var folderLookup = datasetApiReport.folderLookup, + fileLookup = datasetApiReport.fileLookup, + datasetLookup = datasetApiReport.datasetLookup, + folders = datasetApiReport.folders, + files = datasetApiReport.files, + unsortedFolder = datasetApiReport.unsortedFolder; console.log(datasetUsage); - var unsortedFolder = { - id: 0, - name: 'unsorted', - files: [], - datasets: [] - }; - - var datasetLookup = {}; - var folderLookup = {}; - var fileLookup = {}; - var taskLookup = {}; - - var get_dataset = function get_dataset(name) { - var folder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : unsortedFolder; - var date = arguments[2]; - - var dataset = datasetLookup[name] || empty_dataset(name, folder); - if (date) { - dataset.date = dataset.date && !isNaN(dataset.date) ? Math.max(+new Date(date), dataset.date) : +new Date(date); - } - return dataset; - }; - - var empty_dataset = function empty_dataset(name) { - var folder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : unsortedFolder; - - var dataset = { - name: name, - input: [], - checkpoints: [], - output: [] - }; - datasetLookup[name] = dataset; - folder.datasets.push(name); - return dataset; - }; - - // take all of the folders and put them in a lookup - folderLookup = folders.reduce(function (folderLookup, folder) { - folderLookup[folder.id] = { - id: folder.id, - name: folder.name, - folder: folder, - files: [], - datasets: [] - }; - return folderLookup; - }, { - unsorted: unsortedFolder - }); - - // prepare the files by splitting into two groups - var generatedFiles = files.filter(function (file) { - return file.generated; - }); - var ungeneratedFiles = files.filter(function (file) { - return !file.generated; - }); - - // build the initial dataset lookup table using the ungenerated files - ungeneratedFiles.reduce(function (datasetLookup, file) { - fileLookup[file.id] = file; - if (!file.name) { - file.name = (file.opt || {}).token || file.url; - } - var name = (file.name || 'unsorted').split('.')[0]; - var folder = folderLookup[file.folder_id] || unsortedFolder; - var dataset = get_dataset(name, folder, file.date || file.created_at); - if (file.url.match(file.name)) file.persisted = true; - dataset.input.push(file.id); - folder.files.push(file.id); - return datasetLookup; - }, datasetLookup); - - // go over the generated files and add addl datasets (if the files were deleted) - generatedFiles.map(function (file) { - fileLookup[file.id] = file; - var pair = file.name.split('.')[0].split('-'); - var folder = folderLookup[file.folder_id] || unsortedFolder; - var dataset = get_dataset(pair[0], folder, file.date || file.created_at); - dataset.output.push(file.id); - folder.files.push(file.id); - file.epoch = file.epoch || pair[1]; - }); - // also show the various flat audio files we have, in the input area.. var flatDatasets = datasets.filter(function (s) { return s.name.match(/(wav|aiff?|flac|mp3)$/) && !s.dir; @@ -5227,7 +5289,7 @@ var load_directories = exports.load_directories = function load_directories(id) return s.dir; }); builtDatasets.forEach(function (dir) { - var dataset = get_dataset(dir.name); + var dataset = datasetLoader.getDataset(module, datasetLookup, dir.name); dataset.isBuilt = true; }); @@ -5235,7 +5297,7 @@ var load_directories = exports.load_directories = function load_directories(id) file.uuid = (0, _v2.default)(); fileLookup[file.uuid] = file; var name = file.name.split('.')[0]; - var dataset = get_dataset(name, unsortedFolder, file.date); + var dataset = datasetLoader.getDataset(module, datasetLookup, name, unsortedFolder, file.date); file.persisted = false; dataset.input.push(file.uuid); }); @@ -5255,7 +5317,7 @@ var load_directories = exports.load_directories = function load_directories(id) checkpoint.date = s.date; checkpoint.dir = s; checkpoint.persisted = false; - var dataset = get_dataset(checkpoint.name, unsortedFolder, checkpoint.date); + var dataset = datasetLoader.getDataset(module, datasetLookup, checkpoint.name, unsortedFolder, checkpoint.date); var loss = lossReport[checkpoint.name]; if (loss) { dataset.epoch = checkpoint.epoch = loss.length; @@ -5269,7 +5331,7 @@ var load_directories = exports.load_directories = function load_directories(id) file.uuid = (0, _v2.default)(); fileLookup[file.uuid] = file; var pair = file.name.split('.')[0].split('-'); - var dataset = get_dataset(pair[0], unsortedFolder, file.date); + var dataset = datasetLoader.getDataset(module, datasetLookup, pair[0], unsortedFolder, file.date); file.persisted = false; file.epoch = parseInt(file.epoch || pair[1].replace(/^\D+/, '')) || 0; dataset.epoch = Math.max(file.epoch, dataset.epoch || 0); @@ -5293,7 +5355,6 @@ var load_directories = exports.load_directories = function load_directories(id) folderLookup: folderLookup, fileLookup: fileLookup, datasetLookup: datasetLookup, - taskLookup: taskLookup, folders: folders, files: files, checkpoints: checkpoints, output: output @@ -5677,9 +5738,7 @@ var mapStateToProps = function mapStateToProps(state) { }; var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { - return { - samplernnActions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) - }; + return {}; }; exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNDatasets); diff --git a/public/bundle.js.map b/public/bundle.js.map index 0fe580c..7b8257b 100644 --- a/public/bundle.js.map +++ b/public/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js","sources":["webpack:///webpack/bootstrap","webpack:///./app/client/actions.js","webpack:///./app/client/api/crud.actions.js","webpack:///./app/client/api/crud.fetch.js","webpack:///./app/client/api/crud.types.js","webpack:///./app/client/api/crud.upload.js","webpack:///./app/client/api/index.js","webpack:///./app/client/api/parser.js","webpack:///./app/client/common/audioPlayer/audioPlayer.actions.js","webpack:///./app/client/common/audioPlayer/audioPlayer.component.js","webpack:///./app/client/common/audioPlayer/audioPlayer.reducer.js","webpack:///./app/client/common/button.component.js","webpack:///./app/client/common/fileList.component.js","webpack:///./app/client/common/fileUpload.component.js","webpack:///./app/client/common/gallery.component.js","webpack:///./app/client/common/group.component.js","webpack:///./app/client/common/header.component.js","webpack:///./app/client/common/loading.component.js","webpack:///./app/client/common/param.component.js","webpack:///./app/client/common/paramGroup.component.js","webpack:///./app/client/common/player.component.js","webpack:///./app/client/common/progress.component.js","webpack:///./app/client/common/select.component.js","webpack:///./app/client/common/slider.component.js","webpack:///./app/client/common/textInput.component.js","webpack:///./app/client/dashboard/dashboard.actions.js","webpack:///./app/client/dashboard/dashboard.component.js","webpack:///./app/client/dashboard/dashboard.reducer.js","webpack:///./app/client/dashboard/dashboardheader.component.js","webpack:///./app/client/dashboard/tasklist.component.js","webpack:///./app/client/dataset/dataset.actions.js","webpack:///./app/client/dataset/dataset.form.js","webpack:///./app/client/dataset/dataset.new.js","webpack:///./app/client/dataset/dataset.reducer.js","webpack:///./app/client/dataset/dataset.status.js","webpack:///./app/client/index.jsx","webpack:///./app/client/live/live.actions.js","webpack:///./app/client/live/live.reducer.js","webpack:///./app/client/live/player.js","webpack:///./app/client/live/whammy.js","webpack:///./app/client/modules/index.js","webpack:///./app/client/modules/module.reducer.js","webpack:///./app/client/modules/pix2pix/index.js","webpack:///./app/client/modules/pix2pix/pix2pix.live.js","webpack:///./app/client/modules/pix2pix/pix2pix.reducer.js","webpack:///./app/client/modules/pix2wav/index.js","webpack:///./app/client/modules/pix2wav/pix2wav.reducer.js","webpack:///./app/client/modules/samplernn/index.js","webpack:///./app/client/modules/samplernn/samplernn.actions.js","webpack:///./app/client/modules/samplernn/samplernn.datasets.js","webpack:///./app/client/modules/samplernn/samplernn.module.js","webpack:///./app/client/modules/samplernn/samplernn.reducer.js","webpack:///./app/client/modules/samplernn/samplernn.tasks.js","webpack:///./app/client/modules/samplernn/views/samplernn.graph.js","webpack:///./app/client/modules/samplernn/views/samplernn.import.js","webpack:///./app/client/modules/samplernn/views/samplernn.new.js","webpack:///./app/client/modules/samplernn/views/samplernn.results.js","webpack:///./app/client/modules/samplernn/views/samplernn.show.js","webpack:///./app/client/queue/queue.actions.js","webpack:///./app/client/queue/queue.reducer.js","webpack:///./app/client/socket/index.js","webpack:///./app/client/socket/socket.actions.js","webpack:///./app/client/socket/socket.api.js","webpack:///./app/client/socket/socket.connection.js","webpack:///./app/client/socket/socket.live.js","webpack:///./app/client/socket/socket.system.js","webpack:///./app/client/socket/socket.task.js","webpack:///./app/client/store.js","webpack:///./app/client/system/system.actions.js","webpack:///./app/client/system/system.component.js","webpack:///./app/client/system/system.reducer.js","webpack:///./app/client/types.js","webpack:///./app/client/util/index.js","webpack:///./app/client/util/sort.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/fbjs/lib/warning.js","webpack:///./node_modules/fetch-jsonp/build/fetch-jsonp.js","webpack:///./node_modules/file-saver/FileSaver.js","webpack:///./node_modules/history/DOMUtils.js","webpack:///./node_modules/history/LocationUtils.js","webpack:///./node_modules/history/PathUtils.js","webpack:///./node_modules/history/createBrowserHistory.js","webpack:///./node_modules/history/createHashHistory.js","webpack:///./node_modules/history/createMemoryHistory.js","webpack:///./node_modules/history/createTransitionManager.js","webpack:///./node_modules/history/es/DOMUtils.js","webpack:///./node_modules/history/es/LocationUtils.js","webpack:///./node_modules/history/es/PathUtils.js","webpack:///./node_modules/history/es/createBrowserHistory.js","webpack:///./node_modules/history/es/createHashHistory.js","webpack:///./node_modules/history/es/createMemoryHistory.js","webpack:///./node_modules/history/es/createTransitionManager.js","webpack:///./node_modules/history/es/index.js","webpack:///./node_modules/hoist-non-react-statics/index.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/node-fetch/browser.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/preact-compat/dist/preact-compat.es.js","webpack:///./node_modules/preact/dist/preact.esm.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/prop-types/checkPropTypes.js","webpack:///./node_modules/prop-types/factoryWithTypeCheckers.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/verifySubselectors.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./node_modules/react-redux/es/utils/PropTypes.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/utils/verifyPlainObject.js","webpack:///./node_modules/react-redux/es/utils/warning.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/react-router-dom/es/HashRouter.js","webpack:///./node_modules/react-router-dom/es/Link.js","webpack:///./node_modules/react-router-dom/es/MemoryRouter.js","webpack:///./node_modules/react-router-dom/es/NavLink.js","webpack:///./node_modules/react-router-dom/es/Prompt.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Route.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router-dom/es/StaticRouter.js","webpack:///./node_modules/react-router-dom/es/Switch.js","webpack:///./node_modules/react-router-dom/es/index.js","webpack:///./node_modules/react-router-dom/es/matchPath.js","webpack:///./node_modules/react-router-dom/es/withRouter.js","webpack:///./node_modules/react-router-redux/lib/actions.js","webpack:///./node_modules/react-router-redux/lib/index.js","webpack:///./node_modules/react-router-redux/lib/middleware.js","webpack:///./node_modules/react-router-redux/lib/reducer.js","webpack:///./node_modules/react-router-redux/lib/sync.js","webpack:///./node_modules/react-router/es/MemoryRouter.js","webpack:///./node_modules/react-router/es/Prompt.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router/es/Route.js","webpack:///./node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router/es/StaticRouter.js","webpack:///./node_modules/react-router/es/Switch.js","webpack:///./node_modules/react-router/es/matchPath.js","webpack:///./node_modules/react-router/es/withRouter.js","webpack:///./node_modules/react-router/node_modules/isarray/index.js","webpack:///./node_modules/react-router/node_modules/path-to-regexp/index.js","webpack:///./node_modules/redux-thunk/lib/index.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./node_modules/resolve-pathname/index.js","webpack:///./node_modules/symbol-observable/es/index.js","webpack:///./node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/value-equal/index.js","webpack:///./node_modules/warning/browser.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/module.js"],"sourcesContent":[" \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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\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 = \"./app/client/index.jsx\");\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = require('redux');\n\nvar _api = require('./api');\n\nvar _live = require('./live/live.actions');\n\nvar liveActions = _interopRequireWildcard(_live);\n\nvar _queue = require('./queue/queue.actions');\n\nvar queueActions = _interopRequireWildcard(_queue);\n\nvar _system = require('./system/system.actions');\n\nvar systemActions = _interopRequireWildcard(_system);\n\nvar _socket = require('./socket/socket.actions');\n\nvar socketActions = _interopRequireWildcard(_socket);\n\nvar _dataset = require('./dataset/dataset.actions');\n\nvar datasetActions = _interopRequireWildcard(_dataset);\n\nvar _audioPlayer = require('./common/audioPlayer/audioPlayer.actions');\n\nvar audioPlayerActions = _interopRequireWildcard(_audioPlayer);\n\nvar _store = require('./store');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = Object.keys(_api.actions).map(function (a) {\n return [a, _api.actions[a]];\n}).concat([['live', liveActions], ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions], ['audioPlayer', audioPlayerActions]]).map(function (p) {\n return [p[0], (0, _redux.bindActionCreators)(p[1], _store.dispatch)];\n}).concat([['socket', socketActions]]).reduce(function (a, b) {\n return (a[b[0]] = b[1]) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_action = undefined;\nexports.crud_actions = crud_actions;\n\nvar _crud = require('./crud.fetch');\n\nvar _crud2 = require('./crud.types');\n\nvar _crud3 = require('./crud.upload');\n\nfunction crud_actions(type) {\n var fetch_type = (0, _crud.crud_fetch)(type);\n return ['index', 'show', 'create', 'update', 'destroy'].reduce(function (lookup, param) {\n lookup[param] = crud_action(type, param, function (q) {\n return fetch_type[param](q);\n });\n return lookup;\n }, {\n action: function action(method, fn) {\n return crud_action(type, method, fn);\n },\n upload: function upload(id, fd) {\n return (0, _crud3.upload_action)(type, id, fd);\n }\n });\n}\n\nvar crud_action = exports.crud_action = function crud_action(type, method, fn) {\n return function (q) {\n return function (dispatch) {\n return new Promise(function (resolve, reject) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_loading') });\n fn(q).then(function (data) {\n dispatch({ type: (0, _crud2.as_type)(type, method), data: data });\n resolve(data);\n }).catch(function (e) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_error') });\n reject(e);\n });\n });\n };\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_fetch = crud_fetch;\nexports.postBody = postBody;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction crud_fetch(type, tag) {\n var uri = '/api/' + type + '/' + (tag || '');\n return {\n index: function index(q) {\n return (0, _nodeFetch2.default)(_get_url(uri, q), _get_headers()).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n show: function show(id) {\n return (0, _nodeFetch2.default)(uri + id).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n create: function create(data) {\n return (0, _nodeFetch2.default)(uri, post(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n update: function update(data) {\n return (0, _nodeFetch2.default)(uri + data.id, put(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n destroy: function destroy(data) {\n return (0, _nodeFetch2.default)(uri + data.id, _destroy(data)).then(function (req) {\n return req.json();\n }).catch(error);\n }\n };\n}\n\nfunction _get_url(_url, data) {\n var url = new URL(window.location.origin + _url);\n if (data) {\n Object.keys(data).forEach(function (key) {\n return url.searchParams.append(key, data[key]);\n });\n }\n return url;\n}\nfunction _get_headers() {\n return {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction post(data) {\n return {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction postBody(data) {\n return {\n method: 'POST',\n body: data,\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction put(data) {\n return {\n method: 'PUT',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction _destroy(data) {\n return {\n method: 'DELETE',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction error(err) {\n console.warn(err);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar as_type = exports.as_type = function as_type(a, b) {\n return [a, b].join('_').toUpperCase();\n};\n\nvar crud_type = exports.crud_type = function crud_type(type) {\n var actions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return actions.concat(['index_loading', 'index', 'index_error', 'show_loading', 'show', 'show_error', 'create_loading', 'create', 'create_error', 'update_loading', 'update', 'update_error', 'destroy_loading', 'destroy', 'destroy_error', 'upload_loading', 'upload_progress', 'upload_waiting', 'upload_complete', 'upload_error', 'sort']).reduce(function (a, b) {\n return (a[b] = as_type(type, b)) && a;\n }, {});\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.upload_action = undefined;\nexports.crud_upload = crud_upload;\n\nvar _crud = require('./crud.types');\n\nfunction _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; }\n\nfunction crud_upload(type, fd, data, dispatch) {\n return new Promise(function (resolve, reject) {\n var id = data.id;\n\n Object.keys(data).forEach(function (key) {\n if (key !== 'id') {\n fd.append(key, data[key]);\n }\n });\n\n var xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n xhr.addEventListener(\"abort\", uploadCancelled, false);\n xhr.open(\"POST\", '/api/' + type + '/' + id + '/upload/');\n xhr.send(fd);\n\n dispatch && dispatch({ type: (0, _crud.as_type)(type, 'upload_loading') });\n\n var complete = false;\n\n function uploadProgress(e) {\n if (e.lengthComputable) {\n var percent = Math.round(e.loaded * 100 / e.total) || 0;\n if (percent > 99) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_waiting'),\n percent: percent\n }, type, id));\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_progress'),\n percent: percent\n }, type, id));\n }\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'unable to compute upload progress'\n }, type, id));\n }\n }\n\n function uploadComplete(e) {\n var parsed = void 0;\n try {\n parsed = JSON.parse(e.target.responseText);\n } catch (e) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(e);\n return;\n }\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_complete'),\n data: parsed\n }, type, id));\n if (parsed.files && parsed.files.length) {\n parsed.files.forEach(function (file) {\n console.log(file);\n dispatch && dispatch({\n type: (0, _crud.as_type)('file', 'create'),\n data: file\n });\n });\n }\n resolve(parsed);\n }\n\n function uploadFailed(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(evt);\n }\n\n function uploadCancelled(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload cancelled'\n }, type, id));\n reject(evt);\n }\n });\n}\n\nvar upload_action = exports.upload_action = function upload_action(type, id, fd) {\n return function (dispatch) {\n return crud_upload(type, id, fd, dispatch);\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.actions = exports.parser = exports.util = undefined;\n\nvar _crud = require('./crud.actions');\n\nvar _util = require('../util');\n\nvar util = _interopRequireWildcard(_util);\n\nvar _parser = require('./parser');\n\nvar parser = _interopRequireWildcard(_parser);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/*\nfor our crud events, create corresponding actions\nthe actions fire a 'loading' event, call the underlying api method, and then resolve.\nso you can do ... \n import { folderActions } from '../../api'\n folderActions.index({ module: 'samplernn' })\n folderActions.show(12)\n folderActions.create({ module: 'samplernn', name: 'foo' })\n folderActions.update(12, { module: 'pix2pix' })\n folderActions.destroy(12, { confirm: true })\n folderActions.upload(12, form_data)\n*/\n\nexports.util = util;\nexports.parser = parser;\nvar actions = exports.actions = ['folder', 'file', 'dataset', 'task', 'user'].reduce(function (a, b) {\n return (a[b] = (0, _crud.crud_actions)(b)) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.tumblr = exports.thumbnail = exports.loadImage = exports.tag = exports.parse = exports.lookup = exports.integrations = undefined;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _fetchJsonp = require('fetch-jsonp');\n\nvar _fetchJsonp2 = _interopRequireDefault(_fetchJsonp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar integrations = exports.integrations = [{\n type: 'image',\n regex: /\\.(jpeg|jpg|gif|png|svg)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var img = new Image();\n img.onload = function () {\n if (!img) return;\n var width = img.naturalWidth,\n height = img.naturalHeight;\n img = null;\n done({\n url: url,\n type: \"image\",\n token: \"\",\n thumbnail: \"\",\n title: \"\",\n width: width,\n height: height\n });\n };\n img.src = url;\n if (img.complete) {\n img.onload();\n }\n },\n tag: function tag(media) {\n return '';\n }\n}, {\n type: 'video',\n regex: /\\.(mp4|webm)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var video = document.createElement(\"video\");\n var url_parts = url.replace(/\\?.*$/, \"\").split(\"/\");\n var filename = url_parts[url_parts.length - 1];\n video.addEventListener(\"loadedmetadata\", function () {\n var width = video.videoWidth,\n height = video.videoHeight;\n video = null;\n done({\n url: url,\n type: \"video\",\n token: url,\n thumbnail: \"/public/assets/img/video-thumbnail.png\",\n title: filename,\n width: width,\n height: height\n });\n });\n video.src = url;\n video.load();\n },\n tag: function tag(media) {\n return '