@kobold/excel
Version:
Kobold excel data handler
72 lines (52 loc) • 2.22 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.Excel = void 0;
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/map"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _files = require("./files");
var _sheet = require("./sheet");
var _utilities = require("./utilities");
// TODO: Where should this live as well? Here? In a more obvious location? Next to the enum?
const fallbackLanguage = _files.Language.ENGLISH;
class Excel {
constructor(opts) {
(0, _defineProperty2.default)(this, "kobold", void 0);
(0, _defineProperty2.default)(this, "defaultLanguage", void 0);
(0, _defineProperty2.default)(this, "rootListCache", void 0);
(0, _defineProperty2.default)(this, "sheetCache", new _map.default());
this.kobold = opts.kobold;
this.defaultLanguage = opts.language;
}
async getSheet(RowClass, opts) {
var _ref, _opts$language;
const language = (_ref = (_opts$language = opts === null || opts === void 0 ? void 0 : opts.language) !== null && _opts$language !== void 0 ? _opts$language : this.defaultLanguage) !== null && _ref !== void 0 ? _ref : fallbackLanguage;
const cacheKey = `${RowClass.sheet}:${language}`;
let sheet = this.sheetCache.get(cacheKey);
if (sheet != null) {
return sheet;
} // Make sure the sheet (technically) exists
const sheetName = RowClass.sheet;
const {
sheets
} = await this.getRootList();
(0, _utilities.assert)(sheets.has(sheetName), `Sheet ${sheetName} is not listed in the root excel list.`);
sheet = new _sheet.Sheet({
kobold: this.kobold,
RowClass,
language
});
this.sheetCache.set(cacheKey, sheet);
return sheet;
}
async getRootList() {
if (this.rootListCache == null) {
this.rootListCache = await this.kobold.getFile('exd/root.exl', _files.ExcelList);
}
return this.rootListCache;
}
}
exports.Excel = Excel;