UNPKG

@image/packer

Version:
81 lines (80 loc) 2.83 kB
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; }); }