diff --git a/.eslintrc.yml b/.eslintrc.yml
index 63e0f34..958ac60 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -2,6 +2,7 @@ env:
commonjs: true
es6: true
node: true
+ jest/globals: true
extends: 'eslint:recommended'
globals:
Atomics: readonly
diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml
new file mode 100644
index 0000000..b00b0ca
--- /dev/null
+++ b/.github/workflows/action.yml
@@ -0,0 +1,25 @@
+name: Test on Push
+
+on: [push]
+
+jobs:
+ jest:
+ name: Jest Tests
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [12.x]
+
+ steps:
+ - uses: actions/checkout@v1
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: Test
+ run: |
+ npm i --also=dev
+ npm run jest
+ env:
+ CI: true
\ No newline at end of file
diff --git a/README.md b/README.md
index 7ddc041..8e82185 100644
--- a/README.md
+++ b/README.md
@@ -44,3 +44,4 @@ saratoga.on('error', console.error);
## Maintainer
- [@Saya#0113](https://github.com/Deivu)
+- [@Rattley#1529](https://github.com/0t4u)
diff --git a/docs/js/docma-web.js b/docs/js/docma-web.js
index 084a5ee..8a77ebc 100644
--- a/docs/js/docma-web.js
+++ b/docs/js/docma-web.js
@@ -6,7 +6,7 @@
* http://dustjs.com/
* Copyright (c) 2017 Aleksander Williams; Released under the MIT License */
!function(a,b){"function"==typeof define&&define.amd&&define.amd.dust===!0?define(["dust.core"],b):"object"==typeof exports?(module.exports=b(require("dustjs-linkedin")),module.exports.registerWith=b):b(a.dust)}(this,function(dust){function a(a,b,c){c=c||"INFO",a=a?"{@"+a+"}: ":"",dust.log(a+b,c)}function b(b){k[b]||(a(b,"Deprecation warning: "+b+" is deprecated and will be removed in a future version of dustjs-helpers","WARN"),a(null,"For help and a deprecation timeline, see https://github.com/linkedin/dustjs-helpers/wiki/Deprecated-Features#"+b.replace(/\W+/g,""),"WARN"),k[b]=!0)}function c(a){return a.stack.tail&&a.stack.tail.head&&"undefined"!=typeof a.stack.tail.head.__select__}function d(a){return c(a)&&a.get("__select__")}function e(a,b){var c,d=a.stack.head,e=a.rebase();a.stack&&a.stack.tail&&(e.stack=a.stack.tail);var f={isPending:!1,isResolved:!1,isDeferredComplete:!1,deferreds:[]};for(c in b)f[c]=b[c];return e.push({__select__:f}).push(d,a.stack.index,a.stack.of)}function f(a){var b,c;if(a.isDeferredPending=!0,a.deferreds.length)for(a.isDeferredComplete=!0,b=0,c=a.deferreds.length;c>b;b++)a.deferreds[b]();a.isDeferredPending=!1}function g(a,b){return"function"==typeof b?b.toString().replace(/(^\s+|\s+$)/gm,"").replace(/\n/gm,"").replace(/,\s*/gm,", ").replace(/\)\{/gm,") {"):b}function h(a,b){return function(c,d,e,f){return i(c,d,e,f,a,b)}}function i(b,c,e,f,g,h){var i,k,l,m,n=e.block,o=e["else"],p=d(c)||{};if(p.isResolved&&!p.isDeferredPending)return b;if(f.hasOwnProperty("key"))k=f.key;else{if(!p.hasOwnProperty("key"))return a(g,"No key specified","WARN"),b;k=p.key}return m=f.type||p.type,k=j(c.resolve(k),m),l=j(c.resolve(f.value),m),h(k,l)?(p.isPending||(i=!0,p.isPending=!0),n&&(b=b.render(n,c)),i&&(p.isResolved=!0)):o&&(b=b.render(o,c)),b}function j(a,b){switch(b&&(b=b.toLowerCase()),b){case"number":return+a;case"string":return String(a);case"boolean":return a="false"===a?!1:a,Boolean(a);case"date":return new Date(a)}return a}var k={},l={tap:function(a,c,d){return b("tap"),d.resolve(a)},sep:function(a,b,c){var d=c.block;return b.stack.index===b.stack.of-1?a:d?d(a,b):a},first:function(a,b,c){return 0===b.stack.index?c.block(a,b):a},last:function(a,b,c){return b.stack.index===b.stack.of-1?c.block(a,b):a},contextDump:function(b,c,d,e){var f,h,i=c.resolve(e.to),j=c.resolve(e.key);switch(j){case"full":f=c.stack;break;default:f=c.stack.head}switch(h=JSON.stringify(f,g,2),i){case"console":a("contextDump",h);break;default:h=h.replace(/a}),lte:h("lte",function(a,b){return b>=a}),gt:h("gt",function(a,b){return a>b}),gte:h("gte",function(a,b){return a>=b}),any:function(b,c,e){var f=d(c);return f?f.isDeferredComplete?a("any","Must not be nested inside {@any} or {@none} block","ERROR"):b=b.map(function(a){f.deferreds.push(function(){f.isResolved&&(a=a.render(e.block,c)),a.end()})}):a("any","Must be used inside a {@select} block","ERROR"),b},none:function(b,c,e){var f=d(c);return f?f.isDeferredComplete?a("none","Must not be nested inside {@any} or {@none} block","ERROR"):b=b.map(function(a){f.deferreds.push(function(){f.isResolved||(a=a.render(e.block,c)),a.end()})}):a("none","Must be used inside a {@select} block","ERROR"),b},size:function(a,b,c,d){var e,f,g=d.key;if(g=b.resolve(d.key),g&&g!==!0)if(dust.isArray(g))e=g.length;else if(!isNaN(parseFloat(g))&&isFinite(g))e=g;else if("object"==typeof g){e=0;for(f in g)g.hasOwnProperty(f)&&e++}else e=(g+"").length;else e=0;return a.write(e)}};for(var m in l)dust.helpers[m]=l[m];return dust});
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.page=e()}(this,function(){"use strict";function t(t){return r(a(t))}var p=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},o=c,e=a,n=r,i=h,y=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(t){for(var e,n=[],i=0,o=0,r="";null!=(e=y.exec(t));){var a=e[0],s=e[1],h=e.index;if(r+=t.slice(o,h),o=h+a.length,s)r+=s[1];else{r&&(n.push(r),r="");var c=e[2],p=e[3],u=e[4],f=e[5],l=e[6],d=e[7],g="+"===l||"*"===l,v="?"===l||"*"===l,m=c||"/",w=u||f||(d?".*":"[^"+m+"]+?");n.push({name:p||i++,prefix:c||"",delimiter:m,optional:v,repeat:g,pattern:w.replace(/([=!:$\/()])/g,"\\$1")})}}return o]+>)?~?(.*)/,"$2").replace(/^"[^"]+"\.?~?([^"]+)$/,"$1").replace(/^(module\.)?exports\./,"").replace(/^module:/,""))}function getMetaCodeName(e){return cleanName(Utils.notate(e,"meta.code.name")||"")}function identity(e){return e}function hasConstructorTag(e){return/\*\s+@construct(s|or)\b/.test(e.comment)}Utils.type=function(e){return Object.prototype.toString.call(e).match(/\s(\w+)/i)[1].toLowerCase()},Utils.notate=function(e,t){if("object"==typeof e){var n,r=Array.isArray(t)?t:t.split("."),i=r[0];if(i)return n=e[i],1"+e+"
"}).join("")}).join("")},Utils.parseLinks=function(e,l){if("string"!=typeof e)return"";l=l||{};var t=e.replace(/\{@link +([^}]*?)\}/g,function(e,t){var n,r,i=t.split("|");return 1===i.length?n=r=i[0].trim():(n=i[0].trim(),r=i[1].trim()),!1===/[/?&=]/.test(n)&&"#"!==n[0]&&(n="#"+n),'"+r+" "});return Utils.parseTicks(t)},Utils.parse=function(e,t){return t=t||{},e=Utils.trimLeft(e),e=Utils.parseNewLines(e,t),e=Utils.parseTicks(e),Utils.parseLinks(e,t)},Utils.normalizeTabs=function(e){if("string"!=typeof e)return"";var r,t=e.match(/^\s*/gm),n=1/0;if(t.forEach(function(e,t){e=e.replace(/\t/g," "),0<"'`\n\r]/g,"").toLowerCase()},Utils.getCodeFileInfo=function(e){return{filename:Utils.notate(e,"meta.filename"),lineno:Utils.notate(e,"meta.lineno"),path:Utils.notate(e,"meta.path")}},Utils.getSymbolLink=function(e,t){if("string"!=typeof t)return t.$docmaLink;var n=Utils.getSymbolByName(e,t);return n?n.$docmaLink:""};var reEndBrackets=/\[\]$/,reTypeParts=/^([^<]+?)(?:\.)?(?:<\(([^>)]+)\)>)?(?:<([^>]+)>)?(\[\])?$/;function _link(e,t,n){var r,i=reEndBrackets.test(t)?"[]":"",l=(t||"").replace(reEndBrackets,""),o=n||{},a="";return"internal"!==o.linkType&&(r=Utils._getTypeExternalLink(l))&&(a=' target="_blank" rel="noopener noreferrer"'),r||"external"===o.linkType||(r=Utils.getSymbolLink(e,l)),r&&(t='"+(o.displayText||l)+i+" "),t}function serializer(r){var i=[],l=[];return function(e,t){if(2e3|')}).join(', '))&&"<"+l+">",_link(t,r[1],n)+l+i},Utils.getTypes=function(t,e,n){var r=n||{},i="class"===e.kind?["class"]:Utils.notate(e,"type.names")||[];return i=i.map(function(e){return r.links&&(e=Utils._parseAnchorLinks(t,e,{linkType:r.links})),e}).join('| '),e.isEnum?"enum<"+i+">":i},Utils.getReturnTypes=function(r,e,t){var n=e.returns;if(!Array.isArray(n))return"void";var i=t||{},l=n.reduce(function(e,t){var n=Utils.notate(t,"type.names")||[];return i.links&&(n=n.map(function(e){return Utils._parseAnchorLinks(r,e,{linkType:i.links})})),e.concat(n)},[]);return 0|'):"void"},Utils.getCodeTags=function(n,e,t){var r=t||{};return e.map(function(e){if(r.links){var t=Utils._parseAnchorLinks(n,e,{linkType:r.links});return Utils._wrapCode(t,!1)}return Utils._wrapCode(e,!0)}).join(r.demileter||",")},Utils.getFormattedTypeList=function(n,e,t){if(!Array.isArray(e)||0===e.length)return"";var r=t||{},i=''+(r.delimeter||"|")+" ",l="boolean"!=typeof r.descriptions||r.descriptions,o=r.descDelimeter||" — ",a="",s=e.map(function(e){return l&&(a=(a=Utils.parse(e.description||"",{keepIfSingle:!0}))&&o+a),e.type?(e.type.names||[]).map(function(e){if(r.links){var t=Utils._parseAnchorLinks(n,e,{linkType:r.links});return Utils._wrapCode(t,!1)}return Utils._wrapCode(e,!0)}).join(i)+a:a?"— "+a:""});return 1"+s.join(" ")+" ":s},Utils.getEmittedEvents=function(n,e,t){if(!e||0===e.length)return"";var r,i,l=t||{},o=l.delimeter||", ";return(e||[]).map(function(e){if(r=e.split(/\s*[\s-—]\s*/g),i=(r[0]||"").trim(),l.links){var t=Utils._parseAnchorLinks(n,i,{linkType:l.links});return Utils._wrapCode(t,!1)}return Utils._wrapCode(i,!0)}).join(o)},Utils._find=function(e,t){if(!e||!t)return null;var n,r,i=null;for(n=0;n /g,">")),e=""+e+"",n?""+e+" ":e)},Utils._tokenize=function(e,t){"function"!=typeof t&&(t=identity);if(e.indexOf("```")<0)return[t(e,!1)];var n,r="```".length,i="",l="",o=[],a=!1;for(n=0;nr&&(i=i.slice(-r)),"```"===i&&(l=(a=!a)?(o.push(t(l.slice(0,-r),!1)),i):(o.push(t(l,!0)),""));return o},Utils._ensureSlash=function(e,t,n){return t?(e&&"/"!==t.slice(0,1)&&(t="/"+t),n&&"/"!==t.slice(-1)&&(t+="/"),t):e||n?"/":""},Utils._safeStringify=function(t,e,n){try{return JSON.stringify(t,serializer(e),n)}catch(e){return String(t)}},Utils.DOM={};var ATTR_BODY_STYLE="data-body-style";Utils.DOM.getOffset=function(e){var t="object"==typeof e?e:document.getElementById(e);if(t){var n=t.getBoundingClientRect();if(n.width||n.height||t.getClientRects().length){var r=document.documentElement;return{top:n.top+window.pageYOffset-r.clientTop,left:n.left+window.pageXOffset-r.clientLeft}}}},Utils.DOM.scrollTo=function(e){var t=document.documentElement||document.body;if(e=decodeHash(e||window.location.hash||"")){var n=document.getElementById(e);if(n){var r=Utils.DOM.getOffset(n);r&&(t.scrollTop=r.top)}}else t.scrollTop=0},Utils.DOM._createChild=function(e,t,n){n=n||{};var r=document.createElement(t||"div");return Object.keys(n).forEach(function(e){r[e]=n[e]}),e.appendChild(r),r},Utils.DOM._removePrevBodyStyles=function(){for(var e=document.getElementsByTagName("head")[0].querySelectorAll("["+ATTR_BODY_STYLE+"]");0]+>)?~?(.*)/,"$2").replace(/^"[^"]+"\.?~?([^"]+)$/,"$1").replace(/^(module\.)?exports\./,"").replace(/^module:/,""))}function getMetaCodeName(e){return cleanName(Utils.notate(e,"meta.code.name")||"")}function identity(e){return e}function hasConstructorTag(e){return/\*\s+@construct(s|or)\b/.test(e.comment)}Utils.type=function(e){return Object.prototype.toString.call(e).match(/\s(\w+)/i)[1].toLowerCase()},Utils.notate=function(e,t){if("object"==typeof e){var n=Array.isArray(t)?t:t.split("."),t=n[0];if(t)return t=e[t],1"+e+""}).join("")}).join("")},Utils.parseLinks=function(e,i){if("string"!=typeof e)return"";i=i||{};e=e.replace(/\{@link +([^}]*?)\}/g,function(e,t){var n,r,t=t.split("|");return 1===t.length?n=r=t[0].trim():(n=t[0].trim(),r=t[1].trim()),'"+r+" "});return Utils.parseTicks(e)},Utils.parse=function(e,t){return t=t||{},e=Utils.trimLeft(e),e=Utils.parseNewLines(e,t),e=Utils.parseTicks(e),Utils.parseLinks(e,t)},Utils.normalizeTabs=function(e){if("string"!=typeof e)return"";var r,t=e.match(/^\s*/gm),n=1/0;return t.forEach(function(e,t){e=e.replace(/\t/g," "),0<"'`\n\r]/g,"").toLowerCase()},Utils.getCodeFileInfo=function(e){return{filename:Utils.notate(e,"meta.filename"),lineno:Utils.notate(e,"meta.lineno"),path:Utils.notate(e,"meta.path")}},Utils.getSymbolLink=function(e,t){if("string"!=typeof t)return t.$docmaLink;t=Utils.getSymbolByName(e,t);return t?t.$docmaLink:""};var reEndBrackets=/\[\]$/,reTypeParts=/^([^<]+?)(?:\.)?(?:<\(([^>)]+)\)>)?(?:<([^>]+)>)?(\[\])?$/;function _link(e,t,n){var r,i=reEndBrackets.test(t)?"[]":"",l=(t||"").replace(reEndBrackets,""),o=n||{},n="";return"internal"!==o.linkType&&(r=Utils._getTypeExternalLink(l))&&(n=' target="_blank" rel="noopener noreferrer"'),t=(r=!r&&"external"!==o.linkType?Utils.getSymbolLink(e,l):r)?'"+(o.displayText||l)+i+" ":t}function serializer(r){var i=[],l=[];return function(e,t){return 2e3|')}).join(', '))&&"<"+e+">",_link(t,r[1],n)+e+i},Utils.getTypes=function(t,e,n){var r=n||{},n=(n="class"===e.kind?["class"]:Utils.notate(e,"type.names")||[]).map(function(e){return e=r.links?Utils._parseAnchorLinks(t,e,{linkType:r.links}):e}).join('| ');return e.isEnum?"enum<"+n+">":n},Utils.getReturnTypes=function(n,e,t){e=e.returns;if(!Array.isArray(e))return"void";var r=t||{},e=e.reduce(function(e,t){t=Utils.notate(t,"type.names")||[];return r.links&&(t=t.map(function(e){return Utils._parseAnchorLinks(n,e,{linkType:r.links})})),e.concat(t)},[]);return 0|'):"void"},Utils.getCodeTags=function(n,e,t){var r=t||{};return e.map(function(e){if(r.links){var t=Utils._parseAnchorLinks(n,e,{linkType:r.links});return Utils._wrapCode(t,!1)}return Utils._wrapCode(e,!0)}).join(r.demileter||",")},Utils.getFormattedTypeList=function(n,e,t){if(!Array.isArray(e)||0===e.length)return"";var r=t||{},i=''+(r.delimeter||"|")+" ",l="boolean"!=typeof r.descriptions||r.descriptions,o=r.descDelimeter||" — ",a="",e=e.map(function(e){return l&&(a=(a=Utils.parse(e.description||"",{keepIfSingle:!0}))&&o+a),e.type?(e.type.names||[]).map(function(e){if(r.links){var t=Utils._parseAnchorLinks(n,e,{linkType:r.links});return Utils._wrapCode(t,!1)}return Utils._wrapCode(e,!0)}).join(i)+a:a?"— "+a:""});return 1"+e.join(" ")+" ":e},Utils.getEmittedEvents=function(t,e,n){if(!e||0===e.length)return"";var r,i=n||{},n=i.delimeter||", ";return(e||[]).map(function(e){if(r=e.split(/\s*[\s-—]\s*/g),r=(r[0]||"").trim(),i.links){e=Utils._parseAnchorLinks(t,r,{linkType:i.links});return Utils._wrapCode(e,!1)}return Utils._wrapCode(r,!0)}).join(n)},Utils._find=function(e,t){if(!e||!t)return null;for(var n,r=null,i=0;i"+(e=void 0===t||!0===t?e.replace(//g,">"):e)+"",n?""+e+" ":e)},Utils._tokenize=function(e,t){"function"!=typeof t&&(t=identity);if(e.indexOf("```")<0)return[t(e,!1)];for(var n="```".length,r="",i="",l=[],o=!1,a=0;an?r.slice(-n):r)&&(i=(o=!o)?(l.push(t(i.slice(0,-n),!1)),r):(l.push(t(i,!0)),""));return l},Utils._ensureSlash=function(e,t,n){return t?(e&&"/"!==t.slice(0,1)&&(t="/"+t),n&&"/"!==t.slice(-1)&&(t+="/"),t):e||n?"/":""},Utils._safeStringify=function(t,e,n){try{return JSON.stringify(t,serializer(e),n)}catch(e){return String(t)}},Utils.DOM={};var ATTR_BODY_STYLE="data-body-style";Utils.DOM.getOffset=function(e){var t="object"==typeof e?e:document.getElementById(e);if(t){e=t.getBoundingClientRect();if(e.width||e.height||t.getClientRects().length){t=document.documentElement;return{top:e.top+window.pageYOffset-t.clientTop,left:e.left+window.pageXOffset-t.clientLeft}}}},Utils.DOM.scrollTo=function(e){var t=document.documentElement||document.body;(e=decodeHash(e||window.location.hash||""))?!(e=document.getElementById(e))||(e=Utils.DOM.getOffset(e))&&(t.scrollTop=e.top):t.scrollTop=0},Utils.DOM._createChild=function(e,t,n){n=n||{};var r=document.createElement(t||"div");return Object.keys(n).forEach(function(e){r[e]=n[e]}),e.appendChild(r),r},Utils.DOM._removePrevBodyStyles=function(){for(var e=document.getElementsByTagName("head")[0].querySelectorAll("["+ATTR_BODY_STYLE+"]");0Saratoga, the starting point of this API","kind":"class","name":"Saratoga","augments":["EventEmitter"],"longname":"Saratoga","scope":"global","$longname":"Saratoga","$kind":"class","$docmaLink":"?api#Saratoga","$members":[{"comment":"/**\n * Azur Lane's Equipment related getter methods\n * @type {SaratogaEquipments}\n */","meta":{"range":[2293,2393],"filename":"Saratoga.js","lineno":84,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000115","name":"Saratoga#equipments","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Azur Lane's Equipment related getter methods
","type":{"names":["SaratogaEquipments"]},"name":"equipments","longname":"Saratoga#equipments","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#equipments","$kind":"property","$docmaLink":"?api#Saratoga#equipments"},{"comment":"/**\n * If Saratoga is ready to operate\n * @type {Boolean}\n */","meta":{"range":[1910,1997],"filename":"Saratoga.js","lineno":67,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000080","name":"Saratoga#ready","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"If Saratoga is ready to operate
","type":{"names":["Boolean"]},"name":"ready","longname":"Saratoga#ready","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#ready","$kind":"property","$docmaLink":"?api#Saratoga#ready"},{"comment":"/**\n * Azur Lane's Ship related getter methods\n * @type {SaratogaShips}\n */","meta":{"range":[2095,2185],"filename":"Saratoga.js","lineno":75,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000098","name":"Saratoga#ships","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Azur Lane's Ship related getter methods
","type":{"names":["SaratogaShips"]},"name":"ships","longname":"Saratoga#ships","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#ships","$kind":"property","$docmaLink":"?api#Saratoga#ships"},{"comment":"/**\n * Contains methods and props for managing cached data\n * @type {SaratogaStore}\n */","meta":{"range":[567,603],"filename":"Saratoga.js","lineno":19,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000053","name":"this.store","type":"NewExpression","value":"","paramnames":[]}},"description":"Contains methods and props for managing cached data
","type":{"names":["SaratogaStore"]},"name":"store","longname":"Saratoga#store","kind":"member","memberof":"Saratoga","scope":"instance","$longname":"Saratoga#store","$kind":"property","$docmaLink":"?api#Saratoga#store"},{"comment":"/**\n * Contains methods for updating Saratoga's local data & cache\n * @type {SaratogaUpdater}\n */","meta":{"range":[1770,1826],"filename":"Saratoga.js","lineno":59,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000070","name":"Saratoga#updater","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Contains methods for updating Saratoga's local data & cache
","type":{"names":["SaratogaUpdater"]},"name":"updater","longname":"Saratoga#updater","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#updater","$kind":"property","$docmaLink":"?api#Saratoga#updater"},{"comment":"/**\n * Emitted when there is a debug data\n * @event Saratoga#debug\n * @param {string} message Debug message\n * @memberof Saratoga\n */","meta":{"filename":"Saratoga.js","lineno":23,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{}},"description":"Emitted when there is a debug data
","kind":"event","name":"debug","params":[{"type":{"names":["string"]},"description":"Debug message
","name":"message"}],"memberof":"Saratoga","longname":"Saratoga#event:debug","scope":"instance","$longname":"Saratoga#event:debug","$kind":"event","$docmaLink":"?api#Saratoga#event:debug"},{"comment":"/**\n * Emitted when there is a pesky error\n * @event Saratoga#error\n * @param {Error} error The error encountered.\n * @memberof Saratoga\n * @example\n * Saratoga.on('error', console.error);\n */","meta":{"filename":"Saratoga.js","lineno":29,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{}},"description":"Emitted when there is a pesky error
","kind":"event","name":"error","params":[{"type":{"names":["Error"]},"description":"The error encountered.
","name":"error"}],"memberof":"Saratoga","examples":["Saratoga.on('error', console.error);"],"longname":"Saratoga#event:error","scope":"instance","$longname":"Saratoga#event:error","$kind":"event","$docmaLink":"?api#Saratoga#event:error"},{"comment":"/**\n * Emitted when Saratoga is ready\n * @event Saratoga#ready\n * @memberof Saratoga\n */","meta":{"filename":"Saratoga.js","lineno":49,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{}},"description":"Emitted when Saratoga is ready
","kind":"event","name":"ready","memberof":"Saratoga","longname":"Saratoga#event:ready","scope":"instance","$longname":"Saratoga#event:ready","$kind":"event","$docmaLink":"?api#Saratoga#event:ready"},{"comment":"/**\n * Emitted when there is an update available for local data. Only available when Saratoga is initialized with notifyForNewUpdates set to true\n * @event Saratoga#updateAvailable\n * @param {Object} data What data needs updating\n * @memberof Saratoga\n * @example\n * Saratoga.on('updateAvailable', (data) => {\n * if (data.shipUpdateAvailable || data.equipmentUpdateAvailable) {\n * // handle update\n * }\n * })\n */","meta":{"filename":"Saratoga.js","lineno":37,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{}},"description":"Emitted when there is an update available for local data. Only available when Saratoga is initialized with notifyForNewUpdates set to true
","kind":"event","name":"updateAvailable","params":[{"type":{"names":["Object"]},"description":"What data needs updating
","name":"data"}],"memberof":"Saratoga","examples":["Saratoga.on('updateAvailable', (data) => {\n if (data.shipUpdateAvailable || data.equipmentUpdateAvailable) {\n // handle update\n }\n})"],"longname":"Saratoga#event:updateAvailable","scope":"instance","$longname":"Saratoga#event:updateAvailable","$kind":"event","$docmaLink":"?api#Saratoga#event:updateAvailable"}],"$constructor":{"comment":"/**\n * @param {Object} options Object with a single parameter, which is notifyForNewUpdates, which is a boolean\n */","meta":{"range":[366,679],"filename":"Saratoga.js","lineno":13,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src","code":{"id":"astnode100000040","name":"Saratoga","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"params":[{"type":{"names":["Object"]},"description":"Object with a single parameter, which is notifyForNewUpdates, which is a boolean
","name":"options"}],"name":"Saratoga","longname":"Saratoga","kind":"class","scope":"global","$longname":"Saratoga","$kind":"constructor","$docmaLink":"?api#Saratoga"}},{"comment":"/**\n * Equipment related getters for Saratoga\n * @class SaratogaEquipments\n */","meta":{"filename":"SaratogaEquipments.js","lineno":1,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{}},"description":"Equipment related getters for Saratoga
","kind":"class","name":"SaratogaEquipments","longname":"SaratogaEquipments","scope":"global","$longname":"SaratogaEquipments","$kind":"class","$docmaLink":"?api#SaratogaEquipments","$members":[{"comment":"/**\n * Lists the equipments by category\n * @param {string} category name of the category you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[751,893],"filename":"SaratogaEquipments.js","lineno":29,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000196","name":"SaratogaEquipments#getAllByCategory","type":"MethodDefinition","paramnames":["category"]},"vars":{"":null}},"description":"Lists the equipments by category
","params":[{"type":{"names":["string"]},"description":"name of the category you want to search for
","name":"category"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByCategory","longname":"SaratogaEquipments#getAllByCategory","kind":"function","scope":"instance","$longname":"SaratogaEquipments#getAllByCategory","$kind":"method","$docmaLink":"?api#SaratogaEquipments#getAllByCategory"},{"comment":"/**\n * Lists the equipments by nationality\n * @param {string} nationality naitionality name of the equipments you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[1130,1284],"filename":"SaratogaEquipments.js","lineno":40,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000222","name":"SaratogaEquipments#getAllByNationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists the equipments by nationality
","params":[{"type":{"names":["string"]},"description":"naitionality name of the equipments you want to search for
","name":"nationality"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByNationality","longname":"SaratogaEquipments#getAllByNationality","kind":"function","scope":"instance","$longname":"SaratogaEquipments#getAllByNationality","$kind":"method","$docmaLink":"?api#SaratogaEquipments#getAllByNationality"},{"comment":"/**\n * Searches for a specific equipment. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the equipment you want to search for\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaEquipments\n * @returns {Equipment | null}\n */","meta":{"range":[1591,1835],"filename":"SaratogaEquipments.js","lineno":52,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000248","name":"SaratogaEquipments#searchByEquipmentName","type":"MethodDefinition","paramnames":["name","limit"]},"vars":{"":null}},"description":"Searches for a specific equipment. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the equipment you want to search for
","name":"name"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Equipment","null"]}}],"name":"searchByEquipmentName","longname":"SaratogaEquipments#searchByEquipmentName","kind":"function","scope":"instance","$longname":"SaratogaEquipments#searchByEquipmentName","$kind":"method","$docmaLink":"?api#SaratogaEquipments#searchByEquipmentName"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[213,321],"filename":"SaratogaEquipments.js","lineno":9,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000143","name":"SaratogaEquipments","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaEquipments","longname":"SaratogaEquipments","kind":"class","scope":"global","$longname":"SaratogaEquipments","$kind":"constructor","$docmaLink":"?api#SaratogaEquipments"}},{"comment":"/**\n * Ship related getters for Saratoga\n * @class SaratogaShips\n */","meta":{"filename":"SaratogaShips.js","lineno":1,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{}},"description":"Ship related getters for Saratoga
","kind":"class","name":"SaratogaShips","longname":"SaratogaShips","scope":"global","$longname":"SaratogaShips","$kind":"class","$docmaLink":"?api#SaratogaShips","$members":[{"comment":"/**\n * Lists all the ships that matches a specific shjp class\n * @param {string} shipClass class of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[761,899],"filename":"SaratogaShips.js","lineno":29,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000349","name":"SaratogaShips#getAllByClass","type":"MethodDefinition","paramnames":["shipClass"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific shjp class
","params":[{"type":{"names":["string"]},"description":"class of the ship you want to search for (Case Sensitive)
","name":"shipClass"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByClass","longname":"SaratogaShips#getAllByClass","kind":"function","scope":"instance","$longname":"SaratogaShips#getAllByClass","$kind":"method","$docmaLink":"?api#SaratogaShips#getAllByClass"},{"comment":"/**\n * Lists all the ships that matches a specific ship hull type\n * @param {string} hullType hullType of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1559,1701],"filename":"SaratogaShips.js","lineno":51,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000401","name":"SaratogaShips#getAllByHullType","type":"MethodDefinition","paramnames":["hullType"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship hull type
","params":[{"type":{"names":["string"]},"description":"hullType of the ship you want to search for (Case Sensitive)
","name":"hullType"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByHullType","longname":"SaratogaShips#getAllByHullType","kind":"function","scope":"instance","$longname":"SaratogaShips#getAllByHullType","$kind":"method","$docmaLink":"?api#SaratogaShips#getAllByHullType"},{"comment":"/**\n * Lists all the ships that matches a specific ship nationality\n * @param {string} nationality nationality of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1156,1310],"filename":"SaratogaShips.js","lineno":40,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000375","name":"SaratogaShips#getAllByNationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship nationality
","params":[{"type":{"names":["string"]},"description":"nationality of the ship you want to search for (Case Sensitive)
","name":"nationality"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByNationality","longname":"SaratogaShips#getAllByNationality","kind":"function","scope":"instance","$longname":"SaratogaShips#getAllByNationality","$kind":"method","$docmaLink":"?api#SaratogaShips#getAllByNationality"},{"comment":"/**\n * Lists all the ship that matches a specific rarity\n * @param {string} rarity rarity of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1937,2071],"filename":"SaratogaShips.js","lineno":62,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000427","name":"SaratogaShips#getAllByRarity","type":"MethodDefinition","paramnames":["rarity"]},"vars":{"":null}},"description":"Lists all the ship that matches a specific rarity
","params":[{"type":{"names":["string"]},"description":"rarity of the ship you want to search for (Case Sensitive)
","name":"rarity"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"getAllByRarity","longname":"SaratogaShips#getAllByRarity","kind":"function","scope":"instance","$longname":"SaratogaShips#getAllByRarity","$kind":"method","$docmaLink":"?api#SaratogaShips#getAllByRarity"},{"comment":"/**\n * Fetches a specific ship via its id\n * @param {number} id id of the ship you want to fetch\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[2255,2434],"filename":"SaratogaShips.js","lineno":73,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000453","name":"SaratogaShips#getById","type":"MethodDefinition","paramnames":["id"]},"vars":{"":null}},"description":"Fetches a specific ship via its id
","params":[{"type":{"names":["number"]},"description":"id of the ship you want to fetch
","name":"id"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"getById","longname":"SaratogaShips#getById","kind":"function","scope":"instance","$longname":"SaratogaShips#getById","$kind":"method","$docmaLink":"?api#SaratogaShips#getById"},{"comment":"/**\n * Searches for a specific ship. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the ship you want to search for\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[2721,2946],"filename":"SaratogaShips.js","lineno":87,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000490","name":"SaratogaShips#searchShipByName","type":"MethodDefinition","paramnames":["name","limit"]},"vars":{"":null}},"description":"Searches for a specific ship. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the ship you want to search for
","name":"name"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"searchShipByName","longname":"SaratogaShips#searchShipByName","kind":"function","scope":"instance","$longname":"SaratogaShips#searchShipByName","$kind":"method","$docmaLink":"?api#SaratogaShips#searchShipByName"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[198,306],"filename":"SaratogaShips.js","lineno":9,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000296","name":"SaratogaShips","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaShips","longname":"SaratogaShips","kind":"class","scope":"global","$longname":"SaratogaShips","$kind":"constructor","$docmaLink":"?api#SaratogaShips"}},{"comment":"/**\n * Saratoga, the starting point of this API\n * @class SaratogaStore\n */","meta":{"filename":"SaratogaStore.js","lineno":7,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{}},"description":"Saratoga, the starting point of this API
","kind":"class","name":"SaratogaStore","longname":"SaratogaStore","scope":"global","$longname":"SaratogaStore","$kind":"class","$docmaLink":"?api#SaratogaStore","$members":[{"comment":"/**\n * Equipment related getters for this store\n * @type {SaratogaEquipments}\n */","meta":{"range":[906,952],"filename":"SaratogaStore.js","lineno":30,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000588","name":"this.equipments","type":"NewExpression","value":"","paramnames":[]}},"description":"Equipment related getters for this store
","type":{"names":["SaratogaEquipments"]},"name":"equipments","longname":"SaratogaStore#equipments","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#equipments","$kind":"property","$docmaLink":"?api#SaratogaStore#equipments"},{"comment":"/**\n * If this store is already ready to operate\n * @type {Boolean}\n */","meta":{"range":[1234,1252],"filename":"SaratogaStore.js","lineno":40,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000604","name":"this.ready","type":"Literal","value":false,"paramnames":[]}},"description":"If this store is already ready to operate
","type":{"names":["Boolean"]},"name":"ready","longname":"SaratogaStore#ready","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#ready","$kind":"property","$docmaLink":"?api#SaratogaStore#ready"},{"comment":"/**\n * The saratoga instance that generated this instance\n * @type {Saratoga}\n */","meta":{"range":[608,632],"filename":"SaratogaStore.js","lineno":20,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000574","name":"this.saratoga","type":"Identifier","value":"saratoga","paramnames":[]}},"description":"The saratoga instance that generated this instance
","type":{"names":["Saratoga"]},"name":"saratoga","longname":"SaratogaStore#saratoga","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#saratoga","$kind":"property","$docmaLink":"?api#SaratogaStore#saratoga"},{"comment":"/**\n * Ship related getters for this store\n * @type {SaratogaShips}\n */","meta":{"range":[746,782],"filename":"SaratogaStore.js","lineno":25,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000580","name":"this.ships","type":"NewExpression","value":"","paramnames":[]}},"description":"Ship related getters for this store
","type":{"names":["SaratogaShips"]},"name":"ships","longname":"SaratogaStore#ships","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#ships","$kind":"property","$docmaLink":"?api#SaratogaStore#ships"},{"comment":"/**\n * Updater Class for the local data for this store\n * @type {SaratogaUpdater}\n */","meta":{"range":[1080,1120],"filename":"SaratogaStore.js","lineno":35,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000596","name":"this.updater","type":"NewExpression","value":"","paramnames":[]}},"description":"Updater Class for the local data for this store
","type":{"names":["SaratogaUpdater"]},"name":"updater","longname":"SaratogaStore#updater","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#updater","$kind":"property","$docmaLink":"?api#SaratogaStore#updater"}],"$constructor":{"comment":"/**\n * @param {Saratoga} saratoga The saratoga class that generated this instance\n */","meta":{"range":[462,1819],"filename":"SaratogaStore.js","lineno":15,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\store","code":{"id":"astnode100000568","name":"SaratogaStore","type":"MethodDefinition","paramnames":["saratoga"]},"vars":{"":null}},"params":[{"type":{"names":["Saratoga"]},"description":"The saratoga class that generated this instance
","name":"saratoga"}],"name":"SaratogaStore","longname":"SaratogaStore","kind":"class","scope":"global","$longname":"SaratogaStore","$kind":"constructor","$docmaLink":"?api#SaratogaStore"}},{"comment":"/**\n * Manages the local data & cache updates\n * @class SaratogaUpdater\n */","meta":{"filename":"SaratogaUpdater.js","lineno":5,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{}},"description":"Manages the local data & cache updates
","kind":"class","name":"SaratogaUpdater","longname":"SaratogaUpdater","scope":"global","$longname":"SaratogaUpdater","$kind":"class","$docmaLink":"?api#SaratogaUpdater","$members":[{"comment":"/**\n * Checks if there is new updates for ship or equipment data\n * @memberof SaratogaUpdater\n * @returns {Promise}\n * @example\n * const api = new Saratoga();\n * api.updater.checkForUpdate()\n * .then((response) => {\n * if (response.shipUpdateAvailable || response.equipmentUpdateAvailable) console.log('update available');\n * })\n */","meta":{"range":[3180,3542],"filename":"SaratogaUpdater.js","lineno":87,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001261","name":"SaratogaUpdater#checkForUpdate","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Checks if there is new updates for ship or equipment data
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"examples":["const api = new Saratoga();\napi.updater.checkForUpdate()\n .then((response) => {\n if (response.shipUpdateAvailable || response.equipmentUpdateAvailable) console.log('update available');\n })"],"name":"checkForUpdate","longname":"SaratogaUpdater#checkForUpdate","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#checkForUpdate","$kind":"method","$docmaLink":"?api#SaratogaUpdater#checkForUpdate"},{"comment":"/**\n * Updates the Cached Data, loaded from the local files of Saratoga\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[4568,4743],"filename":"SaratogaUpdater.js","lineno":124,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001388","name":"SaratogaUpdater#updateCache","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Updates the Cached Data, loaded from the local files of Saratoga
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateCache","longname":"SaratogaUpdater#updateCache","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateCache","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateCache"},{"comment":"/**\n * Updates the Local Files & Cached Data in one method, good for single process scenarios as it's easy. Not for multi sharded programs that has its own Saratoga instance per shard.\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[2673,2779],"filename":"SaratogaUpdater.js","lineno":71,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001245","name":"SaratogaUpdater#updateDataAndCache","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Updates the Local Files & Cached Data in one method, good for single process scenarios as it's easy. Not for multi sharded programs that has its own Saratoga instance per shard.
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateDataAndCache","longname":"SaratogaUpdater#updateDataAndCache","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateDataAndCache","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateDataAndCache"},{"comment":"/**\n * Updates the Local Files of Saratoga if there is an update\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[3694,4409],"filename":"SaratogaUpdater.js","lineno":100,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001304","name":"SaratogaUpdater#updateLocalData","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Updates the Local Files of Saratoga if there is an update
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateLocalData","longname":"SaratogaUpdater#updateLocalData","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateLocalData","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateLocalData"},{"comment":"/**\n * The cron update checker which is responsible for Saratoga#updateAvailable event\n * @type {?Timeout}\n */","meta":{"range":[830,852],"filename":"SaratogaUpdater.js","lineno":28,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001029","name":"this.cronUpdate","type":"Literal","value":null,"paramnames":[]}},"description":"The cron update checker which is responsible for Saratoga#updateAvailable event
","type":{"names":["Timeout"]},"nullable":true,"name":"cronUpdate","longname":"SaratogaUpdater#cronUpdate","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#cronUpdate","$kind":"property","$docmaLink":"?api#SaratogaUpdater#cronUpdate"},{"comment":"/**\n * If the data directory of this updater is ready to operate\n * @type {Boolean}\n */","meta":{"range":[652,677],"filename":"SaratogaUpdater.js","lineno":23,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001023","name":"this.dataDirReady","type":"Literal","value":false,"paramnames":[]}},"description":"If the data directory of this updater is ready to operate
","type":{"names":["Boolean"]},"name":"dataDirReady","longname":"SaratogaUpdater#dataDirReady","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#dataDirReady","$kind":"property","$docmaLink":"?api#SaratogaUpdater#dataDirReady"},{"comment":"/**\n * The saratoga instance that generated this instance\n * @type {Saratoga}\n */","meta":{"range":[963,1021],"filename":"SaratogaUpdater.js","lineno":35,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001034","name":"SaratogaUpdater#saratoga","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"The saratoga instance that generated this instance
","type":{"names":["Saratoga"]},"name":"saratoga","longname":"SaratogaUpdater#saratoga","kind":"member","memberof":"SaratogaUpdater","scope":"instance","params":[],"$longname":"SaratogaUpdater#saratoga","$kind":"property","$docmaLink":"?api#SaratogaUpdater#saratoga"},{"comment":"/**\n * The updater instance that generated this instance\n * @type {SaratogaStore}\n */","meta":{"range":[504,522],"filename":"SaratogaUpdater.js","lineno":18,"columnno":8,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001017","name":"this.store","type":"Identifier","value":"store","paramnames":[]}},"description":"The updater instance that generated this instance
","type":{"names":["SaratogaStore"]},"name":"store","longname":"SaratogaUpdater#store","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#store","$kind":"property","$docmaLink":"?api#SaratogaUpdater#store"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[357,859],"filename":"SaratogaUpdater.js","lineno":13,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001011","name":"SaratogaUpdater","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaUpdater","longname":"SaratogaUpdater","kind":"class","scope":"global","$longname":"SaratogaUpdater","$kind":"constructor","$docmaLink":"?api#SaratogaUpdater"}},{"comment":"","meta":{"range":[122,250],"filename":"SaratogaValidator.js","lineno":5,"columnno":4,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga\\src\\updater","code":{"id":"astnode100001575","name":"SaratogaValidator","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"undocumented":true,"name":"SaratogaValidator","longname":"SaratogaValidator","kind":"class","scope":"global","params":[],"$longname":"SaratogaValidator","$kind":"constructor","$docmaLink":"?api#SaratogaValidator"},{"comment":"/**\n * Equipment Data\n * @external Equipment\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}\n */","meta":{"filename":"index.js","lineno":19,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga","code":{}},"description":"Equipment Data
","kind":"external","name":"Equipment","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}"],"longname":"external:Equipment","scope":"global","$longname":"external:Equipment","$kind":"external","$docmaLink":"?api#external:Equipment"},{"comment":"/**\n * Node.js Event Emitter\n * @external EventEmitter\n * @see {@link https://nodejs.org/api/events.html}\n */","meta":{"filename":"index.js","lineno":1,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga","code":{}},"description":"Node.js Event Emitter
","kind":"external","name":"EventEmitter","see":["{@link https://nodejs.org/api/events.html}"],"longname":"external:EventEmitter","scope":"global","$longname":"external:EventEmitter","$kind":"external","$docmaLink":"?api#external:EventEmitter"},{"comment":"/**\n * Ship Data\n * @external Ship\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#ship-getters}\n */","meta":{"filename":"index.js","lineno":13,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga","code":{}},"description":"Ship Data
","kind":"external","name":"Ship","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#ship-getters}"],"longname":"external:Ship","scope":"global","$longname":"external:Ship","$kind":"external","$docmaLink":"?api#external:Ship"},{"comment":"/**\n * Node.js Timeout\n * @external Timeout\n * @see {@link https://nodejs.org/dist/latest/docs/api/timers.html#timers_class_timeout}\n */","meta":{"filename":"index.js","lineno":7,"columnno":0,"path":"C:\\Users\\Deivu\\Desktop\\Work Related Data\\Saratoga","code":{}},"description":"Node.js Timeout
","kind":"external","name":"Timeout","see":["{@link https://nodejs.org/dist/latest/docs/api/timers.html#timers_class_timeout}"],"longname":"external:Timeout","scope":"global","$longname":"external:Timeout","$kind":"external","$docmaLink":"?api#external:Timeout"}],"symbols":["external:Equipment","external:EventEmitter","external:Ship","external:Timeout","Saratoga","Saratoga#equipments","Saratoga#event:debug","Saratoga#event:error","Saratoga#event:ready","Saratoga#event:updateAvailable","Saratoga#ready","Saratoga#ships","Saratoga#store","Saratoga#updater","SaratogaEquipments","SaratogaEquipments#getAllByCategory","SaratogaEquipments#getAllByNationality","SaratogaEquipments#searchByEquipmentName","SaratogaShips","SaratogaShips#getAllByClass","SaratogaShips#getAllByHullType","SaratogaShips#getAllByNationality","SaratogaShips#getAllByRarity","SaratogaShips#getById","SaratogaShips#searchShipByName","SaratogaStore","SaratogaStore#equipments","SaratogaStore#ready","SaratogaStore#saratoga","SaratogaStore#ships","SaratogaStore#updater","SaratogaUpdater","SaratogaUpdater#checkForUpdate","SaratogaUpdater#cronUpdate","SaratogaUpdater#dataDirReady","SaratogaUpdater#saratoga","SaratogaUpdater#store","SaratogaUpdater#updateCache","SaratogaUpdater#updateDataAndCache","SaratogaUpdater#updateLocalData","SaratogaValidator"]}},"app":{"title":"Saratoga | An open source Azur Lane local library","routing":{"method":"query","caseSensitive":true},"entrance":"content:readme","base":"/Saratoga/","meta":null,"server":"static","favicon":""},"template":{"name":"docma-template-zebra","description":"Zebra - Default template for Docma. https://github.com/onury/docma","version":"2.3.1","supportedDocmaVersion":">=2.0.0","author":"Onur Yıldırım","license":"MIT","mainHTML":"index.html","options":{"title":{"label":"Saratoga","href":"."},"sidebar":{"enabled":true,"outline":"tree","collapsed":false,"toolbar":true,"itemsFolded":false,"itemsOverflow":"crop","badges":true,"search":true,"animations":true},"symbols":{"autoLink":true,"params":"list","enums":"list","props":"list","meta":false},"navbar":{"enabled":true,"dark":false,"animations":true,"menu":[{"label":"Readme","href":"."},{"label":"Documentation","href":"?api"},{"label":"GitHub","href":"https://github.com/AzurAPI/Saratoga"}],"fixed":true},"logo":null,"contentView":{"bookmarks":false,"faVersion":"5.5.0","faLibs":"all"}}},"partials":{"api":"docma-api","content":"docma-content","notFound":"docma-404"},"elementID":"docma-main","contentElementID":"docma-content","defaultApiName":"_def_","logsEnabled":false}));
+var docma = Object.freeze(new DocmaWeb({"version":"3.2.2","routes":[{"id":"api:","type":"api","name":"_def_","path":"?api","contentPath":null,"sourceType":"js"},{"id":"content:readme","type":"content","name":"readme","path":"?content=readme","contentPath":"content/readme.html","sourceType":"md"}],"apis":{"_def_":{"documentation":[{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[226,334],"filename":"LegacyEquipments.js","lineno":9,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000228","name":"LegacyEquipments","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"LegacyEquipments","longname":"LegacyEquipments","kind":"class","scope":"global","$longname":"LegacyEquipments","$kind":"constructor","$docmaLink":"?api#LegacyEquipments"},{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[211,319],"filename":"LegacyShips.js","lineno":9,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000421","name":"LegacyShips","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"LegacyShips","longname":"LegacyShips","kind":"class","scope":"global","$longname":"LegacyShips","$kind":"constructor","$docmaLink":"?api#LegacyShips"},{"comment":"/**\n * 本APIの出発点\n * Saratoga, the starting point of this API\n * @class Saratoga\n * @extends {EventEmitter}\n */","meta":{"filename":"Saratoga.js","lineno":4,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{}},"description":"本APIの出発点\nSaratoga, the starting point of this API
","kind":"class","name":"Saratoga","augments":["EventEmitter"],"longname":"Saratoga","scope":"global","$longname":"Saratoga","$kind":"class","$docmaLink":"?api#Saratoga","$members":[{"comment":"/**\n * 連打のデータを取得する\n * Barrage related getters for this store\n * @type {SaratogaBarrages}\n */","meta":{"range":[3148,3244],"filename":"Saratoga.js","lineno":121,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000166","name":"Saratoga#barrages","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"連打のデータを取得する\nBarrage related getters for this store
","type":{"names":["SaratogaBarrages"]},"name":"barrages","longname":"Saratoga#barrages","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#barrages","$kind":"property","$docmaLink":"?api#Saratoga#barrages"},{"comment":"/**\n * チャプターのデータを取得する\n * Chapters related getters for this store\n * @type {SaratogaChapters}\n */","meta":{"range":[2708,2804],"filename":"Saratoga.js","lineno":103,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000132","name":"Saratoga#chapters","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"チャプターのデータを取得する\nChapters related getters for this store
","type":{"names":["SaratogaChapters"]},"name":"chapters","longname":"Saratoga#chapters","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#chapters","$kind":"property","$docmaLink":"?api#Saratoga#chapters"},{"comment":"/**\n * 装置のデータを取得する\n * Azur Lane's Equipment related getter methods\n * @type {SaratogaEquipments}\n */","meta":{"range":[2486,2586],"filename":"Saratoga.js","lineno":94,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000115","name":"Saratoga#equipments","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"装置のデータを取得する\nAzur Lane's Equipment related getter methods
","type":{"names":["SaratogaEquipments"]},"name":"equipments","longname":"Saratoga#equipments","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#equipments","$kind":"property","$docmaLink":"?api#Saratoga#equipments"},{"comment":"/**\n * 旧装置のデータを取得する\n * Azur Lane's Equipment related getter methods with legacy API\n * @type {SaratogaLegacyEquipments}\n */","meta":{"range":[3633,3745],"filename":"Saratoga.js","lineno":139,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000200","name":"Saratoga#legacyEquipments","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"旧装置のデータを取得する\nAzur Lane's Equipment related getter methods with legacy API
","type":{"names":["SaratogaLegacyEquipments"]},"name":"legacyEquipments","longname":"Saratoga#legacyEquipments","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#legacyEquipments","$kind":"property","$docmaLink":"?api#Saratoga#legacyEquipments"},{"comment":"/**\n * 旧船のデータを取得する\n * Azur Lane's Ship related getter methods with legacy API\n * @type {SaratogaLegacyShips}\n */","meta":{"range":[3382,3484],"filename":"Saratoga.js","lineno":130,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000183","name":"Saratoga#legacyShips","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"旧船のデータを取得する\nAzur Lane's Ship related getter methods with legacy API
","type":{"names":["SaratogaLegacyShips"]},"name":"legacyShips","longname":"Saratoga#legacyShips","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#legacyShips","$kind":"property","$docmaLink":"?api#Saratoga#legacyShips"},{"comment":"/**\n * 状態\n * If Saratoga is ready to operate\n * @type {Boolean}\n */","meta":{"range":[2066,2153],"filename":"Saratoga.js","lineno":75,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000080","name":"Saratoga#ready","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"状態\nIf Saratoga is ready to operate
","type":{"names":["Boolean"]},"name":"ready","longname":"Saratoga#ready","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#ready","$kind":"property","$docmaLink":"?api#Saratoga#ready"},{"comment":"/**\n * 船のデータを取得する\n * Azur Lane's Ship related getter methods\n * @type {SaratogaShips}\n */","meta":{"range":[2269,2359],"filename":"Saratoga.js","lineno":84,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000098","name":"Saratoga#ships","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"船のデータを取得する\nAzur Lane's Ship related getter methods
","type":{"names":["SaratogaShips"]},"name":"ships","longname":"Saratoga#ships","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#ships","$kind":"property","$docmaLink":"?api#Saratoga#ships"},{"comment":"/**\n * キャッシュデータの管理\n * Contains methods and props for managing cached data\n * @type {SaratogaStore}\n */","meta":{"range":[602,638],"filename":"Saratoga.js","lineno":21,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000053","name":"this.store","type":"NewExpression","value":"","paramnames":[]}},"description":"キャッシュデータの管理\nContains methods and props for managing cached data
","type":{"names":["SaratogaStore"]},"name":"store","longname":"Saratoga#store","kind":"member","memberof":"Saratoga","scope":"instance","$longname":"Saratoga#store","$kind":"property","$docmaLink":"?api#Saratoga#store"},{"comment":"/**\n * アップデータ\n * Contains methods for updating Saratoga's local data & cache\n * @type {SaratogaUpdater}\n */","meta":{"range":[1916,1972],"filename":"Saratoga.js","lineno":66,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000070","name":"Saratoga#updater","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"アップデータ\nContains methods for updating Saratoga's local data & cache
","type":{"names":["SaratogaUpdater"]},"name":"updater","longname":"Saratoga#updater","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#updater","$kind":"property","$docmaLink":"?api#Saratoga#updater"},{"comment":"/**\n * ボイスラインのデータを取得する\n * Voiceline related getters for this store\n * @type {SaratogaVoicelines}\n */","meta":{"range":[2930,3030],"filename":"Saratoga.js","lineno":112,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000149","name":"Saratoga#voicelines","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"ボイスラインのデータを取得する\nVoiceline related getters for this store
","type":{"names":["SaratogaVoicelines"]},"name":"voicelines","longname":"Saratoga#voicelines","kind":"member","memberof":"Saratoga","scope":"instance","params":[],"$longname":"Saratoga#voicelines","$kind":"property","$docmaLink":"?api#Saratoga#voicelines"},{"comment":"/**\n * デバッグデータがあるときに発せられる\n * Emitted when there is a debug data\n * @event Saratoga#debug\n * @param {string} message Debug message 資料\n * @memberof Saratoga\n */","meta":{"filename":"Saratoga.js","lineno":25,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{}},"description":"デバッグデータがあるときに発せられる\nEmitted when there is a debug data
","kind":"event","name":"debug","params":[{"type":{"names":["string"]},"description":"Debug message 資料
","name":"message"}],"memberof":"Saratoga","longname":"Saratoga#event:debug","scope":"instance","$longname":"Saratoga#event:debug","$kind":"event","$docmaLink":"?api#Saratoga#event:debug"},{"comment":"/**\n * エラーが発生したときに発せられる\n * Emitted when there is a pesky error\n * @event Saratoga#error\n * @param {Error} error The error encountered.\n * @memberof Saratoga\n * @example\n * Saratoga.on('error', console.error);\n */","meta":{"filename":"Saratoga.js","lineno":32,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{}},"description":"エラーが発生したときに発せられる\nEmitted when there is a pesky error
","kind":"event","name":"error","params":[{"type":{"names":["Error"]},"description":"The error encountered.
","name":"error"}],"memberof":"Saratoga","examples":["Saratoga.on('error', console.error);"],"longname":"Saratoga#event:error","scope":"instance","$longname":"Saratoga#event:error","$kind":"event","$docmaLink":"?api#Saratoga#event:error"},{"comment":"/**\n * 準備ができたときに発せられる\n * Emitted when Saratoga is ready\n * @event Saratoga#ready\n * @memberof Saratoga\n */","meta":{"filename":"Saratoga.js","lineno":54,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{}},"description":"準備ができたときに発せられる\nEmitted when Saratoga is ready
","kind":"event","name":"ready","memberof":"Saratoga","longname":"Saratoga#event:ready","scope":"instance","$longname":"Saratoga#event:ready","$kind":"event","$docmaLink":"?api#Saratoga#event:ready"},{"comment":"/**\n * 更新があったときに発せられる\n * Emitted when there is an update available for local data. Only available when Saratoga is initialized with notifyForNewUpdates set to true\n * @event Saratoga#updateAvailable\n * @param {Object} data What data needs updating\n * @memberof Saratoga\n * @example\n * Saratoga.on('updateAvailable', (data) => {\n * if (data.shipUpdateAvailable || data.equipmentUpdateAvailable) {\n * // handle update\n * }\n * })\n */","meta":{"filename":"Saratoga.js","lineno":41,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{}},"description":"更新があったときに発せられる\nEmitted when there is an update available for local data. Only available when Saratoga is initialized with notifyForNewUpdates set to true
","kind":"event","name":"updateAvailable","params":[{"type":{"names":["Object"]},"description":"What data needs updating
","name":"data"}],"memberof":"Saratoga","examples":["Saratoga.on('updateAvailable', (data) => {\n if (data.shipUpdateAvailable || data.equipmentUpdateAvailable) {\n // handle update\n }\n})"],"longname":"Saratoga#event:updateAvailable","scope":"instance","$longname":"Saratoga#event:updateAvailable","$kind":"event","$docmaLink":"?api#Saratoga#event:updateAvailable"}],"$constructor":{"comment":"/**\n * @param {Object} options Object with a single parameter, which is notifyForNewUpdates, which is a boolean\n */","meta":{"range":[378,714],"filename":"Saratoga.js","lineno":14,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src","code":{"id":"astnode100000040","name":"Saratoga","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"params":[{"type":{"names":["Object"]},"description":"Object with a single parameter, which is notifyForNewUpdates, which is a boolean
","name":"options"}],"name":"Saratoga","longname":"Saratoga","kind":"class","scope":"global","$longname":"Saratoga","$kind":"constructor","$docmaLink":"?api#Saratoga"}},{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[132,240],"filename":"SaratogaBarrages.js","lineno":5,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000703","name":"SaratogaBarrages","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaBarrages","longname":"SaratogaBarrages","kind":"class","scope":"global","$longname":"SaratogaBarrages","$kind":"constructor","$docmaLink":"?api#SaratogaBarrages"},{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[140,248],"filename":"SaratogaChapters.js","lineno":6,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000972","name":"SaratogaChapters","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaChapters","longname":"SaratogaChapters","kind":"class","scope":"global","$longname":"SaratogaChapters","$kind":"constructor","$docmaLink":"?api#SaratogaChapters"},{"comment":"/**\n * Equipment related getters for Saratoga with LegacyAPI\n * @class SaratogaEquipments\n */","meta":{"filename":"LegacyEquipments.js","lineno":1,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{}},"description":"Equipment related getters for Saratoga with LegacyAPI
","kind":"class","name":"SaratogaEquipments","longname":"SaratogaEquipments","scope":"global","$longname":"SaratogaEquipments","$kind":"class","$docmaLink":"?api#SaratogaEquipments","$members":[{"comment":"/**\n * Get an unfiltered equipment list\n */","meta":{"range":[2442,2526],"filename":"SaratogaEquipments.js","lineno":79,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001239","name":"SaratogaEquipments#all","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Get an unfiltered equipment list
","name":"all","longname":"SaratogaEquipments#all","kind":"function","memberof":"SaratogaEquipments","scope":"instance","params":[],"$longname":"SaratogaEquipments#all","$kind":"method","$docmaLink":"?api#SaratogaEquipments#all"},{"comment":"/**\n * Lists the equipments by category\n * @param {string} category name of the category you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[751,885],"filename":"SaratogaEquipments.js","lineno":29,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001083","name":"SaratogaEquipments#category","type":"MethodDefinition","paramnames":["category"]},"vars":{"":null}},"description":"Lists the equipments by category
","params":[{"type":{"names":["string"]},"description":"name of the category you want to search for
","name":"category"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"category","longname":"SaratogaEquipments#category","kind":"function","scope":"instance","$longname":"SaratogaEquipments#category","$kind":"method","$docmaLink":"?api#SaratogaEquipments#category"},{"comment":"/**\n * Custom filter for equipment data\n * @param {requestCallback} callback the callback that handles the response\n */","meta":{"range":[2668,2780],"filename":"SaratogaEquipments.js","lineno":88,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001254","name":"SaratogaEquipments#filter","type":"MethodDefinition","paramnames":["callback"]},"vars":{"":null}},"description":"Custom filter for equipment data
","params":[{"type":{"names":["requestCallback"]},"description":"the callback that handles the response
","name":"callback"}],"name":"filter","longname":"SaratogaEquipments#filter","kind":"function","memberof":"SaratogaEquipments","scope":"instance","$longname":"SaratogaEquipments#filter","$kind":"method","$docmaLink":"?api#SaratogaEquipments#filter"},{"comment":"/**\n * Lists the equipments by category\n * @param {string} category name of the category you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[764,906],"filename":"LegacyEquipments.js","lineno":29,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000281","name":"LegacyEquipments#getAllByCategory","type":"MethodDefinition","paramnames":["category"]},"vars":{"":null}},"description":"Lists the equipments by category
","params":[{"type":{"names":["string"]},"description":"name of the category you want to search for
","name":"category"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyEquipments#getAllByCategory","longname":"SaratogaEquipments.LegacyEquipments#getAllByCategory","kind":"function","scope":"static","$longname":"SaratogaEquipments.LegacyEquipments#getAllByCategory","$kind":"method","$docmaLink":"?api#SaratogaEquipments.LegacyEquipments#getAllByCategory"},{"comment":"/**\n * Lists the equipments by nationality\n * @param {string} nationality naitionality name of the equipments you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[1143,1297],"filename":"LegacyEquipments.js","lineno":40,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000307","name":"LegacyEquipments#getAllByNationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists the equipments by nationality
","params":[{"type":{"names":["string"]},"description":"naitionality name of the equipments you want to search for
","name":"nationality"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyEquipments#getAllByNationality","longname":"SaratogaEquipments.LegacyEquipments#getAllByNationality","kind":"function","scope":"static","$longname":"SaratogaEquipments.LegacyEquipments#getAllByNationality","$kind":"method","$docmaLink":"?api#SaratogaEquipments.LegacyEquipments#getAllByNationality"},{"comment":"/**\n * Searches for a specific equipment. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the equipment you want to search for\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaEquipments\n * @returns {Equipment | null}\n */","meta":{"range":[1604,1848],"filename":"LegacyEquipments.js","lineno":52,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000333","name":"LegacyEquipments#searchByEquipmentName","type":"MethodDefinition","paramnames":["name","limit"]},"vars":{"":null}},"description":"Searches for a specific equipment. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the equipment you want to search for
","name":"name"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Equipment","null"]}}],"name":"LegacyEquipments#searchByEquipmentName","longname":"SaratogaEquipments.LegacyEquipments#searchByEquipmentName","kind":"function","scope":"static","$longname":"SaratogaEquipments.LegacyEquipments#searchByEquipmentName","$kind":"method","$docmaLink":"?api#SaratogaEquipments.LegacyEquipments#searchByEquipmentName"},{"comment":"/**\n * Searches for a specific equipment. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the equipment you want to search for\n * @param {string} language optional language to search by\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaEquipments\n * @returns {Equipment | null}\n */","meta":{"range":[1638,2380],"filename":"SaratogaEquipments.js","lineno":53,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001135","name":"SaratogaEquipments#name","type":"MethodDefinition","paramnames":["name","language","limit"]},"vars":{"":null}},"description":"Searches for a specific equipment. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the equipment you want to search for
","name":"name"},{"type":{"names":["string"]},"description":"optional language to search by
","name":"language"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Equipment","null"]}}],"name":"name","longname":"SaratogaEquipments#name","kind":"function","scope":"instance","$longname":"SaratogaEquipments#name","$kind":"method","$docmaLink":"?api#SaratogaEquipments#name"},{"comment":"/**\n * Lists the equipments by nationality\n * @param {string} nationality naitionality name of the equipments you want to search for\n * @memberof SaratogaEquipments\n * @returns {Array | null}\n */","meta":{"range":[1122,1268],"filename":"SaratogaEquipments.js","lineno":40,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001109","name":"SaratogaEquipments#nationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists the equipments by nationality
","params":[{"type":{"names":["string"]},"description":"naitionality name of the equipments you want to search for
","name":"nationality"}],"memberof":"SaratogaEquipments","returns":[{"type":{"names":["Array.","null"]}}],"name":"nationality","longname":"SaratogaEquipments#nationality","kind":"function","scope":"instance","$longname":"SaratogaEquipments#nationality","$kind":"method","$docmaLink":"?api#SaratogaEquipments#nationality"},{"comment":"/**\n * Custom search for data in Fuse instance\n * @param {any} options Fuse search options\n */","meta":{"range":[2896,3003],"filename":"SaratogaEquipments.js","lineno":96,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001274","name":"SaratogaEquipments#search","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"description":"Custom search for data in Fuse instance
","params":[{"type":{"names":["any"]},"description":"Fuse search options
","name":"options"}],"name":"search","longname":"SaratogaEquipments#search","kind":"function","memberof":"SaratogaEquipments","scope":"instance","$longname":"SaratogaEquipments#search","$kind":"method","$docmaLink":"?api#SaratogaEquipments#search"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[213,321],"filename":"SaratogaEquipments.js","lineno":9,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001030","name":"SaratogaEquipments","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaEquipments","longname":"SaratogaEquipments","kind":"class","scope":"global","$longname":"SaratogaEquipments","$kind":"constructor","$docmaLink":"?api#SaratogaEquipments"}},{"comment":"/**\n * Equipment related getters for Saratoga\n * @class SaratogaEquipments\n */","meta":{"filename":"SaratogaEquipments.js","lineno":1,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{}},"description":"Equipment related getters for Saratoga
","kind":"class","name":"SaratogaEquipments","longname":"SaratogaEquipments","scope":"global","$longname":"SaratogaEquipments","$kind":"class","$docmaLink":"?api#SaratogaEquipments"},{"comment":"/**\n * Ship related getters for Saratoga with LegacyAPI\n * @class SaratogaShips\n */","meta":{"filename":"LegacyShips.js","lineno":1,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{}},"description":"Ship related getters for Saratoga with LegacyAPI
","kind":"class","name":"SaratogaShips","longname":"SaratogaShips","scope":"global","$longname":"SaratogaShips","$kind":"class","$docmaLink":"?api#SaratogaShips","$members":[{"comment":"/**\n * Custom filter for ship data\n * @param {requestCallback} callback the callback that handles the response\n */","meta":{"range":[2763,2875],"filename":"SaratogaShips.js","lineno":94,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001585","name":"SaratogaShips#filter","type":"MethodDefinition","paramnames":["callback"]},"vars":{"":null}},"description":"Custom filter for ship data
","params":[{"type":{"names":["requestCallback"]},"description":"the callback that handles the response
","name":"callback"}],"name":"filter","longname":"SaratogaShips#filter","kind":"function","memberof":"SaratogaShips","scope":"instance","$longname":"SaratogaShips#filter","$kind":"method","$docmaLink":"?api#SaratogaShips#filter"},{"comment":"/**\n * Search from all ships\n * @param {number | string} id \n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[666,1089],"filename":"SaratogaShips.js","lineno":29,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001358","name":"SaratogaShips#get","type":"MethodDefinition","paramnames":["id"]},"vars":{"":null}},"description":"Search from all ships
","params":[{"type":{"names":["number","string"]},"name":"id"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"get","longname":"SaratogaShips#get","kind":"function","scope":"instance","$longname":"SaratogaShips#get","$kind":"method","$docmaLink":"?api#SaratogaShips#get"},{"comment":"/**\n * Fetches a specific ship via its id\n * @param {number} id id of the ship you want to fetch\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[1273,1447],"filename":"SaratogaShips.js","lineno":50,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001431","name":"SaratogaShips#id","type":"MethodDefinition","paramnames":["id"]},"vars":{"":null}},"description":"Fetches a specific ship via its id
","params":[{"type":{"names":["number"]},"description":"id of the ship you want to fetch
","name":"id"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"id","longname":"SaratogaShips#id","kind":"function","scope":"instance","$longname":"SaratogaShips#id","$kind":"method","$docmaLink":"?api#SaratogaShips#id"},{"comment":"/**\n * Lists all the ships that matches a specific shjp class\n * @param {string} shipClass class of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[774,912],"filename":"LegacyShips.js","lineno":29,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000474","name":"LegacyShips#getAllByClass","type":"MethodDefinition","paramnames":["shipClass"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific shjp class
","params":[{"type":{"names":["string"]},"description":"class of the ship you want to search for (Case Sensitive)
","name":"shipClass"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyShips#getAllByClass","longname":"SaratogaShips.LegacyShips#getAllByClass","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#getAllByClass","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#getAllByClass"},{"comment":"/**\n * Lists all the ships that matches a specific ship hull type\n * @param {string} hullType hullType of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1572,1714],"filename":"LegacyShips.js","lineno":51,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000526","name":"LegacyShips#getAllByHullType","type":"MethodDefinition","paramnames":["hullType"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship hull type
","params":[{"type":{"names":["string"]},"description":"hullType of the ship you want to search for (Case Sensitive)
","name":"hullType"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyShips#getAllByHullType","longname":"SaratogaShips.LegacyShips#getAllByHullType","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#getAllByHullType","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#getAllByHullType"},{"comment":"/**\n * Lists all the ships that matches a specific ship nationality\n * @param {string} nationality nationality of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1169,1323],"filename":"LegacyShips.js","lineno":40,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000500","name":"LegacyShips#getAllByNationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship nationality
","params":[{"type":{"names":["string"]},"description":"nationality of the ship you want to search for (Case Sensitive)
","name":"nationality"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyShips#getAllByNationality","longname":"SaratogaShips.LegacyShips#getAllByNationality","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#getAllByNationality","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#getAllByNationality"},{"comment":"/**\n * Lists all the ship that matches a specific rarity\n * @param {string} rarity rarity of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[1950,2084],"filename":"LegacyShips.js","lineno":62,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000552","name":"LegacyShips#getAllByRarity","type":"MethodDefinition","paramnames":["rarity"]},"vars":{"":null}},"description":"Lists all the ship that matches a specific rarity
","params":[{"type":{"names":["string"]},"description":"rarity of the ship you want to search for (Case Sensitive)
","name":"rarity"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"LegacyShips#getAllByRarity","longname":"SaratogaShips.LegacyShips#getAllByRarity","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#getAllByRarity","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#getAllByRarity"},{"comment":"/**\n * Fetches a specific ship via its id\n * @param {number} id id of the ship you want to fetch\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[2268,2447],"filename":"LegacyShips.js","lineno":73,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000578","name":"LegacyShips#getById","type":"MethodDefinition","paramnames":["id"]},"vars":{"":null}},"description":"Fetches a specific ship via its id
","params":[{"type":{"names":["number"]},"description":"id of the ship you want to fetch
","name":"id"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"LegacyShips#getById","longname":"SaratogaShips.LegacyShips#getById","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#getById","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#getById"},{"comment":"/**\n * Searches for a specific ship. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the ship you want to search for\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[2734,2959],"filename":"LegacyShips.js","lineno":87,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000615","name":"LegacyShips#searchShipByName","type":"MethodDefinition","paramnames":["name","limit"]},"vars":{"":null}},"description":"Searches for a specific ship. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the ship you want to search for
","name":"name"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"LegacyShips#searchShipByName","longname":"SaratogaShips.LegacyShips#searchShipByName","kind":"function","scope":"static","$longname":"SaratogaShips.LegacyShips#searchShipByName","$kind":"method","$docmaLink":"?api#SaratogaShips.LegacyShips#searchShipByName"},{"comment":"/**\n * Searches for a specific ship. (EN, CN, JP, KR names are supported)\n * @param {string} name name of the ship you want to search for\n * @param {string} language optional language to search by\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaShips\n * @returns {Ship | null}\n */","meta":{"range":[1797,2627],"filename":"SaratogaShips.js","lineno":65,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001468","name":"SaratogaShips#name","type":"MethodDefinition","paramnames":["name","language","limit"]},"vars":{"":null}},"description":"Searches for a specific ship. (EN, CN, JP, KR names are supported)
","params":[{"type":{"names":["string"]},"description":"name of the ship you want to search for
","name":"name"},{"type":{"names":["string"]},"description":"optional language to search by
","name":"language"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Ship","null"]}}],"name":"name","longname":"SaratogaShips#name","kind":"function","scope":"instance","$longname":"SaratogaShips#name","$kind":"method","$docmaLink":"?api#SaratogaShips#name"},{"comment":"/**\n * Custom search for data in Fuse instance\n * @param {any} options Fuse search options\n */","meta":{"range":[2991,3098],"filename":"SaratogaShips.js","lineno":102,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001605","name":"SaratogaShips#search","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"description":"Custom search for data in Fuse instance
","params":[{"type":{"names":["any"]},"description":"Fuse search options
","name":"options"}],"name":"search","longname":"SaratogaShips#search","kind":"function","memberof":"SaratogaShips","scope":"instance","$longname":"SaratogaShips#search","$kind":"method","$docmaLink":"?api#SaratogaShips#search"},{"comment":"/**\n * Lists all the ships that matches a specific shjp class\n * @param {string} shipClass class of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[4410,4540],"filename":"SaratogaShips.js","lineno":166,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001762","name":"ShipExtFilter#class","type":"MethodDefinition","paramnames":["shipClass"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific shjp class
","params":[{"type":{"names":["string"]},"description":"class of the ship you want to search for (Case Sensitive)
","name":"shipClass"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"ShipExtFilter#class","longname":"SaratogaShips.ShipExtFilter#class","kind":"function","scope":"static","$longname":"SaratogaShips.ShipExtFilter#class","$kind":"method","$docmaLink":"?api#SaratogaShips.ShipExtFilter#class"},{"comment":"/**\n * Lists all the ships that matches a specific ship nationality\n * @param {string} nationality nationality of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[4797,4943],"filename":"SaratogaShips.js","lineno":177,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001788","name":"ShipExtFilter#nationality","type":"MethodDefinition","paramnames":["nationality"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship nationality
","params":[{"type":{"names":["string"]},"description":"nationality of the ship you want to search for (Case Sensitive)
","name":"nationality"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"ShipExtFilter#nationality","longname":"SaratogaShips.ShipExtFilter#nationality","kind":"function","scope":"static","$longname":"SaratogaShips.ShipExtFilter#nationality","$kind":"method","$docmaLink":"?api#SaratogaShips.ShipExtFilter#nationality"},{"comment":"/**\n * Lists all the ship that matches a specific rarity\n * @param {string} rarity rarity of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[5558,5684],"filename":"SaratogaShips.js","lineno":199,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001840","name":"ShipExtFilter#rarity","type":"MethodDefinition","paramnames":["rarity"]},"vars":{"":null}},"description":"Lists all the ship that matches a specific rarity
","params":[{"type":{"names":["string"]},"description":"rarity of the ship you want to search for (Case Sensitive)
","name":"rarity"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"ShipExtFilter#rarity","longname":"SaratogaShips.ShipExtFilter#rarity","kind":"function","scope":"static","$longname":"SaratogaShips.ShipExtFilter#rarity","$kind":"method","$docmaLink":"?api#SaratogaShips.ShipExtFilter#rarity"},{"comment":"/**\n * Lists all the ships that matches a specific ship hull type\n * @param {string} hullType hullType of the ship you want to search for (Case Sensitive)\n * @memberof SaratogaShips\n * @returns {Array | null}\n */","meta":{"range":[5192,5322],"filename":"SaratogaShips.js","lineno":188,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001814","name":"ShipExtFilter#type","type":"MethodDefinition","paramnames":["hullType"]},"vars":{"":null}},"description":"Lists all the ships that matches a specific ship hull type
","params":[{"type":{"names":["string"]},"description":"hullType of the ship you want to search for (Case Sensitive)
","name":"hullType"}],"memberof":"SaratogaShips","returns":[{"type":{"names":["Array.","null"]}}],"name":"ShipExtFilter#type","longname":"SaratogaShips.ShipExtFilter#type","kind":"function","scope":"static","$longname":"SaratogaShips.ShipExtFilter#type","$kind":"method","$docmaLink":"?api#SaratogaShips.ShipExtFilter#type"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[198,306],"filename":"SaratogaShips.js","lineno":9,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001305","name":"SaratogaShips","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaShips","longname":"SaratogaShips","kind":"class","scope":"global","$longname":"SaratogaShips","$kind":"constructor","$docmaLink":"?api#SaratogaShips"}},{"comment":"/**\n * Ship related getters for Saratoga\n * @class SaratogaShips\n */","meta":{"filename":"SaratogaShips.js","lineno":1,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{}},"description":"Ship related getters for Saratoga
","kind":"class","name":"SaratogaShips","longname":"SaratogaShips","scope":"global","$longname":"SaratogaShips","$kind":"class","$docmaLink":"?api#SaratogaShips"},{"comment":"/**\n * 本APIの出発点\n * Saratoga, the starting point of this API\n * @class SaratogaStore\n */","meta":{"filename":"SaratogaStore.js","lineno":12,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{}},"description":"本APIの出発点\nSaratoga, the starting point of this API
","kind":"class","name":"SaratogaStore","longname":"SaratogaStore","scope":"global","$longname":"SaratogaStore","$kind":"class","$docmaLink":"?api#SaratogaStore","$members":[{"comment":"/**\n * 連打関連ゲッター\n * Barrage related getters for this store\n * @type {SaratogaBarrages}\n */","meta":{"range":[1947,1989],"filename":"SaratogaStore.js","lineno":59,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001988","name":"this.barrages","type":"NewExpression","value":"","paramnames":[]}},"description":"連打関連ゲッター\nBarrage related getters for this store
","type":{"names":["SaratogaBarrages"]},"name":"barrages","longname":"SaratogaStore#barrages","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#barrages","$kind":"property","$docmaLink":"?api#SaratogaStore#barrages"},{"comment":"/**\n * 装置関連ゲッター\n * Equipment related getters for this store\n * @type {SaratogaEquipments}\n */","meta":{"range":[1376,1422],"filename":"SaratogaStore.js","lineno":41,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001980","name":"this.equipments","type":"NewExpression","value":"","paramnames":[]}},"description":"装置関連ゲッター\nEquipment related getters for this store
","type":{"names":["SaratogaEquipments"]},"name":"equipments","longname":"SaratogaStore#equipments","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#equipments","$kind":"property","$docmaLink":"?api#SaratogaStore#equipments"},{"comment":"/**\n * 旧装置のAPI\n * Legacy Equipments API\n * @type {LegacyEquipments}\n */","meta":{"range":[2341,2391],"filename":"SaratogaStore.js","lineno":75,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100002004","name":"this.legacyEquipments","type":"NewExpression","value":"","paramnames":[]}},"description":"旧装置のAPI\nLegacy Equipments API
","type":{"names":["LegacyEquipments"]},"name":"legacyEquipments","longname":"SaratogaStore#legacyEquipments","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#legacyEquipments","$kind":"property","$docmaLink":"?api#SaratogaStore#legacyEquipments"},{"comment":"/**\n * 旧船のAPI\n * Legacy Ships API\n * @type {LegacyShips}\n */","meta":{"range":[2180,2220],"filename":"SaratogaStore.js","lineno":69,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001996","name":"this.legacyShips","type":"NewExpression","value":"","paramnames":[]}},"description":"旧船のAPI\nLegacy Ships API
","type":{"names":["LegacyShips"]},"name":"legacyShips","longname":"SaratogaStore#legacyShips","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#legacyShips","$kind":"property","$docmaLink":"?api#SaratogaStore#legacyShips"},{"comment":"/**\n * 準備完了状態\n * If this store is already ready to operate\n * @type {Boolean}\n */","meta":{"range":[2711,2729],"filename":"SaratogaStore.js","lineno":87,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100002020","name":"this.ready","type":"Literal","value":false,"paramnames":[]}},"description":"準備完了状態\nIf this store is already ready to operate
","type":{"names":["Boolean"]},"name":"ready","longname":"SaratogaStore#ready","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#ready","$kind":"property","$docmaLink":"?api#SaratogaStore#ready"},{"comment":"/**\n * このインスタンスを生成したsaratogaインスタンス\n * The saratoga instance that generated this instance\n * @type {Saratoga}\n */","meta":{"range":[939,963],"filename":"SaratogaStore.js","lineno":27,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001946","name":"this.saratoga","type":"Identifier","value":"saratoga","paramnames":[]}},"description":"このインスタンスを生成したsaratogaインスタンス\nThe saratoga instance that generated this instance
","type":{"names":["Saratoga"]},"name":"saratoga","longname":"SaratogaStore#saratoga","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#saratoga","$kind":"property","$docmaLink":"?api#SaratogaStore#saratoga"},{"comment":"/**\n * 船に関するゲッター\n * Ship related getters for this store\n * @type {SaratogaShips}\n */","meta":{"range":[1098,1134],"filename":"SaratogaStore.js","lineno":33,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001952","name":"this.ships","type":"NewExpression","value":"","paramnames":[]}},"description":"船に関するゲッター\nShip related getters for this store
","type":{"names":["SaratogaShips"]},"name":"ships","longname":"SaratogaStore#ships","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#ships","$kind":"property","$docmaLink":"?api#SaratogaStore#ships"},{"comment":"/**\n * アップデータクラス\n * Updater Class for the local data for this store\n * @type {SaratogaUpdater}\n */","meta":{"range":[2539,2579],"filename":"SaratogaStore.js","lineno":81,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100002012","name":"this.updater","type":"NewExpression","value":"","paramnames":[]}},"description":"アップデータクラス\nUpdater Class for the local data for this store
","type":{"names":["SaratogaUpdater"]},"name":"updater","longname":"SaratogaStore#updater","kind":"member","memberof":"SaratogaStore","scope":"instance","$longname":"SaratogaStore#updater","$kind":"property","$docmaLink":"?api#SaratogaStore#updater"}],"$constructor":{"comment":"/**\n * @param {Saratoga} saratoga The saratoga class that generated this instance このインスタンスを生成したSaratogaクラス\n */","meta":{"range":[754,3562],"filename":"SaratogaStore.js","lineno":21,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001940","name":"SaratogaStore","type":"MethodDefinition","paramnames":["saratoga"]},"vars":{"":null}},"params":[{"type":{"names":["Saratoga"]},"description":"The saratoga class that generated this instance このインスタンスを生成したSaratogaクラス
","name":"saratoga"}],"name":"SaratogaStore","longname":"SaratogaStore","kind":"class","scope":"global","$longname":"SaratogaStore","$kind":"constructor","$docmaLink":"?api#SaratogaStore"}},{"comment":"/**\n * Manages the local data & cache updates\n * @class SaratogaUpdater\n */","meta":{"filename":"SaratogaUpdater.js","lineno":5,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{}},"description":"Manages the local data & cache updates
","kind":"class","name":"SaratogaUpdater","longname":"SaratogaUpdater","scope":"global","$longname":"SaratogaUpdater","$kind":"class","$docmaLink":"?api#SaratogaUpdater","$members":[{"comment":"/**\n * アップデートの確認\n * Checks if there is new updates for ship or equipment data\n * @memberof SaratogaUpdater\n * @returns {Promise}\n * @example\n * const api = new Saratoga();\n * api.updater.checkForUpdate()\n * .then((response) => {\n * if (response.shipUpdateAvailable || response.equipmentUpdateAvailable) console.log('update available');\n * })\n */","meta":{"range":[3607,4019],"filename":"SaratogaUpdater.js","lineno":92,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100003086","name":"SaratogaUpdater#checkForUpdate","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"アップデートの確認\nChecks if there is new updates for ship or equipment data
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"examples":["const api = new Saratoga();\napi.updater.checkForUpdate()\n .then((response) => {\n if (response.shipUpdateAvailable || response.equipmentUpdateAvailable) console.log('update available');\n })"],"name":"checkForUpdate","longname":"SaratogaUpdater#checkForUpdate","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#checkForUpdate","$kind":"method","$docmaLink":"?api#SaratogaUpdater#checkForUpdate"},{"comment":"/**\n * キャッシュの更新\n * Updates the Cached Data, loaded from the local files of Saratoga\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[5435,5610],"filename":"SaratogaUpdater.js","lineno":139,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100003206","name":"SaratogaUpdater#updateCache","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"キャッシュの更新\nUpdates the Cached Data, loaded from the local files of Saratoga
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateCache","longname":"SaratogaUpdater#updateCache","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateCache","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateCache"},{"comment":"/**\n * 全てを更新\n * Updates the Local Files & Cached Data in one method, good for single process scenarios as it's easy. Not for multi sharded programs that has its own Saratoga instance per shard.\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[3083,3189],"filename":"SaratogaUpdater.js","lineno":75,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100003070","name":"SaratogaUpdater#updateDataAndCache","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"全てを更新\nUpdates the Local Files & Cached Data in one method, good for single process scenarios as it's easy. Not for multi sharded programs that has its own Saratoga instance per shard.
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateDataAndCache","longname":"SaratogaUpdater#updateDataAndCache","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateDataAndCache","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateDataAndCache"},{"comment":"/**\n * ファイルの更新\n * Updates the Local Files of Saratoga if there is an update\n * @memberof SaratogaUpdater\n * @returns {Promise}\n */","meta":{"range":[4186,5260],"filename":"SaratogaUpdater.js","lineno":107,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100003106","name":"SaratogaUpdater#updateLocalData","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"ファイルの更新\nUpdates the Local Files of Saratoga if there is an update
","memberof":"SaratogaUpdater","returns":[{"type":{"names":["Promise."]}}],"name":"updateLocalData","longname":"SaratogaUpdater#updateLocalData","kind":"function","scope":"instance","params":[],"async":true,"$longname":"SaratogaUpdater#updateLocalData","$kind":"method","$docmaLink":"?api#SaratogaUpdater#updateLocalData"},{"comment":"/**\n * The cron update checker which is responsible for Saratoga#updateAvailable event\n * @type {?Timeout}\n */","meta":{"range":[830,852],"filename":"SaratogaUpdater.js","lineno":28,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100002800","name":"this.cronUpdate","type":"Literal","value":null,"paramnames":[]}},"description":"The cron update checker which is responsible for Saratoga#updateAvailable event
","type":{"names":["Timeout"]},"nullable":true,"name":"cronUpdate","longname":"SaratogaUpdater#cronUpdate","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#cronUpdate","$kind":"property","$docmaLink":"?api#SaratogaUpdater#cronUpdate"},{"comment":"/**\n * If the data directory of this updater is ready to operate\n * @type {Boolean}\n */","meta":{"range":[652,677],"filename":"SaratogaUpdater.js","lineno":23,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100002794","name":"this.dataDirReady","type":"Literal","value":false,"paramnames":[]}},"description":"If the data directory of this updater is ready to operate
","type":{"names":["Boolean"]},"name":"dataDirReady","longname":"SaratogaUpdater#dataDirReady","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#dataDirReady","$kind":"property","$docmaLink":"?api#SaratogaUpdater#dataDirReady"},{"comment":"/**\n * The saratoga instance that generated this instance\n * @type {Saratoga}\n */","meta":{"range":[963,1021],"filename":"SaratogaUpdater.js","lineno":35,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100002805","name":"SaratogaUpdater#saratoga","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"The saratoga instance that generated this instance
","type":{"names":["Saratoga"]},"name":"saratoga","longname":"SaratogaUpdater#saratoga","kind":"member","memberof":"SaratogaUpdater","scope":"instance","params":[],"$longname":"SaratogaUpdater#saratoga","$kind":"property","$docmaLink":"?api#SaratogaUpdater#saratoga"},{"comment":"/**\n * The updater instance that generated this instance\n * @type {SaratogaStore}\n */","meta":{"range":[504,522],"filename":"SaratogaUpdater.js","lineno":18,"columnno":8,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100002788","name":"this.store","type":"Identifier","value":"store","paramnames":[]}},"description":"The updater instance that generated this instance
","type":{"names":["SaratogaStore"]},"name":"store","longname":"SaratogaUpdater#store","kind":"member","memberof":"SaratogaUpdater","scope":"instance","$longname":"SaratogaUpdater#store","$kind":"property","$docmaLink":"?api#SaratogaUpdater#store"}],"$constructor":{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[357,859],"filename":"SaratogaUpdater.js","lineno":13,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100002782","name":"SaratogaUpdater","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaUpdater","longname":"SaratogaUpdater","kind":"class","scope":"global","$longname":"SaratogaUpdater","$kind":"constructor","$docmaLink":"?api#SaratogaUpdater"}},{"comment":"","meta":{"range":[122,250],"filename":"SaratogaValidator.js","lineno":5,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/updater","code":{"id":"astnode100003597","name":"SaratogaValidator","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"undocumented":true,"name":"SaratogaValidator","longname":"SaratogaValidator","kind":"class","scope":"global","params":[],"$longname":"SaratogaValidator","$kind":"constructor","$docmaLink":"?api#SaratogaValidator"},{"comment":"/**\n * @param {SaratogaStore} store The updater instance that generated this instance\n */","meta":{"range":[142,250],"filename":"SaratogaVoicelines.js","lineno":6,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100002706","name":"SaratogaVoicelines","type":"MethodDefinition","paramnames":["store"]},"vars":{"":null}},"params":[{"type":{"names":["SaratogaStore"]},"description":"The updater instance that generated this instance
","name":"store"}],"name":"SaratogaVoicelines","longname":"SaratogaVoicelines","kind":"class","scope":"global","$longname":"SaratogaVoicelines","$kind":"constructor","$docmaLink":"?api#SaratogaVoicelines"},{"comment":"","meta":{"range":[3147,3185],"filename":"SaratogaShips.js","lineno":109,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001629","name":"ShipExtAll","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"undocumented":true,"name":"ShipExtAll","longname":"ShipExtAll","kind":"class","scope":"global","params":[],"$longname":"ShipExtAll","$kind":"constructor","$docmaLink":"?api#ShipExtAll"},{"comment":"","meta":{"range":[4130,4168],"filename":"SaratogaShips.js","lineno":157,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001755","name":"ShipExtFilter","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"undocumented":true,"name":"ShipExtFilter","longname":"ShipExtFilter","kind":"class","scope":"global","params":[],"$longname":"ShipExtFilter","$kind":"constructor","$docmaLink":"?api#ShipExtFilter"},{"comment":"/**\n * Custom filter for equipment data\n * @param {requestCallback} callback the callback that handles the response\n */","meta":{"range":[1989,2101],"filename":"LegacyEquipments.js","lineno":62,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000370","name":"LegacyEquipments#filter","type":"MethodDefinition","paramnames":["callback"]},"vars":{"":null}},"description":"Custom filter for equipment data
","params":[{"type":{"names":["requestCallback"]},"description":"the callback that handles the response
","name":"callback"}],"name":"filter","longname":"LegacyEquipments#filter","kind":"function","memberof":"LegacyEquipments","scope":"instance","$longname":"LegacyEquipments#filter","$kind":"method","$docmaLink":"?api#LegacyEquipments#filter"},{"comment":"/**\n * Custom search for data in Fuse instance\n * @param {any} options Fuse search options\n */","meta":{"range":[2217,2324],"filename":"LegacyEquipments.js","lineno":70,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000390","name":"LegacyEquipments#search","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"description":"Custom search for data in Fuse instance
","params":[{"type":{"names":["any"]},"description":"Fuse search options
","name":"options"}],"name":"search","longname":"LegacyEquipments#search","kind":"function","memberof":"LegacyEquipments","scope":"instance","$longname":"LegacyEquipments#search","$kind":"method","$docmaLink":"?api#LegacyEquipments#search"},{"comment":"/**\n * Custom filter for ship data\n * @param {requestCallback} callback the callback that handles the response\n */","meta":{"range":[3095,3207],"filename":"LegacyShips.js","lineno":97,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000652","name":"LegacyShips#filter","type":"MethodDefinition","paramnames":["callback"]},"vars":{"":null}},"description":"Custom filter for ship data
","params":[{"type":{"names":["requestCallback"]},"description":"the callback that handles the response
","name":"callback"}],"name":"filter","longname":"LegacyShips#filter","kind":"function","memberof":"LegacyShips","scope":"instance","$longname":"LegacyShips#filter","$kind":"method","$docmaLink":"?api#LegacyShips#filter"},{"comment":"/**\n * Custom search for data in Fuse instance\n * @param {any} options Fuse search options\n */","meta":{"range":[3323,3430],"filename":"LegacyShips.js","lineno":105,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000672","name":"LegacyShips#search","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"description":"Custom search for data in Fuse instance
","params":[{"type":{"names":["any"]},"description":"Fuse search options
","name":"options"}],"name":"search","longname":"LegacyShips#search","kind":"function","memberof":"LegacyShips","scope":"instance","$longname":"LegacyShips#search","$kind":"method","$docmaLink":"?api#LegacyShips#search"},{"comment":"/**\n * Get an unfiltered barrage list\n */","meta":{"range":[2225,2309],"filename":"SaratogaBarrages.js","lineno":74,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000906","name":"SaratogaBarrages#all","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Get an unfiltered barrage list
","name":"all","longname":"SaratogaBarrages#all","kind":"function","memberof":"SaratogaBarrages","scope":"instance","params":[],"$longname":"SaratogaBarrages#all","$kind":"method","$docmaLink":"?api#SaratogaBarrages#all"},{"comment":"/**\n * Custom filter for barrage data\n * @param {requestCallback} callback the callback that handles the response\n */","meta":{"range":[2449,2561],"filename":"SaratogaBarrages.js","lineno":83,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000921","name":"SaratogaBarrages#filter","type":"MethodDefinition","paramnames":["callback"]},"vars":{"":null}},"description":"Custom filter for barrage data
","params":[{"type":{"names":["requestCallback"]},"description":"the callback that handles the response
","name":"callback"}],"name":"filter","longname":"SaratogaBarrages#filter","kind":"function","memberof":"SaratogaBarrages","scope":"instance","$longname":"SaratogaBarrages#filter","$kind":"method","$docmaLink":"?api#SaratogaBarrages#filter"},{"comment":"/**\n * Searches for a specific barrage based on hull\n * @param {string} hull name of the hull that you want to search a barrage for\n * @memberof SaratogaBarrages\n * @returns {Barrage | null}\n */","meta":{"range":[1974,2165],"filename":"SaratogaBarrages.js","lineno":64,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000869","name":"SaratogaBarrages#hull","type":"MethodDefinition","paramnames":["hull"]},"vars":{"":null}},"description":"Searches for a specific barrage based on hull
","params":[{"type":{"names":["string"]},"description":"name of the hull that you want to search a barrage for
","name":"hull"}],"memberof":"SaratogaBarrages","returns":[{"type":{"names":["Barrage","null"]}}],"name":"hull","longname":"SaratogaBarrages#hull","kind":"function","scope":"instance","$longname":"SaratogaBarrages#hull","$kind":"method","$docmaLink":"?api#SaratogaBarrages#hull"},{"comment":"/**\n * Fetches a specific barrage via its id\n * @param {string} id id of the barrage you want to fetch\n * @memberof SaratogaBarrages\n * @returns {Barrage | null}\n */","meta":{"range":[649,832],"filename":"SaratogaBarrages.js","lineno":24,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000756","name":"SaratogaBarrages#id","type":"MethodDefinition","paramnames":["id"]},"vars":{"":null}},"description":"Fetches a specific barrage via its id
","params":[{"type":{"names":["string"]},"description":"id of the barrage you want to fetch
","name":"id"}],"memberof":"SaratogaBarrages","returns":[{"type":{"names":["Barrage","null"]}}],"name":"id","longname":"SaratogaBarrages#id","kind":"function","scope":"instance","$longname":"SaratogaBarrages#id","$kind":"method","$docmaLink":"?api#SaratogaBarrages#id"},{"comment":"/**\n * Searches for a specific barrage\n * @param {string} name name of the barrage you want to search for\n * @param {number} [limit=10] limit of the search results\n * @memberof SaratogaBarrages\n * @returns {Barrage | null}\n */","meta":{"range":[1093,1314],"filename":"SaratogaBarrages.js","lineno":38,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000793","name":"SaratogaBarrages#name","type":"MethodDefinition","paramnames":["name","limit"]},"vars":{"":null}},"description":"Searches for a specific barrage
","params":[{"type":{"names":["string"]},"description":"name of the barrage you want to search for
","name":"name"},{"type":{"names":["number"]},"optional":true,"defaultvalue":10,"description":"limit of the search results
","name":"limit"}],"memberof":"SaratogaBarrages","returns":[{"type":{"names":["Barrage","null"]}}],"name":"name","longname":"SaratogaBarrages#name","kind":"function","scope":"instance","$longname":"SaratogaBarrages#name","$kind":"method","$docmaLink":"?api#SaratogaBarrages#name"},{"comment":"/**\n * Custom search for data in Fuse instance\n * @param {any} options Fuse search options\n */","meta":{"range":[2677,2784],"filename":"SaratogaBarrages.js","lineno":91,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000941","name":"SaratogaBarrages#search","type":"MethodDefinition","paramnames":["options"]},"vars":{"":null}},"description":"Custom search for data in Fuse instance
","params":[{"type":{"names":["any"]},"description":"Fuse search options
","name":"options"}],"name":"search","longname":"SaratogaBarrages#search","kind":"function","memberof":"SaratogaBarrages","scope":"instance","$longname":"SaratogaBarrages#search","$kind":"method","$docmaLink":"?api#SaratogaBarrages#search"},{"comment":"/**\n * Searches for a specific barrage based on usable ship\n * @param {string} ship name of the ship that you want to search a barrage for\n * @memberof SaratogaBarrages\n * @returns {Barrage | null}\n */","meta":{"range":[1546,1745],"filename":"SaratogaBarrages.js","lineno":51,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100000830","name":"SaratogaBarrages#ships","type":"MethodDefinition","paramnames":["ship"]},"vars":{"":null}},"description":"Searches for a specific barrage based on usable ship
","params":[{"type":{"names":["string"]},"description":"name of the ship that you want to search a barrage for
","name":"ship"}],"memberof":"SaratogaBarrages","returns":[{"type":{"names":["Barrage","null"]}}],"name":"ships","longname":"SaratogaBarrages#ships","kind":"function","scope":"instance","$longname":"SaratogaBarrages#ships","$kind":"method","$docmaLink":"?api#SaratogaBarrages#ships"},{"comment":"/**\n * Get an unfiltered ship list\n */","meta":{"range":[3242,3326],"filename":"SaratogaShips.js","lineno":116,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001636","name":"ShipExtAll#get","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Get an unfiltered ship list
","name":"get","longname":"ShipExtAll#get","kind":"function","memberof":"ShipExtAll","scope":"instance","params":[],"$longname":"ShipExtAll#get","$kind":"method","$docmaLink":"?api#ShipExtAll#get"},{"comment":"/**\n * Filter ships via id\n */","meta":{"range":[3992,4078],"filename":"SaratogaShips.js","lineno":150,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001734","name":"ShipExtAll#id","type":"MethodDefinition","paramnames":[]},"vars":{"":null}},"description":"Filter ships via id
","name":"id","longname":"ShipExtAll#id","kind":"function","memberof":"ShipExtAll","scope":"instance","params":[],"$longname":"ShipExtAll#id","$kind":"method","$docmaLink":"?api#ShipExtAll#id"},{"comment":"/**\n * Filter ships via language\n * @param {string} language \n */","meta":{"range":[3414,3943],"filename":"SaratogaShips.js","lineno":125,"columnno":4,"path":"/Users/yiyi/Desktop/Code/Saratoga/src/store","code":{"id":"astnode100001651","name":"ShipExtAll#name","type":"MethodDefinition","paramnames":["language"]},"vars":{"":null}},"description":"Filter ships via language
","params":[{"type":{"names":["string"]},"name":"language"}],"name":"name","longname":"ShipExtAll#name","kind":"function","memberof":"ShipExtAll","scope":"instance","$longname":"ShipExtAll#name","$kind":"method","$docmaLink":"?api#ShipExtAll#name"},{"comment":"/**\n * Barrage Data\n * @external Barrage\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}\n */","meta":{"filename":"index.js","lineno":34,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Barrage Data
","kind":"external","name":"Barrage","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}"],"longname":"external:Barrage","scope":"global","$longname":"external:Barrage","$kind":"external","$docmaLink":"?api#external:Barrage"},{"comment":"/**\n * Chapter Data\n * @external Chapter\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}\n */","meta":{"filename":"index.js","lineno":24,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Chapter Data
","kind":"external","name":"Chapter","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}"],"longname":"external:Chapter","scope":"global","$longname":"external:Chapter","$kind":"external","$docmaLink":"?api#external:Chapter"},{"comment":"/**\n * Equipment Data\n * @external Equipment\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}\n */","meta":{"filename":"index.js","lineno":19,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Equipment Data
","kind":"external","name":"Equipment","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}"],"longname":"external:Equipment","scope":"global","$longname":"external:Equipment","$kind":"external","$docmaLink":"?api#external:Equipment"},{"comment":"/**\n * Node.js Event Emitter\n * @external EventEmitter\n * @see {@link https://nodejs.org/api/events.html}\n */","meta":{"filename":"index.js","lineno":1,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Node.js Event Emitter
","kind":"external","name":"EventEmitter","see":["{@link https://nodejs.org/api/events.html}"],"longname":"external:EventEmitter","scope":"global","$longname":"external:EventEmitter","$kind":"external","$docmaLink":"?api#external:EventEmitter"},{"comment":"/**\n * Ship Data\n * @external Ship\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#ship-getters}\n */","meta":{"filename":"index.js","lineno":13,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Ship Data
","kind":"external","name":"Ship","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#ship-getters}"],"longname":"external:Ship","scope":"global","$longname":"external:Ship","$kind":"external","$docmaLink":"?api#external:Ship"},{"comment":"/**\n * Node.js Timeout\n * @external Timeout\n * @see {@link https://nodejs.org/dist/latest/docs/api/timers.html#timers_class_timeout}\n */","meta":{"filename":"index.js","lineno":7,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Node.js Timeout
","kind":"external","name":"Timeout","see":["{@link https://nodejs.org/dist/latest/docs/api/timers.html#timers_class_timeout}"],"longname":"external:Timeout","scope":"global","$longname":"external:Timeout","$kind":"external","$docmaLink":"?api#external:Timeout"},{"comment":"/**\n * Voiceline Data\n * @external Voiceline\n * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}\n */","meta":{"filename":"index.js","lineno":29,"columnno":0,"path":"/Users/yiyi/Desktop/Code/Saratoga","code":{}},"description":"Voiceline Data
","kind":"external","name":"Voiceline","see":["{@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}"],"longname":"external:Voiceline","scope":"global","$longname":"external:Voiceline","$kind":"external","$docmaLink":"?api#external:Voiceline"}],"symbols":["external:Barrage","external:Chapter","external:Equipment","external:EventEmitter","external:Ship","external:Timeout","external:Voiceline","LegacyEquipments","LegacyEquipments#filter","LegacyEquipments#search","LegacyShips","LegacyShips#filter","LegacyShips#search","Saratoga","Saratoga#barrages","Saratoga#chapters","Saratoga#equipments","Saratoga#event:debug","Saratoga#event:error","Saratoga#event:ready","Saratoga#event:updateAvailable","Saratoga#legacyEquipments","Saratoga#legacyShips","Saratoga#ready","Saratoga#ships","Saratoga#store","Saratoga#updater","Saratoga#voicelines","SaratogaBarrages","SaratogaBarrages#all","SaratogaBarrages#filter","SaratogaBarrages#hull","SaratogaBarrages#id","SaratogaBarrages#name","SaratogaBarrages#search","SaratogaBarrages#ships","SaratogaChapters","SaratogaEquipments","SaratogaEquipments","SaratogaEquipments#all","SaratogaEquipments#category","SaratogaEquipments#filter","SaratogaEquipments.LegacyEquipments#getAllByCategory","SaratogaEquipments.LegacyEquipments#getAllByNationality","SaratogaEquipments.LegacyEquipments#searchByEquipmentName","SaratogaEquipments#name","SaratogaEquipments#nationality","SaratogaEquipments#search","SaratogaShips","SaratogaShips","SaratogaShips#filter","SaratogaShips#get","SaratogaShips#id","SaratogaShips.LegacyShips#getAllByClass","SaratogaShips.LegacyShips#getAllByHullType","SaratogaShips.LegacyShips#getAllByNationality","SaratogaShips.LegacyShips#getAllByRarity","SaratogaShips.LegacyShips#getById","SaratogaShips.LegacyShips#searchShipByName","SaratogaShips#name","SaratogaShips#search","SaratogaShips.ShipExtFilter#class","SaratogaShips.ShipExtFilter#nationality","SaratogaShips.ShipExtFilter#rarity","SaratogaShips.ShipExtFilter#type","SaratogaStore","SaratogaStore#barrages","SaratogaStore#equipments","SaratogaStore#legacyEquipments","SaratogaStore#legacyShips","SaratogaStore#ready","SaratogaStore#saratoga","SaratogaStore#ships","SaratogaStore#updater","SaratogaUpdater","SaratogaUpdater#checkForUpdate","SaratogaUpdater#cronUpdate","SaratogaUpdater#dataDirReady","SaratogaUpdater#saratoga","SaratogaUpdater#store","SaratogaUpdater#updateCache","SaratogaUpdater#updateDataAndCache","SaratogaUpdater#updateLocalData","SaratogaValidator","SaratogaVoicelines","ShipExtAll","ShipExtAll#get","ShipExtAll#id","ShipExtAll#name","ShipExtFilter"]}},"app":{"title":"Saratoga | An open source Azur Lane local library","routing":{"method":"query","caseSensitive":true},"entrance":"content:readme","base":"/Saratoga/","meta":null,"server":"static","favicon":""},"template":{"name":"docma-template-zebra","description":"Zebra - Default template for Docma. https://github.com/onury/docma","version":"2.3.1","supportedDocmaVersion":">=2.0.0","author":"Onur Yıldırım","license":"MIT","mainHTML":"index.html","options":{"title":{"label":"Saratoga","href":"."},"sidebar":{"enabled":true,"outline":"tree","collapsed":false,"toolbar":true,"itemsFolded":false,"itemsOverflow":"crop","badges":true,"search":true,"animations":true},"symbols":{"autoLink":true,"params":"list","enums":"list","props":"list","meta":false},"navbar":{"enabled":true,"dark":false,"animations":true,"menu":[{"label":"Readme","href":"."},{"label":"Documentation","href":"?api"},{"label":"GitHub","href":"https://github.com/AzurAPI/Saratoga"}],"fixed":true},"logo":null,"contentView":{"bookmarks":false,"faVersion":"5.5.0","faLibs":"all"}}},"partials":{"api":"docma-api","content":"docma-content","notFound":"docma-404"},"elementID":"docma-main","contentElementID":"docma-content","defaultApiName":"_def_","logsEnabled":false}));
-!function(){"use strict";var r="path"===docma.app.routing.method;function n(a){return(a.params[1]||"").replace(/\/$/,"")}function a(a,e){var o=n(a)||docma._.defaultApiName,t=docma.createRoute(o,DocmaWeb.Route.Type.API);if(!t||!t.exists())return e();t.apply()}docma.app.base&&page.base(docma.app.base),page.redirect("(/)?"+docma.template.main,""),r&&(page("(/)?api/(.+)",a),page("(/)?api(/)?",a),page("(/)?(.*)",function(a,e){var o=n(a),t=docma.createRoute(o,DocmaWeb.Route.Type.CONTENT);if(!t||!t.exists())return e();t.apply()})),page("(/)?",function(c,i){!function(){if(r){var a=sessionStorage.getItem("redirectPath")||null;if(a)return sessionStorage.removeItem("redirectPath"),docma.info("Redirecting to:",a),page.redirect(a),1}}()&&setTimeout(function(){var a,e,o,t=(e=c.querystring,o=e||window.location.search,/^[?&]/.test(o)&&(o=o.slice(1)),o||null);if(r){if(t)return i();a=docma._.appEntranceRI}else docma.log("Query-string:",t),a=t?docma.createRouteFromQuery(t):docma._.appEntranceRI;if(!a||!a.exists())return i();function n(){docma._trigger(DocmaWeb.Event.Navigate,[a])}a.isCurrent()?n():a.apply(function(a){200===a&&n()})},100)}),page("*",function(a){docma.warn("Unknown Route:",a.path),docma.log("context:",a),docma.createRoute(null).apply()}),docma.info("Docma SPA Configuration:"),docma.info("App Title: ",docma.app.title),docma.info("Routing Method: ",docma.app.routing.method),docma.info("App Server: ",docma.app.server),docma.info("Base Path: ",docma.app.base),docma.info("Entrance Route ID: ",docma.app.entrance),window.onload=function(){docma._.initialLoad=!0,docma._.appEntranceRI=docma.createRouteFromID(docma.app.entrance),page.start({click:!0,popstate:!0,dispatch:!0,hashbang:!1,decodeURLComponents:!0}),docma.info("Docma SPA loaded!")}}();
\ No newline at end of file
+!function(){"use strict";var c="path"===docma.app.routing.method;function o(a){return(a.params[1]||"").replace(/\/$/,"")}function a(a,e){a=o(a)||docma._.defaultApiName,a=docma.createRoute(a,DocmaWeb.Route.Type.API);if(!a||!a.exists())return e();a.apply()}docma.app.base&&page.base(docma.app.base),page.redirect("(/)?"+docma.template.main,""),c&&(page("(/)?api/(.+)",a),page("(/)?api(/)?",a),page("(/)?(.*)",function(a,e){a=o(a),a=docma.createRoute(a,DocmaWeb.Route.Type.CONTENT);if(!a||!a.exists())return e();a.apply()})),page("(/)?",function(t,n){!function(){if(c){var a=sessionStorage.getItem("redirectPath")||null;if(a)return sessionStorage.removeItem("redirectPath"),docma.info("Redirecting to:",a),page.redirect(a),1}}()&&setTimeout(function(){var a,e,e=(e=(e=t.querystring)||window.location.search,(e=/^[?&]/.test(e)?e.slice(1):e)||null);if(c){if(e)return n();a=docma._.appEntranceRI}else docma.log("Query-string:",e),a=e?docma.createRouteFromQuery(e):docma._.appEntranceRI;if(!a||!a.exists())return n();function o(){docma._trigger(DocmaWeb.Event.Navigate,[a])}a.isCurrent()?o():a.apply(function(a){200===a&&o()})},100)}),page("*",function(a){docma.warn("Unknown Route:",a.path),docma.log("context:",a),docma.createRoute(null).apply()}),docma.info("Docma SPA Configuration:"),docma.info("App Title: ",docma.app.title),docma.info("Routing Method: ",docma.app.routing.method),docma.info("App Server: ",docma.app.server),docma.info("Base Path: ",docma.app.base),docma.info("Entrance Route ID: ",docma.app.entrance),window.onload=function(){docma._.initialLoad=!0,docma._.appEntranceRI=docma.createRouteFromID(docma.app.entrance),page.start({click:!0,popstate:!0,dispatch:!0,hashbang:!1,decodeURLComponents:!0}),docma.info("Docma SPA loaded!")}}();
\ No newline at end of file
diff --git a/index.js b/index.js
index 3e1a9e7..57a3889 100644
--- a/index.js
+++ b/index.js
@@ -21,6 +21,21 @@
* @external Equipment
* @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}
*/
+/**
+ * Chapter Data
+ * @external Chapter
+ * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}
+ */
+/**
+ * Voiceline Data
+ * @external Voiceline
+ * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}
+ */
+/**
+ * Barrage Data
+ * @external Barrage
+ * @see {@link https://github.com/AzurAPI/Saratoga/wiki/More-Get-Methods#equipment-getters}
+ */
module.exports = {
Saratoga: require('./src/Saratoga'),
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000..e668f4a
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,193 @@
+/*
+ * For a detailed explanation regarding each configuration property, visit:
+ * https://jestjs.io/docs/en/configuration.html
+ */
+
+module.exports = {
+ // All imported modules in your tests should be mocked automatically
+ // automock: false,
+
+ // Stop running tests after `n` failures
+ // bail: 0,
+
+ // The directory where Jest should store its cached dependency information
+ // cacheDirectory: "/private/var/folders/h6/96fr20fx4711gw0qkhyc0p6r0000gn/T/jest_dx",
+
+ // Automatically clear mock calls and instances between every test
+ clearMocks: true,
+
+ // Indicates whether the coverage information should be collected while executing the test
+ // collectCoverage: false,
+
+ // An array of glob patterns indicating a set of files for which coverage information should be collected
+ // collectCoverageFrom: undefined,
+
+ // The directory where Jest should output its coverage files
+ coverageDirectory: 'coverage',
+
+ // An array of regexp pattern strings used to skip coverage collection
+ // coveragePathIgnorePatterns: [
+ // "/node_modules/"
+ // ],
+
+ // Indicates which provider should be used to instrument code for coverage
+ coverageProvider: 'v8',
+
+ // A list of reporter names that Jest uses when writing coverage reports
+ // coverageReporters: [
+ // "json",
+ // "text",
+ // "lcov",
+ // "clover"
+ // ],
+
+ // An object that configures minimum threshold enforcement for coverage results
+ // coverageThreshold: undefined,
+
+ // A path to a custom dependency extractor
+ // dependencyExtractor: undefined,
+
+ // Make calling deprecated APIs throw helpful error messages
+ // errorOnDeprecated: false,
+
+ // Force coverage collection from ignored files using an array of glob patterns
+ // forceCoverageMatch: [],
+
+ // A path to a module which exports an async function that is triggered once before all test suites
+ // globalSetup: undefined,
+
+ // A path to a module which exports an async function that is triggered once after all test suites
+ // globalTeardown: undefined,
+
+ // A set of global variables that need to be available in all test environments
+ // globals: {},
+
+ // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
+ // maxWorkers: "50%",
+
+ // An array of directory names to be searched recursively up from the requiring module's location
+ // moduleDirectories: [
+ // "node_modules"
+ // ],
+
+ // An array of file extensions your modules use
+ // moduleFileExtensions: [
+ // "js",
+ // "json",
+ // "jsx",
+ // "ts",
+ // "tsx",
+ // "node"
+ // ],
+
+ // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
+ // moduleNameMapper: {},
+
+ // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
+ // modulePathIgnorePatterns: [],
+
+ // Activates notifications for test results
+ // notify: false,
+
+ // An enum that specifies notification mode. Requires { notify: true }
+ // notifyMode: "failure-change",
+
+ // A preset that is used as a base for Jest's configuration
+ // preset: undefined,
+
+ // Run tests from one or more projects
+ // projects: undefined,
+
+ // Use this configuration option to add custom reporters to Jest
+ // reporters: undefined,
+
+ // Automatically reset mock state between every test
+ // resetMocks: false,
+
+ // Reset the module registry before running each individual test
+ // resetModules: false,
+
+ // A path to a custom resolver
+ // resolver: undefined,
+
+ // Automatically restore mock state between every test
+ // restoreMocks: false,
+
+ // The root directory that Jest should scan for tests and modules within
+ // rootDir: undefined,
+
+ // A list of paths to directories that Jest should use to search for files in
+ // roots: [
+ // ""
+ // ],
+
+ // Allows you to use a custom runner instead of Jest's default test runner
+ // runner: "jest-runner",
+
+ // The paths to modules that run some code to configure or set up the testing environment before each test
+ // setupFiles: [],
+
+ // A list of paths to modules that run some code to configure or set up the testing framework before each test
+ // setupFilesAfterEnv: [],
+
+ // The number of seconds after which a test is considered as slow and reported as such in the results.
+ // slowTestThreshold: 5,
+
+ // A list of paths to snapshot serializer modules Jest should use for snapshot testing
+ // snapshotSerializers: [],
+
+ // The test environment that will be used for testing
+ testEnvironment: 'node',
+
+ // Options that will be passed to the testEnvironment
+ // testEnvironmentOptions: {},
+
+ // Adds a location field to test results
+ // testLocationInResults: false,
+
+ // The glob patterns Jest uses to detect test files
+ testMatch: [
+ '/tests/*.test.js'
+ ],
+
+ // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
+ // testPathIgnorePatterns: [
+ // "/node_modules/"
+ // ],
+
+ // The regexp pattern or array of patterns that Jest uses to detect test files
+ // testRegex: [],
+
+ // This option allows the use of a custom results processor
+ // testResultsProcessor: undefined,
+
+ // This option allows use of a custom test runner
+ // testRunner: "jasmine2",
+
+ // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
+ // testURL: "http://localhost",
+
+ // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
+ // timers: "real",
+
+ // A map from regular expressions to paths to transformers
+ // transform: undefined,
+
+ // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
+ // transformIgnorePatterns: [
+ // "/node_modules/",
+ // "\\.pnp\\.[^\\/]+$"
+ // ],
+
+ // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
+ // unmockedModulePathPatterns: undefined,
+
+ // Indicates whether each individual test should be reported during the run
+ // verbose: undefined,
+
+ // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
+ // watchPathIgnorePatterns: [],
+
+ // Whether to use watchman for file crawling
+ // watchman: true,
+};
diff --git a/package.json b/package.json
index 1d32ecf..7c95481 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,12 @@
{
"name": "saratoga",
- "version": "1.1.0-beta",
+ "version": "1.1.3-beta",
"description": "Open Source Azur Lane Local Database",
"main": "index.js",
"scripts": {
- "test": "node ./tests/Client.js"
+ "test": "node ./tests/LegacyClient.js",
+ "jest": "jest",
+ "docs": "docma"
},
"keywords": [
"api",
@@ -26,6 +28,8 @@
},
"devDependencies": {
"docma": "^3.2.2",
- "eslint": "^6.8.0"
+ "eslint": "^6.8.0",
+ "eslint-plugin-jest": "^24.1.3",
+ "jest": "^26.6.3"
}
}
diff --git a/src/Saratoga.js b/src/Saratoga.js
index 2a77b06..344b88a 100644
--- a/src/Saratoga.js
+++ b/src/Saratoga.js
@@ -2,6 +2,7 @@ const EventEmitter = require('events');
const SaratogaStore = require('./store/SaratogaStore');
/**
+ * 本APIの出発点
* Saratoga, the starting point of this API
* @class Saratoga
* @extends {EventEmitter}
@@ -13,6 +14,7 @@ class Saratoga extends EventEmitter {
constructor(options = { notifyForNewUpdates: false }) {
super();
/**
+ * キャッシュデータの管理
* Contains methods and props for managing cached data
* @type {SaratogaStore}
*/
@@ -21,12 +23,14 @@ class Saratoga extends EventEmitter {
}
/**
+ * デバッグデータがあるときに発せられる
* Emitted when there is a debug data
* @event Saratoga#debug
- * @param {string} message Debug message
+ * @param {string} message Debug message 資料
* @memberof Saratoga
*/
/**
+ * エラーが発生したときに発せられる
* Emitted when there is a pesky error
* @event Saratoga#error
* @param {Error} error The error encountered.
@@ -35,6 +39,7 @@ class Saratoga extends EventEmitter {
* Saratoga.on('error', console.error);
*/
/**
+ * 更新があったときに発せられる
* Emitted when there is an update available for local data. Only available when Saratoga is initialized with notifyForNewUpdates set to true
* @event Saratoga#updateAvailable
* @param {Object} data What data needs updating
@@ -47,12 +52,14 @@ class Saratoga extends EventEmitter {
* })
*/
/**
+ * 準備ができたときに発せられる
* Emitted when Saratoga is ready
* @event Saratoga#ready
* @memberof Saratoga
*/
/**
+ * アップデータ
* Contains methods for updating Saratoga's local data & cache
* @type {SaratogaUpdater}
*/
@@ -61,6 +68,7 @@ class Saratoga extends EventEmitter {
}
/**
+ * 状態
* If Saratoga is ready to operate
* @type {Boolean}
*/
@@ -69,6 +77,7 @@ class Saratoga extends EventEmitter {
}
/**
+ * 船のデータを取得する
* Azur Lane's Ship related getter methods
* @type {SaratogaShips}
*/
@@ -78,6 +87,7 @@ class Saratoga extends EventEmitter {
}
/**
+ * 装置のデータを取得する
* Azur Lane's Equipment related getter methods
* @type {SaratogaEquipments}
*/
@@ -85,5 +95,50 @@ class Saratoga extends EventEmitter {
if (!this.ready) return null;
return this.store.equipments;
}
+ /**
+ * チャプターのデータを取得する
+ * Chapters related getters for this store
+ * @type {SaratogaChapters}
+ */
+ get chapters() {
+ if (!this.ready) return null;
+ return this.store.chapters;
+ }
+ /**
+ * ボイスラインのデータを取得する
+ * Voiceline related getters for this store
+ * @type {SaratogaVoicelines}
+ */
+ get voicelines() {
+ if (!this.ready) return null;
+ return this.store.voicelines;
+ }
+ /**
+ * 連打のデータを取得する
+ * Barrage related getters for this store
+ * @type {SaratogaBarrages}
+ */
+ get barrages() {
+ if (!this.ready) return null;
+ return this.store.barrages;
+ }
+ /**
+ * 旧船のデータを取得する
+ * Azur Lane's Ship related getter methods with legacy API
+ * @type {SaratogaLegacyShips}
+ */
+ get legacyShips() {
+ if (!this.ready) return null;
+ return this.store.legacyShips;
+ }
+ /**
+ * 旧装置のデータを取得する
+ * Azur Lane's Equipment related getter methods with legacy API
+ * @type {SaratogaLegacyEquipments}
+ */
+ get legacyEquipments() {
+ if (!this.ready) return null;
+ return this.store.legacyEquipments;
+ }
}
module.exports = Saratoga;
diff --git a/src/store/LegacyEquipments.js b/src/store/LegacyEquipments.js
new file mode 100644
index 0000000..694bf90
--- /dev/null
+++ b/src/store/LegacyEquipments.js
@@ -0,0 +1,75 @@
+/**
+ * Equipment related getters for Saratoga with LegacyAPI
+ * @class SaratogaEquipments
+ */
+class LegacyEquipments {
+ /**
+ * @param {SaratogaStore} store The updater instance that generated this instance
+ */
+ constructor(store) {
+ Object.defineProperty(this, '_store', { value: store, writable: false });
+ }
+
+ get cache() {
+ if (!this._store._equipCache) return null;
+ return this._store._equipCache;
+ }
+
+ get rawCache() {
+ if (!this.cache) return null;
+ return this.cache.list;
+ }
+
+ /**
+ * Lists the equipments by category
+ * @param {string} category name of the category you want to search for
+ * @memberof SaratogaEquipments
+ * @returns {Array | null}
+ */
+ getAllByCategory(category) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.category === category);
+ }
+
+ /**
+ * Lists the equipments by nationality
+ * @param {string} nationality naitionality name of the equipments you want to search for
+ * @memberof SaratogaEquipments
+ * @returns {Array | null}
+ */
+ getAllByNationality(nationality) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.nationality === nationality);
+ }
+
+ /**
+ * Searches for a specific equipment. (EN, CN, JP, KR names are supported)
+ * @param {string} name name of the equipment you want to search for
+ * @param {number} [limit=10] limit of the search results
+ * @memberof SaratogaEquipments
+ * @returns {Equipment | null}
+ */
+ searchByEquipmentName(name, limit = 10) {
+ if (!this.cache) return null;
+ const possibleEquipments = this.cache.search(name, { limit });
+ if (!possibleEquipments.length) return null;
+ return possibleEquipments;
+ }
+ /**
+ * Custom filter for equipment data
+ * @param {requestCallback} callback the callback that handles the response
+ */
+ filter(callback) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(callback);
+ }
+ /**
+ * Custom search for data in Fuse instance
+ * @param {any} options Fuse search options
+ */
+ search(options) {
+ if (!this.rawCache) return null;
+ return this.cache.search(options);
+ }
+}
+module.exports = LegacyEquipments;
\ No newline at end of file
diff --git a/src/store/LegacyShips.js b/src/store/LegacyShips.js
new file mode 100644
index 0000000..27f39b3
--- /dev/null
+++ b/src/store/LegacyShips.js
@@ -0,0 +1,110 @@
+/**
+ * Ship related getters for Saratoga with LegacyAPI
+ * @class SaratogaShips
+ */
+class LegacyShips {
+ /**
+ * @param {SaratogaStore} store The updater instance that generated this instance
+ */
+ constructor(store) {
+ Object.defineProperty(this, '_store', { value: store, writable: false });
+ }
+
+ get cache() {
+ if (!this._store._shipCache) return null;
+ return this._store._shipCache;
+ }
+
+ get rawCache() {
+ if (!this.cache) return null;
+ return this.cache.list;
+ }
+
+ /**
+ * Lists all the ships that matches a specific shjp class
+ * @param {string} shipClass class of the ship you want to search for (Case Sensitive)
+ * @memberof SaratogaShips
+ * @returns {Array | null}
+ */
+ getAllByClass(shipClass) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.class === shipClass);
+ }
+
+ /**
+ * Lists all the ships that matches a specific ship nationality
+ * @param {string} nationality nationality of the ship you want to search for (Case Sensitive)
+ * @memberof SaratogaShips
+ * @returns {Array | null}
+ */
+ getAllByNationality(nationality) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.nationality === nationality);
+ }
+
+ /**
+ * Lists all the ships that matches a specific ship hull type
+ * @param {string} hullType hullType of the ship you want to search for (Case Sensitive)
+ * @memberof SaratogaShips
+ * @returns {Array | null}
+ */
+ getAllByHullType(hullType) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.hullType === hullType);
+ }
+
+ /**
+ * Lists all the ship that matches a specific rarity
+ * @param {string} rarity rarity of the ship you want to search for (Case Sensitive)
+ * @memberof SaratogaShips
+ * @returns {Array | null}
+ */
+ getAllByRarity(rarity) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(d => d.rarity === rarity);
+ }
+
+ /**
+ * Fetches a specific ship via its id
+ * @param {number} id id of the ship you want to fetch
+ * @memberof SaratogaShips
+ * @returns {Ship | null}
+ */
+ getById(id) {
+ if (!this.rawCache) return null;
+ const ship = this.rawCache.find(d => d.id === id);
+ if (!ship.length) return null;
+ return ship;
+ }
+
+ /**
+ * Searches for a specific ship. (EN, CN, JP, KR names are supported)
+ * @param {string} name name of the ship you want to search for
+ * @param {number} [limit=10] limit of the search results
+ * @memberof SaratogaShips
+ * @returns {Ship | null}
+ */
+ searchShipByName(name, limit = 10) {
+ if (!this.cache) return null;
+ const possibleShips = this.cache.search(name, { limit });
+ if (!possibleShips.length) return null;
+ return possibleShips;
+ }
+ /**
+ * Custom filter for ship data
+ * @param {requestCallback} callback the callback that handles the response
+ */
+ filter(callback) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(callback);
+ }
+ /**
+ * Custom search for data in Fuse instance
+ * @param {any} options Fuse search options
+ */
+ search(options) {
+ if (!this.rawCache) return null;
+ return this.cache.search(options);
+ }
+}
+module.exports = LegacyShips;
\ No newline at end of file
diff --git a/src/store/SaratogaBarrages.js b/src/store/SaratogaBarrages.js
new file mode 100644
index 0000000..02260b6
--- /dev/null
+++ b/src/store/SaratogaBarrages.js
@@ -0,0 +1,97 @@
+class SaratogaBarrages {
+ /**
+ * @param {SaratogaStore} store The updater instance that generated this instance
+ */
+ constructor(store) {
+ Object.defineProperty(this, '_store', { value: store, writable: false });
+ }
+ get cache() {
+ if (!this._store._equipCache) return null;
+ return this._store._equipCache;
+ }
+
+ get rawCache() {
+ if (!this.cache) return null;
+ return this.cache.list;
+ }
+
+ /**
+ * Fetches a specific barrage via its id
+ * @param {string} id id of the barrage you want to fetch
+ * @memberof SaratogaBarrages
+ * @returns {Barrage | null}
+ */
+ id(id) {
+ if (!this.rawCache) return null;
+ const barrage = this.rawCache.find(d => d.id === id);
+ if (!barrage.length) return null;
+ return barrage;
+ }
+
+ /**
+ * Searches for a specific barrage
+ * @param {string} name name of the barrage you want to search for
+ * @param {number} [limit=10] limit of the search results
+ * @memberof SaratogaBarrages
+ * @returns {Barrage | null}
+ */
+ name(name, limit = 10) {
+ if (!this.cache) return null;
+ const possibleBarrages = this.cache.search(name, { limit });
+ if (!possibleBarrages.length) return null;
+ return possibleBarrages;
+ }
+
+ /**
+ * Searches for a specific barrage based on usable ship
+ * @param {string} ship name of the ship that you want to search a barrage for
+ * @memberof SaratogaBarrages
+ * @returns {Barrage | null}
+ */
+ ships(ship) {
+ if (!this.rawCache) return null;
+ const barrage = this.rawCache.find(d => d.ships.includes(ship));
+ if (!barrage.length) return null;
+ return barrage;
+ }
+
+ /**
+ * Searches for a specific barrage based on hull
+ * @param {string} hull name of the hull that you want to search a barrage for
+ * @memberof SaratogaBarrages
+ * @returns {Barrage | null}
+ */
+ hull(hull) {
+ if (!this.rawCache) return null;
+ const barrage = this.rawCache.find(d => d.hull === hull);
+ if (!barrage.length) return null;
+ return barrage;
+ }
+
+ /**
+ * Get an unfiltered barrage list
+ */
+ all() {
+ if (!this.rawCache) return null;
+ return this.rawCache;
+ }
+
+ /**
+ * Custom filter for barrage data
+ * @param {requestCallback} callback the callback that handles the response
+ */
+ filter(callback) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(callback);
+ }
+ /**
+ * Custom search for data in Fuse instance
+ * @param {any} options Fuse search options
+ */
+ search(options) {
+ if (!this.rawCache) return null;
+ return this.cache.search(options);
+ }
+}
+
+module.exports = SaratogaBarrages;
\ No newline at end of file
diff --git a/src/store/SaratogaChapters.js b/src/store/SaratogaChapters.js
new file mode 100644
index 0000000..4037b96
--- /dev/null
+++ b/src/store/SaratogaChapters.js
@@ -0,0 +1,18 @@
+// TODO
+class SaratogaChapters {
+ /**
+ * @param {SaratogaStore} store The updater instance that generated this instance
+ */
+ constructor(store) {
+ Object.defineProperty(this, '_store', { value: store, writable: false });
+ }
+ get cache() {
+ if (!this._store._equipCache) return null;
+ return this._store._equipCache;
+ }
+
+ get rawCache() {
+ if (!this.cache) return null;
+ return this.cache.list;
+ }
+}
\ No newline at end of file
diff --git a/src/store/SaratogaEquipments.js b/src/store/SaratogaEquipments.js
index 72a1c2c..ca1fb3d 100644
--- a/src/store/SaratogaEquipments.js
+++ b/src/store/SaratogaEquipments.js
@@ -26,7 +26,7 @@ class SaratogaEquipments {
* @memberof SaratogaEquipments
* @returns {Array | null}
*/
- getAllByCategory(category) {
+ category(category) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.category === category);
}
@@ -37,7 +37,7 @@ class SaratogaEquipments {
* @memberof SaratogaEquipments
* @returns {Array | null}
*/
- getAllByNationality(nationality) {
+ nationality(nationality) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.nationality === nationality);
}
@@ -45,15 +45,57 @@ class SaratogaEquipments {
/**
* Searches for a specific equipment. (EN, CN, JP, KR names are supported)
* @param {string} name name of the equipment you want to search for
+ * @param {string} language optional language to search by
* @param {number} [limit=10] limit of the search results
* @memberof SaratogaEquipments
* @returns {Equipment | null}
*/
- searchByEquipmentName(name, limit = 10) {
+ name(name, language, limit = 10) {
+ if (language) {
+ if (!this.rawCache) return null;
+ let lang;
+ switch(language) {
+ case 'en':
+ lang = this.cache.names.en;
+ break;
+ case 'cn':
+ lang = this.cache.names.cn;
+ break;
+ case 'jp':
+ lang = this.cache.names.jp;
+ break;
+ }
+ return lang.find(d => d.includes(name));
+ }
if (!this.cache) return null;
const possibleEquipments = this.cache.search(name, { limit });
if (!possibleEquipments.length) return null;
return possibleEquipments;
}
+
+ /**
+ * Get an unfiltered equipment list
+ */
+ all() {
+ if (!this.rawCache) return null;
+ return this.rawCache;
+ }
+
+ /**
+ * Custom filter for equipment data
+ * @param {requestCallback} callback the callback that handles the response
+ */
+ filter(callback) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(callback);
+ }
+ /**
+ * Custom search for data in Fuse instance
+ * @param {any} options Fuse search options
+ */
+ search(options) {
+ if (!this.rawCache) return null;
+ return this.cache.search(options);
+ }
}
-module.exports = SaratogaEquipments;
+module.exports = SaratogaEquipments;
\ No newline at end of file
diff --git a/src/store/SaratogaShips.js b/src/store/SaratogaShips.js
index f0f5fd7..4bc6e30 100644
--- a/src/store/SaratogaShips.js
+++ b/src/store/SaratogaShips.js
@@ -20,13 +20,150 @@ class SaratogaShips {
return this.cache.list;
}
+ /**
+ * Search from all ships
+ * @param {number | string} id
+ * @memberof SaratogaShips
+ * @returns {Ship | null}
+ */
+ get(id) {
+ const data = this.rawCache;
+ if (!data) return null;
+ const ships = data.filter(ship => {
+ if (ship.id === id) return true;
+ for (const key of Object.keys(ship.names)) {
+ if (ship.names[key].includes(id)) return true;
+ }
+ return false;
+ });
+
+ if (!ships.length) throw new UnknownShipError(id);
+ return ships[0];
+ }
+
+ /**
+ * Fetches a specific ship via its id
+ * @param {number} id id of the ship you want to fetch
+ * @memberof SaratogaShips
+ * @returns {Ship | null}
+ */
+ id(id) {
+ if (!this.rawCache) return null;
+ const ship = this.rawCache.find(d => d.id === id);
+ if (!ship.length) return null;
+ return ship;
+ }
+
+ /**
+ * Searches for a specific ship. (EN, CN, JP, KR names are supported)
+ * @param {string} name name of the ship you want to search for
+ * @param {string} language optional language to search by
+ * @param {number} [limit=10] limit of the search results
+ * @memberof SaratogaShips
+ * @returns {Ship | null}
+ */
+ name(name, language, limit = 10) {
+ if (language) {
+ if (!this.rawCache) return null;
+ let lang;
+ switch(language) {
+ case 'en':
+ lang = this.cache.names.en;
+ break;
+ case 'cn':
+ lang = this.cache.names.cn;
+ break;
+ case 'jp':
+ lang = this.cache.names.jp;
+ break;
+ case 'kr':
+ lang = this.cache.names.kr;
+ break;
+ }
+ return lang.find(d => d.includes(name));
+ }
+ if (!this.cache) return null;
+ const possibleShips = this.cache.search(name, { limit });
+ if (!possibleShips.length) return null;
+ return possibleShips;
+ }
+ /**
+ * Custom filter for ship data
+ * @param {requestCallback} callback the callback that handles the response
+ */
+ filter(callback) {
+ if (!this.rawCache) return null;
+ return this.rawCache.filter(callback);
+ }
+ /**
+ * Custom search for data in Fuse instance
+ * @param {any} options Fuse search options
+ */
+ search(options) {
+ if (!this.rawCache) return null;
+ return this.cache.search(options);
+ }
+}
+
+class ShipExtAll extends SaratogaShips {
+ constructor() {
+ super();
+ }
+
+ /**
+ * Get an unfiltered ship list
+ */
+ get() {
+ if (!this.rawCache) return null;
+ return this.rawCache;
+ }
+
+ /**
+ * Filter ships via language
+ * @param {string} language
+ */
+ name(language) {
+ if (!this.rawCache) return null;
+ let lang;
+ switch(language) {
+ case 'en':
+ lang = this.rawCache.names.en;
+ break;
+ case 'cn':
+ lang = this.rawCache.names.cn;
+ break;
+ case 'jp':
+ lang = this.rawCache.names.jp;
+ break;
+ case 'kr':
+ lang = this.rawCache.names.kr;
+ break;
+ case 'code':
+ lang = this.rawCache.names.code;
+ }
+ return lang;
+ }
+
+ /**
+ * Filter ships via id
+ */
+ id() {
+ if (!this.rawCache) return null;
+ return this.rawCache.id;
+ }
+}
+
+class ShipExtFilter extends SaratogaShips {
+ constructor() {
+ super();
+ }
/**
* Lists all the ships that matches a specific shjp class
* @param {string} shipClass class of the ship you want to search for (Case Sensitive)
* @memberof SaratogaShips
* @returns {Array | null}
*/
- getAllByClass(shipClass) {
+ class(shipClass) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.class === shipClass);
}
@@ -37,7 +174,7 @@ class SaratogaShips {
* @memberof SaratogaShips
* @returns {Array | null}
*/
- getAllByNationality(nationality) {
+ nationality(nationality) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.nationality === nationality);
}
@@ -48,7 +185,7 @@ class SaratogaShips {
* @memberof SaratogaShips
* @returns {Array | null}
*/
- getAllByHullType(hullType) {
+ type(hullType) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.hullType === hullType);
}
@@ -59,36 +196,10 @@ class SaratogaShips {
* @memberof SaratogaShips
* @returns {Array | null}
*/
- getAllByRarity(rarity) {
+ rarity(rarity) {
if (!this.rawCache) return null;
return this.rawCache.filter(d => d.rarity === rarity);
}
-
- /**
- * Fetches a specific ship via its id
- * @param {number} id id of the ship you want to fetch
- * @memberof SaratogaShips
- * @returns {Ship | null}
- */
- getById(id) {
- if (!this.rawCache) return null;
- const ship = this.rawCache.find(d => d.id === id);
- if (!ship.length) return null;
- return ship;
- }
-
- /**
- * Searches for a specific ship. (EN, CN, JP, KR names are supported)
- * @param {string} name name of the ship you want to search for
- * @param {number} [limit=10] limit of the search results
- * @memberof SaratogaShips
- * @returns {Ship | null}
- */
- searchShipByName(name, limit = 10) {
- if (!this.cache) return null;
- const possibleShips = this.cache.search(name, { limit });
- if (!possibleShips.length) return null;
- return possibleShips;
- }
}
-module.exports = SaratogaShips;
+
+module.exports = SaratogaShips, ShipExtAll, ShipExtFilter;
diff --git a/src/store/SaratogaStore.js b/src/store/SaratogaStore.js
index 13f7be5..490434f 100644
--- a/src/store/SaratogaStore.js
+++ b/src/store/SaratogaStore.js
@@ -1,39 +1,86 @@
const Fuse = require('fuse.js');
const SaratogaUpdater = require('../updater/SaratogaUpdater');
+const ShipExtFilter = require('./SaratogaShips');
const SaratogaShips = require('./SaratogaShips');
+const ShipExtAll = require('./SaratogaShips');
const SaratogaEquipments = require('./SaratogaEquipments');
+const SaratogaBarrages = require('./SaratogaBarrages');
const SaratogaUtil = require('../util/SaratogaUtil');
+const LegacyShips = require('./LegacyShips');
+const LegacyEquipments = require('./LegacyEquipments');
/**
+ * 本APIの出発点
* Saratoga, the starting point of this API
* @class SaratogaStore
*/
class SaratogaStore {
/**
- * @param {Saratoga} saratoga The saratoga class that generated this instance
+ * @param {Saratoga} saratoga The saratoga class that generated this instance このインスタンスを生成したSaratogaクラス
*/
constructor(saratoga) {
/**
+ * このインスタンスを生成したsaratogaインスタンス
* The saratoga instance that generated this instance
* @type {Saratoga}
*/
this.saratoga = saratoga;
/**
+ * 船に関するゲッター
* Ship related getters for this store
* @type {SaratogaShips}
*/
this.ships = new SaratogaShips(this);
+ this.ships.all = new ShipExtAll(this);
+ this.ships.sort = new ShipExtFilter(this);
/**
+ * 装置関連ゲッター
* Equipment related getters for this store
* @type {SaratogaEquipments}
*/
this.equipments = new SaratogaEquipments(this);
/**
+ * チャプター関連のゲッター
+ * Chapters related getters for this store
+ * @type {SaratogaChapters}
+ */
+ // this.chapters = new SaratogaChapters(this)
+ /**
+ * ボイスライン関連ゲッター
+ * Voiceline related getters for this store
+ * @type {SaratogaVoicelines}
+ */
+ // this.voicelines = new SaratogaVoicelines(this)
+ /**
+ * 連打関連ゲッター
+ * Barrage related getters for this store
+ * @type {SaratogaBarrages}
+ */
+ this.barrages = new SaratogaBarrages(this)
+ /**
+ * Barrage関連ゲッター
+ * Legacy API instances
+ */
+ /**
+ * 旧船のAPI
+ * Legacy Ships API
+ * @type {LegacyShips}
+ */
+ this.legacyShips = new LegacyShips(this)
+ /**
+ * 旧装置のAPI
+ * Legacy Equipments API
+ * @type {LegacyEquipments}
+ */
+ this.legacyEquipments = new LegacyEquipments(this)
+ /**
+ * アップデータクラス
* Updater Class for the local data for this store
* @type {SaratogaUpdater}
*/
this.updater = new SaratogaUpdater(this);
/**
+ * 準備完了状態
* If this store is already ready to operate
* @type {Boolean}
*/
@@ -41,6 +88,9 @@ class SaratogaStore {
Object.defineProperty(this, '_shipCache', { value: null, writable: true });
Object.defineProperty(this, '_equipCache', { value: null, writable: true });
+ Object.defineProperty(this, '_chapterCache', { value: null, writable: true });
+ Object.defineProperty(this, '_voicelineCache', { value: null, writable: true });
+ Object.defineProperty(this, '_barrageCache', { value: null, writable: true });
this.updater.startUpCheck();
this.updateOnFirstStartUp()
@@ -57,9 +107,9 @@ class SaratogaStore {
async updateOnFirstStartUp() {
if (this.ready) return;
- let update = await this.updater.checkForUpdate();
- update = update.shipUpdateAvailable || update.equipmentUpdateAvailable;
- if (update && (!this._shipCache || !this._equipCache)) await this.updater.updateDataAndCache();
+ const update = await this.updater.checkForUpdate();
+ //update = update.shipUpdateAvailable || update.equipmentUpdateAvailable;
+ if (update || (!this._shipCache || !this._equipCache)) await this.updater.updateDataAndCache();
this.saratoga.emit('debug', `Loaded ${this._shipCache.list.length} stored ships from ${SaratogaUtil.shipFilePath()}`);
this.saratoga.emit('debug', `Loaded ${this._equipCache.list.length} stored equipments from ${SaratogaUtil.equipFilePath()}`);
}
@@ -69,7 +119,7 @@ class SaratogaStore {
rawShips = Object.values(rawShips);
if (!rawShips.length) return;
this.clearShipsCache();
- this._shipCache = new Fuse(rawShips, { keys: [ 'names.en', 'names.cn', 'names.jp', 'names.kr' ], threshold: 0.4 });
+ this._shipCache = new Fuse(rawShips, { keys: [ 'names.en', 'names.cn', 'names.jp', 'names.kr', 'names.code' ], threshold: 0.4 });
}
loadEquipmentsCache(rawEquips) {
@@ -80,6 +130,28 @@ class SaratogaStore {
this._equipCache = new Fuse(rawEquips, { keys: [ 'names.en', 'names.cn', 'names.jp', 'names.kr' ], threshold: 0.4 });
}
+ loadChapterCache(rawChapters) {
+ if (!rawChapters) return;
+ rawChapters = Object.values(Object.values(rawChapters));
+ if (!rawChapters.length) return;
+ this.clearChapterCache();
+ this._chapterCache = new Fuse(rawChapters, { keys: [ 'names.en', 'names.cn', 'names.jp', 'names.kr' ], threshold: 0.4 });
+ }
+
+ loadVoicelineCache(rawVoicelines) {
+ if (!rawVoicelines) return;
+ this.clearVoicelineCache();
+ this._voicelineCache = rawVoicelines;
+ }
+
+ loadBarrageCache(rawBarrages) {
+ if (!rawBarrages) return;
+ rawBarrages = Object.values(rawBarrages);
+ if (!rawBarrages.length) return;
+ this.clearBarrageCache();
+ this._barrageCache = new Fuse(rawBarrages, { keys: [ 'name' ], threshold: 0.4 });
+ }
+
clearShipsCache() {
this._shipCache = null;
}
@@ -88,6 +160,18 @@ class SaratogaStore {
this._equipCache = null;
}
+ clearChapterCache() {
+ this._chapterCache = null;
+ }
+
+ clearVoicelineCache() {
+ this._voicelineCache = null;
+ }
+
+ clearBarrageCache() {
+ this._barrageCache = null;
+ }
+
updateShipsData(data) {
return SaratogaUtil.writeFile(SaratogaUtil.shipFilePath(), typeof data === 'string' ? data : JSON.stringify(data));
}
@@ -96,6 +180,18 @@ class SaratogaStore {
return SaratogaUtil.writeFile(SaratogaUtil.equipFilePath(), typeof data === 'string' ? data : JSON.stringify(data));
}
+ updateChapterData(data) {
+ return SaratogaUtil.writeFile(SaratogaUtil.chapterFilePath(), typeof data === 'string' ? data : JSON.stringify(data));
+ }
+
+ updateVoicelineData(data) {
+ return SaratogaUtil.writeFile(SaratogaUtil.voicelineFilePath(), typeof data === 'string' ? data : JSON.stringify(data));
+ }
+
+ updateBarrageData(data) {
+ return SaratogaUtil.writeFile(SaratogaUtil.barrageFilePath(), typeof data === 'string' ? data : JSON.stringify(data));
+ }
+
clearShipsData() {
return SaratogaUtil.writeFile(SaratogaUtil.shipFilePath(), JSON.stringify({}));
}
@@ -103,5 +199,17 @@ class SaratogaStore {
clearEquipmentsData() {
return SaratogaUtil.writeFile(SaratogaUtil.equipFilePath(), JSON.stringify({}));
}
+
+ clearChapterData() {
+ return SaratogaUtil.writeFile(SaratogaUtil.chapterFilePath(), JSON.stringify({}));
+ }
+
+ clearVoicelineData() {
+ return SaratogaUtil.writeFile(SaratogaUtil.voicelineFilePath(), JSON.stringify({}));
+ }
+
+ clearBarrageData() {
+ return SaratogaUtil.writeFile(SaratogaUtil.barrageFilePath(), JSON.stringify({}));
+ }
}
module.exports = SaratogaStore;
diff --git a/src/store/SaratogaVoicelines.js b/src/store/SaratogaVoicelines.js
new file mode 100644
index 0000000..103390f
--- /dev/null
+++ b/src/store/SaratogaVoicelines.js
@@ -0,0 +1,18 @@
+// TODO
+class SaratogaVoicelines {
+ /**
+ * @param {SaratogaStore} store The updater instance that generated this instance
+ */
+ constructor(store) {
+ Object.defineProperty(this, '_store', { value: store, writable: false });
+ }
+ get cache() {
+ if (!this._store._equipCache) return null;
+ return this._store._equipCache;
+ }
+
+ get rawCache() {
+ if (!this.cache) return null;
+ return this.cache.list;
+ }
+}
\ No newline at end of file
diff --git a/src/types/barrage.d.ts b/src/types/barrage.d.ts
new file mode 100644
index 0000000..75f2dec
--- /dev/null
+++ b/src/types/barrage.d.ts
@@ -0,0 +1,21 @@
+export type Url = string;
+export type Ships = '22'|'33'|'Abercrombie'|'Abukuma'|'Acasta'|'Achilles'|'Admiral Graf Spee'|'Admiral Hipper'|'Admiral Hipper μ'|'Agano'|'Ajax'|'Akagi'|'Akagi μ'|'Akagi-chan'|'Akashi'|'Akatsuki'|'Alabama'|'Albacore'|'Albacore μ'|'Algérie'|'Amagi'|'Amazon'|'An Shan'|'Anniversary Kizuna AI'|'Aoba'|'Arashio'|'Ardent'|'Arethusa'|'Ariake'|'Arizona'|'Ark Royal'|'Asashio'|'Ashigara'|'Astoria'|'Atago'|'Atlanta'|'Aulick'|'Aurora'|'Avrora'|'Ayanami'|'Aylwin'|'Azuma'|'Bache'|'Bailey'|'Baltimore'|'Baltimore μ'|'Bataan'|'Beagle'|'Belfast'|'Benson'|'Biloxi'|'Birmingham'|'Bismarck'|'Black Heart'|'Black Prince'|'Blanc'|'Bluegill'|'Bogue'|'Bremerton'|'Brooklyn'|'Bulldog'|'Bunker Hill'|'Bush'|'Béarn'|'California'|'Carabiniere'|'Casablanca'|'Cassin'|'Cavalla'|'Centaur'|'Champagne'|'Chang Chun'|'Chapayev'|'Charles Ausburne'|'Chaser'|'Cheshire'|'Chicago'|'Chitose'|'Chiyoda'|'Choukai'|'Clevelad'|'Cleveland'|'Cleveland μ'|'Colorado'|'Columbia'|'Comet'|'Concord'|'Conte di Cavour'|'Cooper'|'Craven'|'Crescent'|'Curacoa'|'Curlew'|'Cygnet'|'Dace'|'Denver'|'Deutschland'|'Dewey'|'Dido'|'Dido μ'|'Dorsetshire'|'Downes'|'Drake'|'Duke of York'|'Dunkerque'|'Eagle'|'Echo'|'Edinburgh'|'Eldridge'|'Elegant Kizuna AI'|'Enterprise'|'Erebus'|'Eskimo'|'Essex'|'Exeter'|'Fiji'|'Fletcher'|'Foote'|'Forbin'|'Formidable'|'Fortune'|'Foxhound'|'Friedrich der Große'|'Fu Shun'|'Fubuki'|'Fumiruiru'|'Fumizuki'|'Furutaka'|'Fusou'|'Galatea'|'Gangut'|'Gascogne'|'Gascogne μ'|'Georgia'|'Giulio Cesare'|'Glasgow'|'Glorious'|'Gloucester'|'Glowworm'|'Gneisenau'|'Graf Zeppelin'|'Green Heart'|'Grenville'|'Gridley'|'Grozny'|'Halsey Powell'|'Hamakaze'|'Hammann'|'Hanazuki'|'Hardy'|'Haruna'|'Harutsuki'|'Hatakaze'|'Hatsuharu'|'Hatsushimo'|'Hazelwood'|'Helena'|'Hermes'|'Hermione'|'Hibiki'|'Hiei'|'Hiei-chan'|'Hiryuu'|'Hiyou'|'Hobby'|'Honoka'|'Honolulu'|'Hood'|'Hornet'|'Houshou'|'Houston'|'Howe'|'Hunter'|'Hyuuga'|'I-13'|'I-168'|'I-19'|'I-25'|'I-26'|'I-56'|'I-58'|'Ibuki'|'Icarus'|'Ikazuchi'|'Illustrious'|'Illustrious μ'|'Inazuma'|'Independence'|'Indianapolis'|'Intrepid'|'Ise'|'Isokaze'|'Isuzu'|'Izumo'|'Jamaica'|'Javelin'|'Jean Bart'|'Jeanne d\'Arc'|'Jenkins'|'Jersey'|'Jintsuu'|'Juneau'|'Juno'|'Junyou'|'Jupiter'|'Kaga'|'Kaga(BB)'|'Kagerou'|'Kako'|'Kalk'|'Kamikaze'|'Karlsruhe'|'Kashino'|'Kasumi'|'Kasumi'|'Kawakaze'|'Kent'|'Kii'|'Kimberly'|'King George V'|'Kinu'|'Kinugasa'|'Kirishima'|'Kisaragi'|'Kitakaze'|'Kiyonami'|'Kizuna AI'|'Kongou'|'Kumano'|'Kuon'|'Kuroshio'|'Köln'|'Königsberg'|'L\'Opiniâtre'|'La Galissonnière'|'Laffey'|'Langley'|'Le Malin'|'Le Malin μ'|'Le Mars'|'Le Triomphant'|'Le Téméraire'|'Leander'|'Leipzig'|'Lena'|'Lexington'|'Li\'l Sandy'|'Little Bel'|'Little Illustrious'|'Little Renown'|'Littorio'|'London'|'Long Island'|'Mainz'|'Makinami'|'Marblehead'|'Marie Rose'|'Maryland'|'Massachusetts'|'Matchless'|'Matsukaze'|'Maury'|'Maya'|'McCall'|'Memphis'|'Michishio'|'Mikasa'|'Mikazuki'|'Mikuma'|'Minato Aqua'|'Minazuki'|'Minneapolis'|'Minsk'|'Misaki'|'Mogami'|'Monarch'|'Monica'|'Montpelier'|'Mullany'|'Murasaki Shion'|'Musketeer'|'Mutsu'|'Mutsuki'|'Myoukou'|'Nachi'|'Naganami'|'Nagara'|'Nagato'|'Nagatsuki'|'Nagisa'|'Naka'|'Nakiri Ayame'|'Natsuiro Matsuri'|'Nekone'|'Nelson'|'Neptune'|'Neptune'|'Nevada'|'Newcastle'|'Nicholas'|'Niizuki'|'Ning Hai'|'Noire'|'Norfolk'|'North Carolina'|'Northampton'|'Noshiro'|'Nowaki'|'Nyotengu'|'Nürnberg'|'Odin'|'Oklahoma'|'Omaha'|'Ooshio'|'Oyashio'|'Pamiat\' Merkuria'|'Pennsylvania'|'Pensacola'|'Perseus'|'Peter Strasser'|'Phoenix'|'Ping Hai'|'Portland'|'Prince of Wales'|'Princeton'|'Prinz Eugen'|'Prinz Heinrich'|'Prototype Bulin MKII'|'Purple Heart'|'Queen Elizabeth'|'Quincy'|'Radford'|'Raleigh'|'Ranger'|'Reno'|'Renown'|'Repulse'|'Richelieu'|'Richmond'|'Rodney'|'Roon'|'Roon μ'|'Rurutie'|'Ryuuhou'|'Ryuujou'|'Saint Louis'|'Salt Lake City'|'San Diego'|'San Juan'|'Saraana'|'Saratoga'|'Scharnhorst'|'Seattle'|'Sendai'|'Shangri-La'|'Sheffield'|'Sheffield μ'|'Shigure'|'Shinano'|'Shirakami Fubuki'|'Shiranui'|'Shiratsuyu'|'Shouhou'|'Shoukaku'|'Shropshire'|'Sims'|'Sirius'|'Smalley'|'Souryuu'|'South Dakota'|'Southampton'|'Sovetskaya Rossiya'|'Specialized Bulin Custom MKIII'|'Spence'|'St. Louis'|'Stanly'|'Suffolk'|'Super Gamer Kizuna AI'|'Surcouf'|'Suruga'|'Sussex'|'Suzutsuki'|'Suzuya'|'Swiftsure'|'Tai Yuan'|'Taihou'|'Taihou μ'|'Takao'|'Tanikaze'|'Tartu'|'Tashkent'|'Tashkent μ'|'Tennessee'|'Terror'|'Thatcher'|'Tirpitz'|'Tokino Sora'|'Tosa'|'Trento'|'U-101'|'U-110'|'U-37'|'U-47'|'U-522'|'U-556'|'U-557'|'U-73'|'U-81'|'U-96'|'Unicorn'|'Universal Bulin'|'Urakaze'|'Uranami'|'Uruuru'|'Uzuki'|'Valiant'|'Vampire'|'Vauquelin'|'Vert'|'Vestal'|'Victorious'|'Vincennes'|'Wakaba'|'Warspite'|'Washington'|'Wasp'|'Weser'|'West Virginia'|'White Heart'|'Wichita'|'Yamashiro'|'Yat Sen'|'Yoizuki'|'York'|'Yorktown'|'Yukikaze'|'Yuubari'|'Yuudachi'|'Yuugure'|'Z1'|'Z18'|'Z19'|'Z2'|'Z20'|'Z21'|'Z23'|'Z24'|'Z25'|'Z26'|'Z28'|'Z35'|'Z36'|'Z46'|'Zara'|'Zeppy'|'Zuikaku'|'Émile Bertin'|'Ōkami Mio';
+export type Hull = 'DD' | 'CL' | 'CA' | 'CB' | 'BB' | 'BC' | 'BM' | 'BBV' | 'CV' | 'CVL' | 'AR' | 'SS' | 'SSV';
+export type RoundType = 'Normal' | 'Normal+' | 'Normal*' | 'HE' | 'HE+' | 'AP' | 'AP+/SHS' | 'SSD* Shell' | 'SSD* Fragments';
+export type Rounds = {
+ type: RoundType,
+ dmgL: number,
+ dmgM: number,
+ note?: string | null,
+
+}
+
+export class barrage {
+ id: string;
+ type: string;
+ icon: Url;
+ name: string;
+ ships: [Ships];
+ hull: Hull;
+ rounds: [Rounds]
+}
\ No newline at end of file
diff --git a/src/types/ship.d.ts b/src/types/ship.d.ts
new file mode 100644
index 0000000..77e7b80
--- /dev/null
+++ b/src/types/ship.d.ts
@@ -0,0 +1,170 @@
+export type Url = string;
+export type Stat = 'health' | 'armor' | 'reload' | 'luck' | 'firepower' | 'torpedo' | 'evasion' | 'speed' | 'antiair'
+ | 'aviation' | 'oilConsumption' | 'accuracy' | 'antisubmarineWarfare' | 'oxygen' | 'ammunition' | 'huntingRange';
+export const isStat = (str: string) => ['health', 'armor', 'reload', 'luck', 'firepower', 'torpedo', 'evasion', 'speed', 'antiair'
+ , 'aviation', 'oilConsumption', 'accuracy', 'antisubmarineWarfare', 'oxygen', 'ammunition', 'huntingRange'].includes(str);
+export type ShipID = string;
+export type Rarity = 'Normal' | 'Rare' | 'Epic' | 'Super Rare' | 'Ultra Rare' | 'Priority' | 'Decisive' | 'Unreleased';
+export type LimitBreak = string[];
+
+export type ShipNames = { // Ship's name
+ code: string;
+ en: string;
+ cn: string;
+ jp: string;
+ kr: string;
+};
+
+export type ShipStats = {
+ baseStats: Stats;
+ level100: Stats;
+ level120: Stats;
+ level100Retrofit?: Stats;
+ level120Retrofit?: Stats;
+};
+
+export type FleetTech = { // fleet tech stuff
+ statsBonus: {
+ collection?: Bonus;
+ maxLevel?: Bonus;
+ };
+ techPoints: {
+ collection: number;
+ maxLimitBreak: number;
+ maxLevel: number;
+ total: number;
+ };
+};
+
+export class Ship {
+ wikiUrl: Url; // An valid, full url to its wiki page
+ id: ShipID; // ID of ship, provided by the wiki (not in game id)
+ names: ShipNames;
+ thumbnail: Url;
+ hexagon: [number, number, number, number, number, number];
+ class: string; // Ship's class
+ nationality: string;// Ship's nationality
+ hullType: string; // Ship type (Destroyer etc)
+ rarity: Rarity; // Super Rare, hopefully
+ stars: {
+ stars: string;
+ value: number;
+ };
+ stats: ShipStats;
+ slots: [Slot, Slot, Slot];
+ enhanceValue: { firepower: number, torpedo: number, aviation: number, reload: number };
+ scrapValue: {
+ coin: number;
+ oil: number;
+ medal: number;
+ };
+ skills: Skill[];
+ skins: Skin[];
+ gallery: GalleryItem[];
+ limitBreaks: LimitBreak[]; // first layer = breaks, second layer = bonus
+ devLevels: DevLevel[]
+ fleetTech: FleetTech;
+ unreleased?: boolean;
+ retrofit: boolean; // if the ship is retrofittable
+ retrofitId: string; // the id after retrofit
+ retrofitHullType: string; // if the ship changes type
+ retrofitProjects: { [id: string]: RetrofitProject };
+ construction: {
+ constructionTime: string;
+ availableIn: {
+ light: boolean;
+ heavy: boolean;
+ aviation: boolean;
+ limited: boolean;
+ exchange: boolean;
+ };
+ };
+ obtainedFrom: {
+ obtainedFrom?: string; // source, etc "Available in Medal Exchange for \"Medal\" 80."
+ fromMaps: string[]; // map ids, etc "1-1" "10-2"
+ };
+ misc: {
+ artist?: Artist;
+ web?: Artist;
+ pixiv?: Artist;
+ twitter?: Artist;
+ voice?: Artist;
+ };
+}
+
+export type Bonus = { // on collection
+ applicable: string[]; // applicable ship types (i.e. Destroyer)
+ stat: Stat; // name of stat to enhance
+ bonus: string; // human-readable version of how much to enhance
+};
+
+
+export type Stats = {
+ [k in Stat]?: string;
+};
+
+export type Slot = {
+ type: string;
+ kaiEfficiency?: number;
+ minEfficiency: number;
+ maxEfficiency: number;
+}
+
+export type Skill = {
+ icon: Url;
+ names: {
+ en: string;
+ cn: string;
+ jp: string;
+ };
+ description: string;
+ color: string;
+}
+
+export type SkinInfo = {
+ enClient?: string;
+ cnClient?: string;
+ jpClient?: string;
+ cost?: number;
+ obtainedFrom: string;
+ live2dModel: boolean;
+};
+
+export interface Skin {
+ name: string;
+ chibi: Url;
+ image: Url;
+ cn?: Url; // censored
+ bg?: Url; // with background
+ nobg?: Url; // without background (only used internally)
+ background: Url; // scenery background
+ info: SkinInfo;
+}
+
+export type GalleryItem = {
+ description: string; // self-explanatory
+ url: Url; // the image url
+}
+
+export type Artist = {
+ name: string;
+ url: Url;
+}
+
+export type ProjectID = string;
+export type RetrofitProject = {
+ id: ProjectID;
+ grade: string;
+ attributes: string[];
+ materials: string[];
+ coins: number;
+ level: number;
+ levelBreakLevel: number;
+ levelBreakStars: string;
+ recurrence: number;
+ require: ProjectID[];
+}
+export type DevLevel = {
+ level: string;
+ buffs: string[];
+}
\ No newline at end of file
diff --git a/src/types/voiceline.d.ts b/src/types/voiceline.d.ts
new file mode 100644
index 0000000..e7d74fb
--- /dev/null
+++ b/src/types/voiceline.d.ts
@@ -0,0 +1,13 @@
+export class Ship {
+ Default: Array;
+ // [Skin Name]: Array; // note: the skin name is directly from the wiki page
+ // ...
+}
+
+export class Line {
+ event: string; // the event (touch etc) name
+ en?: string; // the line in english
+ zh?: string; // the line in chinese
+ jp?: string; // the line in japanese
+ audio?: string; // the line's audio url, file type = "audio/ogg"
+}
\ No newline at end of file
diff --git a/src/updater/SaratogaUpdater.js b/src/updater/SaratogaUpdater.js
index 427d52e..e0ebfe4 100644
--- a/src/updater/SaratogaUpdater.js
+++ b/src/updater/SaratogaUpdater.js
@@ -46,7 +46,7 @@ class SaratogaUpdater {
this.cronUpdate = setInterval(() => {
this.checkForUpdate()
.then((data) => {
- if (data.shipUpdateAvailable || data.equipmentUpdateAvailable) this.saratoga.emit('updateAvailable', data);
+ if (/*data.shipUpdateAvailable || data.equipmentUpdateAvailable()*/data) this.saratoga.emit('updateAvailable', data);
})
.catch((error) => this.saratoga.emit('error', error));
}, 3600000);
@@ -55,15 +55,19 @@ class SaratogaUpdater {
startUpCheck() {
if (this.dataDirReady) return;
if (!SaratogaUtil.existSync(SaratogaUtil.folderDataPath())) SaratogaUtil.createDirectorySync(SaratogaUtil.folderDataPath());
- for (const prop of ['versionFilePath', 'shipFilePath', 'equipFilePath']) {
+ for (const prop of ['versionFilePath', 'shipFilePath', 'equipFilePath', 'chapterFilePath', 'voicelineFilePath', 'barrageFilePath']) {
if (!SaratogaUtil.existSync( SaratogaUtil[prop]() )) SaratogaUtil.writeFileSync(SaratogaUtil[prop](), JSON.stringify({}));
}
this.store.loadShipsCache(JSON.parse(SaratogaUtil.readFileSync(SaratogaUtil.shipFilePath())));
this.store.loadEquipmentsCache(JSON.parse(SaratogaUtil.readFileSync(SaratogaUtil.equipFilePath())));
+ this.store.loadChapterCache(JSON.parse(SaratogaUtil.readFileSync(SaratogaUtil.chapterFilePath())));
+ this.store.loadVoicelineCache(JSON.parse(SaratogaUtil.readFileSync(SaratogaUtil.voicelineFilePath())));
+ this.store.loadBarrageCache(JSON.parse(SaratogaUtil.readFileSync(SaratogaUtil.barrageFilePath())));
this.dataDirReady = true;
}
/**
+ * 全てを更新
* Updates the Local Files & Cached Data in one method, good for single process scenarios as it's easy. Not for multi sharded programs that has its own Saratoga instance per shard.
* @memberof SaratogaUpdater
* @returns {Promise}
@@ -74,6 +78,7 @@ class SaratogaUpdater {
}
/**
+ * アップデートの確認
* Checks if there is new updates for ship or equipment data
* @memberof SaratogaUpdater
* @returns {Promise}
@@ -87,12 +92,14 @@ class SaratogaUpdater {
async checkForUpdate() {
const dataValidator = new SaratogaValidator();
await dataValidator.fetch();
- const shipUpdateAvailable = dataValidator.setType('ships').needsUpdate();
- const equipmentUpdateAvailable = dataValidator.setType('equipments').needsUpdate();
- return { shipUpdateAvailable, equipmentUpdateAvailable };
+ //const shipUpdateAvailable = dataValidator.setType('ships').needsUpdate();
+ //const equipmentUpdateAvailable = dataValidator.setType('equipments').needsUpdate();
+ //return { shipUpdateAvailable, equipmentUpdateAvailable };
+ return dataValidator.needsUpdate();
}
/**
+ * ファイルの更新
* Updates the Local Files of Saratoga if there is an update
* @memberof SaratogaUpdater
* @returns {Promise}
@@ -103,20 +110,28 @@ class SaratogaUpdater {
if (dataValidator.noLocalData()) {
await this.updateStoredShips();
await this.updateStoredEquipments();
+ await this.updateStoredChapters();
+ await this.updateStoredVoicelines();
+ await this.updateStoredBarrages();
await dataValidator.updateVersionFile();
} else {
- if (dataValidator.setType('ships').needsUpdate()) {
+ if (dataValidator/*.setType('ships')*/.needsUpdate()) {
await this.updateStoredShips();
+ await this.updateStoredEquipments();
+ await this.updateStoredChapters();
+ await this.updateStoredVoicelines();
+ await this.updateStoredBarrages();
await dataValidator.updateVersionFile();
}
- if (dataValidator.setType('equipments').needsUpdate()) {
+ /*if (dataValidator.setType('equipments').needsUpdate()) {
await this.updateStoredEquipments();
await dataValidator.updateVersionFile();
- }
+ }*/
}
}
/**
+ * キャッシュの更新
* Updates the Cached Data, loaded from the local files of Saratoga
* @memberof SaratogaUpdater
* @returns {Promise}
@@ -136,6 +151,21 @@ class SaratogaUpdater {
await this.store.updateEquipmentsData(await this.fetchEquipmentsFromRemote());
}
+ async updateStoredChapters() {
+ await this.store.clearChapterData();
+ await this.store.updateChapterData(await this.fetchChaptersFromRemote());
+ }
+
+ async updateStoredVoicelines() {
+ await this.store.clearVoicelineData();
+ await this.store.updateVoicelineData(await this.fetchVoicelinesFromRemote());
+ }
+
+ async updateStoredBarrages() {
+ await this.store.clearBarrageData();
+ await this.store.updateBarrageData(await this.fetchBarragesFromRemote());
+ }
+
fetchShipsFromRemote() {
return Fetch(SaratogaUtil.latestShipDataLink()).then(data => data.text());
}
@@ -144,6 +174,18 @@ class SaratogaUpdater {
return Fetch(SaratogaUtil.latestEquipmentDataLink()).then(data => data.text());
}
+ fetchChaptersFromRemote() {
+ return Fetch(SaratogaUtil.latestChapterDataLink()).then(data => data.text());
+ }
+
+ fetchVoicelinesFromRemote() {
+ return Fetch(SaratogaUtil.latestVoicelineDataLink()).then(data => data.text());
+ }
+
+ fetchBarragesFromRemote() {
+ return Fetch(SaratogaUtil.latestBarrageDataLink()).then(data => data.text());
+ }
+
fetchShipsFromLocal() {
return SaratogaUtil.readFile(SaratogaUtil.shipFilePath()).then(data => JSON.parse(data));
}
@@ -151,5 +193,17 @@ class SaratogaUpdater {
fetchEquipmentsFromLocal() {
return SaratogaUtil.readFile(SaratogaUtil.equipFilePath()).then(data => JSON.parse(data));
}
+
+ fetchChaptersFromLocal() {
+ return SaratogaUtil.readFile(SaratogaUtil.chapterFilePath()).then(data => JSON.parse(data));
+ }
+
+ fetchVoicelinesFromLocal() {
+ return SaratogaUtil.readFile(SaratogaUtil.voicelineFilePath()).then(data => JSON.parse(data));
+ }
+
+ fetchBarragesFromLocal() {
+ return SaratogaUtil.readFile(SaratogaUtil.barrageFilePath()).then(data => JSON.parse(data));
+ }
}
module.exports = SaratogaUpdater;
diff --git a/src/updater/SaratogaValidator.js b/src/updater/SaratogaValidator.js
index c154301..c676690 100644
--- a/src/updater/SaratogaValidator.js
+++ b/src/updater/SaratogaValidator.js
@@ -9,7 +9,7 @@ class SaratogaValidator {
this.remote = {};
}
- setType(name) {
+ /*setType(name) {
this.type = name;
return this;
}
@@ -33,7 +33,7 @@ class SaratogaValidator {
for (const { type, version } of this.parseShipAndEquipmentVersion('local')) data.downloaded[type] = version;
for (const { type, version } of this.parseShipAndEquipmentVersion('remote')) data.remote[type] = version;
return data;
- }
+ }*/
async fetch() {
if (!this.fetched) {
@@ -48,7 +48,8 @@ class SaratogaValidator {
}
needsUpdate() {
- return !this.local[this.type] || this.local[this.type]['version-number'] !== this.remote[this.type]['version-number'] || this.local[this.type]['last-data-refresh-date'] !== this.remote[this.type]['last-data-refresh-date'];
+ //return !this.local[this.type] || this.local[this.type]['version-number'] !== this.remote[this.type]['version-number'] || this.local[this.type]['last-data-refresh-date'] !== this.remote[this.type]['last-data-refresh-date'];
+ return this.local === this.remote;
}
updateVersionFile() {
diff --git a/src/util/SaratogaUtil.js b/src/util/SaratogaUtil.js
index 98243bb..7bb82e9 100644
--- a/src/util/SaratogaUtil.js
+++ b/src/util/SaratogaUtil.js
@@ -11,12 +11,18 @@ const promise = {
const remoteLinks = {
version: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/version-info.json',
ships: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/ships.json',
- equipment: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/equipments.json'
+ equipment: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/equipments.json',
+ chapter: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/chapters.json',
+ voiceline: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/voice_lines.json',
+ barrage: 'https://raw.githubusercontent.com/AzurAPI/azurapi-js-setup/master/barrage.json'
};
const dataFilePath = {
ship: join(__dirname, '../data', 'ship.json'),
- equipment: join(__dirname, '../data', 'equipment.json')
+ equipment: join(__dirname, '../data', 'equipment.json'),
+ chapter: join(__dirname, '../data', 'chapter.json'),
+ voiceline: join(__dirname, '../data', 'voiceline.json'),
+ barrage: join(__dirname, '../data', 'barrage.json')
};
const versionFilePath = join(__dirname, '../data', 'version.json');
@@ -43,6 +49,18 @@ class SaratogaUtil {
return dataFilePath.equipment;
}
+ static chapterFilePath() {
+ return dataFilePath.chapter;
+ }
+
+ static voicelineFilePath() {
+ return dataFilePath.voiceline;
+ }
+
+ static barrageFilePath() {
+ return dataFilePath.barrage;
+ }
+
static latestVersionDataLink() {
return remoteLinks.version;
}
@@ -55,6 +73,18 @@ class SaratogaUtil {
return remoteLinks.equipment;
}
+ static latestChapterDataLink() {
+ return remoteLinks.chapter;
+ }
+
+ static latestVoicelineDataLink() {
+ return remoteLinks.voiceline;
+ }
+
+ static latestBarrageDataLink() {
+ return remoteLinks.barrage;
+ }
+
static existSync(path) {
return existsSync(path);
}
diff --git a/tests/Client.js b/tests/Client.js
deleted file mode 100644
index 2fbc0a9..0000000
--- a/tests/Client.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const { Saratoga } = require('../index');
-
-const saratoga = new Saratoga();
-
-saratoga.on('ready', () => {
- console.log('== Ships ==> ', saratoga.ships.searchShipByName('saratoga'));
- console.log('== Equipments ==> ', saratoga.equipments.searchByEquipmentName('130mm 1932'));
-});
-saratoga.on('debug', console.log);
-saratoga.on('error', console.error);
diff --git a/tests/LegacyClient.js b/tests/LegacyClient.js
new file mode 100644
index 0000000..8579f15
--- /dev/null
+++ b/tests/LegacyClient.js
@@ -0,0 +1,10 @@
+const { Saratoga } = require('../index');
+
+const saratoga = new Saratoga();
+
+saratoga.on('ready', () => {
+ console.log('== Ships ==> ', saratoga.legacyShips.searchShipByName('saratoga'));
+ console.log('== Equipments ==> ', saratoga.legacyEquipments.searchByEquipmentName('130mm 1932'));
+});
+saratoga.on('debug', console.log);
+saratoga.on('error', console.error);
diff --git a/tests/equip.test.js b/tests/equip.test.js
new file mode 100644
index 0000000..44a30e6
--- /dev/null
+++ b/tests/equip.test.js
@@ -0,0 +1,9 @@
+const { Saratoga } = require('../index');
+
+const saratoga = new Saratoga();
+
+test('Search Equipment By Name', async () => {
+ saratoga.on('ready', () => {
+ expect(saratoga.equipments.name('130mm 1932')[0].item.wikiUrl).toBe('https://azurlane.koumakan.jp/Single_130mm_(B13_Pattern_1936)');
+ });
+});
\ No newline at end of file
diff --git a/tests/ship.test.js b/tests/ship.test.js
new file mode 100644
index 0000000..c05c5cf
--- /dev/null
+++ b/tests/ship.test.js
@@ -0,0 +1,11 @@
+const { Saratoga } = require('../index');
+
+const saratoga = new Saratoga();
+
+test('Search Ship By Name', async () => {
+ saratoga.on('ready', () => {
+ expect(saratoga.ships.name('saratoga')[0].item.id).toBe('074');
+ });
+});
+
+