ygopro-deck-encode 1.0.0 → 1.0.1
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/dist/index.cjs +12 -4
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +12 -4
- package/dist/index.mjs.map +2 -2
- package/index.ts +16 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -49,7 +49,7 @@ var YGOProDeck = class {
|
|
|
49
49
|
const counted = [this.main, this.extra, this.side].map(countItems);
|
|
50
50
|
return counted.reduce((a, b) => a + b.size * 4, 0);
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
toUint8Array() {
|
|
53
53
|
const counted = [this.main, this.extra, this.side].map(countItems);
|
|
54
54
|
const buf = new Uint8Array(counted.reduce((a, b) => a + b.size * 4, 0));
|
|
55
55
|
let pointer = 0;
|
|
@@ -69,13 +69,15 @@ var YGOProDeck = class {
|
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
71
|
counted.forEach(writeCards);
|
|
72
|
-
return
|
|
72
|
+
return buf;
|
|
73
|
+
}
|
|
74
|
+
toEncodedString() {
|
|
75
|
+
return import_js_base64.Base64.fromUint8Array(this.toUint8Array(), true);
|
|
73
76
|
}
|
|
74
77
|
toString() {
|
|
75
78
|
return this.toEncodedString();
|
|
76
79
|
}
|
|
77
|
-
|
|
78
|
-
const buf = import_js_base64.Base64.toUint8Array(str);
|
|
80
|
+
fromUint8Array(buf) {
|
|
79
81
|
for (let i = 0; i < buf.length - 3; i += 4) {
|
|
80
82
|
const value = buf[i] | buf[i + 1] << 8 | buf[i + 2] << 16 | buf[i + 3] << 24;
|
|
81
83
|
const id = value & 268435455;
|
|
@@ -89,6 +91,12 @@ var YGOProDeck = class {
|
|
|
89
91
|
this.sort();
|
|
90
92
|
return this;
|
|
91
93
|
}
|
|
94
|
+
static fromUint8Array(buf) {
|
|
95
|
+
return new YGOProDeck().fromUint8Array(buf);
|
|
96
|
+
}
|
|
97
|
+
fromEncodedString(str) {
|
|
98
|
+
return this.fromUint8Array(import_js_base64.Base64.toUint8Array(str));
|
|
99
|
+
}
|
|
92
100
|
static fromEncodedString(str) {
|
|
93
101
|
return new YGOProDeck().fromEncodedString(str);
|
|
94
102
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../index.ts", "../src/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { countItems } from './src/utils';\nimport { Base64 } from 'js-base64';\n\nexport default class YGOProDeck {\n main: number[] = [];\n extra: number[] = [];\n side: number[] = [];\n\n private sort() {\n this.main.sort();\n this.extra.sort();\n this.side.sort();\n }\n\n bufferLength() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n return counted.reduce((a, b) => a + b.size * 4, 0);\n }\n\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAc,KAAU;AACtC,QAAM,MAAM,oBAAI,IAAe;AAC/B,aAAW,QAAQ,KAAK;AACtB,QAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AAAA,EACxC;AACA,SAAO;AACT;;;ADLA,
|
|
4
|
+
"sourcesContent": ["import { countItems } from './src/utils';\nimport { Base64, fromUint8Array } from 'js-base64';\n\nexport default class YGOProDeck {\n main: number[] = [];\n extra: number[] = [];\n side: number[] = [];\n\n private sort() {\n this.main.sort();\n this.extra.sort();\n this.side.sort();\n }\n\n bufferLength() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n return counted.reduce((a, b) => a + b.size * 4, 0);\n }\n\n toUint8Array() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n const buf = new Uint8Array(counted.reduce((a, b) => a + b.size * 4, 0));\n let pointer = 0;\n const writeUint32LE = (value: number) => {\n buf[pointer++] = value & 0xff;\n buf[pointer++] = (value >> 8) & 0xff;\n buf[pointer++] = (value >> 16) & 0xff;\n buf[pointer++] = (value >> 24) & 0xff;\n };\n const writeCards = (countMap: Map<number, number>, type: number) => {\n // each card: 28 bits for id, 2 bits(0, 1, 2, 3) for type(0: main, 1: extra, 2: side, 3: unknown), 2 bits for count (0: 1, 1: 2, 2: 3, 3: 4)\n for (const [id, count] of countMap.entries()) {\n if (count > 4) {\n throw new Error(`Too many cards: ${id}`);\n }\n const value = (id & 0xfffffff) | (type << 28) | ((count - 1) << 30);\n writeUint32LE(value);\n }\n };\n counted.forEach(writeCards);\n return buf;\n }\n\n toEncodedString() {\n return Base64.fromUint8Array(this.toUint8Array(), true);\n }\n\n toString() {\n return this.toEncodedString();\n }\n\n fromUint8Array(buf: Uint8Array) {\n for (let i = 0; i < buf.length - 3; i += 4) {\n const value =\n buf[i] | (buf[i + 1] << 8) | (buf[i + 2] << 16) | (buf[i + 3] << 24);\n const id = value & 0xfffffff;\n const type = (value >> 28) & 0x3;\n const count = ((value >> 30) & 0x3) + 1;\n const cards = [this.main, this.extra, this.side][type];\n for (let j = 0; j < count; j++) {\n cards.push(id);\n }\n }\n this.sort();\n return this;\n }\n\n static fromUint8Array(buf: Uint8Array) {\n return new YGOProDeck().fromUint8Array(buf);\n }\n\n fromEncodedString(str: string) {\n return this.fromUint8Array(Base64.toUint8Array(str));\n }\n\n static fromEncodedString(str: string) { \n return new YGOProDeck().fromEncodedString(str);\n }\n\n toYdkString() {\n return [\n '#created by ygopro-deck-encode',\n '#main',\n ...this.main.map((id) => id.toString()),\n '#extra',\n ...this.extra.map((id) => id.toString()),\n '!side',\n ...this.side.map((id) => id.toString()),\n ].join('\\n');\n }\n\n fromYdkString(str: string) {\n const lines = str.split('\\n');\n let current = this.main;\n for (const _line of lines) {\n const line = _line.trim();\n if (line === '#main') {\n current = this.main;\n }\n if (line === '#extra') {\n current = this.extra;\n }\n if (line === '!side') {\n current = this.side;\n }\n if (line.match(/^\\d+$/)) {\n current.push(parseInt(line, 10));\n }\n }\n this.sort();\n return this;\n }\n\n static fromYdkString(str: string) {\n return new YGOProDeck().fromYdkString(str);\n }\n}\n", "export function countItems<T>(arr: T[]) {\n const map = new Map<T, number>();\n for (const item of arr) {\n map.set(item, (map.get(item) || 0) + 1);\n }\n return map;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAc,KAAU;AACtC,QAAM,MAAM,oBAAI,IAAe;AAC/B,aAAW,QAAQ,KAAK;AACtB,QAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AAAA,EACxC;AACA,SAAO;AACT;;;ADLA,uBAAuC;AAEvC,IAAqB,aAArB,MAAgC;AAAA,EAAhC;AACE,gBAAiB,CAAC;AAClB,iBAAkB,CAAC;AACnB,gBAAiB,CAAC;AAAA;AAAA,EAEV,OAAO;AACb,SAAK,KAAK,KAAK;AACf,SAAK,MAAM,KAAK;AAChB,SAAK,KAAK,KAAK;AAAA,EACjB;AAAA,EAEA,eAAe;AACb,UAAM,UAAU,CAAC,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,IAAI,UAAU;AACjE,WAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,OAAO,GAAG,CAAC;AAAA,EACnD;AAAA,EAEA,eAAe;AACb,UAAM,UAAU,CAAC,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,IAAI,UAAU;AACjE,UAAM,MAAM,IAAI,WAAW,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;AACtE,QAAI,UAAU;AACd,UAAM,gBAAgB,CAAC,UAAkB;AACvC,UAAI,SAAS,IAAI,QAAQ;AACzB,UAAI,SAAS,IAAK,SAAS,IAAK;AAChC,UAAI,SAAS,IAAK,SAAS,KAAM;AACjC,UAAI,SAAS,IAAK,SAAS,KAAM;AAAA,IACnC;AACA,UAAM,aAAa,CAAC,UAA+B,SAAiB;AAElE,iBAAW,CAAC,IAAI,KAAK,KAAK,SAAS,QAAQ,GAAG;AAC5C,YAAI,QAAQ,GAAG;AACb,gBAAM,IAAI,MAAM,mBAAmB,IAAI;AAAA,QACzC;AACA,cAAM,QAAS,KAAK,YAAc,QAAQ,KAAQ,QAAQ,KAAM;AAChE,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AACA,YAAQ,QAAQ,UAAU;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB;AAChB,WAAO,wBAAO,eAAe,KAAK,aAAa,GAAG,IAAI;AAAA,EACxD;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,eAAe,KAAiB;AAC9B,aAAS,IAAI,GAAG,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG;AAC1C,YAAM,QACJ,IAAI,CAAC,IAAK,IAAI,IAAI,CAAC,KAAK,IAAM,IAAI,IAAI,CAAC,KAAK,KAAO,IAAI,IAAI,CAAC,KAAK;AACnE,YAAM,KAAK,QAAQ;AACnB,YAAM,OAAQ,SAAS,KAAM;AAC7B,YAAM,SAAU,SAAS,KAAM,KAAO;AACtC,YAAM,QAAQ,CAAC,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,IAAI;AACrD,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAM,KAAK,EAAE;AAAA,MACf;AAAA,IACF;AACA,SAAK,KAAK;AACV,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,eAAe,KAAiB;AACrC,WAAO,IAAI,WAAW,EAAE,eAAe,GAAG;AAAA,EAC5C;AAAA,EAEA,kBAAkB,KAAa;AAC7B,WAAO,KAAK,eAAe,wBAAO,aAAa,GAAG,CAAC;AAAA,EACrD;AAAA,EAEA,OAAO,kBAAkB,KAAa;AACpC,WAAO,IAAI,WAAW,EAAE,kBAAkB,GAAG;AAAA,EAC/C;AAAA,EAEA,cAAc;AACZ,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAAA,MACtC;AAAA,MACA,GAAG,KAAK,MAAM,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAAA,MACvC;AAAA,MACA,GAAG,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAAA,IACxC,EAAE,KAAK,IAAI;AAAA,EACb;AAAA,EAEA,cAAc,KAAa;AACzB,UAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,QAAI,UAAU,KAAK;AACnB,eAAW,SAAS,OAAO;AACzB,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,SAAS,SAAS;AACpB,kBAAU,KAAK;AAAA,MACjB;AACA,UAAI,SAAS,UAAU;AACrB,kBAAU,KAAK;AAAA,MACjB;AACA,UAAI,SAAS,SAAS;AACpB,kBAAU,KAAK;AAAA,MACjB;AACA,UAAI,KAAK,MAAM,OAAO,GAAG;AACvB,gBAAQ,KAAK,SAAS,MAAM,EAAE,CAAC;AAAA,MACjC;AAAA,IACF;AACA,SAAK,KAAK;AACV,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,cAAc,KAAa;AAChC,WAAO,IAAI,WAAW,EAAE,cAAc,GAAG;AAAA,EAC3C;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,11 @@ export default class YGOProDeck {
|
|
|
4
4
|
side: number[];
|
|
5
5
|
private sort;
|
|
6
6
|
bufferLength(): number;
|
|
7
|
+
toUint8Array(): Uint8Array;
|
|
7
8
|
toEncodedString(): string;
|
|
8
9
|
toString(): string;
|
|
10
|
+
fromUint8Array(buf: Uint8Array): this;
|
|
11
|
+
static fromUint8Array(buf: Uint8Array): YGOProDeck;
|
|
9
12
|
fromEncodedString(str: string): this;
|
|
10
13
|
static fromEncodedString(str: string): YGOProDeck;
|
|
11
14
|
toYdkString(): string;
|
package/dist/index.mjs
CHANGED
|
@@ -22,7 +22,7 @@ var YGOProDeck = class {
|
|
|
22
22
|
const counted = [this.main, this.extra, this.side].map(countItems);
|
|
23
23
|
return counted.reduce((a, b) => a + b.size * 4, 0);
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
toUint8Array() {
|
|
26
26
|
const counted = [this.main, this.extra, this.side].map(countItems);
|
|
27
27
|
const buf = new Uint8Array(counted.reduce((a, b) => a + b.size * 4, 0));
|
|
28
28
|
let pointer = 0;
|
|
@@ -42,13 +42,15 @@ var YGOProDeck = class {
|
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
counted.forEach(writeCards);
|
|
45
|
-
return
|
|
45
|
+
return buf;
|
|
46
|
+
}
|
|
47
|
+
toEncodedString() {
|
|
48
|
+
return Base64.fromUint8Array(this.toUint8Array(), true);
|
|
46
49
|
}
|
|
47
50
|
toString() {
|
|
48
51
|
return this.toEncodedString();
|
|
49
52
|
}
|
|
50
|
-
|
|
51
|
-
const buf = Base64.toUint8Array(str);
|
|
53
|
+
fromUint8Array(buf) {
|
|
52
54
|
for (let i = 0; i < buf.length - 3; i += 4) {
|
|
53
55
|
const value = buf[i] | buf[i + 1] << 8 | buf[i + 2] << 16 | buf[i + 3] << 24;
|
|
54
56
|
const id = value & 268435455;
|
|
@@ -62,6 +64,12 @@ var YGOProDeck = class {
|
|
|
62
64
|
this.sort();
|
|
63
65
|
return this;
|
|
64
66
|
}
|
|
67
|
+
static fromUint8Array(buf) {
|
|
68
|
+
return new YGOProDeck().fromUint8Array(buf);
|
|
69
|
+
}
|
|
70
|
+
fromEncodedString(str) {
|
|
71
|
+
return this.fromUint8Array(Base64.toUint8Array(str));
|
|
72
|
+
}
|
|
65
73
|
static fromEncodedString(str) {
|
|
66
74
|
return new YGOProDeck().fromEncodedString(str);
|
|
67
75
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils.ts", "../index.ts"],
|
|
4
|
-
"sourcesContent": ["export function countItems<T>(arr: T[]) {\n const map = new Map<T, number>();\n for (const item of arr) {\n map.set(item, (map.get(item) || 0) + 1);\n }\n return map;\n}\n", "import { countItems } from './src/utils';\nimport { Base64 } from 'js-base64';\n\nexport default class YGOProDeck {\n main: number[] = [];\n extra: number[] = [];\n side: number[] = [];\n\n private sort() {\n this.main.sort();\n this.extra.sort();\n this.side.sort();\n }\n\n bufferLength() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n return counted.reduce((a, b) => a + b.size * 4, 0);\n }\n\n
|
|
5
|
-
"mappings": ";AAAO,SAAS,WAAc,KAAU;AACtC,QAAM,MAAM,oBAAI,IAAe;AAC/B,aAAW,QAAQ,KAAK;AACtB,QAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AAAA,EACxC;AACA,SAAO;AACT;;;ACLA,SAAS,
|
|
4
|
+
"sourcesContent": ["export function countItems<T>(arr: T[]) {\n const map = new Map<T, number>();\n for (const item of arr) {\n map.set(item, (map.get(item) || 0) + 1);\n }\n return map;\n}\n", "import { countItems } from './src/utils';\nimport { Base64, fromUint8Array } from 'js-base64';\n\nexport default class YGOProDeck {\n main: number[] = [];\n extra: number[] = [];\n side: number[] = [];\n\n private sort() {\n this.main.sort();\n this.extra.sort();\n this.side.sort();\n }\n\n bufferLength() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n return counted.reduce((a, b) => a + b.size * 4, 0);\n }\n\n toUint8Array() {\n const counted = [this.main, this.extra, this.side].map(countItems);\n const buf = new Uint8Array(counted.reduce((a, b) => a + b.size * 4, 0));\n let pointer = 0;\n const writeUint32LE = (value: number) => {\n buf[pointer++] = value & 0xff;\n buf[pointer++] = (value >> 8) & 0xff;\n buf[pointer++] = (value >> 16) & 0xff;\n buf[pointer++] = (value >> 24) & 0xff;\n };\n const writeCards = (countMap: Map<number, number>, type: number) => {\n // each card: 28 bits for id, 2 bits(0, 1, 2, 3) for type(0: main, 1: extra, 2: side, 3: unknown), 2 bits for count (0: 1, 1: 2, 2: 3, 3: 4)\n for (const [id, count] of countMap.entries()) {\n if (count > 4) {\n throw new Error(`Too many cards: ${id}`);\n }\n const value = (id & 0xfffffff) | (type << 28) | ((count - 1) << 30);\n writeUint32LE(value);\n }\n };\n counted.forEach(writeCards);\n return buf;\n }\n\n toEncodedString() {\n return Base64.fromUint8Array(this.toUint8Array(), true);\n }\n\n toString() {\n return this.toEncodedString();\n }\n\n fromUint8Array(buf: Uint8Array) {\n for (let i = 0; i < buf.length - 3; i += 4) {\n const value =\n buf[i] | (buf[i + 1] << 8) | (buf[i + 2] << 16) | (buf[i + 3] << 24);\n const id = value & 0xfffffff;\n const type = (value >> 28) & 0x3;\n const count = ((value >> 30) & 0x3) + 1;\n const cards = [this.main, this.extra, this.side][type];\n for (let j = 0; j < count; j++) {\n cards.push(id);\n }\n }\n this.sort();\n return this;\n }\n\n static fromUint8Array(buf: Uint8Array) {\n return new YGOProDeck().fromUint8Array(buf);\n }\n\n fromEncodedString(str: string) {\n return this.fromUint8Array(Base64.toUint8Array(str));\n }\n\n static fromEncodedString(str: string) { \n return new YGOProDeck().fromEncodedString(str);\n }\n\n toYdkString() {\n return [\n '#created by ygopro-deck-encode',\n '#main',\n ...this.main.map((id) => id.toString()),\n '#extra',\n ...this.extra.map((id) => id.toString()),\n '!side',\n ...this.side.map((id) => id.toString()),\n ].join('\\n');\n }\n\n fromYdkString(str: string) {\n const lines = str.split('\\n');\n let current = this.main;\n for (const _line of lines) {\n const line = _line.trim();\n if (line === '#main') {\n current = this.main;\n }\n if (line === '#extra') {\n current = this.extra;\n }\n if (line === '!side') {\n current = this.side;\n }\n if (line.match(/^\\d+$/)) {\n current.push(parseInt(line, 10));\n }\n }\n this.sort();\n return this;\n }\n\n static fromYdkString(str: string) {\n return new YGOProDeck().fromYdkString(str);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { countItems } from './src/utils';
|
|
2
|
-
import { Base64 } from 'js-base64';
|
|
2
|
+
import { Base64, fromUint8Array } from 'js-base64';
|
|
3
3
|
|
|
4
4
|
export default class YGOProDeck {
|
|
5
5
|
main: number[] = [];
|
|
@@ -17,7 +17,7 @@ export default class YGOProDeck {
|
|
|
17
17
|
return counted.reduce((a, b) => a + b.size * 4, 0);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
toUint8Array() {
|
|
21
21
|
const counted = [this.main, this.extra, this.side].map(countItems);
|
|
22
22
|
const buf = new Uint8Array(counted.reduce((a, b) => a + b.size * 4, 0));
|
|
23
23
|
let pointer = 0;
|
|
@@ -38,15 +38,18 @@ export default class YGOProDeck {
|
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
counted.forEach(writeCards);
|
|
41
|
-
return
|
|
41
|
+
return buf;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
toEncodedString() {
|
|
45
|
+
return Base64.fromUint8Array(this.toUint8Array(), true);
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
toString() {
|
|
45
49
|
return this.toEncodedString();
|
|
46
50
|
}
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
const buf = Base64.toUint8Array(str);
|
|
52
|
+
fromUint8Array(buf: Uint8Array) {
|
|
50
53
|
for (let i = 0; i < buf.length - 3; i += 4) {
|
|
51
54
|
const value =
|
|
52
55
|
buf[i] | (buf[i + 1] << 8) | (buf[i + 2] << 16) | (buf[i + 3] << 24);
|
|
@@ -62,6 +65,14 @@ export default class YGOProDeck {
|
|
|
62
65
|
return this;
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
static fromUint8Array(buf: Uint8Array) {
|
|
69
|
+
return new YGOProDeck().fromUint8Array(buf);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fromEncodedString(str: string) {
|
|
73
|
+
return this.fromUint8Array(Base64.toUint8Array(str));
|
|
74
|
+
}
|
|
75
|
+
|
|
65
76
|
static fromEncodedString(str: string) {
|
|
66
77
|
return new YGOProDeck().fromEncodedString(str);
|
|
67
78
|
}
|
package/package.json
CHANGED