@zivue/zuuid 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -1
- package/README.md +210 -227
- package/dist/client.d.ts +16 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +22 -0
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +9 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/providers/comicvine/character.d.ts +2 -0
- package/dist/providers/comicvine/character.d.ts.map +1 -0
- package/dist/providers/comicvine/character.js +1 -0
- package/dist/providers/comicvine/constants.d.ts +8 -0
- package/dist/providers/comicvine/constants.d.ts.map +1 -0
- package/dist/providers/comicvine/constants.js +7 -0
- package/dist/providers/comicvine/index.d.ts +9 -0
- package/dist/providers/comicvine/index.d.ts.map +1 -0
- package/dist/providers/comicvine/index.js +8 -0
- package/dist/providers/comicvine/issue.d.ts +2 -0
- package/dist/providers/comicvine/issue.d.ts.map +1 -0
- package/dist/providers/comicvine/issue.js +1 -0
- package/dist/providers/comicvine/person.d.ts +2 -0
- package/dist/providers/comicvine/person.d.ts.map +1 -0
- package/dist/providers/comicvine/person.js +1 -0
- package/dist/providers/comicvine/publisher.d.ts +2 -0
- package/dist/providers/comicvine/publisher.d.ts.map +1 -0
- package/dist/providers/comicvine/publisher.js +1 -0
- package/dist/providers/comicvine/story-arc.d.ts +2 -0
- package/dist/providers/comicvine/story-arc.d.ts.map +1 -0
- package/dist/providers/comicvine/story-arc.js +1 -0
- package/dist/providers/comicvine/transform.d.ts +4 -0
- package/dist/providers/comicvine/transform.d.ts.map +1 -0
- package/dist/providers/comicvine/transform.js +63 -0
- package/dist/providers/comicvine/volume.d.ts +2 -0
- package/dist/providers/comicvine/volume.d.ts.map +1 -0
- package/dist/providers/comicvine/volume.js +1 -0
- package/dist/providers/common.d.ts +23 -0
- package/dist/providers/common.d.ts.map +1 -0
- package/dist/providers/common.js +132 -0
- package/dist/providers/gamesdb/constants.d.ts +4 -0
- package/dist/providers/gamesdb/constants.d.ts.map +1 -0
- package/dist/providers/gamesdb/constants.js +3 -0
- package/dist/providers/gamesdb/game.d.ts +7 -0
- package/dist/providers/gamesdb/game.d.ts.map +1 -0
- package/dist/providers/gamesdb/game.js +59 -0
- package/dist/providers/gamesdb/index.d.ts +4 -0
- package/dist/providers/gamesdb/index.d.ts.map +1 -0
- package/dist/providers/gamesdb/index.js +3 -0
- package/dist/providers/gamesdb/platform.d.ts +4 -0
- package/dist/providers/gamesdb/platform.d.ts.map +1 -0
- package/dist/providers/gamesdb/platform.js +23 -0
- package/dist/providers/jikan/anime.d.ts +2 -0
- package/dist/providers/jikan/anime.d.ts.map +1 -0
- package/dist/providers/jikan/anime.js +1 -0
- package/dist/providers/jikan/character.d.ts +2 -0
- package/dist/providers/jikan/character.d.ts.map +1 -0
- package/dist/providers/jikan/character.js +1 -0
- package/dist/providers/jikan/constants.d.ts +8 -0
- package/dist/providers/jikan/constants.d.ts.map +1 -0
- package/dist/providers/jikan/constants.js +7 -0
- package/dist/providers/jikan/index.d.ts +9 -0
- package/dist/providers/jikan/index.d.ts.map +1 -0
- package/dist/providers/jikan/index.js +8 -0
- package/dist/providers/jikan/magazine.d.ts +2 -0
- package/dist/providers/jikan/magazine.d.ts.map +1 -0
- package/dist/providers/jikan/magazine.js +1 -0
- package/dist/providers/jikan/manga.d.ts +2 -0
- package/dist/providers/jikan/manga.d.ts.map +1 -0
- package/dist/providers/jikan/manga.js +1 -0
- package/dist/providers/jikan/person.d.ts +2 -0
- package/dist/providers/jikan/person.d.ts.map +1 -0
- package/dist/providers/jikan/person.js +1 -0
- package/dist/providers/jikan/producer.d.ts +2 -0
- package/dist/providers/jikan/producer.d.ts.map +1 -0
- package/dist/providers/jikan/producer.js +1 -0
- package/dist/providers/jikan/transform.d.ts +8 -0
- package/dist/providers/jikan/transform.d.ts.map +1 -0
- package/dist/providers/jikan/transform.js +125 -0
- package/dist/providers/musicbrainz/artist.d.ts +4 -0
- package/dist/providers/musicbrainz/artist.d.ts.map +1 -0
- package/dist/providers/musicbrainz/artist.js +28 -0
- package/dist/providers/musicbrainz/constants.d.ts +10 -0
- package/dist/providers/musicbrainz/constants.d.ts.map +1 -0
- package/dist/providers/musicbrainz/constants.js +9 -0
- package/dist/providers/musicbrainz/helpers.d.ts +15 -0
- package/dist/providers/musicbrainz/helpers.d.ts.map +1 -0
- package/dist/providers/musicbrainz/helpers.js +71 -0
- package/dist/providers/musicbrainz/index.d.ts +8 -0
- package/dist/providers/musicbrainz/index.d.ts.map +1 -0
- package/dist/providers/musicbrainz/index.js +7 -0
- package/dist/providers/musicbrainz/label.d.ts +4 -0
- package/dist/providers/musicbrainz/label.d.ts.map +1 -0
- package/dist/providers/musicbrainz/label.js +28 -0
- package/dist/providers/musicbrainz/recording.d.ts +4 -0
- package/dist/providers/musicbrainz/recording.d.ts.map +1 -0
- package/dist/providers/musicbrainz/recording.js +41 -0
- package/dist/providers/musicbrainz/release-group.d.ts +7 -0
- package/dist/providers/musicbrainz/release-group.d.ts.map +1 -0
- package/dist/providers/musicbrainz/release-group.js +28 -0
- package/dist/providers/musicbrainz/release.d.ts +7 -0
- package/dist/providers/musicbrainz/release.d.ts.map +1 -0
- package/dist/providers/musicbrainz/release.js +50 -0
- package/dist/providers/musicbrainz/work.d.ts +4 -0
- package/dist/providers/musicbrainz/work.d.ts.map +1 -0
- package/dist/providers/musicbrainz/work.js +40 -0
- package/dist/providers/openfoodfacts/constants.d.ts +3 -0
- package/dist/providers/openfoodfacts/constants.d.ts.map +1 -0
- package/dist/providers/openfoodfacts/constants.js +2 -0
- package/dist/providers/openfoodfacts/index.d.ts +3 -0
- package/dist/providers/openfoodfacts/index.d.ts.map +1 -0
- package/dist/providers/openfoodfacts/index.js +2 -0
- package/dist/providers/openfoodfacts/product.d.ts +4 -0
- package/dist/providers/openfoodfacts/product.d.ts.map +1 -0
- package/dist/providers/openfoodfacts/product.js +29 -0
- package/dist/providers/openlibrary/author.d.ts +65 -0
- package/dist/providers/openlibrary/author.d.ts.map +1 -0
- package/dist/providers/openlibrary/author.js +228 -0
- package/dist/providers/openlibrary/book.d.ts +138 -0
- package/dist/providers/openlibrary/book.d.ts.map +1 -0
- package/dist/providers/openlibrary/book.js +535 -0
- package/dist/providers/openlibrary/client.d.ts +22 -0
- package/dist/providers/openlibrary/client.d.ts.map +1 -0
- package/dist/providers/openlibrary/client.js +61 -0
- package/dist/providers/openlibrary/constants.d.ts +4 -0
- package/dist/providers/openlibrary/constants.d.ts.map +1 -0
- package/dist/providers/openlibrary/constants.js +3 -0
- package/dist/providers/openlibrary/index.d.ts +6 -0
- package/dist/providers/openlibrary/index.d.ts.map +1 -0
- package/dist/providers/openlibrary/index.js +5 -0
- package/dist/providers/openlibrary/types.d.ts +23 -0
- package/dist/providers/openlibrary/types.d.ts.map +1 -0
- package/dist/providers/openlibrary/types.js +1 -0
- package/dist/providers/openstreetmap/constants.d.ts +6 -0
- package/dist/providers/openstreetmap/constants.d.ts.map +1 -0
- package/dist/providers/openstreetmap/constants.js +5 -0
- package/dist/providers/openstreetmap/index.d.ts +4 -0
- package/dist/providers/openstreetmap/index.d.ts.map +1 -0
- package/dist/providers/openstreetmap/index.js +3 -0
- package/dist/providers/openstreetmap/place.d.ts +4 -0
- package/dist/providers/openstreetmap/place.d.ts.map +1 -0
- package/dist/providers/openstreetmap/place.js +65 -0
- package/dist/providers/openstreetmap/venue.d.ts +2 -0
- package/dist/providers/openstreetmap/venue.d.ts.map +1 -0
- package/dist/providers/openstreetmap/venue.js +1 -0
- package/dist/providers/podcast/constants.d.ts +3 -0
- package/dist/providers/podcast/constants.d.ts.map +1 -0
- package/dist/providers/podcast/constants.js +2 -0
- package/dist/providers/podcast/index.d.ts +3 -0
- package/dist/providers/podcast/index.d.ts.map +1 -0
- package/dist/providers/podcast/index.js +2 -0
- package/dist/providers/podcast/podcast.d.ts +4 -0
- package/dist/providers/podcast/podcast.d.ts.map +1 -0
- package/dist/providers/podcast/podcast.js +30 -0
- package/dist/providers/setlistfm/artist.d.ts +2 -0
- package/dist/providers/setlistfm/artist.d.ts.map +1 -0
- package/dist/providers/setlistfm/artist.js +1 -0
- package/dist/providers/setlistfm/constants.d.ts +5 -0
- package/dist/providers/setlistfm/constants.d.ts.map +1 -0
- package/dist/providers/setlistfm/constants.js +4 -0
- package/dist/providers/setlistfm/index.d.ts +6 -0
- package/dist/providers/setlistfm/index.d.ts.map +1 -0
- package/dist/providers/setlistfm/index.js +5 -0
- package/dist/providers/setlistfm/setlist.d.ts +2 -0
- package/dist/providers/setlistfm/setlist.d.ts.map +1 -0
- package/dist/providers/setlistfm/setlist.js +1 -0
- package/dist/providers/setlistfm/transform.d.ts +7 -0
- package/dist/providers/setlistfm/transform.d.ts.map +1 -0
- package/dist/providers/setlistfm/transform.js +122 -0
- package/dist/providers/setlistfm/venue.d.ts +2 -0
- package/dist/providers/setlistfm/venue.d.ts.map +1 -0
- package/dist/providers/setlistfm/venue.js +1 -0
- package/dist/providers/ticketmaster/attraction.d.ts +2 -0
- package/dist/providers/ticketmaster/attraction.d.ts.map +1 -0
- package/dist/providers/ticketmaster/attraction.js +1 -0
- package/dist/providers/ticketmaster/constants.d.ts +5 -0
- package/dist/providers/ticketmaster/constants.d.ts.map +1 -0
- package/dist/providers/ticketmaster/constants.js +4 -0
- package/dist/providers/ticketmaster/event.d.ts +2 -0
- package/dist/providers/ticketmaster/event.d.ts.map +1 -0
- package/dist/providers/ticketmaster/event.js +1 -0
- package/dist/providers/ticketmaster/index.d.ts +6 -0
- package/dist/providers/ticketmaster/index.d.ts.map +1 -0
- package/dist/providers/ticketmaster/index.js +5 -0
- package/dist/providers/ticketmaster/transform.d.ts +7 -0
- package/dist/providers/ticketmaster/transform.d.ts.map +1 -0
- package/dist/providers/ticketmaster/transform.js +89 -0
- package/dist/providers/ticketmaster/venue.d.ts +2 -0
- package/dist/providers/ticketmaster/venue.d.ts.map +1 -0
- package/dist/providers/ticketmaster/venue.js +1 -0
- package/dist/providers/wger/constants.d.ts +4 -0
- package/dist/providers/wger/constants.d.ts.map +1 -0
- package/dist/providers/wger/constants.js +3 -0
- package/dist/providers/wger/equipment.d.ts +4 -0
- package/dist/providers/wger/equipment.d.ts.map +1 -0
- package/dist/providers/wger/equipment.js +22 -0
- package/dist/providers/wger/exercise.d.ts +4 -0
- package/dist/providers/wger/exercise.d.ts.map +1 -0
- package/dist/providers/wger/exercise.js +42 -0
- package/dist/providers/wger/index.d.ts +4 -0
- package/dist/providers/wger/index.d.ts.map +1 -0
- package/dist/providers/wger/index.js +3 -0
- package/package.json +201 -5
package/dist/client.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { OpenLibraryProvider, transformOpenLibraryAuthor, transformOpenLibraryBook } from "./providers/openlibrary/index.js";
|
|
1
2
|
import { TmdbProvider, transformTmdbMovie, transformTmdbPerson, transformTmdbTv } from "./providers/tmdb/index.js";
|
|
2
3
|
export function createZuuidClient(config = {}) {
|
|
4
|
+
const openlibrary = config.providers?.openlibrary ? new OpenLibraryProvider(config.providers.openlibrary) : undefined;
|
|
3
5
|
const tmdb = config.providers?.tmdb ? new TmdbProvider(config.providers.tmdb) : undefined;
|
|
4
6
|
return Object.freeze({
|
|
5
7
|
movie: Object.freeze({
|
|
@@ -33,6 +35,26 @@ export function createZuuidClient(config = {}) {
|
|
|
33
35
|
searchSourceRecords: (input) => tmdb.searchPersonSourceRecords(input),
|
|
34
36
|
transform: (source) => transformTmdbPerson(source, tmdb.transformOptions())
|
|
35
37
|
})
|
|
38
|
+
: undefined,
|
|
39
|
+
openlibrary: openlibrary
|
|
40
|
+
? Object.freeze({
|
|
41
|
+
fetch: (input) => openlibrary.fetchAuthor(input),
|
|
42
|
+
fetchSourceRecord: (input) => openlibrary.fetchAuthorSourceRecord(input),
|
|
43
|
+
search: (input) => openlibrary.searchAuthors(input),
|
|
44
|
+
searchSourceRecords: (input) => openlibrary.searchAuthorSourceRecords(input),
|
|
45
|
+
transform: (source) => transformOpenLibraryAuthor(source, openlibrary.transformOptions())
|
|
46
|
+
})
|
|
47
|
+
: undefined
|
|
48
|
+
}),
|
|
49
|
+
read: Object.freeze({
|
|
50
|
+
openlibrary: openlibrary
|
|
51
|
+
? Object.freeze({
|
|
52
|
+
fetch: (input) => openlibrary.fetchBook(input),
|
|
53
|
+
fetchSourceRecord: (input) => openlibrary.fetchBookSourceRecord(input),
|
|
54
|
+
search: (input) => openlibrary.searchBooks(input),
|
|
55
|
+
searchSourceRecords: (input) => openlibrary.searchBookSourceRecords(input),
|
|
56
|
+
transform: (source) => transformOpenLibraryBook(source, openlibrary.transformOptions())
|
|
57
|
+
})
|
|
36
58
|
: undefined
|
|
37
59
|
})
|
|
38
60
|
});
|
package/dist/entity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
|
package/dist/entity.js
CHANGED
|
@@ -46,9 +46,12 @@ export function kindForCategory(category) {
|
|
|
46
46
|
case "music":
|
|
47
47
|
case "musicalbum":
|
|
48
48
|
case "release":
|
|
49
|
+
case "release-group":
|
|
50
|
+
case "release_group":
|
|
49
51
|
case "master":
|
|
50
52
|
case "track":
|
|
51
53
|
case "recording":
|
|
54
|
+
case "musical_work":
|
|
52
55
|
case "podcast":
|
|
53
56
|
case "podcast_episode":
|
|
54
57
|
case "audiobook":
|
|
@@ -58,7 +61,10 @@ export function kindForCategory(category) {
|
|
|
58
61
|
case "article":
|
|
59
62
|
case "web_page":
|
|
60
63
|
case "comic":
|
|
64
|
+
case "issue":
|
|
65
|
+
case "story_arc":
|
|
61
66
|
case "manga":
|
|
67
|
+
case "magazine":
|
|
62
68
|
case "paper":
|
|
63
69
|
case "blog_post":
|
|
64
70
|
return "read";
|
|
@@ -66,10 +72,12 @@ export function kindForCategory(category) {
|
|
|
66
72
|
case "videogame":
|
|
67
73
|
case "boardgame":
|
|
68
74
|
case "platform":
|
|
75
|
+
case "equipment":
|
|
69
76
|
return "play";
|
|
70
77
|
case "place":
|
|
71
78
|
case "location":
|
|
72
79
|
case "venue":
|
|
80
|
+
case "place":
|
|
73
81
|
case "restaurant":
|
|
74
82
|
case "route":
|
|
75
83
|
case "city":
|
|
@@ -85,6 +93,7 @@ export function kindForCategory(category) {
|
|
|
85
93
|
case "person":
|
|
86
94
|
case "people":
|
|
87
95
|
case "artist":
|
|
96
|
+
case "label":
|
|
88
97
|
case "author":
|
|
89
98
|
case "actor":
|
|
90
99
|
case "creator":
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,18 @@ export * from "./client.js";
|
|
|
2
2
|
export * from "./hash.js";
|
|
3
3
|
export * from "./entity.js";
|
|
4
4
|
export * from "./identity.js";
|
|
5
|
+
export * from "./providers/comicvine/index.js";
|
|
6
|
+
export * from "./providers/gamesdb/index.js";
|
|
7
|
+
export * from "./providers/jikan/index.js";
|
|
8
|
+
export * from "./providers/musicbrainz/index.js";
|
|
9
|
+
export * from "./providers/openlibrary/index.js";
|
|
10
|
+
export * from "./providers/openfoodfacts/index.js";
|
|
11
|
+
export * from "./providers/openstreetmap/index.js";
|
|
12
|
+
export * from "./providers/podcast/index.js";
|
|
13
|
+
export * from "./providers/setlistfm/index.js";
|
|
14
|
+
export * from "./providers/ticketmaster/index.js";
|
|
5
15
|
export * from "./providers/tmdb/index.js";
|
|
16
|
+
export * from "./providers/wger/index.js";
|
|
6
17
|
export * from "./source.js";
|
|
7
18
|
export * from "./types.js";
|
|
8
19
|
export * from "./uuid.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,18 @@ export * from "./client.js";
|
|
|
2
2
|
export * from "./hash.js";
|
|
3
3
|
export * from "./entity.js";
|
|
4
4
|
export * from "./identity.js";
|
|
5
|
+
export * from "./providers/comicvine/index.js";
|
|
6
|
+
export * from "./providers/gamesdb/index.js";
|
|
7
|
+
export * from "./providers/jikan/index.js";
|
|
8
|
+
export * from "./providers/musicbrainz/index.js";
|
|
9
|
+
export * from "./providers/openlibrary/index.js";
|
|
10
|
+
export * from "./providers/openfoodfacts/index.js";
|
|
11
|
+
export * from "./providers/openstreetmap/index.js";
|
|
12
|
+
export * from "./providers/podcast/index.js";
|
|
13
|
+
export * from "./providers/setlistfm/index.js";
|
|
14
|
+
export * from "./providers/ticketmaster/index.js";
|
|
5
15
|
export * from "./providers/tmdb/index.js";
|
|
16
|
+
export * from "./providers/wger/index.js";
|
|
6
17
|
export * from "./source.js";
|
|
7
18
|
export * from "./types.js";
|
|
8
19
|
export * from "./uuid.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/character.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVineCharacter } from "./transform.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const COMICVINE_PROVIDER = "comicvine";
|
|
2
|
+
export declare const COMICVINE_VOLUME_CATEGORY = "volume";
|
|
3
|
+
export declare const COMICVINE_ISSUE_CATEGORY = "issue";
|
|
4
|
+
export declare const COMICVINE_STORY_ARC_CATEGORY = "story_arc";
|
|
5
|
+
export declare const COMICVINE_CHARACTER_CATEGORY = "character";
|
|
6
|
+
export declare const COMICVINE_PERSON_CATEGORY = "person";
|
|
7
|
+
export declare const COMICVINE_PUBLISHER_CATEGORY = "publisher";
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAChD,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,4BAA4B,cAAc,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const COMICVINE_PROVIDER = "comicvine";
|
|
2
|
+
export const COMICVINE_VOLUME_CATEGORY = "volume";
|
|
3
|
+
export const COMICVINE_ISSUE_CATEGORY = "issue";
|
|
4
|
+
export const COMICVINE_STORY_ARC_CATEGORY = "story_arc";
|
|
5
|
+
export const COMICVINE_CHARACTER_CATEGORY = "character";
|
|
6
|
+
export const COMICVINE_PERSON_CATEGORY = "person";
|
|
7
|
+
export const COMICVINE_PUBLISHER_CATEGORY = "publisher";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./character.js";
|
|
2
|
+
export * from "./constants.js";
|
|
3
|
+
export * from "./issue.js";
|
|
4
|
+
export * from "./person.js";
|
|
5
|
+
export * from "./publisher.js";
|
|
6
|
+
export * from "./story-arc.js";
|
|
7
|
+
export * from "./transform.js";
|
|
8
|
+
export * from "./volume.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVineIssue } from "./transform.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVinePerson } from "./transform.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVinePublisher } from "./transform.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-arc.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/story-arc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVineStoryArc } from "./transform.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAmCjF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { addAlias, addDescription, addDetail, addMedia, addRelation, addTag, arrayField, baseDataFromSource, finalizeData, nestedString, objectPayload, stringField, stripHtml, valueAsString } from "../common.js";
|
|
2
|
+
import { COMICVINE_CHARACTER_CATEGORY, COMICVINE_ISSUE_CATEGORY, COMICVINE_PERSON_CATEGORY, COMICVINE_PROVIDER, COMICVINE_PUBLISHER_CATEGORY, COMICVINE_STORY_ARC_CATEGORY, COMICVINE_VOLUME_CATEGORY } from "./constants.js";
|
|
3
|
+
export async function transformComicVine(source) {
|
|
4
|
+
if (source.source.provider !== COMICVINE_PROVIDER)
|
|
5
|
+
throw new Error(`unsupported ComicVine source: ${source.source.provider}:${source.source.category}`);
|
|
6
|
+
const publicCategory = source.source.category === COMICVINE_VOLUME_CATEGORY || source.source.category === COMICVINE_ISSUE_CATEGORY || source.source.category === COMICVINE_STORY_ARC_CATEGORY
|
|
7
|
+
? "comic"
|
|
8
|
+
: source.source.category === COMICVINE_PUBLISHER_CATEGORY
|
|
9
|
+
? "organization"
|
|
10
|
+
: source.source.category === COMICVINE_CHARACTER_CATEGORY || source.source.category === COMICVINE_PERSON_CATEGORY
|
|
11
|
+
? "person"
|
|
12
|
+
: undefined;
|
|
13
|
+
if (!publicCategory)
|
|
14
|
+
throw new Error(`unsupported ComicVine source: ${source.source.provider}:${source.source.category}`);
|
|
15
|
+
const payload = objectPayload(source.payload);
|
|
16
|
+
const id = source.source.externalId.trim() || valueAsString(payload.id);
|
|
17
|
+
const title = stringField(payload, "name") ?? stringField(payload, "title");
|
|
18
|
+
if (!id)
|
|
19
|
+
throw new Error("missing required ComicVine field: id");
|
|
20
|
+
if (!title)
|
|
21
|
+
throw new Error("missing required ComicVine field: name");
|
|
22
|
+
const data = await baseDataFromSource(source, COMICVINE_PROVIDER, source.source.category, publicCategory, id, title);
|
|
23
|
+
addAlias(data, title, "title", true, COMICVINE_PROVIDER, "en");
|
|
24
|
+
addAlias(data, stringField(payload, "real_name"), "alias", false, COMICVINE_PROVIDER, "en");
|
|
25
|
+
for (const value of (stringField(payload, "aliases") ?? "").split(/\r?\n/))
|
|
26
|
+
addAlias(data, value, "alternative", false, COMICVINE_PROVIDER, "en");
|
|
27
|
+
const description = stringField(payload, "description") ?? stringField(payload, "deck");
|
|
28
|
+
addDescription(data, COMICVINE_PROVIDER, description ? stripHtml(description) : undefined, "en");
|
|
29
|
+
addMedia(data, COMICVINE_PROVIDER, nestedString(payload, ["image", "super_url"]) ?? nestedString(payload, ["image", "original_url"]) ?? nestedString(payload, ["image", "medium_url"]) ?? nestedString(payload, ["image", "icon_url"]), "cover");
|
|
30
|
+
for (const key of ["start_year", "count_of_issues", "issue_number", "cover_date", "store_date", "birth", "death", "hometown", "real_name", "aliases", "deck"])
|
|
31
|
+
addDetail(data, COMICVINE_PROVIDER, key, valueAsString(payload[key]));
|
|
32
|
+
data.primaryDate = stringField(payload, "cover_date") ?? stringField(payload, "store_date") ?? stringField(payload, "start_year");
|
|
33
|
+
for (const value of arrayField(payload, "concepts"))
|
|
34
|
+
if (value && typeof value === "object" && !Array.isArray(value))
|
|
35
|
+
addTag(data, stringField(value, "name"));
|
|
36
|
+
addTag(data, publicCategory === "organization" ? "publisher" : publicCategory === "person" ? "character" : publicCategory);
|
|
37
|
+
await addRelationObject(data, payload, "publisher", "publisher", "publisher");
|
|
38
|
+
await addRelationObject(data, payload, "volume", "part_of", "volume");
|
|
39
|
+
await addRelationArray(data, payload, "characters", "character", "character");
|
|
40
|
+
await addRelationArray(data, payload, "people", "creator", "person");
|
|
41
|
+
await addRelationArray(data, payload, "volumes", "volume", "volume");
|
|
42
|
+
await addRelationArray(data, payload, "issues", "contains", "issue");
|
|
43
|
+
await addRelationArray(data, payload, "story_arcs", "story_arc", "story_arc");
|
|
44
|
+
return finalizeData(data, source);
|
|
45
|
+
}
|
|
46
|
+
async function addRelationObject(data, payload, key, relation, category) {
|
|
47
|
+
const value = payload[key];
|
|
48
|
+
if (value && typeof value === "object" && !Array.isArray(value))
|
|
49
|
+
await addComicRelation(data, value, relation, category);
|
|
50
|
+
}
|
|
51
|
+
async function addRelationArray(data, payload, key, relation, category) {
|
|
52
|
+
let index = 0;
|
|
53
|
+
for (const value of arrayField(payload, key)) {
|
|
54
|
+
if (value && typeof value === "object" && !Array.isArray(value))
|
|
55
|
+
await addComicRelation(data, value, relation, category, index);
|
|
56
|
+
index += 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function addComicRelation(data, value, relation, category, order = null) {
|
|
60
|
+
const name = stringField(value, "name");
|
|
61
|
+
const role = stringField(value, "role");
|
|
62
|
+
await addRelation(data, COMICVINE_PROVIDER, category, valueAsString(value.id), relation, name, { attribute: name && role ? `${name} - ${role}` : role ?? null, order });
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume.d.ts","sourceRoot":"","sources":["../../../src/providers/comicvine/volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { transformComicVine as transformComicVineVolume } from "./transform.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type EntityRelation, type ZuuidData } from "../entity.js";
|
|
2
|
+
import { type SourceRecord } from "../source.js";
|
|
3
|
+
import type { JsonValue } from "../types.js";
|
|
4
|
+
export declare function objectPayload(value: JsonValue): Record<string, JsonValue>;
|
|
5
|
+
export declare function stringField(payload: Record<string, JsonValue>, key: string): string | undefined;
|
|
6
|
+
export declare function numberField(payload: Record<string, JsonValue>, key: string): number | undefined;
|
|
7
|
+
export declare function valueAsString(value: JsonValue | undefined): string | undefined;
|
|
8
|
+
export declare function nestedValue(payload: Record<string, JsonValue>, path: string[]): JsonValue | undefined;
|
|
9
|
+
export declare function nestedString(payload: Record<string, JsonValue>, path: string[]): string | undefined;
|
|
10
|
+
export declare function arrayField(payload: Record<string, JsonValue>, key: string): JsonValue[];
|
|
11
|
+
export declare function objectField(payload: Record<string, JsonValue>, key: string): Record<string, JsonValue> | undefined;
|
|
12
|
+
export declare function addDetail(data: ZuuidData, provider: string, key: string, value: JsonValue | undefined): void;
|
|
13
|
+
export declare function addTag(data: ZuuidData, value: string | undefined): void;
|
|
14
|
+
export declare function addAlias(data: ZuuidData, value: string | undefined, aliasType: string, isPrimary: boolean, source: string, language?: string): void;
|
|
15
|
+
export declare function addDescription(data: ZuuidData, provider: string, value: string | undefined, language?: string): void;
|
|
16
|
+
export declare function addMedia(data: ZuuidData, provider: string, url: string | undefined, mediaCategory: string, mediaType?: string, isPrimary?: boolean): void;
|
|
17
|
+
export declare function stripHtml(input: string): string;
|
|
18
|
+
export declare function datePrefix(value: string | undefined): string | undefined;
|
|
19
|
+
export declare function formatNumber(value: number): string;
|
|
20
|
+
export declare function baseDataFromSource(source: SourceRecord, provider: string, category: string, publicCategory: string, externalId: string, primaryTitle: string): Promise<ZuuidData>;
|
|
21
|
+
export declare function finalizeData(data: ZuuidData, source: SourceRecord, confidence?: number): ZuuidData;
|
|
22
|
+
export declare function addRelation(data: ZuuidData, provider: string, category: string, externalId: string | undefined, relationType: string, title?: string, options?: Partial<Omit<EntityRelation, "id" | "zuuid" | "relationType" | "direction" | "category" | "title">>): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/providers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAEzE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY9E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,CASrG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAEnG;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAGvF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAGlH;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAK5G;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAKvE;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAMN;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAKpH;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,aAAa,EAAE,MAAM,EACrB,SAAS,SAAU,EACnB,SAAS,UAAO,GACf,IAAI,CASN;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGxE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,CAAC,CAGpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,SAAM,GAAG,SAAS,CAE/F;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,CAAM,GAChH,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { createZuuidData } from "../entity.js";
|
|
2
|
+
import { providerZuuid } from "../identity.js";
|
|
3
|
+
import { attachSourceMetadata } from "../source.js";
|
|
4
|
+
export function objectPayload(value) {
|
|
5
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
6
|
+
}
|
|
7
|
+
export function stringField(payload, key) {
|
|
8
|
+
const value = payload[key];
|
|
9
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
10
|
+
}
|
|
11
|
+
export function numberField(payload, key) {
|
|
12
|
+
const value = payload[key];
|
|
13
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
14
|
+
}
|
|
15
|
+
export function valueAsString(value) {
|
|
16
|
+
if (typeof value === "string") {
|
|
17
|
+
return value.trim() ? value : undefined;
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
20
|
+
return String(value);
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(value)) {
|
|
23
|
+
const joined = value.filter((item) => typeof item === "string" && item.trim() !== "").join(", ");
|
|
24
|
+
return joined || undefined;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
export function nestedValue(payload, path) {
|
|
29
|
+
let current = payload;
|
|
30
|
+
for (const key of path) {
|
|
31
|
+
if (!current || typeof current !== "object" || Array.isArray(current)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
current = current[key];
|
|
35
|
+
}
|
|
36
|
+
return current;
|
|
37
|
+
}
|
|
38
|
+
export function nestedString(payload, path) {
|
|
39
|
+
return valueAsString(nestedValue(payload, path));
|
|
40
|
+
}
|
|
41
|
+
export function arrayField(payload, key) {
|
|
42
|
+
const value = payload[key];
|
|
43
|
+
return Array.isArray(value) ? value : [];
|
|
44
|
+
}
|
|
45
|
+
export function objectField(payload, key) {
|
|
46
|
+
const value = payload[key];
|
|
47
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
48
|
+
}
|
|
49
|
+
export function addDetail(data, provider, key, value) {
|
|
50
|
+
const normalized = typeof value === "string" ? (value.trim() ? value : undefined) : value;
|
|
51
|
+
if (normalized !== undefined) {
|
|
52
|
+
data.details.push({ key, value: normalized, source: provider });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function addTag(data, value) {
|
|
56
|
+
const tag = value?.trim().toLowerCase();
|
|
57
|
+
if (tag && !data.tags.includes(tag)) {
|
|
58
|
+
data.tags.push(tag);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function addAlias(data, value, aliasType, isPrimary, source, language) {
|
|
62
|
+
const normalized = value?.trim();
|
|
63
|
+
if (!normalized || data.aliases.some((alias) => alias.value === normalized && alias.aliasType === aliasType)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
data.aliases.push({ value: normalized, aliasType, isPrimary, source, ...(language ? { language } : {}) });
|
|
67
|
+
}
|
|
68
|
+
export function addDescription(data, provider, value, language) {
|
|
69
|
+
const normalized = value?.trim();
|
|
70
|
+
if (normalized) {
|
|
71
|
+
data.descriptions.push({ value: normalized, source: provider, ...(language ? { language } : {}) });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function addMedia(data, provider, url, mediaCategory, mediaType = "image", isPrimary = true) {
|
|
75
|
+
const normalized = url?.trim();
|
|
76
|
+
if (!normalized) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (isPrimary && !data.cover) {
|
|
80
|
+
data.cover = normalized;
|
|
81
|
+
}
|
|
82
|
+
data.media.push({ url: normalized, mediaType, mediaCategory, isPrimary, source: provider });
|
|
83
|
+
}
|
|
84
|
+
export function stripHtml(input) {
|
|
85
|
+
return input
|
|
86
|
+
.replace(/<[^>]*>/g, "")
|
|
87
|
+
.replace(/&/g, "&")
|
|
88
|
+
.replace(/</g, "<")
|
|
89
|
+
.replace(/>/g, ">")
|
|
90
|
+
.replace(/"/g, "\"")
|
|
91
|
+
.replace(/'/g, "'")
|
|
92
|
+
.replace(/ /g, " ")
|
|
93
|
+
.trim();
|
|
94
|
+
}
|
|
95
|
+
export function datePrefix(value) {
|
|
96
|
+
const prefix = value?.trim().slice(0, 10);
|
|
97
|
+
return prefix && /^\d{4}-\d{2}-\d{2}$/.test(prefix) ? prefix : undefined;
|
|
98
|
+
}
|
|
99
|
+
export function formatNumber(value) {
|
|
100
|
+
return value.toFixed(2).replace(/0+$/, "").replace(/\.$/, "");
|
|
101
|
+
}
|
|
102
|
+
export async function baseDataFromSource(source, provider, category, publicCategory, externalId, primaryTitle) {
|
|
103
|
+
const zuuid = await providerZuuid({ provider, category, externalId });
|
|
104
|
+
return createZuuidData({ zuuid, category: publicCategory, primaryTitle });
|
|
105
|
+
}
|
|
106
|
+
export function finalizeData(data, source, confidence = 1.0) {
|
|
107
|
+
return attachSourceMetadata(data, source, confidence);
|
|
108
|
+
}
|
|
109
|
+
export async function addRelation(data, provider, category, externalId, relationType, title, options = {}) {
|
|
110
|
+
const normalizedId = externalId?.trim();
|
|
111
|
+
if (!normalizedId) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const zuuid = await providerZuuid({ provider, category, externalId: normalizedId });
|
|
115
|
+
data.relations.push({
|
|
116
|
+
id: zuuid,
|
|
117
|
+
zuuid,
|
|
118
|
+
relationType,
|
|
119
|
+
direction: "outgoing",
|
|
120
|
+
title: title ?? "",
|
|
121
|
+
category,
|
|
122
|
+
date: null,
|
|
123
|
+
cover: null,
|
|
124
|
+
rating: null,
|
|
125
|
+
weight: null,
|
|
126
|
+
attribute: null,
|
|
127
|
+
order: null,
|
|
128
|
+
source: provider,
|
|
129
|
+
externalId: normalizedId,
|
|
130
|
+
...options
|
|
131
|
+
});
|
|
132
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/gamesdb/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAC5C,eAAO,MAAM,yBAAyB,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ZuuidData } from "../../entity.js";
|
|
2
|
+
import type { SourceRecord } from "../../source.js";
|
|
3
|
+
export type GamesDbTransformOptions = {
|
|
4
|
+
imageBaseUrl?: string | null;
|
|
5
|
+
};
|
|
6
|
+
export declare function transformGamesDbGame(source: SourceRecord, options?: GamesDbTransformOptions): Promise<ZuuidData>;
|
|
7
|
+
//# sourceMappingURL=game.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../src/providers/gamesdb/game.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAiBpD,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,SAAS,CAAC,CAsBpB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { GAMESDB_GAME_CATEGORY, GAMESDB_PROVIDER } from "./constants.js";
|
|
2
|
+
import { addDescription, addDetail, addMedia, addTag, arrayField, baseDataFromSource, finalizeData, numberField, objectPayload, stringField, valueAsString } from "../common.js";
|
|
3
|
+
export async function transformGamesDbGame(source, options = {}) {
|
|
4
|
+
if (source.source.provider !== GAMESDB_PROVIDER || source.source.category !== GAMESDB_GAME_CATEGORY) {
|
|
5
|
+
throw new Error(`unsupported GamesDB source: ${source.source.provider}:${source.source.category}`);
|
|
6
|
+
}
|
|
7
|
+
const payload = objectPayload(source.payload);
|
|
8
|
+
const id = source.source.externalId.trim() || valueAsString(payload.id);
|
|
9
|
+
const title = stringField(payload, "game_title") ?? stringField(payload, "name") ?? stringField(payload, "title");
|
|
10
|
+
if (!id)
|
|
11
|
+
throw new Error("missing required GamesDB game field: id");
|
|
12
|
+
if (!title)
|
|
13
|
+
throw new Error("missing required GamesDB game field: game_title");
|
|
14
|
+
const data = await baseDataFromSource(source, GAMESDB_PROVIDER, GAMESDB_GAME_CATEGORY, GAMESDB_GAME_CATEGORY, id, title);
|
|
15
|
+
data.rating = numberField(payload, "rating");
|
|
16
|
+
data.primaryDate = releaseDate(stringField(payload, "release_date"));
|
|
17
|
+
addDescription(data, GAMESDB_PROVIDER, stringField(payload, "overview"));
|
|
18
|
+
addTagsFromNamedArray(data, payload, "genres");
|
|
19
|
+
addTagsFromNamedArray(data, payload, "platforms");
|
|
20
|
+
addDetail(data, GAMESDB_PROVIDER, "developers", joinedNames(payload, "developers"));
|
|
21
|
+
addDetail(data, GAMESDB_PROVIDER, "publishers", joinedNames(payload, "publishers"));
|
|
22
|
+
addDetail(data, GAMESDB_PROVIDER, "players", stringField(payload, "players"));
|
|
23
|
+
addDetail(data, GAMESDB_PROVIDER, "release_date", stringField(payload, "release_date"));
|
|
24
|
+
addMedia(data, GAMESDB_PROVIDER, mediaUrl(stringField(payload, "boxart") ?? stringField(payload, "box_art") ?? stringField(payload, "cover"), options.imageBaseUrl), "cover");
|
|
25
|
+
return finalizeData(data, source);
|
|
26
|
+
}
|
|
27
|
+
function releaseDate(value) {
|
|
28
|
+
if (!value)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
31
|
+
return value;
|
|
32
|
+
const match = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(value);
|
|
33
|
+
if (match)
|
|
34
|
+
return `${match[3]}-${match[1].padStart(2, "0")}-${match[2].padStart(2, "0")}`;
|
|
35
|
+
return /^\d{4}$/.test(value) ? `${value}-01-01` : undefined;
|
|
36
|
+
}
|
|
37
|
+
function mediaUrl(path, baseUrl) {
|
|
38
|
+
if (!path)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (/^https?:\/\//.test(path) || !baseUrl)
|
|
41
|
+
return path;
|
|
42
|
+
return `${baseUrl.replace(/\/$/, "")}/${path.replace(/^\//, "")}`;
|
|
43
|
+
}
|
|
44
|
+
function joinedNames(payload, key) {
|
|
45
|
+
const names = arrayField(payload, key).map(valueName).filter((value) => !!value);
|
|
46
|
+
return names.length ? names.join(", ") : undefined;
|
|
47
|
+
}
|
|
48
|
+
function addTagsFromNamedArray(data, payload, key) {
|
|
49
|
+
for (const item of arrayField(payload, key))
|
|
50
|
+
addTag(data, valueName(item));
|
|
51
|
+
}
|
|
52
|
+
function valueName(value) {
|
|
53
|
+
if (typeof value === "string")
|
|
54
|
+
return value;
|
|
55
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
56
|
+
return undefined;
|
|
57
|
+
const object = value;
|
|
58
|
+
return stringField(object, "name") ?? stringField(object, "genre") ?? stringField(object, "platform");
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/gamesdb/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/providers/gamesdb/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAiBvF"}
|