mirror of
https://github.com/tcgdex/cards-database.git
synced 2025-08-15 01:41:59 +00:00
Compare commits
156 Commits
Author | SHA1 | Date | |
---|---|---|---|
615a1d23b5
|
|||
|
5f5afdea80 | ||
859f325a20 | |||
0b4796cbb2 | |||
25117a4141 | |||
c809b14783 | |||
8ca40f410d | |||
c26b91ac85 | |||
|
fa0b9d5f7c | ||
|
860248e5d9 | ||
224d9cd1c6 | |||
|
98bc4db193 | ||
|
d169a67833 | ||
d0c43e5ce6 | |||
61f506ee95 | |||
651be99b41 | |||
8a8602da96 | |||
5b1f0528db | |||
2e4e3c25ba | |||
c9021ab8fa | |||
8feda41809 | |||
1eb4c677a7 | |||
|
b26236e78c | ||
aa07e67c80 | |||
961c75c8a0 | |||
509288ad19 | |||
e23bc6c909 | |||
2ca455a957 | |||
13ad5fb0a2 | |||
|
17a0e241cc | ||
|
dc51d5e8a8 | ||
|
e1de8e8323 | ||
|
744ad63e3a | ||
|
6b223c688d | ||
|
e749ed01e2 | ||
|
e4eb25b6ea | ||
|
814f94be6f | ||
|
63790a056c | ||
51e017e9cc | |||
a550cf079c | |||
78366685f8 | |||
|
08971af0bf | ||
|
7111c33403 | ||
|
a08b8d8cca | ||
c3cfb2607a | |||
|
16caf3384e | ||
|
c5ab6d966b | ||
7e2a3ea30c | |||
ecf4c9f8fa | |||
e8e9c23e14 | |||
e4099defdb | |||
19dccfd5d7 | |||
|
2f9c5814ff | ||
|
7f95bd3da1 | ||
|
0158daf40d | ||
|
a597759d9d | ||
|
28662c55c3 | ||
|
eca49a1bee | ||
|
de13bb175a | ||
34dc55b1d7 | |||
17ef7efab3 | |||
|
b6dab212b7 | ||
ff0cf14773 | |||
|
2a2b6463ff | ||
|
6b3633e748 | ||
8fb7f88283 | |||
|
366e9e6ea7 | ||
a33629e883 | |||
33232f1b65 | |||
7568334dec | |||
|
f39956e429 | ||
|
a722ecbbda | ||
f2a7f09e48 | |||
|
60031a9de6 | ||
144b794610 | |||
62f6671b63 | |||
87d9b16fb8 | |||
0616b98038 | |||
|
a8f8b29340 | ||
|
2813d77f92 | ||
ebc2bb28bf | |||
c52ed815bb | |||
5e1ba9ee8d | |||
|
121db30389 | ||
|
48a984ef50 | ||
|
2b6d06184d | ||
|
109921761e | ||
|
3b02e9be81 | ||
|
eaf5935a0f | ||
|
878c0dc83a | ||
|
aeaa784100 | ||
|
fabb829169 | ||
d291c692d9 | |||
8610bd60fe | |||
|
89e0b8d367 | ||
|
660cccbe97 | ||
8eb9131f60
|
|||
041572da85
|
|||
982e0dd8f0 | |||
207a18fec6 | |||
ac83a0ebdb | |||
45f7db66d7 | |||
14ed8ee912 | |||
bf8f610c04 | |||
8231f45f81 | |||
e30d54469d | |||
c1d83caca0 | |||
64bcd0524d | |||
07a8ad0b8e | |||
4c96331b93 | |||
1a52a6f29a | |||
1d14078dd8 | |||
4f2c27937a | |||
bbd5d28dc6 | |||
ce8d5590ef | |||
b9dae445b1 | |||
4700618047 | |||
5899083e5d | |||
ae6ed3cdaa | |||
5928a1dd25 | |||
|
5fbcd82457 | ||
cfd6d5c0e8 | |||
|
80f483ab66 | ||
31b1ae566e | |||
698f66cf55 | |||
c8ec4c88a7 | |||
68e363bfaa | |||
|
ab265c6c41 | ||
|
c10020a9a9 | ||
|
e36865e971 | ||
|
5b32edb5bf | ||
|
e7ceb7ac59 | ||
|
629ab06c4c | ||
|
7e3cf7aa08 | ||
|
0475848425 | ||
|
eea5c5147b | ||
3d58d92db7 | |||
|
d0b4071ff9 | ||
|
661edcf790 | ||
27521b92ad | |||
6751deb9d0 | |||
2e8c843c5a | |||
|
d75b756bac | ||
|
91dc66a494 | ||
a26ef0e5eb | |||
|
a35fadd50c | ||
|
f2c664badc | ||
8a4a93af8f | |||
d48971c95e | |||
16fe072e7e | |||
c476d82618 | |||
e4aba3bf1c | |||
df154e6b9b | |||
c7b3267ca2 | |||
14418b0c94 | |||
aa99ed2750 |
@@ -52,6 +52,24 @@
|
||||
"contributions": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "spyworldxp",
|
||||
"name": "Clement Yuan",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1112701?v=4",
|
||||
"profile": "http://imclement.com",
|
||||
"contributions": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Reloadaxe",
|
||||
"name": "Benjamin Rousseliere",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/44167126?v=4",
|
||||
"profile": "https://github.com/Reloadaxe",
|
||||
"contributions": [
|
||||
"data"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
@@ -60,5 +78,6 @@
|
||||
"repoType": "github",
|
||||
"repoHost": "https://github.com",
|
||||
"skipCi": true,
|
||||
"commitConvention": "angular"
|
||||
"commitConvention": "angular",
|
||||
"commitType": "docs"
|
||||
}
|
||||
|
25
.bruno/cards/advanced-query.bru
Normal file
25
.bruno/cards/advanced-query.bru
Normal file
@@ -0,0 +1,25 @@
|
||||
meta {
|
||||
name: Advanced Query
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=eq:Pikachu&hp=gte:60&hp=lt:70&localId=5&localId=not:tg&id=neq:cel25-5
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
name: eq:Pikachu
|
||||
hp: gte:60
|
||||
hp: lt:70
|
||||
localId: 5
|
||||
localId: not:tg
|
||||
id: neq:cel25-5
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.length: gte 14
|
||||
}
|
23
.bruno/cards/multiple.bru
Normal file
23
.bruno/cards/multiple.bru
Normal file
@@ -0,0 +1,23 @@
|
||||
meta {
|
||||
name: Multiple values
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=eq:Pikachu|Pichu&hp=lt:70&localId=not:tg&id=neq:cel25-5
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
name: eq:Pikachu|Pichu
|
||||
hp: lt:70
|
||||
localId: not:tg
|
||||
id: neq:cel25-5
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.length: gt 85
|
||||
}
|
21
.bruno/dex-ids/get-by-dex-id.bru
Normal file
21
.bruno/dex-ids/get-by-dex-id.bru
Normal file
@@ -0,0 +1,21 @@
|
||||
meta {
|
||||
name: Get by Dex ID
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/dex-ids/{{ID}}
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
ID: 162
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.cards.length: gte 8
|
||||
res.body.name: eq {{ID}}
|
||||
}
|
3
.bruno/environments/Beta.bru
Normal file
3
.bruno/environments/Beta.bru
Normal file
@@ -0,0 +1,3 @@
|
||||
vars {
|
||||
BASE_URL: https://beta.api.tcgdex.net
|
||||
}
|
@@ -1,3 +1,3 @@
|
||||
vars {
|
||||
BASE_URL: http://localhost:3000
|
||||
BASE_URL: http://127.0.0.1:3000
|
||||
}
|
||||
|
20
.bruno/filtering/end-star-pattern.bru
Normal file
20
.bruno/filtering/end-star-pattern.bru
Normal file
@@ -0,0 +1,20 @@
|
||||
meta {
|
||||
name: End Star Pattern
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=*chu
|
||||
body: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
params:query {
|
||||
name: *chu
|
||||
}
|
||||
|
||||
assert {
|
||||
res.body.length: gt 3
|
||||
res.body[1].name: neq Pikachu on the Ball
|
||||
}
|
19
.bruno/filtering/searching-using-the-dex-id.bru
Normal file
19
.bruno/filtering/searching-using-the-dex-id.bru
Normal file
@@ -0,0 +1,19 @@
|
||||
meta {
|
||||
name: dexId Search
|
||||
type: http
|
||||
seq: 3
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/ja/cards?dexId=eq:357
|
||||
body: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
params:query {
|
||||
dexId: eq:357
|
||||
}
|
||||
|
||||
assert {
|
||||
res.body.length: eq 3
|
||||
}
|
20
.bruno/filtering/start-star-pattern.bru
Normal file
20
.bruno/filtering/start-star-pattern.bru
Normal file
@@ -0,0 +1,20 @@
|
||||
meta {
|
||||
name: Start star Pattern
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=fu*
|
||||
body: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
params:query {
|
||||
name: fu*
|
||||
}
|
||||
|
||||
assert {
|
||||
res.body.length: gt 3
|
||||
res.body[1].name: neq Stufful
|
||||
}
|
17
.bruno/fixes/489-crash-when-sorting-with-null-values.bru
Normal file
17
.bruno/fixes/489-crash-when-sorting-with-null-values.bru
Normal file
@@ -0,0 +1,17 @@
|
||||
meta {
|
||||
name: 489 - Crash When sorting with Null values
|
||||
type: http
|
||||
seq: 6
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=pikachu&sort:field=hp&sort:order=DESC
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
query {
|
||||
name: pikachu
|
||||
sort:field: hp
|
||||
sort:order: DESC
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: 562 - GraphQL set request is not returning the correct value
|
||||
type: graphql
|
||||
seq: 7
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
set(id: "{{SET_ID}}") {
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
SET_ID: swsh1
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.data.set.id: eq {{SET_ID}}
|
||||
}
|
15
.bruno/fixes/566-specific-request-crash-the-request.bru
Normal file
15
.bruno/fixes/566-specific-request-crash-the-request.bru
Normal file
@@ -0,0 +1,15 @@
|
||||
meta {
|
||||
name: 566 - Specific request crash the request
|
||||
type: http
|
||||
seq: 7
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/fr/cards?name=eq:Pikachu&name=eq:Pichu,Pikachu
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
meta {
|
||||
name: 567 - invalid data returned when filtering using set
|
||||
type: http
|
||||
seq: 9
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/cards?name=umbreon&set=evolving skies
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
name: umbreon
|
||||
set: evolving skies
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.length: gte 6
|
||||
}
|
28
.bruno/graphql/card.bru
Normal file
28
.bruno/graphql/card.bru
Normal file
@@ -0,0 +1,28 @@
|
||||
meta {
|
||||
name: card
|
||||
type: graphql
|
||||
seq: 2
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
card(id: "{{ID}}") {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
ID: swsh1-136
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.data.card.id: eq {{ID}}
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
meta {
|
||||
name: GraphQL API
|
||||
name: cards
|
||||
type: graphql
|
||||
seq: 1
|
||||
}
|
29
.bruno/graphql/serie.bru
Normal file
29
.bruno/graphql/serie.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: serie
|
||||
type: graphql
|
||||
seq: 5
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
serie(id: "{{ID}}") {
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
ID: swsh
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.data.serie.id: eq {{ID}}
|
||||
}
|
24
.bruno/graphql/series.bru
Normal file
24
.bruno/graphql/series.bru
Normal file
@@ -0,0 +1,24 @@
|
||||
meta {
|
||||
name: series
|
||||
type: graphql
|
||||
seq: 6
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
series {
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
}
|
29
.bruno/graphql/set.bru
Normal file
29
.bruno/graphql/set.bru
Normal file
@@ -0,0 +1,29 @@
|
||||
meta {
|
||||
name: set
|
||||
type: graphql
|
||||
seq: 3
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
set(id: "{{SET_ID}}") {
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
vars:pre-request {
|
||||
SET_ID: swsh1
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.data.set.id: eq {{SET_ID}}
|
||||
}
|
24
.bruno/graphql/sets.bru
Normal file
24
.bruno/graphql/sets.bru
Normal file
@@ -0,0 +1,24 @@
|
||||
meta {
|
||||
name: sets
|
||||
type: graphql
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{BASE_URL}}/v2/graphql
|
||||
body: graphql
|
||||
auth: none
|
||||
}
|
||||
|
||||
body:graphql {
|
||||
query Pouet {
|
||||
sets {
|
||||
id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
}
|
20
.bruno/random/Random Card.bru
Normal file
20
.bruno/random/Random Card.bru
Normal file
@@ -0,0 +1,20 @@
|
||||
meta {
|
||||
name: Random Card
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/random/card?name=furret
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
query {
|
||||
name: furret
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.name: contains Furret
|
||||
}
|
19
.bruno/random/Random Serie.bru
Normal file
19
.bruno/random/Random Serie.bru
Normal file
@@ -0,0 +1,19 @@
|
||||
meta {
|
||||
name: Random Serie
|
||||
type: http
|
||||
seq: 3
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/random/serie?name=p
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
query {
|
||||
name: p
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
}
|
20
.bruno/random/Random Set.bru
Normal file
20
.bruno/random/Random Set.bru
Normal file
@@ -0,0 +1,20 @@
|
||||
meta {
|
||||
name: Random Set
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/random/set?name=sword
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
query {
|
||||
name: sword
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.name: contains Sword
|
||||
}
|
21
.bruno/sets/Advanced Query.bru
Normal file
21
.bruno/sets/Advanced Query.bru
Normal file
@@ -0,0 +1,21 @@
|
||||
meta {
|
||||
name: Advanced Query
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/sets?cardCount.official=gt:64&id=swsh
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
params:query {
|
||||
cardCount.official:gt: 64
|
||||
id: swsh
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body: length 17
|
||||
}
|
16
.bruno/sets/Get a card by set name.bru
Normal file
16
.bruno/sets/Get a card by set name.bru
Normal file
@@ -0,0 +1,16 @@
|
||||
meta {
|
||||
name: Get a card by set name
|
||||
type: http
|
||||
seq: 6
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/sets/Crystal%20Guardians/10
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.id: eq ex14-10
|
||||
}
|
16
.bruno/sets/Get a set by name.bru
Normal file
16
.bruno/sets/Get a set by name.bru
Normal file
@@ -0,0 +1,16 @@
|
||||
meta {
|
||||
name: Get a set by name
|
||||
type: http
|
||||
seq: 5
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{BASE_URL}}/v2/en/sets/Crystal%20Guardians
|
||||
body: none
|
||||
auth: none
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.id: eq ex14
|
||||
}
|
@@ -19,4 +19,3 @@ dist/
|
||||
|
||||
# production
|
||||
/server/dist
|
||||
/server/generated
|
||||
|
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
Thanks for your Pull Request, Please provide the related Issue using "Fix #0" or describe the change(s) you made.
|
||||
The issue title must follow Conventional Commit (verified by Github Actions) conventionalcommits.org.
|
||||
The issue title must follow Conventional Commit conventionalcommits.org.
|
||||
More informations at https://github.com/tcgdex/cards-database/blob/master/CONTRIBUTING.md
|
||||
-->
|
||||
|
34
.github/scripts/.gitignore
vendored
Normal file
34
.github/scripts/.gitignore
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# dependencies (bun install)
|
||||
node_modules
|
||||
|
||||
# output
|
||||
out
|
||||
dist
|
||||
*.tgz
|
||||
|
||||
# code coverage
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# logs
|
||||
logs
|
||||
_.log
|
||||
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# caches
|
||||
.eslintcache
|
||||
.cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# IntelliJ based IDEs
|
||||
.idea
|
||||
|
||||
# Finder (MacOS) folder config
|
||||
.DS_Store
|
15
.github/scripts/README.md
vendored
Normal file
15
.github/scripts/README.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# scripts
|
||||
|
||||
To install dependencies:
|
||||
|
||||
```bash
|
||||
bun install
|
||||
```
|
||||
|
||||
To run:
|
||||
|
||||
```bash
|
||||
bun run
|
||||
```
|
||||
|
||||
This project was created using `bun init` in bun v1.2.11. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
|
106
.github/scripts/bun.lock
vendored
Normal file
106
.github/scripts/bun.lock
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"lockfileVersion": 1,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"name": "scripts",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.11.1",
|
||||
"@actions/github": "^6.0.0",
|
||||
"@tcgdex/sdk": "^2.6.0",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/bun": "latest",
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5",
|
||||
},
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@actions/core": ["@actions/core@1.11.1", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="],
|
||||
|
||||
"@actions/exec": ["@actions/exec@1.1.1", "", { "dependencies": { "@actions/io": "^1.0.1" } }, "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w=="],
|
||||
|
||||
"@actions/github": ["@actions/github@6.0.0", "", { "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", "@octokit/plugin-paginate-rest": "^9.0.0", "@octokit/plugin-rest-endpoint-methods": "^10.0.0" } }, "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g=="],
|
||||
|
||||
"@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="],
|
||||
|
||||
"@actions/io": ["@actions/io@1.1.3", "", {}, "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="],
|
||||
|
||||
"@cachex/core": ["@cachex/core@1.0.1", "", { "dependencies": { "@dzeio/object-util": "^1.8.3" } }, "sha512-sHynwjF9hKIvwg8rTUdvA7MOUMcUC5Mq0dpynPBILRS+IPvsHcE4Cb2uRSs0/I2nxO7NQp9p+xHYistdfJJSwg=="],
|
||||
|
||||
"@cachex/memory": ["@cachex/memory@1.0.1", "", { "dependencies": { "@cachex/core": "^1" } }, "sha512-KWUTdCCXhIlAkJaVZMhUh9kD0uq8PxC3Z34Q3lMGZOAV6FXP/cOMW89ALrWX3VkoRrrM4R6MIMO+amZNOvEqgw=="],
|
||||
|
||||
"@cachex/web-storage": ["@cachex/web-storage@1.0.1", "", { "dependencies": { "@cachex/core": "^1" } }, "sha512-E8Xa9qDZgNgr+lcj3eixowg7PH2CVZbp3huuoc5xVVTtwYrZi5YqbHBG12yG3r6C6Fts/2Yoq6cbVBSm6c8VRA=="],
|
||||
|
||||
"@dzeio/object-util": ["@dzeio/object-util@1.9.1", "", {}, "sha512-cLGsjAc7hzSadS57jcMxSPidYabyZXJOFnasScSrE/V5yflhze6T7L5/98josWYrXMvoKu7N+Ivk6vGkIj72UQ=="],
|
||||
|
||||
"@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="],
|
||||
|
||||
"@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="],
|
||||
|
||||
"@octokit/core": ["@octokit/core@5.2.1", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ=="],
|
||||
|
||||
"@octokit/endpoint": ["@octokit/endpoint@9.0.6", "", { "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw=="],
|
||||
|
||||
"@octokit/graphql": ["@octokit/graphql@7.1.1", "", { "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g=="],
|
||||
|
||||
"@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="],
|
||||
|
||||
"@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@9.2.2", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ=="],
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@10.4.1", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg=="],
|
||||
|
||||
"@octokit/request": ["@octokit/request@8.4.1", "", { "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw=="],
|
||||
|
||||
"@octokit/request-error": ["@octokit/request-error@5.1.1", "", { "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g=="],
|
||||
|
||||
"@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="],
|
||||
|
||||
"@tcgdex/sdk": ["@tcgdex/sdk@2.6.0", "", { "dependencies": { "@cachex/memory": "^1", "@cachex/web-storage": "^1", "@dzeio/object-util": "^1", "isomorphic-unfetch": "^3" } }, "sha512-q0O7dNzRRLq38XwqUoHFKo78/NCQW5pEIZ+JnlrVOxp9r9R/LTIQGAMNR96Il0hb1uIm4j5o7WBueBCpuDyomQ=="],
|
||||
|
||||
"@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="],
|
||||
|
||||
"@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="],
|
||||
|
||||
"before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="],
|
||||
|
||||
"bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="],
|
||||
|
||||
"deprecation": ["deprecation@2.3.1", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="],
|
||||
|
||||
"isomorphic-unfetch": ["isomorphic-unfetch@3.1.0", "", { "dependencies": { "node-fetch": "^2.6.1", "unfetch": "^4.2.0" } }, "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q=="],
|
||||
|
||||
"node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
|
||||
|
||||
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
|
||||
|
||||
"tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="],
|
||||
|
||||
"tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="],
|
||||
|
||||
"typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
|
||||
|
||||
"undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="],
|
||||
|
||||
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
||||
|
||||
"unfetch": ["unfetch@4.2.0", "", {}, "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA=="],
|
||||
|
||||
"universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="],
|
||||
|
||||
"webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="],
|
||||
|
||||
"whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
|
||||
|
||||
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
|
||||
|
||||
"@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="],
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="],
|
||||
|
||||
"@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="],
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="],
|
||||
}
|
||||
}
|
472
.github/scripts/load-cards.ts
vendored
Normal file
472
.github/scripts/load-cards.ts
vendored
Normal file
@@ -0,0 +1,472 @@
|
||||
import core from "@actions/core";
|
||||
import github from "@actions/github";
|
||||
import TCGdex from "@tcgdex/sdk";
|
||||
|
||||
// Types
|
||||
type CardData = {
|
||||
id: string;
|
||||
name: string;
|
||||
image?: string;
|
||||
rarity?: string;
|
||||
set: { name: string };
|
||||
hasImage: boolean;
|
||||
};
|
||||
|
||||
type CardResult = {
|
||||
file: string;
|
||||
card?: CardData;
|
||||
error?: string;
|
||||
isAsian?: boolean;
|
||||
usedLanguage?: string;
|
||||
hasImage?: boolean;
|
||||
status?: "added" | "removed" | "modified";
|
||||
};
|
||||
|
||||
type CardFetchResult = {
|
||||
card: any;
|
||||
usedLanguage: string;
|
||||
hasImage: boolean;
|
||||
} | null;
|
||||
|
||||
// Constants
|
||||
const DATA_REGEX = /^data\/([^\/]+)\/([^\/]+)\/([^\/]+)\.ts$/;
|
||||
const DATA_ASIA_REGEX = /^data-asia\/([^\/]+)\/([^\/]+)\/([^\/]+)\.ts$/;
|
||||
|
||||
const INTERNATIONAL_LANGUAGES = ["en", "fr", "es", "es-mx", "it", "pt", "pt-br", "pt-pt", "de", "nl", "pl", "ru"];
|
||||
const ASIAN_LANGUAGES = ["ja", "ko", "zh-tw", "id", "th", "zh-cn"];
|
||||
|
||||
const LANGUAGE_NAMES: Record<string, string> = {
|
||||
en: "English",
|
||||
fr: "French",
|
||||
es: "Spanish",
|
||||
"es-mx": "Spanish (Mexico)",
|
||||
it: "Italian",
|
||||
pt: "Portuguese",
|
||||
"pt-br": "Portuguese (Brazil)",
|
||||
"pt-pt": "Portuguese (Portugal)",
|
||||
de: "German",
|
||||
nl: "Dutch",
|
||||
pl: "Polish",
|
||||
ru: "Russian",
|
||||
ja: "Japanese",
|
||||
ko: "Korean",
|
||||
"zh-tw": "Chinese (Taiwan)",
|
||||
id: "Indonesian",
|
||||
th: "Thai",
|
||||
"zh-cn": "Chinese (China)",
|
||||
};
|
||||
|
||||
// Helper function to sanitize card data
|
||||
function sanitizeCardData(card: any): CardData | undefined {
|
||||
if (!card) return undefined;
|
||||
|
||||
return {
|
||||
id: card.id,
|
||||
name: card.name,
|
||||
image: card.image,
|
||||
rarity: card.rarity,
|
||||
set: card.set ? { name: card.set.name } : { name: "Unknown" },
|
||||
hasImage: !!card.image,
|
||||
};
|
||||
}
|
||||
|
||||
// Helper function to try fetching a card with fallback to other languages
|
||||
async function tryFetchCardWithFallback(
|
||||
setIdentifier: string,
|
||||
cardLocalId: string,
|
||||
primaryLanguage: string,
|
||||
allLanguages: string[],
|
||||
isAsianRegion: boolean,
|
||||
): Promise<CardFetchResult> {
|
||||
let lastError: Error | unknown = null;
|
||||
const languagesToTry = [primaryLanguage, ...allLanguages.filter((lang) => lang !== primaryLanguage)];
|
||||
let foundWithoutImage: { lang: string; card: any } | undefined;
|
||||
|
||||
for (const lang of languagesToTry) {
|
||||
try {
|
||||
console.log(` Trying language: ${lang}`);
|
||||
const tcgdex = new TCGdex(lang as any);
|
||||
let card;
|
||||
|
||||
if (!isAsianRegion) {
|
||||
const set = await tcgdex.set.get(setIdentifier);
|
||||
card = await tcgdex.card.get(`${set!.id}-${cardLocalId}`);
|
||||
} else {
|
||||
card = await tcgdex.card.get(`${setIdentifier}-${cardLocalId}`);
|
||||
}
|
||||
|
||||
if (card && !card.image) {
|
||||
foundWithoutImage = { lang, card };
|
||||
continue;
|
||||
}
|
||||
|
||||
if (card && card.image) {
|
||||
console.log(` Card: ${card.name} (${card.id}) - Found using language: ${lang}`);
|
||||
return { card, usedLanguage: lang, hasImage: true };
|
||||
}
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
console.log(` Failed with language ${lang}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (foundWithoutImage) {
|
||||
console.log(` Card: ${foundWithoutImage.card.name} (${foundWithoutImage.card.id}) - Found without image`);
|
||||
return { card: foundWithoutImage.card, usedLanguage: foundWithoutImage.lang, hasImage: false };
|
||||
}
|
||||
|
||||
console.log(
|
||||
` All languages failed. Last error: ${lastError instanceof Error ? lastError.message : "Unknown error"}`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Get changed files from GitHub
|
||||
async function getChangedFiles(
|
||||
context: typeof github.context,
|
||||
octokit: ReturnType<typeof github.getOctokit>,
|
||||
): Promise<{ filename: string; status: string }[]> {
|
||||
if (context.payload.pull_request) {
|
||||
const { owner, repo } = context.repo;
|
||||
const prNumber = context.payload.pull_request.number;
|
||||
|
||||
// Get all files with pagination
|
||||
const files: { filename: string; status: string }[] = [];
|
||||
let page = 1;
|
||||
let hasMorePages = true;
|
||||
|
||||
while (hasMorePages) {
|
||||
const response = await octokit.rest.pulls.listFiles({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: prNumber,
|
||||
per_page: 100, // Get maximum allowed per page
|
||||
page: page,
|
||||
});
|
||||
|
||||
if (response.data.length === 0) {
|
||||
hasMorePages = false;
|
||||
} else {
|
||||
files.push(...response.data.map((file) => ({
|
||||
filename: file.filename,
|
||||
status: file.status
|
||||
})));
|
||||
page++;
|
||||
}
|
||||
}
|
||||
|
||||
return files;
|
||||
} else if (context.payload.commits) {
|
||||
const files: { filename: string; status: string }[] = [];
|
||||
for (const commit of context.payload.commits) {
|
||||
if (commit.added) {
|
||||
commit.added.forEach((file: string) => files.push({ filename: file, status: "added" }));
|
||||
}
|
||||
if (commit.modified) {
|
||||
commit.modified.forEach((file: string) => files.push({ filename: file, status: "modified" }));
|
||||
}
|
||||
if (commit.removed) {
|
||||
commit.removed.forEach((file: string) => files.push({ filename: file, status: "removed" }));
|
||||
}
|
||||
}
|
||||
return files;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
// Process a single card file
|
||||
async function processCardFile(file: { filename: string; status: string }): Promise<CardResult | null> {
|
||||
console.log(` - ${file.filename} (${file.status})`);
|
||||
let match = file.filename.match(DATA_REGEX);
|
||||
const isCardFile = !!(match || file.filename.match(DATA_ASIA_REGEX));
|
||||
|
||||
if (!isCardFile) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// For added files, just return the file info without fetching
|
||||
if (file.status === "added") {
|
||||
return {
|
||||
file: file.filename,
|
||||
status: "added",
|
||||
};
|
||||
}
|
||||
|
||||
// For removed files, just return the file info without fetching
|
||||
if (file.status === "removed") {
|
||||
return {
|
||||
file: file.filename,
|
||||
status: "removed",
|
||||
};
|
||||
}
|
||||
|
||||
// Only process modified files normally
|
||||
if (match) {
|
||||
const [_, , setName, cardLocalId] = match;
|
||||
const result = await tryFetchCardWithFallback(setName!, cardLocalId!, "en", INTERNATIONAL_LANGUAGES, false);
|
||||
|
||||
if (result) {
|
||||
return {
|
||||
file: file.filename,
|
||||
card: sanitizeCardData(result.card),
|
||||
isAsian: false,
|
||||
usedLanguage: result.usedLanguage,
|
||||
hasImage: result.hasImage,
|
||||
status: "modified",
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
file: file.filename,
|
||||
error: "Failed to fetch card information in all available languages",
|
||||
isAsian: false,
|
||||
status: "modified",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
match = file.filename.match(DATA_ASIA_REGEX);
|
||||
if (match) {
|
||||
const [_, , setId, cardLocalId] = match;
|
||||
const result = await tryFetchCardWithFallback(setId!, cardLocalId!, "ja", ASIAN_LANGUAGES, true);
|
||||
|
||||
if (result) {
|
||||
return {
|
||||
file: file.filename,
|
||||
card: sanitizeCardData(result.card),
|
||||
isAsian: true,
|
||||
usedLanguage: result.usedLanguage,
|
||||
hasImage: result.hasImage,
|
||||
status: "modified",
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
file: file.filename,
|
||||
error: "Failed to fetch card information in all available languages",
|
||||
isAsian: true,
|
||||
status: "modified",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Generate comment body for PR
|
||||
function generateCommentBody(
|
||||
cardResults: CardResult[],
|
||||
changedFiles: { filename: string; status: string }[],
|
||||
repoFullName: string,
|
||||
contextSha: string,
|
||||
): string {
|
||||
const maxCommentLength = 65500;
|
||||
const newCards = cardResults.filter((r) => r.status === "added").length;
|
||||
const deletedCards = cardResults.filter((r) => r.status === "removed").length;
|
||||
const modifiedCards = cardResults.filter((r) => r.status === "modified" && r.card).length;
|
||||
const errorCards = cardResults.filter((r) => r.status === "modified" && r.error).length;
|
||||
const cardsWithoutImages = cardResults.filter((r) => r.card && !r.hasImage).length;
|
||||
|
||||
let commentBody = `## 🃏 ${cardResults.length} Card${cardResults.length !== 1 ? "s" : ""} Changed\n\n`;
|
||||
|
||||
if (cardResults.length === 0) {
|
||||
commentBody +=
|
||||
changedFiles.length > 0
|
||||
? "No recognized card files were changed in this PR.\n"
|
||||
: "No files were changed in this PR.\n";
|
||||
return commentBody;
|
||||
}
|
||||
|
||||
// Add summary
|
||||
commentBody += `**Details:** `;
|
||||
|
||||
const details = [];
|
||||
if (newCards > 0) {
|
||||
details.push(`${newCards} new`);
|
||||
}
|
||||
if (deletedCards > 0) {
|
||||
details.push(`${deletedCards} deleted`);
|
||||
}
|
||||
if (modifiedCards > 0) {
|
||||
details.push(`${modifiedCards} modified`);
|
||||
}
|
||||
if (errorCards > 0) {
|
||||
details.push(`${errorCards} with errors`);
|
||||
}
|
||||
if (cardsWithoutImages > 0) {
|
||||
details.push(`${cardsWithoutImages} without images`);
|
||||
}
|
||||
|
||||
commentBody += details.join(", ") + "\n\n";
|
||||
|
||||
// Generate detailed card information
|
||||
let truncated = false;
|
||||
const truncationMessage = "\n\n> **Note:** Comment truncated due to GitHub size limitations. Some cards were omitted.\n";
|
||||
const truncationLimit = maxCommentLength - truncationMessage.length - 100; // Buffer for safety
|
||||
|
||||
for (const item of cardResults) {
|
||||
const fileUrl = `https://github.com/${repoFullName}/blob/${contextSha}/${item.file}`;
|
||||
const fileName = item.file.split("/").pop();
|
||||
|
||||
// Create a temporary version of what we're about to add to check the length
|
||||
let cardSection = "";
|
||||
|
||||
if (item.status === "added") {
|
||||
cardSection += `<details><summary>➕ <strong>New card: ${fileName}</strong></summary>\n\n`;
|
||||
cardSection += `**File:** [${encodeURI(item.file)}](${encodeURI(fileUrl)}) \n\n`;
|
||||
cardSection += "</details>\n\n";
|
||||
} else if (item.status === "removed") {
|
||||
cardSection += `<details><summary>🗑️ <strong>Deleted card: ${fileName}</strong></summary>\n\n`;
|
||||
cardSection += `**File:** [${encodeURI(item.file)}](${encodeURI(fileUrl)}) \n\n`;
|
||||
cardSection += "</details>\n\n";
|
||||
} else if (item.card) {
|
||||
const langInfo = item.usedLanguage ? ` (found using ${item.usedLanguage})` : "";
|
||||
const imageStatus = !item.hasImage ? ` <em>(no images)</em>` : "";
|
||||
|
||||
cardSection += `<details><summary><strong>${item.card.name}</strong> (${item.card.id})${langInfo}${imageStatus}</summary>\n\n`;
|
||||
|
||||
if (item.card.image) {
|
||||
const languages = item.isAsian ? ASIAN_LANGUAGES : INTERNATIONAL_LANGUAGES;
|
||||
cardSection += renderCardImageTable(item.card, languages);
|
||||
} else {
|
||||
cardSection += `<p align="center"><em>No images available for this card</em></p>\n\n`;
|
||||
}
|
||||
|
||||
cardSection += `**File:** [${item.file}](${fileUrl}) \n`;
|
||||
cardSection += `**Set:** ${item.card.set?.name || "Unknown"} \n`;
|
||||
cardSection += `**Rarity:** ${item.card.rarity || "Unknown"}\n\n`;
|
||||
cardSection += "</details>\n\n";
|
||||
} else if (item.error) {
|
||||
cardSection += `<details><summary>⚠️ <strong>Error processing ${fileName}</strong></summary>\n\n`;
|
||||
cardSection += `**File:** [${encodeURI(item.file)}](${encodeURI(fileUrl)}) \n\n`;
|
||||
cardSection += `**Error:** ${item.error}\n\n`;
|
||||
cardSection += "</details>\n\n";
|
||||
}
|
||||
|
||||
// Check if adding this section would exceed the limit
|
||||
if (commentBody.length + cardSection.length > truncationLimit) {
|
||||
truncated = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// If not exceeding, add it to the main comment body
|
||||
commentBody += cardSection;
|
||||
}
|
||||
|
||||
// Add truncation message if needed
|
||||
if (truncated) {
|
||||
commentBody += truncationMessage;
|
||||
}
|
||||
|
||||
return commentBody;
|
||||
}
|
||||
|
||||
// Helper to render the card image table
|
||||
function renderCardImageTable(card: CardData, languages: string[]): string {
|
||||
let tableMarkdown = `<div align="center">\n\n`;
|
||||
tableMarkdown += `| Language | Language | Language |\n`;
|
||||
tableMarkdown += `|:-------:|:-------:|:-------:|\n`;
|
||||
|
||||
for (let i = 0; i < languages.length; i += 3) {
|
||||
tableMarkdown += `|`;
|
||||
|
||||
for (let j = 0; j < 3; j++) {
|
||||
const langIndex = i + j;
|
||||
if (langIndex < languages.length) {
|
||||
const lang = languages[langIndex];
|
||||
const langName = LANGUAGE_NAMES[lang as keyof typeof LANGUAGE_NAMES] || lang;
|
||||
const localizedImageUrl = card.image!.replace(/\/[a-z]{2}(-[a-z]{2})?\//, `/${lang}/`);
|
||||
tableMarkdown += ` <strong>${langName} (${lang})</strong><br><img src="${localizedImageUrl}/high.webp" alt="${card.name} (${langName})" width="200"/> |`;
|
||||
} else {
|
||||
tableMarkdown += ` |`;
|
||||
}
|
||||
}
|
||||
tableMarkdown += `\n`;
|
||||
}
|
||||
|
||||
tableMarkdown += `\n</div>\n\n`;
|
||||
return tableMarkdown;
|
||||
}
|
||||
|
||||
// Post or update PR comment
|
||||
async function postOrUpdatePRComment(
|
||||
octokit: ReturnType<typeof github.getOctokit>,
|
||||
owner: string,
|
||||
repo: string,
|
||||
prNumber: number,
|
||||
commentBody: string,
|
||||
): Promise<void> {
|
||||
// Get authenticated user info to identify our bot
|
||||
const { data: authenticatedUser } = await octokit.rest.users.getAuthenticated();
|
||||
console.log(`Authenticated as user: ${authenticatedUser.login}`);
|
||||
|
||||
const commentsResponse = await octokit.rest.issues.listComments({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: prNumber,
|
||||
});
|
||||
|
||||
// Look for existing comments from our authenticated bot user
|
||||
const existingComment = commentsResponse.data.find(
|
||||
(comment) => comment.user?.login === authenticatedUser.login && comment.body?.includes("## 🃏"),
|
||||
);
|
||||
|
||||
if (existingComment) {
|
||||
await octokit.rest.issues.updateComment({
|
||||
owner,
|
||||
repo,
|
||||
comment_id: existingComment.id,
|
||||
body: commentBody,
|
||||
});
|
||||
console.log(`Updated existing comment #${existingComment.id} on PR #${prNumber} as ${authenticatedUser.login}`);
|
||||
} else {
|
||||
await octokit.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: prNumber,
|
||||
body: commentBody,
|
||||
});
|
||||
console.log(`Posted new comment to PR #${prNumber} as ${authenticatedUser.login}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
// Initialize GitHub client
|
||||
const token = core.getInput("github-token", { required: true });
|
||||
const octokit = github.getOctokit(token);
|
||||
const context = github.context;
|
||||
const { owner, repo } = context.repo;
|
||||
const repoFullName = `${owner}/${repo}`;
|
||||
|
||||
// Get changed files
|
||||
const changedFiles = await getChangedFiles(context, octokit);
|
||||
|
||||
// Process card files
|
||||
const cardResults: CardResult[] = [];
|
||||
for (const file of changedFiles) {
|
||||
const result = await processCardFile(file);
|
||||
if (result) cardResults.push(result);
|
||||
}
|
||||
|
||||
// Generate comment body
|
||||
const commentBody = generateCommentBody(cardResults, changedFiles, repoFullName, context.sha);
|
||||
|
||||
// Post or update the comment in the PR
|
||||
if (context.payload.pull_request) {
|
||||
const prNumber = context.payload.pull_request.number;
|
||||
await postOrUpdatePRComment(octokit, owner, repo, prNumber, commentBody);
|
||||
}
|
||||
|
||||
// Store the generated comment for the workflow
|
||||
core.setOutput("pr_comment", commentBody);
|
||||
core.setOutput("files", changedFiles.map(f => f.filename).join(","));
|
||||
core.setOutput("cardFiles", JSON.stringify(cardResults));
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
core.setFailed(error.message);
|
||||
} else {
|
||||
core.setFailed("An unknown error occurred");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
15
.github/scripts/package.json
vendored
Normal file
15
.github/scripts/package.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "scripts",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@types/bun": "latest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.11.1",
|
||||
"@actions/github": "^6.0.0",
|
||||
"@tcgdex/sdk": "^2.6.0"
|
||||
}
|
||||
}
|
28
.github/scripts/tsconfig.json
vendored
Normal file
28
.github/scripts/tsconfig.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
// Environment setup & latest features
|
||||
"lib": ["ESNext"],
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"moduleDetection": "force",
|
||||
"jsx": "react-jsx",
|
||||
"allowJs": true,
|
||||
|
||||
// Bundler mode
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"noEmit": true,
|
||||
|
||||
// Best practices
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedIndexedAccess": true,
|
||||
|
||||
// Some stricter flags (disabled by default)
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"noPropertyAccessFromIndexSignature": false
|
||||
}
|
||||
}
|
15
.github/sponsors/dzeio.svg
vendored
Normal file
15
.github/sponsors/dzeio.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 12 KiB |
120
.github/workflows/build.yml
vendored
120
.github/workflows/build.yml
vendored
@@ -1,59 +1,89 @@
|
||||
name: Build Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '*'
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
branches:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- "**"
|
||||
|
||||
env:
|
||||
REGISTRY_IMAGE: |
|
||||
ghcr.io/tcgdex/server
|
||||
tcgdex/server
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: Build TCGdex Server
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
ghcr.io/tcgdex/server
|
||||
tcgdex/server
|
||||
tags: |
|
||||
type=edge
|
||||
type=ref,event=pr
|
||||
type=ref,event=branch,prefix=branch-
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=semver,pattern=latest
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
# fetch full history for `updated` support
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USER }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY_IMAGE }}
|
||||
tags: |
|
||||
type=edge
|
||||
type=ref,event=pr
|
||||
type=ref,event=branch,prefix=branch-
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=semver,pattern=latest
|
||||
|
||||
- name: Login to Github Packages
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.DOCKER_TOKEN }}
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USER }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to Github Packages
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.DOCKER_TOKEN }}
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
file: ./Dockerfile
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Pre build server
|
||||
run: |
|
||||
bun install --frozen-lockfile
|
||||
cd server
|
||||
bun install --frozen-lockfile
|
||||
bun run compile
|
||||
rm -rf node_modules
|
||||
cd ..
|
||||
rm -rf node_modules
|
||||
|
||||
- name: Build and push
|
||||
id: build
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
file: ./Dockerfile.github-actions
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
push: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
|
||||
cache-to: type=gha,mode=max
|
||||
|
38
.github/workflows/comment-pr.yml
vendored
Normal file
38
.github/workflows/comment-pr.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
name: Card Info Comment
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize]
|
||||
paths:
|
||||
- '.github/workflows/comment-pr.yml'
|
||||
- '.github/scripts/*'
|
||||
- 'data/**/*.ts'
|
||||
- 'data-asia/**/*.ts'
|
||||
|
||||
jobs:
|
||||
card-info-comment:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
defaults:
|
||||
run:
|
||||
working-directory: .github/scripts
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun i --frozen-lockfile
|
||||
|
||||
- name: Run load-cards script
|
||||
id: load-cards
|
||||
run: bun load-cards.js
|
||||
env:
|
||||
INPUT_GITHUB-TOKEN: ${{ secrets.TCGDEX_BOT }}
|
14
.github/workflows/conventionnal-commit.yml
vendored
14
.github/workflows/conventionnal-commit.yml
vendored
@@ -1,14 +0,0 @@
|
||||
name: Conventionnal Commit
|
||||
on: pull_request
|
||||
jobs:
|
||||
conventional:
|
||||
name: Conventional PR
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: beemojs/conventional-pr-action@v2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
config-preset: angular
|
23
.github/workflows/test.yml
vendored
23
.github/workflows/test.yml
vendored
@@ -1,11 +1,12 @@
|
||||
name: Test the Data
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '*'
|
||||
pull_request:
|
||||
branches:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- "**"
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -17,16 +18,26 @@ jobs:
|
||||
|
||||
|
||||
- name: Setup BunJS
|
||||
uses: oven-sh/setup-bun@v1
|
||||
uses: oven-sh/setup-bun@v2
|
||||
|
||||
- name: Install deps
|
||||
run: |
|
||||
bun install -g @usebruno/cli
|
||||
bun install --frozen-lockfile
|
||||
cd server
|
||||
bun install --frozen-lockfile
|
||||
bun run compile
|
||||
|
||||
- name: Validate the data & the server
|
||||
run: |
|
||||
bun run validate
|
||||
cd server
|
||||
bun run validate
|
||||
bun run --bun validate
|
||||
|
||||
- name: Validate some requests
|
||||
run: |
|
||||
cd server
|
||||
bun run start &
|
||||
sleep 10
|
||||
cd ../.bruno
|
||||
bru run --env Developpement
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@
|
||||
|
||||
node_modules/
|
||||
dist/
|
||||
.idea
|
@@ -6,8 +6,8 @@ We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
@@ -22,17 +22,17 @@ community include:
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
@@ -52,15 +52,15 @@ decisions when appropriate.
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
Examples of representing our community include using an official email address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
the `contact@tcgdex.net` email or on Discord to `Avior#3872`.
|
||||
reported to the community leaders responsible for enforcement at contact@tcgdex.net or
|
||||
on Discord to Avior through the official server https://discord.gg/63mQvd3GVE.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
@@ -82,15 +82,15 @@ behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
@@ -106,23 +106,27 @@ Violating these terms may lead to a permanent ban.
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
@@ -1,5 +1,4 @@
|
||||
<!-- omit in toc -->
|
||||
|
||||
# Contributing to TCGdex
|
||||
|
||||
First off, thanks for taking the time to contribute! ❤️
|
||||
@@ -7,26 +6,23 @@ First off, thanks for taking the time to contribute! ❤️
|
||||
All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉
|
||||
|
||||
> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
|
||||
>
|
||||
> - Star the project
|
||||
> - Tweet about it
|
||||
> - Refer this project in your project's readme
|
||||
> - Mention the project at local meetups and tell your friends/colleagues
|
||||
|
||||
<!-- omit in toc -->
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [I Have a Question](#i-have-a-question)
|
||||
- [I Want To Contribute](#i-want-to-contribute)
|
||||
- [Reporting Issues](#reporting-issues)
|
||||
- [Suggesting Enhancements](#suggesting-enhancements)
|
||||
- [Your First Code Contribution](#your-first-code-contribution)
|
||||
- [Improving The Documentation](#improving-the-documentation)
|
||||
- [Reporting Bugs](#reporting-bugs)
|
||||
- [Suggesting Enhancements](#suggesting-enhancements)
|
||||
- [Your First Code Contribution](#your-first-code-contribution)
|
||||
- [Improving The Documentation](#improving-the-documentation)
|
||||
- [Styleguides](#styleguides)
|
||||
- [Coding Guidlines](#coding-guidelines)
|
||||
- [Commit Messages](#commit-messages)
|
||||
- [Commit Messages](#commit-messages)
|
||||
- [Join The Project Team](#join-the-project-team)
|
||||
|
||||
## Code of Conduct
|
||||
@@ -37,7 +33,7 @@ By participating, you are expected to uphold this code. Please report unacceptab
|
||||
|
||||
## I Have a Question
|
||||
|
||||
> If you want to ask a question, we assume that you have read the available Documentation at <https://www.tcgdex.dev>.
|
||||
> If you want to ask a question, we assume that you have read the available [Documentation](https://tcgdex.dev).
|
||||
|
||||
The best way to ask questions is to join our Discord server at <https://discord.gg/NehYTAhsZE>.
|
||||
|
||||
@@ -69,38 +65,36 @@ Depending on how large the project is, you may want to outsource the questioning
|
||||
## I Want To Contribute
|
||||
|
||||
> ### Legal Notice <!-- omit in toc -->
|
||||
>
|
||||
> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
|
||||
> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project licence.
|
||||
|
||||
### Reporting Issues
|
||||
### Reporting Bugs
|
||||
|
||||
<!-- omit in toc -->
|
||||
#### Before Submitting a Bug Report
|
||||
|
||||
#### Before Submitting an Issue Report
|
||||
A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.
|
||||
|
||||
A good issue report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.
|
||||
|
||||
- Determine if your issue is not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://www.tcgdex.dev). If you are looking for support, you might want to check [this section](#i-have-a-question)).
|
||||
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already an issue report existing for your bug or error in the [bug tracker](https://github.com/tcgdex/cards-database/issues).
|
||||
- Make sure that you are using the latest version.
|
||||
- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://tcgdex.dev). If you are looking for support, you might want to check [this section](#i-have-a-question)).
|
||||
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https:/github.com/tcgdex/cards-database/issues?q=label%3Abug).
|
||||
- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.
|
||||
- Collect information about the bug:
|
||||
- Stack trace (Traceback)
|
||||
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
|
||||
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.
|
||||
- Possibly your input and the output
|
||||
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
|
||||
- Stack trace (Traceback)
|
||||
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
|
||||
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.
|
||||
- Possibly your input and the output
|
||||
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
|
||||
|
||||
<!-- omit in toc -->
|
||||
|
||||
#### How Do I Submit a Good Bug Report?
|
||||
|
||||
> You must never report security related issues, vulnerabilities or bugs to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to <security@tcgdex.net>.
|
||||
> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to <security@tcgdex.net>.
|
||||
|
||||
<!-- You may add a PGP key to allow the messages to be sent encrypted as well. -->
|
||||
|
||||
We use GitHub issues to track bugs and errors. If you run into an issue with the project:
|
||||
|
||||
- Open an [Issue](https://github.com/tcgdex/cards-databaseissues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)
|
||||
- Open an [Issue](https://github.com/tcgdex/cards-database/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)
|
||||
- Explain the behavior you would expect and the actual behavior.
|
||||
- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.
|
||||
- Provide the information you collected in the previous section.
|
||||
@@ -122,20 +116,19 @@ This section guides you through submitting an enhancement suggestion for TCGdex,
|
||||
#### Before Submitting an Enhancement
|
||||
|
||||
- Make sure that you are using the latest version.
|
||||
- Read the [documentation](https://www.tcgdex.dev) carefully and find out if the functionality is already covered, maybe by an individual configuration.
|
||||
- Perform a [search](https://github.com/tcgdex/cards-databaseissues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
|
||||
- Read the [documentation](https://tcgdex.dev) carefully and find out if the functionality is already covered, maybe by an individual configuration.
|
||||
- Perform a [search](https://github.com/tcgdex/cards-database/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
|
||||
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.
|
||||
|
||||
<!-- omit in toc -->
|
||||
|
||||
#### How Do I Submit a Good Enhancement Suggestion?
|
||||
|
||||
Enhancement suggestions are tracked as [GitHub issues](https://github.com/tcgdex/cards-databaseissues).
|
||||
Enhancement suggestions are tracked as [GitHub issues](https:/github.com/tcgdex/cards-database/issues).
|
||||
|
||||
- Use a **clear and descriptive title** for the issue to identify the suggestion.
|
||||
- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.
|
||||
- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.
|
||||
- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->
|
||||
- You may want to **include screenshots or screen recordings** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [LICEcap](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and the built-in [screen recorder in GNOME](https://help.gnome.org/users/gnome-help/stable/screen-shot-record.html.en) or [SimpleScreenRecorder](https://github.com/MaartenBaert/ssr) on Linux. <!-- this should only be included if the project has a GUI -->
|
||||
- **Explain why this enhancement would be useful** to most TCGdex users. You may also want to point out the other projects that solved it better and which could serve as inspiration.
|
||||
|
||||
<!-- You might want to create an issue template for enhancement suggestions that can be used as a guide and that defines the structure of the information to be included. If you do so, reference it here in the description. -->
|
||||
@@ -150,6 +143,11 @@ _note: Follow the different styleguides listed below when contributing_
|
||||
- we don't like ❌, so if your pull request has its automated checks ending with the red cross, please double check your changes until it show the awesome 🟢, or ask for help !
|
||||
- If your pull request is ready for review remove WIP: put it s ready for review and we will handle the rest !
|
||||
|
||||
folders :
|
||||
- `data`: the database for the internationnal cards
|
||||
- `data-asia`: the database for the asian cards
|
||||
- `server`: The server behind the API
|
||||
|
||||
### Improving The Documentation
|
||||
|
||||
The documentation is updated in the Documentation repository at <https://github.com/tcgdex/documentation>
|
||||
@@ -160,8 +158,8 @@ The documentation is updated in the Documentation repository at <https://github.
|
||||
|
||||
Install the plugin `.editorconfig` in your dev environment if it's not already done and thats it !
|
||||
|
||||
for those who don't want to install it the basic are these:
|
||||
- Indent using the `tab` or `\t` character
|
||||
for those who don't want to install it, the basics are these:
|
||||
- Indent using the <xkb>tab</xkb> (`\t`) character
|
||||
- the line feed character is `\n`
|
||||
- only use `;` when necessary and at the start of the line
|
||||
- use double quotes `"` when editing files in the `data/` folder and single quote `'` in other files
|
||||
@@ -195,6 +193,6 @@ In short, please name your Pull Requests/Commits following this format
|
||||
- use the imperative, present tense: "Change" not "Changed" nor "Changes"
|
||||
- `<footer>` and `<body>` are both optional
|
||||
|
||||
<!-- omit in toc -->
|
||||
## Attribution
|
||||
|
||||
This guide is based on [Contribution Gen]((https://github.com/bttger/contributing-gen)) and was adapted by the TCGdex community !
|
||||
This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)!
|
||||
|
35
Dockerfile
35
Dockerfile
@@ -1,30 +1,37 @@
|
||||
FROM docker.io/oven/bun:1-alpine as BUILD_IMAGE
|
||||
FROM docker.io/oven/bun:1-alpine AS build
|
||||
|
||||
# go to work folder
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ADD --chown=bun:bun package.json bun.lockb ./
|
||||
ADD --chown=bun:bun server/package.json server/bun.lockb ./server/
|
||||
# Add git as it is used to fetch updated times
|
||||
RUN apk add git\
|
||||
&& git config --global safe.directory '*'\
|
||||
&& chown -R bun:bun .
|
||||
|
||||
USER bun
|
||||
|
||||
ADD --chown=bun:bun package.json bun.lock ./
|
||||
ADD --chown=bun:bun server/package.json server/bun.lock ./server/
|
||||
|
||||
# install dependencies
|
||||
RUN bun install --frozen-lockfile && \
|
||||
cd server && \
|
||||
bun install --frozen-lockfile
|
||||
cd server && \
|
||||
bun install --frozen-lockfile
|
||||
|
||||
# Add project files
|
||||
ADD --chown=bun:bun . .
|
||||
|
||||
# build
|
||||
RUN cd server && \
|
||||
bun run compile
|
||||
bun run compile
|
||||
|
||||
# remove dev dependencies (bun do not yet support "prune")
|
||||
RUN cd server && \
|
||||
rm -rf node_modules && \
|
||||
bun install --frozen-install --production
|
||||
rm -rf node_modules && \
|
||||
bun install --frozen-install --production
|
||||
|
||||
# go to another VM
|
||||
FROM docker.io/oven/bun:1-alpine as PROD_IMAGE
|
||||
FROM docker.io/oven/bun:1-alpine AS prod
|
||||
|
||||
# inform software to be in production
|
||||
ENV NODE_ENV=production
|
||||
@@ -36,11 +43,11 @@ USER bun
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# copy from build image
|
||||
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/generated ./generated
|
||||
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/node_modules ./node_modules
|
||||
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/src ./src
|
||||
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/public ./public
|
||||
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/package.json ./package.json
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/generated ./generated
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/node_modules ./node_modules
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/src ./src
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/public ./public
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/package.json ./package.json
|
||||
|
||||
# Expose port
|
||||
EXPOSE 3000
|
||||
|
40
Dockerfile.github-actions
Normal file
40
Dockerfile.github-actions
Normal file
@@ -0,0 +1,40 @@
|
||||
FROM docker.io/oven/bun:1-alpine AS build
|
||||
|
||||
# go to work folder
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# allow bun user to edit folder
|
||||
RUN chown -R bun:bun .
|
||||
|
||||
USER bun
|
||||
|
||||
ADD --chown=bun:bun server/package.json server/bun.lock ./server/
|
||||
|
||||
# install prod deps dependencies
|
||||
RUN cd server && \
|
||||
bun install --frozen-install --production
|
||||
|
||||
# go to another VM
|
||||
FROM docker.io/oven/bun:1-alpine AS prod
|
||||
|
||||
# inform software to be in production
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# run as non root user
|
||||
USER bun
|
||||
|
||||
# go to work folder
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# copy from build image
|
||||
COPY --chown=bun:bun ./server/public ./public
|
||||
COPY --chown=bun:bun ./server/package.json ./package.json
|
||||
COPY --chown=bun:bun --from=build /usr/src/app/server/node_modules ./node_modules
|
||||
COPY --chown=bun:bun ./server/src ./src
|
||||
COPY --chown=bun:bun ./server/generated ./generated
|
||||
|
||||
# Expose port
|
||||
EXPOSE 3000
|
||||
|
||||
# run it !
|
||||
CMD ["bun", "src/index.ts"]
|
47
README.md
47
README.md
@@ -13,11 +13,11 @@
|
||||
<a href="https://github.com/tcgdex/cards-database/stargazers">
|
||||
<img src="https://img.shields.io/github/stars/tcgdex/cards-database?style=flat-square" alt="Github stars">
|
||||
</a>
|
||||
<a href="https://github.com/tcgdex/compiler">
|
||||
<img src="https://img.shields.io/github/workflow/status/tcgdex/cards-database/Compile?style=flat-square" alt="Compiler build passing" />
|
||||
<a href="https://github.com/tcgdex/cards-database/actions">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/TCGdex/cards-database/build.yml?style=flat-square" alt="Compiler build passing" />
|
||||
</a>
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
<a href="#contributors-"><img src="https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square" alt="All Contributors Badge" /></a>
|
||||
<a href="#contributors-"><img src="https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square" alt="All Contributors Badge" /></a>
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
</p>
|
||||
|
||||
@@ -27,15 +27,11 @@ A Multilanguage Pokémon TCG Database with Cards Pictures and most of the inform
|
||||
|
||||
## Getting Started
|
||||
|
||||
_If you need help for using/editing the database, [join us on Discord](https://discord.gg/NehYTAhsZE)!_
|
||||
|
||||
### Using the Database
|
||||
|
||||
_The full documentation is available at <https://www.tcgdex.dev>_
|
||||
A full documentation of the API is available at <https://tcgdex.dev>
|
||||
|
||||
- The easiest way to interact with the database is by using one of our SDKs listed below.
|
||||
- You can also direcly use the endpoints at `api.tcgdex.net` (see the documentation).
|
||||
- You can build the API yourself by using our `Dockerfile` and using it on the port 3000
|
||||
- You can build the API yourself by using our `Dockerfile` and using it on the port 3000 (`docker-compose.yml` file included above)
|
||||
|
||||
#### SDKs / API Wrappers
|
||||
|
||||
@@ -45,14 +41,6 @@ We currently officially support theses SDKs
|
||||
- [PHP SDK](https://github.com/tcgdex/php-sdk)
|
||||
- [Java SDK](https://github.com/tcgdex/java-sdk)
|
||||
|
||||
### Editing the Database
|
||||
|
||||
There is three sub folders that will allow you to edit some faces of the database
|
||||
|
||||
- `/data`: Contains Cards Data architectured around `SerieName/SetName/CardLocalId` folders
|
||||
- `/meta`: Contains informations for the project (definitions files, Translations for some fields)
|
||||
- `/server`: The server that allow to communicate with the database
|
||||
|
||||
## Status
|
||||
|
||||
We are making sure to make every cards available for every languages they were available !
|
||||
@@ -62,18 +50,19 @@ We are making sure to make every cards available for every languages they were a
|
||||
_want to help translating? each object fields on cards that have at least en,fr,es,de,it or pt can have the others!,_
|
||||
_Also we have another translation files located at `meta/translations`_
|
||||
|
||||
## Contributing
|
||||
## Sponsors 💕
|
||||
|
||||
See [CONTRIBUTING.md](./CONTRIBUTING.md)
|
||||
_[Support us as a sponsor](https://github.com/sponsors/tcgdex) and have your logo featured on our GitHub README, complete with a link to your website._
|
||||
|
||||
TL::DR
|
||||
- Fork
|
||||
- make your changes
|
||||
- pull request
|
||||
<p align="center">
|
||||
<a href="https://dzeio.com" target="_blank" title="Dzeio">
|
||||
<img height="128" width="32%" src="./.github/sponsors/dzeio.svg" alt="TCGdex Sponsor Dzeio" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## Deprecation
|
||||
|
||||
As of February 2021, the v1 API is no longer supported.
|
||||
<p align="center">
|
||||
<!-- <a href="https://dzeio.com" target="_blank" title="Dzeio"><img height="80" width="19%" src="./.github/sponsors/dzeio.svg" alt="TCGdex Sponsor Dzeio" /></a> -->
|
||||
</p>
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
@@ -90,6 +79,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kevin-Adrea"><img src="https://avatars.githubusercontent.com/u/36231620?v=4?s=100" width="100px;" alt="Kevin-Adrea"/><br /><sub><b>Kevin-Adrea</b></sub></a><br /><a href="https://github.com/tcgdex/cards-database/issues?q=author%3AKevin-Adrea" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Maxopoly"><img src="https://avatars.githubusercontent.com/u/12138136?v=4?s=100" width="100px;" alt="Maxopoly"/><br /><sub><b>Maxopoly</b></sub></a><br /><a href="#data-Maxopoly" title="Data">🔣</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/calli23"><img src="https://avatars.githubusercontent.com/u/24553863?v=4?s=100" width="100px;" alt="calli23"/><br /><sub><b>calli23</b></sub></a><br /><a href="#data-calli23" title="Data">🔣</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://imclement.com"><img src="https://avatars.githubusercontent.com/u/1112701?v=4?s=100" width="100px;" alt="Clement Yuan"/><br /><sub><b>Clement Yuan</b></sub></a><br /><a href="#data-spyworldxp" title="Data">🔣</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Reloadaxe"><img src="https://avatars.githubusercontent.com/u/44167126?v=4?s=100" width="100px;" alt="Benjamin Rousseliere"/><br /><sub><b>Benjamin Rousseliere</b></sub></a><br /><a href="#data-Reloadaxe" title="Data">🔣</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -101,6 +92,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
||||
## Deprecation
|
||||
|
||||
As of February 2021, the v1 API is no longer supported.
|
||||
|
||||
## Licenses
|
||||
|
||||
This database is not produced, endorsed, supported or affiliated with Nintendo or The Pokémon Company
|
||||
|
13
bun.lock
Normal file
13
bun.lock
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"lockfileVersion": 1,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"typescript": "^5",
|
||||
},
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
|
||||
}
|
||||
}
|
10
data-asia/ADV.ts
Normal file
10
data-asia/ADV.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {
|
||||
ja: 'ADV'
|
||||
},
|
||||
id: 'ADV'
|
||||
}
|
||||
|
||||
export default serie
|
18
data-asia/ADV/ADV1.ts
Normal file
18
data-asia/ADV/ADV1.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../ADV'
|
||||
|
||||
const set: Set = {
|
||||
id: 'ADV1',
|
||||
name: {
|
||||
ja: '拡張パック'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 55
|
||||
},
|
||||
releaseDate: '2003-01-31'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/ADV/ADV2.ts
Normal file
18
data-asia/ADV/ADV2.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../ADV'
|
||||
|
||||
const set: Set = {
|
||||
id: 'ADV2',
|
||||
name: {
|
||||
ja: '砂漠のきせき'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 53
|
||||
},
|
||||
releaseDate: '2003-04-18'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/ADV/ADV3.ts
Normal file
18
data-asia/ADV/ADV3.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../ADV'
|
||||
|
||||
const set: Set = {
|
||||
id: 'ADV3',
|
||||
name: {
|
||||
ja: '天空の覇者'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 54
|
||||
},
|
||||
releaseDate: '2003-06-25'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/ADV/ADV4.ts
Normal file
18
data-asia/ADV/ADV4.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../ADV'
|
||||
|
||||
const set: Set = {
|
||||
id: 'ADV4',
|
||||
name: {
|
||||
ja: '強化拡張パックex1マグマVSアクア ふたつの野望'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 80
|
||||
},
|
||||
releaseDate: '2003-10-24'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/ADV/ADV5.ts
Normal file
18
data-asia/ADV/ADV5.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../ADV'
|
||||
|
||||
const set: Set = {
|
||||
id: 'ADV5',
|
||||
name: {
|
||||
ja: 'とかれた封印'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 83
|
||||
},
|
||||
releaseDate: '2004-01-16'
|
||||
}
|
||||
|
||||
export default set
|
8
data-asia/BW.ts
Normal file
8
data-asia/BW.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {},
|
||||
id: 'null'
|
||||
}
|
||||
|
||||
export default serie
|
19
data-asia/BW/BW1a.ts
Normal file
19
data-asia/BW/BW1a.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW1a',
|
||||
name: {
|
||||
ja: 'ブラックコレクション',
|
||||
ko: '블랙 컬렉션'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 53
|
||||
},
|
||||
releaseDate: '2010-12-17'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW1b.ts
Normal file
19
data-asia/BW/BW1b.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW1b',
|
||||
name: {
|
||||
ja: 'ホワイトコレクション',
|
||||
ko: '화이트 컬렉션'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 53
|
||||
},
|
||||
releaseDate: '2010-12-17'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW2.ts
Normal file
19
data-asia/BW/BW2.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW2',
|
||||
name: {
|
||||
ja: 'レッドコレクション',
|
||||
ko: '레드 컬렉션'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 66
|
||||
},
|
||||
releaseDate: '2011-07-15'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW3a.ts
Normal file
19
data-asia/BW/BW3a.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW3a',
|
||||
name: {
|
||||
ja: 'サイコドライブ',
|
||||
ko: '사이코 드라이브'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 52
|
||||
},
|
||||
releaseDate: '2011-09-16'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW3b.ts
Normal file
19
data-asia/BW/BW3b.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW3a',
|
||||
name: {
|
||||
ja: 'ヘイルブリザード',
|
||||
ko: '헤일 블리자드'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 52
|
||||
},
|
||||
releaseDate: '2011-09-16'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW4.ts
Normal file
19
data-asia/BW/BW4.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW4',
|
||||
name: {
|
||||
ja: 'ダークラッシュ',
|
||||
ko: '다크러시'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 69
|
||||
},
|
||||
releaseDate: '2011-12-16'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW5a.ts
Normal file
19
data-asia/BW/BW5a.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW5a',
|
||||
name: {
|
||||
ja: 'リューズブラスト',
|
||||
ko: '드래곤 블라스트'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 50
|
||||
},
|
||||
releaseDate: '2012-03-16'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW5b.ts
Normal file
19
data-asia/BW/BW5b.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW5b',
|
||||
name: {
|
||||
ja: 'リューノブレード',
|
||||
ko: '드래곤 블레이드'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 50
|
||||
},
|
||||
releaseDate: '2012-03-16'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW6a.ts
Normal file
19
data-asia/BW/BW6a.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW6a',
|
||||
name: {
|
||||
ja: 'フリーズボルト',
|
||||
ko: '프리즈볼트'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 59
|
||||
},
|
||||
releaseDate: '2012-07-13'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW6b.ts
Normal file
19
data-asia/BW/BW6b.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW6b',
|
||||
name: {
|
||||
ja: 'コールドフレア',
|
||||
ko: '콜드플레어'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 59
|
||||
},
|
||||
releaseDate: '2012-07-13'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW7.ts
Normal file
19
data-asia/BW/BW7.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW7',
|
||||
name: {
|
||||
ja: 'プラズマゲイル',
|
||||
ko: '플라스마게일'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2012-09-14'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW8a.ts
Normal file
19
data-asia/BW/BW8a.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW8a',
|
||||
name: {
|
||||
ja: 'ラセンフォース',
|
||||
ko: '스파이럴포스'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 51
|
||||
},
|
||||
releaseDate: '2012-12-14'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW8b.ts
Normal file
19
data-asia/BW/BW8b.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW8a',
|
||||
name: {
|
||||
ja: 'ライデンナックル',
|
||||
ko: '볼트너클'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 51
|
||||
},
|
||||
releaseDate: '2012-12-14'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/BW9.ts
Normal file
19
data-asia/BW/BW9.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'BW9',
|
||||
name: {
|
||||
ja: 'メガロキャノン',
|
||||
ko: '메갈로캐논'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 76
|
||||
},
|
||||
releaseDate: '2013-03-15'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/DS.ts
Normal file
19
data-asia/BW/DS.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DS',
|
||||
name: {
|
||||
ja: 'ドラゴンセレクション',
|
||||
ko: '드래곤 컬렉션'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 20
|
||||
},
|
||||
releaseDate: '2012-01-27'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/EBB.ts
Normal file
19
data-asia/BW/EBB.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'EBB',
|
||||
name: {
|
||||
ja: 'EXバトルブースト',
|
||||
ko: 'EX 배틀 부스트'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 96
|
||||
},
|
||||
releaseDate: '2013-07-13'
|
||||
}
|
||||
|
||||
export default set
|
19
data-asia/BW/SC.ts
Normal file
19
data-asia/BW/SC.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../BW'
|
||||
|
||||
const set: Set = {
|
||||
id: 'SC',
|
||||
name: {
|
||||
ja: 'シャイニーコレクション',
|
||||
ko: '샤이니 컬렉션'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 20
|
||||
},
|
||||
releaseDate: '2013-02-01'
|
||||
}
|
||||
|
||||
export default set
|
8
data-asia/DP.ts
Normal file
8
data-asia/DP.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {},
|
||||
id: 'null'
|
||||
}
|
||||
|
||||
export default serie
|
18
data-asia/DP/DP1a.ts
Normal file
18
data-asia/DP/DP1a.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP1a',
|
||||
name: {
|
||||
ja: '時空の創造: ダイヤモンドコレクション'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 117
|
||||
},
|
||||
releaseDate: '2006-11-30'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP1b.ts
Normal file
18
data-asia/DP/DP1b.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP1b',
|
||||
name: {
|
||||
ja: '時空の創造: パールコレクション'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 119
|
||||
},
|
||||
releaseDate: '2006-11-30'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP2.ts
Normal file
18
data-asia/DP/DP2.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP2',
|
||||
name: {
|
||||
ja: '湖の秘密'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 123
|
||||
},
|
||||
releaseDate: '2007-03-02'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP3.ts
Normal file
18
data-asia/DP/DP3.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP3',
|
||||
name: {
|
||||
ja: 'ひかる闇'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 119
|
||||
},
|
||||
releaseDate: '2007-07-05'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP4a.ts
Normal file
18
data-asia/DP/DP4a.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP4a',
|
||||
name: {
|
||||
ja: '月光の追跡'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2007-10-26'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP4b.ts
Normal file
18
data-asia/DP/DP4b.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP4b',
|
||||
name: {
|
||||
ja: '夜明けの疾走'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2007-10-26'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP5a.ts
Normal file
18
data-asia/DP/DP5a.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP5a',
|
||||
name: {
|
||||
ja: '秘境の叫び'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 65
|
||||
},
|
||||
releaseDate: '2008-03-14'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP5b.ts
Normal file
18
data-asia/DP/DP5b.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP5b',
|
||||
name: {
|
||||
ja: '怒りの神殿'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 65
|
||||
},
|
||||
releaseDate: '2008-03-14'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DP/DP6.ts
Normal file
18
data-asia/DP/DP6.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'DP6',
|
||||
name: {
|
||||
ja: '破空の激闘'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 92
|
||||
},
|
||||
releaseDate: '2008-07-10'
|
||||
}
|
||||
|
||||
export default set
|
8
data-asia/DPt.ts
Normal file
8
data-asia/DPt.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {},
|
||||
id: 'null'
|
||||
}
|
||||
|
||||
export default serie
|
18
data-asia/DPt/Pt1.ts
Normal file
18
data-asia/DPt/Pt1.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'Pt1',
|
||||
name: {
|
||||
ja: 'ギンガの覇道'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 96
|
||||
},
|
||||
releaseDate: '2008-10-10'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DPt/Pt2.ts
Normal file
18
data-asia/DPt/Pt2.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'Pt2',
|
||||
name: {
|
||||
ja: '時の果ての絆'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 90
|
||||
},
|
||||
releaseDate: '2008-12-26'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DPt/Pt3.ts
Normal file
18
data-asia/DPt/Pt3.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'Pt3',
|
||||
name: {
|
||||
ja: 'フロンティアの鼓動'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 100
|
||||
},
|
||||
releaseDate: '2009-03-06'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/DPt/Pt4.ts
Normal file
18
data-asia/DPt/Pt4.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../DPt'
|
||||
|
||||
const set: Set = {
|
||||
id: 'Pt4',
|
||||
name: {
|
||||
ja: 'アルセウス光臨'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 90
|
||||
},
|
||||
releaseDate: '2009-07-08'
|
||||
}
|
||||
|
||||
export default set
|
10
data-asia/L.ts
Normal file
10
data-asia/L.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {
|
||||
ja: 'LEGEND'
|
||||
},
|
||||
id: 'L'
|
||||
}
|
||||
|
||||
export default serie
|
18
data-asia/L/L1a.ts
Normal file
18
data-asia/L/L1a.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../L'
|
||||
|
||||
const set: Set = {
|
||||
id: 'L1a',
|
||||
name: {
|
||||
ja: 'ハートゴールドコレクション'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2009-10-09'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/L/L1b.ts
Normal file
18
data-asia/L/L1b.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../L'
|
||||
|
||||
const set: Set = {
|
||||
id: 'L1b',
|
||||
name: {
|
||||
ja: 'ソウルシルバーコレクション'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2009-10-09'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/L/L2.ts
Normal file
18
data-asia/L/L2.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../L'
|
||||
|
||||
const set: Set = {
|
||||
id: 'L2',
|
||||
name: {
|
||||
ja: 'よみがえる伝説'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2010-02-11'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/L/L3.ts
Normal file
18
data-asia/L/L3.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../L'
|
||||
|
||||
const set: Set = {
|
||||
id: 'L3',
|
||||
name: {
|
||||
ja: '頂上大激突'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 70
|
||||
},
|
||||
releaseDate: '2010-07-08'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/L/LL.ts
Normal file
18
data-asia/L/LL.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../L'
|
||||
|
||||
const set: Set = {
|
||||
id: 'LL',
|
||||
name: {
|
||||
ja: '強化パック ロストリンク'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 40
|
||||
},
|
||||
releaseDate: '2010-04-16'
|
||||
}
|
||||
|
||||
export default set
|
10
data-asia/PCG.ts
Normal file
10
data-asia/PCG.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Serie } from '../interfaces'
|
||||
|
||||
const serie: Serie = {
|
||||
name: {
|
||||
ja: 'PCG'
|
||||
},
|
||||
id: 'PCG'
|
||||
}
|
||||
|
||||
export default serie
|
18
data-asia/PCG/PCG1.ts
Normal file
18
data-asia/PCG/PCG1.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG1',
|
||||
name: {
|
||||
ja: '伝説の飛翔'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 82
|
||||
},
|
||||
releaseDate: '2004-04-09'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG10.ts
Normal file
18
data-asia/PCG/PCG10.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG10',
|
||||
name: {
|
||||
ja: 'ワールドチャンピオンズパック'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 108
|
||||
},
|
||||
releaseDate: '2007-07-05'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG2.ts
Normal file
18
data-asia/PCG/PCG2.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG2',
|
||||
name: {
|
||||
ja: '蒼空の激突'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 82
|
||||
},
|
||||
releaseDate: '2004-07-01'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG3.ts
Normal file
18
data-asia/PCG/PCG3.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG3',
|
||||
name: {
|
||||
ja: 'ロケット団の逆襲'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 84
|
||||
},
|
||||
releaseDate: '2004-10-15'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG4.ts
Normal file
18
data-asia/PCG/PCG4.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG4',
|
||||
name: {
|
||||
ja: '金の空、銀の海'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 106
|
||||
},
|
||||
releaseDate: '2005-04-08'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG5.ts
Normal file
18
data-asia/PCG/PCG5.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG5',
|
||||
name: {
|
||||
ja: 'まぼろしの森'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 86
|
||||
},
|
||||
releaseDate: '2005-06-30'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG6.ts
Normal file
18
data-asia/PCG/PCG6.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG6',
|
||||
name: {
|
||||
ja: 'ホロンの研究塔'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 86
|
||||
},
|
||||
releaseDate: '2005-10-28'
|
||||
}
|
||||
|
||||
export default set
|
18
data-asia/PCG/PCG7.ts
Normal file
18
data-asia/PCG/PCG7.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Set } from '../../interfaces'
|
||||
import serie from '../PCG'
|
||||
|
||||
const set: Set = {
|
||||
id: 'PCG7',
|
||||
name: {
|
||||
ja: 'ホロンの幻影'
|
||||
},
|
||||
|
||||
serie: serie,
|
||||
|
||||
cardCount: {
|
||||
official: 52
|
||||
},
|
||||
releaseDate: '2006-01-27'
|
||||
}
|
||||
|
||||
export default set
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user