@lycoristech/azurapi 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/ships.json +1 -1
- package/data/version.json +1 -1
- package/dist/cjs/client/AzurData.js +20 -4
- package/dist/cjs/client/ships.js +43 -3
- package/dist/cjs/normalize/identity.js +4 -1
- package/dist/client/AzurData.d.ts.map +1 -1
- package/dist/client/AzurData.js +20 -4
- package/dist/client/AzurData.js.map +1 -1
- package/dist/client/ships.d.ts +6 -0
- package/dist/client/ships.d.ts.map +1 -1
- package/dist/client/ships.js +42 -3
- package/dist/client/ships.js.map +1 -1
- package/dist/normalize/identity.d.ts.map +1 -1
- package/dist/normalize/identity.js +4 -1
- package/dist/normalize/identity.js.map +1 -1
- package/package.json +1 -1
package/data/ships.json
CHANGED
|
@@ -82961,7 +82961,7 @@
|
|
|
82961
82961
|
"wikiUrl": "https://azurlane.koumakan.jp/wiki/Musashi-chan",
|
|
82962
82962
|
"class": "Yamato-Class",
|
|
82963
82963
|
"hullType": "Battleship",
|
|
82964
|
-
"nationality": "
|
|
82964
|
+
"nationality": "Sakura Empire",
|
|
82965
82965
|
"stats": {
|
|
82966
82966
|
"level100": {
|
|
82967
82967
|
"health": 7840,
|
package/data/version.json
CHANGED
|
@@ -6,12 +6,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.AzurData = void 0;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
9
10
|
const ships_js_1 = require("./ships.js");
|
|
10
11
|
const fetcher_js_1 = require("./fetcher.js");
|
|
12
|
+
/**
|
|
13
|
+
* Path of this source file as seen in a stack trace: a file:// URL under ESM,
|
|
14
|
+
* a plain path under CJS. This file is compiled to both formats from one
|
|
15
|
+
* source, so `import.meta.url` cannot be written here (it is a syntax error
|
|
16
|
+
* in the CJS build), and `__dirname` only exists in CJS.
|
|
17
|
+
*/
|
|
18
|
+
function thisFileFromStack() {
|
|
19
|
+
const stack = new Error().stack ?? "";
|
|
20
|
+
for (const line of stack.split("\n").slice(1)) {
|
|
21
|
+
const m = line.match(/\(?((?:file:\/\/)?\/[^):]+?\.[cm]?[jt]s):\d+:\d+\)?$/);
|
|
22
|
+
if (m?.[1] !== undefined)
|
|
23
|
+
return m[1].startsWith("file://") ? (0, node_url_1.fileURLToPath)(m[1]) : m[1];
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
11
27
|
function resolveThisDir() {
|
|
12
|
-
// CJS: __dirname is injected by Node
|
|
13
|
-
// ESM under tsx/ts-node: __dirname is polyfilled
|
|
14
|
-
// Pure ESM: falls back to cwd
|
|
15
28
|
try {
|
|
16
29
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
17
30
|
// @ts-ignore __dirname exists in CJS but not in ESM type defs
|
|
@@ -19,7 +32,10 @@ function resolveThisDir() {
|
|
|
19
32
|
return __dirname; // eslint-disable-line no-undef
|
|
20
33
|
}
|
|
21
34
|
catch { /* not CJS */ }
|
|
22
|
-
|
|
35
|
+
const file = thisFileFromStack();
|
|
36
|
+
if (file !== undefined)
|
|
37
|
+
return node_path_1.default.dirname(file);
|
|
38
|
+
return process.cwd(); // last resort; resolveDefaultDataPath walks up from here
|
|
23
39
|
}
|
|
24
40
|
class AzurData {
|
|
25
41
|
ships;
|
package/dist/cjs/client/ships.js
CHANGED
|
@@ -4,7 +4,44 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Ships = void 0;
|
|
7
|
+
exports.isCloseName = isCloseName;
|
|
7
8
|
const fuse_js_1 = __importDefault(require("fuse.js"));
|
|
9
|
+
/** Optimal-string-alignment distance (Levenshtein + adjacent transposition). */
|
|
10
|
+
function editDistance(a, b) {
|
|
11
|
+
const rows = a.length + 1, cols = b.length + 1;
|
|
12
|
+
const d = Array.from({ length: rows }, (_, i) => Array.from({ length: cols }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
|
|
13
|
+
for (let i = 1; i < rows; i++) {
|
|
14
|
+
for (let j = 1; j < cols; j++) {
|
|
15
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
16
|
+
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
|
|
17
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
|
18
|
+
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return d[rows - 1][cols - 1];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* True when `query` is a prefix of one of the ship's names (3+ chars) or within
|
|
26
|
+
* typo distance of one: 1 edit for 4-5 chars, 2 edits for 6+. Shorter queries
|
|
27
|
+
* never fuzzy-match; they must hit an id or a name exactly.
|
|
28
|
+
*/
|
|
29
|
+
function isCloseName(query, ship) {
|
|
30
|
+
const q = query.trim().toLowerCase();
|
|
31
|
+
if (q.length < 3)
|
|
32
|
+
return false;
|
|
33
|
+
const maxEdits = q.length >= 6 ? 2 : q.length >= 4 ? 1 : 0;
|
|
34
|
+
for (const raw of Object.values(ship.names)) {
|
|
35
|
+
if (typeof raw !== "string")
|
|
36
|
+
continue;
|
|
37
|
+
const n = raw.toLowerCase();
|
|
38
|
+
if (n.startsWith(q))
|
|
39
|
+
return true;
|
|
40
|
+
if (maxEdits > 0 && Math.abs(n.length - q.length) <= maxEdits && editDistance(q, n) <= maxEdits)
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
8
45
|
class Ships {
|
|
9
46
|
data;
|
|
10
47
|
idMap;
|
|
@@ -45,10 +82,13 @@ class Ships {
|
|
|
45
82
|
const ciId = ciIdMap[lower];
|
|
46
83
|
if (ciId && this.data[ciId])
|
|
47
84
|
return this.data[ciId];
|
|
48
|
-
// 4. Fuse.js fuzzy
|
|
85
|
+
// 4. Fuse.js fuzzy, but only for a typo-level edit distance or a name prefix.
|
|
86
|
+
// Fuse scores substrings as perfect matches ("22" -> U-522 at 0.000, "Kuon"
|
|
87
|
+
// -> Kronshtadt at 0.003), which a lookup must not return.
|
|
49
88
|
const results = this.fuse.search(nameOrId, { limit: 1 });
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
const hit = results[0];
|
|
90
|
+
if (hit !== undefined && hit.score !== undefined && hit.score < 0.5 && isCloseName(nameOrId, hit.item)) {
|
|
91
|
+
return hit.item;
|
|
52
92
|
}
|
|
53
93
|
return undefined;
|
|
54
94
|
}
|
|
@@ -122,7 +122,10 @@ function normalizeIdentity(inputs) {
|
|
|
122
122
|
// ------------------------------------------------------------------
|
|
123
123
|
// Nationality
|
|
124
124
|
// ------------------------------------------------------------------
|
|
125
|
-
|
|
125
|
+
// The per-ship statistics row is authoritative; ship_data_group is the fallback.
|
|
126
|
+
// They disagree for exactly one ship in EN 9.3.384: Musashi-chan (30517), where the
|
|
127
|
+
// group row says Iron Blood and the ship row says Sakura Empire.
|
|
128
|
+
const nationality = (0, enums_js_1.nationalityName)(enStats.nationality ?? groupRow.nationality);
|
|
126
129
|
// ------------------------------------------------------------------
|
|
127
130
|
// Wiki URL
|
|
128
131
|
// ------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzurData.d.ts","sourceRoot":"","sources":["../../src/client/AzurData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AzurData.d.ts","sourceRoot":"","sources":["../../src/client/AzurData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA4BD,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,iEAAiE;gBACrD,OAAO,GAAE,eAAoB;IAWzC;;;;;;;OAOG;WACU,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBvE,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAUtC"}
|
package/dist/client/AzurData.js
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
3
4
|
import { Ships } from "./ships.js";
|
|
4
5
|
import { fetchLatestData } from "./fetcher.js";
|
|
6
|
+
/**
|
|
7
|
+
* Path of this source file as seen in a stack trace: a file:// URL under ESM,
|
|
8
|
+
* a plain path under CJS. This file is compiled to both formats from one
|
|
9
|
+
* source, so `import.meta.url` cannot be written here (it is a syntax error
|
|
10
|
+
* in the CJS build), and `__dirname` only exists in CJS.
|
|
11
|
+
*/
|
|
12
|
+
function thisFileFromStack() {
|
|
13
|
+
const stack = new Error().stack ?? "";
|
|
14
|
+
for (const line of stack.split("\n").slice(1)) {
|
|
15
|
+
const m = line.match(/\(?((?:file:\/\/)?\/[^):]+?\.[cm]?[jt]s):\d+:\d+\)?$/);
|
|
16
|
+
if (m?.[1] !== undefined)
|
|
17
|
+
return m[1].startsWith("file://") ? fileURLToPath(m[1]) : m[1];
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
5
21
|
function resolveThisDir() {
|
|
6
|
-
// CJS: __dirname is injected by Node
|
|
7
|
-
// ESM under tsx/ts-node: __dirname is polyfilled
|
|
8
|
-
// Pure ESM: falls back to cwd
|
|
9
22
|
try {
|
|
10
23
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
11
24
|
// @ts-ignore __dirname exists in CJS but not in ESM type defs
|
|
@@ -13,7 +26,10 @@ function resolveThisDir() {
|
|
|
13
26
|
return __dirname; // eslint-disable-line no-undef
|
|
14
27
|
}
|
|
15
28
|
catch { /* not CJS */ }
|
|
16
|
-
|
|
29
|
+
const file = thisFileFromStack();
|
|
30
|
+
if (file !== undefined)
|
|
31
|
+
return path.dirname(file);
|
|
32
|
+
return process.cwd(); // last resort; resolveDefaultDataPath walks up from here
|
|
17
33
|
}
|
|
18
34
|
export class AzurData {
|
|
19
35
|
ships;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzurData.js","sourceRoot":"","sources":["../../src/client/AzurData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAqB,MAAM,cAAc,CAAC;AAYlE,SAAS,
|
|
1
|
+
{"version":3,"file":"AzurData.js","sourceRoot":"","sources":["../../src/client/AzurData.ts"],"names":[],"mappings":"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"}
|
package/dist/client/ships.d.ts
CHANGED
|
@@ -4,6 +4,12 @@ export interface ShipsOptions {
|
|
|
4
4
|
idMap: Record<string, string>;
|
|
5
5
|
fuseThreshold?: number;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* True when `query` is a prefix of one of the ship's names (3+ chars) or within
|
|
9
|
+
* typo distance of one: 1 edit for 4-5 chars, 2 edits for 6+. Shorter queries
|
|
10
|
+
* never fuzzy-match; they must hit an id or a name exactly.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isCloseName(query: string, ship: Ship): boolean;
|
|
7
13
|
export declare class Ships {
|
|
8
14
|
private readonly data;
|
|
9
15
|
private readonly idMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ships.d.ts","sourceRoot":"","sources":["../../src/client/ships.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,OAAO,EAAE,YAAY;IAoBjC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"ships.d.ts","sourceRoot":"","sources":["../../src/client/ships.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAW9D;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,OAAO,EAAE,YAAY;IAoBjC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IA4BvC,OAAO,CAAC,QAAQ,CAAC,CAAyB;IAC1C,OAAO,CAAC,UAAU;IAUlB,MAAM,IAAI,IAAI,EAAE;IAIhB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIrC,KAAK,IAAI,MAAM;IAKf,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,IAAI,EAAE;CAI1C"}
|
package/dist/client/ships.js
CHANGED
|
@@ -1,4 +1,40 @@
|
|
|
1
1
|
import Fuse from "fuse.js";
|
|
2
|
+
/** Optimal-string-alignment distance (Levenshtein + adjacent transposition). */
|
|
3
|
+
function editDistance(a, b) {
|
|
4
|
+
const rows = a.length + 1, cols = b.length + 1;
|
|
5
|
+
const d = Array.from({ length: rows }, (_, i) => Array.from({ length: cols }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
|
|
6
|
+
for (let i = 1; i < rows; i++) {
|
|
7
|
+
for (let j = 1; j < cols; j++) {
|
|
8
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
9
|
+
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
|
|
10
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
|
11
|
+
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return d[rows - 1][cols - 1];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* True when `query` is a prefix of one of the ship's names (3+ chars) or within
|
|
19
|
+
* typo distance of one: 1 edit for 4-5 chars, 2 edits for 6+. Shorter queries
|
|
20
|
+
* never fuzzy-match; they must hit an id or a name exactly.
|
|
21
|
+
*/
|
|
22
|
+
export function isCloseName(query, ship) {
|
|
23
|
+
const q = query.trim().toLowerCase();
|
|
24
|
+
if (q.length < 3)
|
|
25
|
+
return false;
|
|
26
|
+
const maxEdits = q.length >= 6 ? 2 : q.length >= 4 ? 1 : 0;
|
|
27
|
+
for (const raw of Object.values(ship.names)) {
|
|
28
|
+
if (typeof raw !== "string")
|
|
29
|
+
continue;
|
|
30
|
+
const n = raw.toLowerCase();
|
|
31
|
+
if (n.startsWith(q))
|
|
32
|
+
return true;
|
|
33
|
+
if (maxEdits > 0 && Math.abs(n.length - q.length) <= maxEdits && editDistance(q, n) <= maxEdits)
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
2
38
|
export class Ships {
|
|
3
39
|
data;
|
|
4
40
|
idMap;
|
|
@@ -39,10 +75,13 @@ export class Ships {
|
|
|
39
75
|
const ciId = ciIdMap[lower];
|
|
40
76
|
if (ciId && this.data[ciId])
|
|
41
77
|
return this.data[ciId];
|
|
42
|
-
// 4. Fuse.js fuzzy
|
|
78
|
+
// 4. Fuse.js fuzzy, but only for a typo-level edit distance or a name prefix.
|
|
79
|
+
// Fuse scores substrings as perfect matches ("22" -> U-522 at 0.000, "Kuon"
|
|
80
|
+
// -> Kronshtadt at 0.003), which a lookup must not return.
|
|
43
81
|
const results = this.fuse.search(nameOrId, { limit: 1 });
|
|
44
|
-
|
|
45
|
-
|
|
82
|
+
const hit = results[0];
|
|
83
|
+
if (hit !== undefined && hit.score !== undefined && hit.score < 0.5 && isCloseName(nameOrId, hit.item)) {
|
|
84
|
+
return hit.item;
|
|
46
85
|
}
|
|
47
86
|
return undefined;
|
|
48
87
|
}
|
package/dist/client/ships.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ships.js","sourceRoot":"","sources":["../../src/client/ships.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAS3B,MAAM,OAAO,KAAK;IACC,IAAI,CAAuB;IAC3B,KAAK,CAAyB;IAC9B,IAAI,CAAa;IAElC,YAAY,OAAqB;QAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChD,IAAI,EAAE;gBACJ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC/B,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE;gBACjC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;aAChC;YACD,SAAS,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG;YACvC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,oCAAoC;IACpC,6CAA6C;IAC7C,2CAA2C;IAC3C,8BAA8B;IAC9B,GAAG,CAAC,QAAgB;QAClB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE5E,mBAAmB;QACnB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhE,iCAAiC;QACjC,iCAAiC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpD,
|
|
1
|
+
{"version":3,"file":"ships.js","sourceRoot":"","sources":["../../src/client/ships.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/normalize/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQvD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE;QACF,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,UAAU,EAAE,kBAAkB,CAAC;QAC/B,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,cAAc,EAAE,cAAc,CAAC;QAC/B,2EAA2E;QAC3E,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACjC,CAAC;IACF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,EAAE,CAAC,EAAE;QACH,UAAU,EAAE,kBAAkB,CAAC;KAChC,CAAC;IACF,EAAE,CAAC,EAAE;QACH,UAAU,EAAE,kBAAkB,CAAC;KAChC,CAAC;IACF,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACzC,MAAM,CASR;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/normalize/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQvD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE;QACF,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,UAAU,EAAE,kBAAkB,CAAC;QAC/B,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,cAAc,EAAE,cAAc,CAAC;QAC/B,2EAA2E;QAC3E,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACjC,CAAC;IACF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,EAAE,CAAC,EAAE;QACH,UAAU,EAAE,kBAAkB,CAAC;KAChC,CAAC;IACF,EAAE,CAAC,EAAE;QACH,UAAU,EAAE,kBAAkB,CAAC;KAChC,CAAC;IACF,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACzC,MAAM,CASR;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAsJxE"}
|
|
@@ -118,7 +118,10 @@ export function normalizeIdentity(inputs) {
|
|
|
118
118
|
// ------------------------------------------------------------------
|
|
119
119
|
// Nationality
|
|
120
120
|
// ------------------------------------------------------------------
|
|
121
|
-
|
|
121
|
+
// The per-ship statistics row is authoritative; ship_data_group is the fallback.
|
|
122
|
+
// They disagree for exactly one ship in EN 9.3.384: Musashi-chan (30517), where the
|
|
123
|
+
// group row says Iron Blood and the ship row says Sakura Empire.
|
|
124
|
+
const nationality = nationalityName(enStats.nationality ?? groupRow.nationality);
|
|
122
125
|
// ------------------------------------------------------------------
|
|
123
126
|
// Wiki URL
|
|
124
127
|
// ------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/normalize/identity.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/normalize/identity.ts"],"names":[],"mappings":"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"}
|