UNPKG

4.41 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var fs = require("fs");
4var path = require("path");
5function removeScriptFromFilePaths(gamejson, filePaths) {
6 var table = {};
7 filePaths.forEach(function (p) { return table[p] = true; });
8 var assets = {};
9 Object.keys(gamejson.assets).forEach(function (aid) {
10 var a = gamejson.assets[aid];
11 if (a.type === "script" && table.hasOwnProperty(a.path))
12 return;
13 assets[aid] = gamejson.assets[aid];
14 });
15 gamejson.assets = assets;
16 if (gamejson.globalScripts)
17 gamejson.globalScripts = gamejson.globalScripts.filter(function (p) { return !table.hasOwnProperty(p); });
18}
19exports.removeScriptFromFilePaths = removeScriptFromFilePaths;
20function makeScriptAssetPath(filename) {
21 return "script/" + filename + ".js";
22}
23exports.makeScriptAssetPath = makeScriptAssetPath;
24function findUniqueScriptAssetName(gamejson, prefix) {
25 var idTable = {};
26 var pathTable = {};
27 Object.keys(gamejson.assets).forEach(function (aid) { return (idTable[aid] = pathTable[gamejson.assets[aid].path] = true); });
28 (gamejson.globalScripts || []).forEach(function (p) { return (idTable[p] = pathTable[p] = true); });
29 if (!idTable.hasOwnProperty(prefix) && !pathTable.hasOwnProperty(makeScriptAssetPath(prefix)))
30 return prefix;
31 var i = 0;
32 while (idTable.hasOwnProperty(prefix + i) || pathTable.hasOwnProperty(makeScriptAssetPath(prefix + i)))
33 ++i;
34 return prefix + i;
35}
36exports.findUniqueScriptAssetName = findUniqueScriptAssetName;
37function addScriptAsset(gamejson, prefix) {
38 var aid = findUniqueScriptAssetName(gamejson, prefix);
39 var filePath = makeScriptAssetPath(aid);
40 gamejson.assets[aid] = {
41 type: "script",
42 global: true,
43 path: filePath
44 };
45 return filePath;
46}
47exports.addScriptAsset = addScriptAsset;
48function makeUniqueAssetPath(gamejson, assetPath) {
49 var targetAssetPath = assetPath;
50 var targetDirName = path.dirname(assetPath);
51 var targetExtName = path.extname(assetPath);
52 var targetFileNamePrefix = path.basename(assetPath, targetExtName);
53 var assetIds = Object.keys(gamejson.assets);
54 for (var index = 0; assetIds.some(function (aid) { return gamejson.assets[aid].path === targetAssetPath; }); index++) {
55 targetAssetPath = path.posix.join(targetDirName, targetFileNamePrefix + index + targetExtName);
56 }
57 return targetAssetPath;
58}
59exports.makeUniqueAssetPath = makeUniqueAssetPath;
60function extractFilePaths(gamejson, basedir) {
61 var result = [];
62 Object.keys(gamejson.assets).forEach(function (aid) {
63 var a = gamejson.assets[aid];
64 if (a.type !== "audio") {
65 result.push(a.path);
66 return;
67 }
68 // audio のみ拡張子を補完する特殊対応: 補完して存在するファイルのみ扱う
69 [".ogg", ".aac", ".mp4"].forEach(function (ext) {
70 try {
71 if (fs.statSync(path.resolve(basedir, a.path + ext)).isFile())
72 result.push(a.path + ext);
73 }
74 catch (e) {
75 // do nothing.
76 }
77 });
78 });
79 (gamejson.globalScripts || []).forEach(function (p) { return result.push(p); });
80 return result;
81}
82exports.extractFilePaths = extractFilePaths;
83function extractScriptAssetFilePaths(gamejson) {
84 var result = [];
85 Object.keys(gamejson.assets).forEach(function (aid) { return (gamejson.assets[aid].type === "script") && result.push(gamejson.assets[aid].path); });
86 (gamejson.globalScripts || []).forEach(function (p) { return (/\.js$/.test(p)) && result.push(p); });
87 return result;
88}
89exports.extractScriptAssetFilePaths = extractScriptAssetFilePaths;
90function isScriptJsFile(filePath) {
91 return /^script\/.+(\.js$)/.test(filePath);
92}
93exports.isScriptJsFile = isScriptJsFile;
94function isEmptyScriptJs(str) {
95 if (!str || str.length === 0)
96 return true;
97 // jsファイルの中身が、Typescriptのinterfaceの記述のみの場合は空と同様とする
98 // TypeScirpt 2.2.0以下かminifyされた場合は、"use strict";だけの出力となる
99 var regex = /^"use strict";[\r\n\s]*(Object.defineProperty\(exports,\s*("__esModule",)\s*?({\s*?value\s*:\s*?[true|!0]+\s*})\);)*$/;
100 return regex.test(str.trim());
101}
102exports.isEmptyScriptJs = isEmptyScriptJs;