1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var fs = require("fs");
|
4 | var path = require("path");
|
5 | var os = require("os");
|
6 | var cmn = require("@akashic/akashic-cli-commons");
|
7 | var archiver = require("archiver");
|
8 | var readdir = require("fs-readdir-recursive");
|
9 | var convert_1 = require("./convert");
|
10 | function _createExportInfo(param) {
|
11 | return {
|
12 | version: JSON.parse(fs.readFileSync(path.resolve(__dirname, "..", "package.json"), "utf8")).version,
|
13 | option: {
|
14 | force: !!param.force,
|
15 | strip: !!param.strip,
|
16 | minify: !!param.minify,
|
17 | bundle: !!param.bundle,
|
18 | babel: !!param.babel,
|
19 | omitEmptyJs: !!param.omitEmptyJs
|
20 | }
|
21 | };
|
22 | }
|
23 | function _completeExportZipParameterObject(param) {
|
24 | return {
|
25 | bundle: !!param.bundle,
|
26 | babel: !!param.babel,
|
27 | minify: !!param.minify,
|
28 | strip: !!param.strip,
|
29 | source: param.source || process.cwd(),
|
30 | dest: param.dest || "./game.zip",
|
31 | force: !!param.force,
|
32 | logger: param.logger || new cmn.ConsoleLogger(),
|
33 | hashLength: param.hashLength,
|
34 | omitEmptyJs: param.omitEmptyJs,
|
35 | exportInfo: param.exportInfo || _createExportInfo(param)
|
36 | };
|
37 | }
|
38 | exports._completeExportZipParameterObject = _completeExportZipParameterObject;
|
39 |
|
40 | function _checkDestinationValidity(dest, force) {
|
41 | return new Promise(function (resolve, reject) {
|
42 | fs.stat(path.resolve(dest), function (error, stat) {
|
43 | if (error) {
|
44 | if (error.code === "ENOENT") {
|
45 | resolve();
|
46 | }
|
47 | else {
|
48 | reject(new Error("Error code " + error.code + " for " + dest));
|
49 | }
|
50 | return;
|
51 | }
|
52 | if (!force)
|
53 | reject(new Error(dest + " already exists. Use --force option to overwrite."));
|
54 | else
|
55 | resolve();
|
56 | });
|
57 | });
|
58 | }
|
59 | exports._checkDestinationValidity = _checkDestinationValidity;
|
60 | function promiseExportZip(param) {
|
61 | param = _completeExportZipParameterObject(param);
|
62 | var outZip = /\.zip$/.test(param.dest);
|
63 | var destDir = outZip ? fs.mkdtempSync(path.join(os.tmpdir(), "akashic-export-zip-")) : param.dest;
|
64 | return _checkDestinationValidity(param.dest, param.force)
|
65 | .then(function () {
|
66 | return convert_1.convertGame({
|
67 | bundle: param.bundle,
|
68 | babel: param.babel,
|
69 | minify: param.minify,
|
70 | strip: param.strip,
|
71 | source: param.source,
|
72 | dest: destDir,
|
73 | hashLength: param.hashLength,
|
74 | omitEmptyJs: param.omitEmptyJs,
|
75 | logger: param.logger,
|
76 | exportInfo: param.exportInfo
|
77 | });
|
78 | })
|
79 | .then(function () {
|
80 | if (!outZip)
|
81 | return;
|
82 | return new Promise(function (resolve, reject) {
|
83 | var files = readdir(destDir).map(function (p) { return ({
|
84 | src: path.resolve(destDir, p),
|
85 | entryName: p
|
86 | }); });
|
87 | var ostream = fs.createWriteStream(param.dest);
|
88 | var archive = archiver("zip");
|
89 | ostream.on("close", function () { return resolve(); });
|
90 | archive.on("error", function (err) { return reject(err); });
|
91 | archive.pipe(ostream);
|
92 | files.forEach(function (f) { return archive.file(f.src, { name: f.entryName }); });
|
93 | archive.finalize();
|
94 | });
|
95 |
|
96 | });
|
97 | }
|
98 | exports.promiseExportZip = promiseExportZip;
|
99 | function exportZip(param, callback) {
|
100 | promiseExportZip(param).then(function () { return callback(); }, callback);
|
101 | }
|
102 | exports.exportZip = exportZip;
|