@image/packer
Version:
image packer
81 lines (80 loc) • 2.83 kB
JavaScript
import { spriteProcess } from './index';
import { perPageManifestsSaver } from './perPageManifestsSaver';
export function packer(atlases, generateOptions, imageProcessor, environment, manifestsSaver, log) {
var logger = log ? log : {
assert: function () {
}, error: function () {
}, info: function () {
}, log: function () {
}, trace: function () {
}, warn: function () {
}
};
var output;
return Promise.resolve()
.then(function () {
// createCache
return environment.load();
})
.then(function () {
// cleanCache
if (generateOptions.cleanCache) {
logger.info('Cleaning cache folder');
return environment.clean();
}
return;
})
.then(function () {
// cleanOutput
if (generateOptions.cleanOutput) {
logger.info('Cleaning output folder');
return environment.cleanPath(generateOptions.outputPath);
}
return;
})
.then(function () {
// ensurePathsExist
return Promise.all([
environment.ensureDir(generateOptions.outputPath)
]);
})
.then(function () {
return spriteProcess(atlases, generateOptions.concurrencyLimit, environment, imageProcessor, logger, function (p) { return environment.glob(generateOptions.inputPath ? (generateOptions.inputPath + '/' + p) : p); })
.then(function (resp) {
output = resp;
});
})
.then(function () {
// Save in case error occurs during createAndSaveLoadingManifests step
return environment.save();
})
.then(function () {
return Promise
.all(output.atlases.map(function (atlas, atlasIndex) {
return Promise
.all(atlas.sheets.map(function (sheet, pageIndex) {
var p = generateOptions.outputDestination(atlasIndex, pageIndex, output);
var outputImagePath = environment.joinPaths(generateOptions.outputPath, p);
var temp = sheet.path;
sheet.path = outputImagePath;
return environment.copyTo(temp, outputImagePath);
}));
}));
})
.then(function () {
// process atlases
if (manifestsSaver) {
return manifestsSaver(generateOptions, environment, output);
}
else {
if (generateOptions.pageManifestBuilder) {
return perPageManifestsSaver(generateOptions, environment, output);
}
return Promise.resolve();
}
})
.then(function () {
logger.info('Done');
return output;
});
}