eso-manifest
Version:
Generate a manifest for an Elder Scrolls Online addon.
93 lines (92 loc) • 5.31 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fs_1 = __importDefault(require("fs"));
; // Enables using keys as strings
/**
* Generates a manifest text file Elder Scrolls Online addons.
* See Manifest type definition for available options.
* Also see https://wiki.esoui.com/Addon_manifest_(.txt)_format
*
* @param manifestFileName Name of the manifest file to create.
* @param manifest Data to write to the manifest file.
* @param fileDependencies Array of strings
* @param printDisclosure
*/
function generateManifest(manifestFileName, manifest) {
return __awaiter(this, void 0, void 0, function () {
var keys, manifestLines;
return __generator(this, function (_a) {
keys = [
"Title",
"APIVersion",
"AddOnVersion",
"Author",
"Description",
"Version",
"SavedVariables",
"DependsOn",
"OptionalDependsOn",
"IsLibrary"
];
manifestLines = ["# Manifest generated using eso-manifest. https://www.npmjs.com/package/eso-manifest"];
keys.forEach(function (item) {
if (manifest[item]) {
manifestLines = manifestLines.concat("## " + item + ": " + manifest[item]);
}
});
manifestLines = manifestLines.concat(manifest.Files ? manifest.Files : []);
manifestLines = manifestLines.concat("\n# This Add-on is not created by, affiliated with, or sponsored by, ZeniMax Media Inc. or its affiliates.\n# The Elder Scrolls® and related logos are registered trademarks or trademarks of ZeniMax Media Inc. in the United States\n# and/or other countries. All rights reserved.");
// TODO From wiki: https://wiki.esoui.com/Addon_manifest_(.txt)_format
// To prevent issues, make sure the file is UTF-8 w/o BOM. UTF-8-BOM and ANSI can lead to some different issues during AddOn loading etc.. Also make sure that each line is not longer than 301 bytes. Anything that goes beyond that will be ignored by the game.
return [2 /*return*/, new Promise(function (resolve, reject) { return fs_1.default.writeFile(manifestFileName, manifestLines.join('\n'), function (error) {
if (error) {
reject(error);
}
else {
console.log("Saved manifest to " + manifestFileName);
resolve(manifestLines);
}
}); })];
});
});
}
exports.generateManifest = generateManifest;
;