shogiops 0.2.8 → 0.5.0

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.
Files changed (115) hide show
  1. package/attacks.js +32 -48
  2. package/attacks.js.map +1 -1
  3. package/board.d.ts +3 -0
  4. package/board.js +60 -33
  5. package/board.js.map +1 -1
  6. package/compat.d.ts +6 -24
  7. package/compat.js +20 -185
  8. package/compat.js.map +1 -1
  9. package/debug.js +37 -72
  10. package/debug.js.map +1 -1
  11. package/hand.d.ts +38 -0
  12. package/hand.js +69 -0
  13. package/hand.js.map +1 -0
  14. package/hash.d.ts +4 -3
  15. package/hash.js +12 -20
  16. package/hash.js.map +1 -1
  17. package/index.d.ts +13 -10
  18. package/index.js +22 -64
  19. package/index.js.map +1 -1
  20. package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
  21. package/notation/csa/csa.js +213 -0
  22. package/notation/csa/csa.js.map +1 -0
  23. package/notation/japanese.d.ts +3 -0
  24. package/notation/japanese.js +61 -0
  25. package/notation/japanese.js.map +1 -0
  26. package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
  27. package/notation/kif/kif.js +232 -0
  28. package/notation/kif/kif.js.map +1 -0
  29. package/{kifHandicaps.d.ts → notation/kif/kifHandicaps.d.ts} +0 -0
  30. package/{kifHandicaps.js → notation/kif/kifHandicaps.js} +7 -7
  31. package/notation/kif/kifHandicaps.js.map +1 -0
  32. package/notation/kitaoKawasaki.d.ts +3 -0
  33. package/notation/kitaoKawasaki.js +26 -0
  34. package/notation/kitaoKawasaki.js.map +1 -0
  35. package/notation/kitaokawasaki.d.ts +0 -0
  36. package/notation/kitaokawasaki.js +2 -0
  37. package/notation/kitaokawasaki.js.map +1 -0
  38. package/notation/notationUtil.d.ts +12 -0
  39. package/{kifUtil.js → notation/notationUtil.js} +39 -40
  40. package/notation/notationUtil.js.map +1 -0
  41. package/notation/western.d.ts +3 -0
  42. package/notation/western.js +23 -0
  43. package/notation/western.js.map +1 -0
  44. package/notation/westernEngine.d.ts +3 -0
  45. package/notation/westernEngine.js +23 -0
  46. package/notation/westernEngine.js.map +1 -0
  47. package/package.json +54 -37
  48. package/setup.d.ts +2 -32
  49. package/setup.js +5 -80
  50. package/setup.js.map +1 -1
  51. package/sfen.d.ts +33 -0
  52. package/sfen.js +188 -0
  53. package/sfen.js.map +1 -0
  54. package/shogi.d.ts +14 -7
  55. package/shogi.js +138 -141
  56. package/shogi.js.map +1 -1
  57. package/squareSet.d.ts +1 -5
  58. package/squareSet.js +1 -18
  59. package/squareSet.js.map +1 -1
  60. package/src/board.ts +34 -0
  61. package/src/compat.ts +18 -197
  62. package/src/debug.ts +26 -56
  63. package/src/hand.ts +94 -0
  64. package/src/hash.ts +8 -7
  65. package/src/index.ts +16 -12
  66. package/src/{csa.ts → notation/csa/csa.ts} +53 -52
  67. package/src/notation/japanese.ts +74 -0
  68. package/src/{kif.ts → notation/kif/kif.ts} +77 -78
  69. package/src/{kifHandicaps.ts → notation/kif/kifHandicaps.ts} +5 -0
  70. package/src/notation/kitaoKawasaki.ts +24 -0
  71. package/src/{kifUtil.ts → notation/notationUtil.ts} +37 -28
  72. package/src/notation/western.ts +21 -0
  73. package/src/notation/westernEngine.ts +21 -0
  74. package/src/setup.ts +4 -91
  75. package/src/sfen.ts +190 -0
  76. package/src/shogi.ts +75 -75
  77. package/src/squareSet.ts +1 -18
  78. package/src/transform.ts +3 -1
  79. package/src/types.ts +13 -16
  80. package/src/util.ts +8 -73
  81. package/src/variant.ts +44 -3
  82. package/src/variantUtil.ts +160 -0
  83. package/transform.js +18 -24
  84. package/transform.js.map +1 -1
  85. package/types.d.ts +3 -7
  86. package/types.js +18 -24
  87. package/types.js.map +1 -1
  88. package/util.d.ts +4 -7
  89. package/util.js +24 -96
  90. package/util.js.map +1 -1
  91. package/variant.d.ts +12 -1
  92. package/variant.js +42 -16
  93. package/variant.js.map +1 -1
  94. package/variantUtil.d.ts +13 -0
  95. package/variantUtil.js +147 -0
  96. package/variantUtil.js.map +1 -0
  97. package/csa.js +0 -229
  98. package/csa.js.map +0 -1
  99. package/csaUtil.d.ts +0 -3
  100. package/csaUtil.js +0 -21
  101. package/csaUtil.js.map +0 -1
  102. package/fen.d.ts +0 -32
  103. package/fen.js +0 -197
  104. package/fen.js.map +0 -1
  105. package/kif.js +0 -247
  106. package/kif.js.map +0 -1
  107. package/kifHandicaps.js.map +0 -1
  108. package/kifUtil.d.ts +0 -9
  109. package/kifUtil.js.map +0 -1
  110. package/san.d.ts +0 -6
  111. package/san.js +0 -135
  112. package/san.js.map +0 -1
  113. package/src/csaUtil.ts +0 -15
  114. package/src/fen.ts +0 -183
  115. package/src/san.ts +0 -136
@@ -0,0 +1,26 @@
1
+ import { roleTo2Kanji } from '../util';
2
+ import { isDrop } from '../types';
3
+ import { pieceCanPromote } from '../variantUtil';
4
+ import { makeNumberSquare, piecesAiming } from './notationUtil';
5
+ // 歩-76
6
+ export function makeKitaoKawasakiMove(pos, move, lastDest) {
7
+ if (isDrop(move)) {
8
+ return roleTo2Kanji(move.role).toUpperCase() + '*' + makeNumberSquare(move.to);
9
+ }
10
+ else {
11
+ const piece = pos.board.get(move.from);
12
+ if (piece) {
13
+ const roleStr = roleTo2Kanji(piece.role).toUpperCase();
14
+ const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty()
15
+ ? ''
16
+ : `(${makeNumberSquare(move.from)})`;
17
+ const actionStr = pos.board.has(move.to) ? 'x' : '-';
18
+ const destStr = lastDest === move.to ? '' : makeNumberSquare(move.to);
19
+ const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
20
+ return `${roleStr}${ambStr}${actionStr}${destStr}${promStr}`;
21
+ }
22
+ else
23
+ return undefined;
24
+ }
25
+ }
26
+ //# sourceMappingURL=kitaoKawasaki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitaoKawasaki.js","sourceRoot":"","sources":["../src/notation/kitaoKawasaki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAQ,MAAM,EAAU,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO;AACP,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,IAAU,EAAE,QAAiB;IAChF,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChF;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAC3E,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC;SAC9D;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=kitaokawasaki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitaokawasaki.js","sourceRoot":"","sources":["../src/notation/kitaokawasaki.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Position } from '../shogi';
2
+ import { Piece, Square } from '../types';
3
+ import { SquareSet } from '../squareSet';
4
+ export declare function piecesAiming(pos: Position, piece: Piece, to: Square): SquareSet;
5
+ export declare function makeNumberSquare(sq: Square): string;
6
+ export declare function parseNumberSquare(str: string): Square | undefined;
7
+ export declare function makeJapaneseSquare(sq: Square): string;
8
+ export declare function parseJapaneseSquare(str: string): Square | undefined;
9
+ export declare function toKanjiDigit(str: string): string;
10
+ export declare function fromKanjiDigit(str: string): number;
11
+ export declare function numberToKanji(n: number): string;
12
+ export declare function kanjiToNumber(str: string): number;
@@ -1,25 +1,37 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizedKifLines = exports.kanjiToNumber = exports.fromKanjiDigit = exports.numberToKanji = exports.toKanjiDigit = exports.kifOrigSquare = exports.kifDestSquare = exports.parseKifSquare = void 0;
4
- const util_1 = require("./util");
5
- function parseKifSquare(str) {
1
+ import { parseSquare, squareFile, squareRank } from '../util';
2
+ import { SquareSet } from '../squareSet';
3
+ export function piecesAiming(pos, piece, to) {
4
+ // Disambiguation
5
+ let pieces = SquareSet.empty();
6
+ for (const s of pos.board.pieces(pos.turn, piece.role))
7
+ if (pos.dests(s).has(to))
8
+ pieces = pieces.union(SquareSet.fromSquare(s));
9
+ return pieces;
10
+ }
11
+ export function makeNumberSquare(sq) {
12
+ return (9 - squareFile(sq)).toString() + (9 - squareRank(sq));
13
+ }
14
+ export function parseNumberSquare(str) {
6
15
  if (str.length !== 2)
7
16
  return;
8
- const file = str[0].charCodeAt(0) >= 65297 ? String.fromCharCode(str[0].charCodeAt(0) - 65248) : str[0];
9
- const rank = String.fromCharCode(('一二三四五六七八九'.includes(str[1]) ? fromKanjiDigit(str[1]).toString() : str[1]).charCodeAt(0) + 48);
10
- return util_1.parseSquare(file + rank);
17
+ const file = Math.abs(str.charCodeAt(0) - '9'.charCodeAt(0));
18
+ const rank = Math.abs(str.charCodeAt(1) - '9'.charCodeAt(0));
19
+ if (file < 0 || file >= 9 || rank < 0 || rank >= 9)
20
+ return;
21
+ return file + 9 * rank;
11
22
  }
12
- exports.parseKifSquare = parseKifSquare;
13
- function kifDestSquare(sq) {
14
- return (String.fromCharCode((9 - util_1.squareFile(sq)).toString().charCodeAt(0) + 0xfee0) +
15
- toKanjiDigit((9 - util_1.squareRank(sq)).toString()));
23
+ export function makeJapaneseSquare(sq) {
24
+ return (String.fromCharCode((9 - squareFile(sq)).toString().charCodeAt(0) + 0xfee0) +
25
+ toKanjiDigit((9 - squareRank(sq)).toString()));
16
26
  }
17
- exports.kifDestSquare = kifDestSquare;
18
- function kifOrigSquare(sq) {
19
- return 9 - util_1.squareFile(sq) + (9 - util_1.squareRank(sq)).toString();
27
+ export function parseJapaneseSquare(str) {
28
+ if (str.length !== 2)
29
+ return;
30
+ const file = str[0].charCodeAt(0) >= 65297 ? String.fromCharCode(str[0].charCodeAt(0) - 65248) : str[0];
31
+ const rank = String.fromCharCode(('一二三四五六七八九'.includes(str[1]) ? fromKanjiDigit(str[1]).toString() : str[1]).charCodeAt(0) + 48);
32
+ return parseSquare(file + rank);
20
33
  }
21
- exports.kifOrigSquare = kifOrigSquare;
22
- function toKanjiDigit(str) {
34
+ export function toKanjiDigit(str) {
23
35
  switch (str) {
24
36
  case '1':
25
37
  return '一';
@@ -45,15 +57,7 @@ function toKanjiDigit(str) {
45
57
  return '';
46
58
  }
47
59
  }
48
- exports.toKanjiDigit = toKanjiDigit;
49
- // max 99, meant for pieces in hand, you don't need more than 99 pieces...
50
- function numberToKanji(n) {
51
- n = Math.max(0, Math.min(n, 99));
52
- const res = n >= 20 ? toKanjiDigit(Math.floor(n / 10).toString()) + '十' : n >= 10 ? '十' : '';
53
- return res + toKanjiDigit(Math.floor(n % 10).toString());
54
- }
55
- exports.numberToKanji = numberToKanji;
56
- function fromKanjiDigit(str) {
60
+ export function fromKanjiDigit(str) {
57
61
  switch (str) {
58
62
  case '一':
59
63
  return 1;
@@ -79,9 +83,14 @@ function fromKanjiDigit(str) {
79
83
  return 0;
80
84
  }
81
85
  }
82
- exports.fromKanjiDigit = fromKanjiDigit;
83
- // max 99, meant for pieces in hand, you don't need more than 99 pieces...
84
- function kanjiToNumber(str) {
86
+ // max 99
87
+ export function numberToKanji(n) {
88
+ n = Math.max(0, Math.min(n, 99));
89
+ const res = n >= 20 ? toKanjiDigit(Math.floor(n / 10).toString()) + '十' : n >= 10 ? '十' : '';
90
+ return res + toKanjiDigit(Math.floor(n % 10).toString());
91
+ }
92
+ // max 99
93
+ export function kanjiToNumber(str) {
85
94
  let res = str.startsWith('十') ? 1 : 0;
86
95
  for (const s of str) {
87
96
  if (s === '十')
@@ -91,14 +100,4 @@ function kanjiToNumber(str) {
91
100
  }
92
101
  return Math.max(0, Math.min(res, 99));
93
102
  }
94
- exports.kanjiToNumber = kanjiToNumber;
95
- function normalizedKifLines(kif) {
96
- return kif
97
- .replace(/:/g, ':')
98
- .replace(/ /g, ' ') // full-width space to normal space
99
- .split(/[\r\n]+/)
100
- .map(l => l.trim())
101
- .filter(l => l);
102
- }
103
- exports.normalizedKifLines = normalizedKifLines;
104
- //# sourceMappingURL=kifUtil.js.map
103
+ //# sourceMappingURL=notationUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notationUtil.js","sourceRoot":"","sources":["../src/notation/notationUtil.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Position } from '../shogi';
2
+ import { Move } from '../types';
3
+ export declare function makeWesternMove(pos: Position, move: Move): string | undefined;
@@ -0,0 +1,23 @@
1
+ import { roleToString } from '../util';
2
+ import { isDrop } from '../types';
3
+ import { pieceCanPromote } from '../variantUtil';
4
+ import { makeNumberSquare, piecesAiming } from './notationUtil';
5
+ // P-76
6
+ export function makeWesternMove(pos, move) {
7
+ if (isDrop(move)) {
8
+ return roleToString(move.role).toUpperCase() + '*' + makeNumberSquare(move.to);
9
+ }
10
+ else {
11
+ const piece = pos.board.get(move.from);
12
+ if (piece) {
13
+ const roleStr = roleToString(piece.role).toUpperCase();
14
+ const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty() ? '' : makeNumberSquare(move.from);
15
+ const actionStr = pos.board.has(move.to) ? 'x' : '-';
16
+ const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
17
+ return `${roleStr}${ambStr}${actionStr}${makeNumberSquare(move.to)}${promStr}`;
18
+ }
19
+ else
20
+ return undefined;
21
+ }
22
+ }
23
+ //# sourceMappingURL=western.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"western.js","sourceRoot":"","sources":["../src/notation/western.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAQ,MAAM,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO;AACP,MAAM,UAAU,eAAe,CAAC,GAAa,EAAE,IAAU;IACvD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChF;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjH,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;SAChF;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Position } from '../shogi';
2
+ import { Move } from '../types';
3
+ export declare function makeWesternEngineMove(pos: Position, move: Move): string | undefined;
@@ -0,0 +1,23 @@
1
+ import { makeSquare, roleToString } from '../util';
2
+ import { isDrop } from '../types';
3
+ import { pieceCanPromote } from '../variantUtil';
4
+ import { piecesAiming } from './notationUtil';
5
+ // P-7f
6
+ export function makeWesternEngineMove(pos, move) {
7
+ if (isDrop(move)) {
8
+ return roleToString(move.role).toUpperCase() + '*' + makeSquare(move.to);
9
+ }
10
+ else {
11
+ const piece = pos.board.get(move.from);
12
+ if (piece) {
13
+ const roleStr = roleToString(piece.role).toUpperCase();
14
+ const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty() ? '' : makeSquare(move.from);
15
+ const actionStr = pos.board.has(move.to) ? 'x' : '-';
16
+ const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
17
+ return `${roleStr}${ambStr}${actionStr}${makeSquare(move.to)}${promStr}`;
18
+ }
19
+ else
20
+ return undefined;
21
+ }
22
+ }
23
+ //# sourceMappingURL=westernEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"westernEngine.js","sourceRoot":"","sources":["../src/notation/westernEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAQ,MAAM,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO;AACP,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,IAAU;IAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC1E;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3G,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;SAC1E;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
package/package.json CHANGED
@@ -1,32 +1,33 @@
1
1
  {
2
2
  "name": "shogiops",
3
- "version": "0.2.8",
3
+ "version": "0.5.0",
4
4
  "description": "Shogi rules and operations",
5
5
  "keywords": [
6
6
  "shogi",
7
7
  "lishogi",
8
- "fen",
9
8
  "sfen",
10
9
  "usi",
11
- "uci",
12
10
  "typescript"
13
11
  ],
14
12
  "repository": "https://github.com/WandererXII/shogiops",
15
13
  "author": "Niklas Fiekas <niklas.fiekas@backscattering.de>(chessops), WandererXII(shogiops)",
16
14
  "license": "GPL-3.0-or-later",
17
- "type": "commonjs",
15
+ "module": "index.js",
16
+ "types": "index.d.ts",
17
+ "type": "module",
18
+ "sideEffects": false,
18
19
  "dependencies": {
19
- "@badrap/result": "^0.2.6"
20
+ "@badrap/result": "^0.2"
20
21
  },
21
22
  "devDependencies": {
22
23
  "@types/jest": "^27",
23
- "@typescript-eslint/eslint-plugin": "^4",
24
- "@typescript-eslint/parser": "^4",
25
- "eslint": "^7",
24
+ "@typescript-eslint/eslint-plugin": "^5",
25
+ "@typescript-eslint/parser": "^5.9.0",
26
+ "eslint": "^8",
26
27
  "jest": "^27",
27
28
  "prettier": "^2",
28
29
  "ts-jest": "^27",
29
- "typedoc": "^0.21",
30
+ "typedoc": "^0.22",
30
31
  "typescript": "^4"
31
32
  },
32
33
  "scripts": {
@@ -43,80 +44,96 @@
43
44
  "shogi.js",
44
45
  "compat.js",
45
46
  "variant.js",
47
+ "variantUtil.js",
46
48
  "transform.js",
47
49
  "setup.js",
48
50
  "squareSet.js",
49
51
  "types.js",
50
52
  "util.js",
51
53
  "debug.js",
52
- "fen.js",
53
- "san.js",
54
+ "sfen.js",
55
+ "hand.js",
54
56
  "hash.js",
55
- "kifHandicaps.js",
56
- "kif.js",
57
- "kifUtil.js",
58
- "csa.js",
59
- "csaUtil.js",
57
+ "notation/kif/kifHandicaps.js",
58
+ "notation/kif/kif.js",
59
+ "notation/csa/csa.js",
60
+ "notation/japanese.js",
61
+ "notation/kitaoKawasaki.js",
62
+ "notation/notationUtil.js",
63
+ "notation/western.js",
64
+ "notation/westernEngine.js",
60
65
  "index.js",
61
66
  "attacks.d.ts",
62
67
  "board.d.ts",
63
68
  "shogi.d.ts",
64
69
  "compat.d.ts",
65
70
  "variant.d.ts",
71
+ "variantUtil.d.ts",
66
72
  "transform.d.ts",
67
73
  "setup.d.ts",
68
74
  "squareSet.d.ts",
69
75
  "types.d.ts",
70
76
  "util.d.ts",
71
77
  "debug.d.ts",
72
- "fen.d.ts",
73
- "san.d.ts",
78
+ "sfen.d.ts",
79
+ "hand.d.ts",
74
80
  "hash.d.ts",
75
- "kifHandicaps.d.ts",
76
- "kif.d.ts",
77
- "kifUtil.d.ts",
78
- "csa.d.ts",
79
- "csaUtil.d.ts",
81
+ "notation/kif/kifHandicaps.d.ts",
82
+ "notation/kif/kif.d.ts",
83
+ "notation/csa/csa.d.ts",
84
+ "notation/japanese.d.ts",
85
+ "notation/kitaoKawasaki.d.ts",
86
+ "notation/notationUtil.d.ts",
87
+ "notation/western.d.ts",
88
+ "notation/westernEngine.d.ts",
80
89
  "index.d.ts",
81
90
  "attacks.js.map",
82
91
  "board.js.map",
83
92
  "shogi.js.map",
84
93
  "compat.js.map",
85
94
  "variant.js.map",
95
+ "variantUtil.js.map",
86
96
  "transform.js.map",
87
97
  "setup.js.map",
88
98
  "squareSet.js.map",
89
99
  "types.js.map",
90
100
  "util.js.map",
91
101
  "debug.js.map",
92
- "fen.js.map",
93
- "san.js.map",
102
+ "sfen.js.map",
103
+ "hand.js.map",
94
104
  "hash.js.map",
95
- "kifHandicaps.js.map",
96
- "kif.js.map",
97
- "kifUtil.js.map",
98
- "csa.js.map",
99
- "csaUtil.js.map",
105
+ "notation/kif/kifHandicaps.js.map",
106
+ "notation/kif/kif.js.map",
107
+ "notation/csa/csa.js.map",
108
+ "notation/japanese.js.map",
109
+ "notation/kitaoKawasaki.js.map",
110
+ "notation/notationUtil.js.map",
111
+ "notation/western.js.map",
112
+ "notation/westernEngine.js.map",
100
113
  "index.js.map",
101
114
  "src/attacks.ts",
102
115
  "src/board.ts",
103
116
  "src/shogi.ts",
104
117
  "src/compat.ts",
105
118
  "src/variant.ts",
119
+ "src/variantUtil.ts",
106
120
  "src/transform.ts",
107
121
  "src/setup.ts",
108
122
  "src/squareSet.ts",
109
123
  "src/types.ts",
110
124
  "src/util.ts",
111
125
  "src/debug.ts",
112
- "src/fen.ts",
113
- "src/san.ts",
126
+ "src/sfen.ts",
127
+ "src/hand.ts",
114
128
  "src/hash.ts",
115
- "src/kifHandicaps.ts",
116
- "src/kif.ts",
117
- "src/kifUtil.ts",
118
- "src/csa.ts",
119
- "src/csaUtil.ts",
129
+ "src/notation/kif/kifHandicaps.ts",
130
+ "src/notation/kif/kif.ts",
131
+ "src/notation/csa/csa.ts",
132
+ "src/notation/japanese.ts",
133
+ "src/notation/kitaoKawasaki.ts",
134
+ "src/notation/notationUtil.ts",
135
+ "src/notation/western.ts",
136
+ "src/notation/westernEngine.ts",
120
137
  "src/index.ts"
121
138
  ],
122
139
  "jest": {
package/setup.d.ts CHANGED
@@ -1,39 +1,9 @@
1
1
  import { Color } from './types';
2
2
  import { Board } from './board';
3
- export declare class MaterialSide {
4
- pawn: number;
5
- lance: number;
6
- knight: number;
7
- silver: number;
8
- gold: number;
9
- bishop: number;
10
- rook: number;
11
- private constructor();
12
- static empty(): MaterialSide;
13
- static fromBoard(board: Board, color: Color): MaterialSide;
14
- clone(): MaterialSide;
15
- equals(other: MaterialSide): boolean;
16
- add(other: MaterialSide): MaterialSide;
17
- nonEmpty(): boolean;
18
- isEmpty(): boolean;
19
- count(): number;
20
- }
21
- export declare class Material {
22
- gote: MaterialSide;
23
- sente: MaterialSide;
24
- constructor(gote: MaterialSide, sente: MaterialSide);
25
- static empty(): Material;
26
- static fromBoard(board: Board): Material;
27
- clone(): Material;
28
- equals(other: Material): boolean;
29
- add(other: Material): Material;
30
- count(): number;
31
- isEmpty(): boolean;
32
- nonEmpty(): boolean;
33
- }
3
+ import { Hands } from './hand';
34
4
  export interface Setup {
35
5
  board: Board;
36
- pockets: Material;
6
+ hands: Hands;
37
7
  turn: Color;
38
8
  fullmoves: number;
39
9
  }
package/setup.js CHANGED
@@ -1,86 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultSetup = exports.Material = exports.MaterialSide = void 0;
4
- const types_1 = require("./types");
5
- const board_1 = require("./board");
6
- class MaterialSide {
7
- constructor() { }
8
- static empty() {
9
- const m = new MaterialSide();
10
- for (const role of types_1.POCKET_ROLES)
11
- m[role] = 0;
12
- return m;
13
- }
14
- static fromBoard(board, color) {
15
- const m = new MaterialSide();
16
- for (const role of types_1.POCKET_ROLES)
17
- m[role] = board.pieces(color, role).size();
18
- return m;
19
- }
20
- clone() {
21
- const m = new MaterialSide();
22
- for (const role of types_1.POCKET_ROLES)
23
- m[role] = this[role];
24
- return m;
25
- }
26
- equals(other) {
27
- return types_1.POCKET_ROLES.every(role => this[role] === other[role]);
28
- }
29
- add(other) {
30
- const m = new MaterialSide();
31
- for (const role of types_1.POCKET_ROLES)
32
- m[role] = this[role] + other[role];
33
- return m;
34
- }
35
- nonEmpty() {
36
- return types_1.POCKET_ROLES.some(role => this[role] > 0);
37
- }
38
- isEmpty() {
39
- return !this.nonEmpty();
40
- }
41
- count() {
42
- return this.pawn + this.lance + this.knight + this.silver + this.gold + this.bishop + this.rook;
43
- }
44
- }
45
- exports.MaterialSide = MaterialSide;
46
- class Material {
47
- constructor(gote, sente) {
48
- this.gote = gote;
49
- this.sente = sente;
50
- }
51
- static empty() {
52
- return new Material(MaterialSide.empty(), MaterialSide.empty());
53
- }
54
- static fromBoard(board) {
55
- return new Material(MaterialSide.fromBoard(board, 'gote'), MaterialSide.fromBoard(board, 'sente'));
56
- }
57
- clone() {
58
- return new Material(this.gote.clone(), this.sente.clone());
59
- }
60
- equals(other) {
61
- return this.gote.equals(other.gote) && this.sente.equals(other.sente);
62
- }
63
- add(other) {
64
- return new Material(this.gote.add(other.gote), this.sente.add(other.sente));
65
- }
66
- count() {
67
- return this.gote.count() + this.sente.count();
68
- }
69
- isEmpty() {
70
- return this.gote.isEmpty() && this.sente.isEmpty();
71
- }
72
- nonEmpty() {
73
- return !this.isEmpty();
74
- }
75
- }
76
- exports.Material = Material;
77
- function defaultSetup() {
1
+ import { Board } from './board';
2
+ import { Hands } from './hand';
3
+ export function defaultSetup() {
78
4
  return {
79
- board: board_1.Board.default(),
80
- pockets: Material.empty(),
5
+ board: Board.default(),
6
+ hands: Hands.empty(),
81
7
  turn: 'sente',
82
8
  fullmoves: 1,
83
9
  };
84
10
  }
85
- exports.defaultSetup = defaultSetup;
86
11
  //# sourceMappingURL=setup.js.map
package/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["src/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAS/B,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QACpB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC"}
package/sfen.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { Result } from '@badrap/result';
2
+ import { Piece } from './types';
3
+ import { Board } from './board';
4
+ import { Setup } from './setup';
5
+ import { Hand, Hands } from './hand';
6
+ export declare const INITIAL_BOARD_SFEN = "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL";
7
+ export declare const INITIAL_EPD: string;
8
+ export declare const INITIAL_SFEN: string;
9
+ export declare const EMPTY_BOARD_SFEN = "9/9/9/9/9/9/9/9/9";
10
+ export declare const EMPTY_EPD: string;
11
+ export declare const EMPTY_SFEN: string;
12
+ export declare enum InvalidSfen {
13
+ Sfen = "ERR_SFEN",
14
+ Board = "ERR_BOARD",
15
+ Hands = "ERR_HANDS",
16
+ Turn = "ERR_TURN",
17
+ Fullmoves = "ERR_FULLMOVES"
18
+ }
19
+ export declare class SfenError extends Error {
20
+ }
21
+ export declare function parseBoardSfen(boardPart: string): Result<Board, SfenError>;
22
+ export declare function parseHands(handsPart: string): Result<Hands, SfenError>;
23
+ export declare function parseSfen(sfen: string): Result<Setup, SfenError>;
24
+ interface SfenOpts {
25
+ epd?: boolean;
26
+ }
27
+ export declare function parsePiece(str: string): Piece | undefined;
28
+ export declare function makePiece(piece: Piece): string;
29
+ export declare function makeBoardSfen(board: Board): string;
30
+ export declare function makeHand(hand: Hand): string;
31
+ export declare function makeHands(hands: Hands): string;
32
+ export declare function makeSfen(setup: Setup, opts?: SfenOpts): string;
33
+ export {};