@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.
Files changed (203) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +210 -227
  3. package/dist/client.d.ts +16 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +22 -0
  6. package/dist/entity.d.ts.map +1 -1
  7. package/dist/entity.js +9 -0
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +11 -0
  11. package/dist/providers/comicvine/character.d.ts +2 -0
  12. package/dist/providers/comicvine/character.d.ts.map +1 -0
  13. package/dist/providers/comicvine/character.js +1 -0
  14. package/dist/providers/comicvine/constants.d.ts +8 -0
  15. package/dist/providers/comicvine/constants.d.ts.map +1 -0
  16. package/dist/providers/comicvine/constants.js +7 -0
  17. package/dist/providers/comicvine/index.d.ts +9 -0
  18. package/dist/providers/comicvine/index.d.ts.map +1 -0
  19. package/dist/providers/comicvine/index.js +8 -0
  20. package/dist/providers/comicvine/issue.d.ts +2 -0
  21. package/dist/providers/comicvine/issue.d.ts.map +1 -0
  22. package/dist/providers/comicvine/issue.js +1 -0
  23. package/dist/providers/comicvine/person.d.ts +2 -0
  24. package/dist/providers/comicvine/person.d.ts.map +1 -0
  25. package/dist/providers/comicvine/person.js +1 -0
  26. package/dist/providers/comicvine/publisher.d.ts +2 -0
  27. package/dist/providers/comicvine/publisher.d.ts.map +1 -0
  28. package/dist/providers/comicvine/publisher.js +1 -0
  29. package/dist/providers/comicvine/story-arc.d.ts +2 -0
  30. package/dist/providers/comicvine/story-arc.d.ts.map +1 -0
  31. package/dist/providers/comicvine/story-arc.js +1 -0
  32. package/dist/providers/comicvine/transform.d.ts +4 -0
  33. package/dist/providers/comicvine/transform.d.ts.map +1 -0
  34. package/dist/providers/comicvine/transform.js +63 -0
  35. package/dist/providers/comicvine/volume.d.ts +2 -0
  36. package/dist/providers/comicvine/volume.d.ts.map +1 -0
  37. package/dist/providers/comicvine/volume.js +1 -0
  38. package/dist/providers/common.d.ts +23 -0
  39. package/dist/providers/common.d.ts.map +1 -0
  40. package/dist/providers/common.js +132 -0
  41. package/dist/providers/gamesdb/constants.d.ts +4 -0
  42. package/dist/providers/gamesdb/constants.d.ts.map +1 -0
  43. package/dist/providers/gamesdb/constants.js +3 -0
  44. package/dist/providers/gamesdb/game.d.ts +7 -0
  45. package/dist/providers/gamesdb/game.d.ts.map +1 -0
  46. package/dist/providers/gamesdb/game.js +59 -0
  47. package/dist/providers/gamesdb/index.d.ts +4 -0
  48. package/dist/providers/gamesdb/index.d.ts.map +1 -0
  49. package/dist/providers/gamesdb/index.js +3 -0
  50. package/dist/providers/gamesdb/platform.d.ts +4 -0
  51. package/dist/providers/gamesdb/platform.d.ts.map +1 -0
  52. package/dist/providers/gamesdb/platform.js +23 -0
  53. package/dist/providers/jikan/anime.d.ts +2 -0
  54. package/dist/providers/jikan/anime.d.ts.map +1 -0
  55. package/dist/providers/jikan/anime.js +1 -0
  56. package/dist/providers/jikan/character.d.ts +2 -0
  57. package/dist/providers/jikan/character.d.ts.map +1 -0
  58. package/dist/providers/jikan/character.js +1 -0
  59. package/dist/providers/jikan/constants.d.ts +8 -0
  60. package/dist/providers/jikan/constants.d.ts.map +1 -0
  61. package/dist/providers/jikan/constants.js +7 -0
  62. package/dist/providers/jikan/index.d.ts +9 -0
  63. package/dist/providers/jikan/index.d.ts.map +1 -0
  64. package/dist/providers/jikan/index.js +8 -0
  65. package/dist/providers/jikan/magazine.d.ts +2 -0
  66. package/dist/providers/jikan/magazine.d.ts.map +1 -0
  67. package/dist/providers/jikan/magazine.js +1 -0
  68. package/dist/providers/jikan/manga.d.ts +2 -0
  69. package/dist/providers/jikan/manga.d.ts.map +1 -0
  70. package/dist/providers/jikan/manga.js +1 -0
  71. package/dist/providers/jikan/person.d.ts +2 -0
  72. package/dist/providers/jikan/person.d.ts.map +1 -0
  73. package/dist/providers/jikan/person.js +1 -0
  74. package/dist/providers/jikan/producer.d.ts +2 -0
  75. package/dist/providers/jikan/producer.d.ts.map +1 -0
  76. package/dist/providers/jikan/producer.js +1 -0
  77. package/dist/providers/jikan/transform.d.ts +8 -0
  78. package/dist/providers/jikan/transform.d.ts.map +1 -0
  79. package/dist/providers/jikan/transform.js +125 -0
  80. package/dist/providers/musicbrainz/artist.d.ts +4 -0
  81. package/dist/providers/musicbrainz/artist.d.ts.map +1 -0
  82. package/dist/providers/musicbrainz/artist.js +28 -0
  83. package/dist/providers/musicbrainz/constants.d.ts +10 -0
  84. package/dist/providers/musicbrainz/constants.d.ts.map +1 -0
  85. package/dist/providers/musicbrainz/constants.js +9 -0
  86. package/dist/providers/musicbrainz/helpers.d.ts +15 -0
  87. package/dist/providers/musicbrainz/helpers.d.ts.map +1 -0
  88. package/dist/providers/musicbrainz/helpers.js +71 -0
  89. package/dist/providers/musicbrainz/index.d.ts +8 -0
  90. package/dist/providers/musicbrainz/index.d.ts.map +1 -0
  91. package/dist/providers/musicbrainz/index.js +7 -0
  92. package/dist/providers/musicbrainz/label.d.ts +4 -0
  93. package/dist/providers/musicbrainz/label.d.ts.map +1 -0
  94. package/dist/providers/musicbrainz/label.js +28 -0
  95. package/dist/providers/musicbrainz/recording.d.ts +4 -0
  96. package/dist/providers/musicbrainz/recording.d.ts.map +1 -0
  97. package/dist/providers/musicbrainz/recording.js +41 -0
  98. package/dist/providers/musicbrainz/release-group.d.ts +7 -0
  99. package/dist/providers/musicbrainz/release-group.d.ts.map +1 -0
  100. package/dist/providers/musicbrainz/release-group.js +28 -0
  101. package/dist/providers/musicbrainz/release.d.ts +7 -0
  102. package/dist/providers/musicbrainz/release.d.ts.map +1 -0
  103. package/dist/providers/musicbrainz/release.js +50 -0
  104. package/dist/providers/musicbrainz/work.d.ts +4 -0
  105. package/dist/providers/musicbrainz/work.d.ts.map +1 -0
  106. package/dist/providers/musicbrainz/work.js +40 -0
  107. package/dist/providers/openfoodfacts/constants.d.ts +3 -0
  108. package/dist/providers/openfoodfacts/constants.d.ts.map +1 -0
  109. package/dist/providers/openfoodfacts/constants.js +2 -0
  110. package/dist/providers/openfoodfacts/index.d.ts +3 -0
  111. package/dist/providers/openfoodfacts/index.d.ts.map +1 -0
  112. package/dist/providers/openfoodfacts/index.js +2 -0
  113. package/dist/providers/openfoodfacts/product.d.ts +4 -0
  114. package/dist/providers/openfoodfacts/product.d.ts.map +1 -0
  115. package/dist/providers/openfoodfacts/product.js +29 -0
  116. package/dist/providers/openlibrary/author.d.ts +65 -0
  117. package/dist/providers/openlibrary/author.d.ts.map +1 -0
  118. package/dist/providers/openlibrary/author.js +228 -0
  119. package/dist/providers/openlibrary/book.d.ts +138 -0
  120. package/dist/providers/openlibrary/book.d.ts.map +1 -0
  121. package/dist/providers/openlibrary/book.js +535 -0
  122. package/dist/providers/openlibrary/client.d.ts +22 -0
  123. package/dist/providers/openlibrary/client.d.ts.map +1 -0
  124. package/dist/providers/openlibrary/client.js +61 -0
  125. package/dist/providers/openlibrary/constants.d.ts +4 -0
  126. package/dist/providers/openlibrary/constants.d.ts.map +1 -0
  127. package/dist/providers/openlibrary/constants.js +3 -0
  128. package/dist/providers/openlibrary/index.d.ts +6 -0
  129. package/dist/providers/openlibrary/index.d.ts.map +1 -0
  130. package/dist/providers/openlibrary/index.js +5 -0
  131. package/dist/providers/openlibrary/types.d.ts +23 -0
  132. package/dist/providers/openlibrary/types.d.ts.map +1 -0
  133. package/dist/providers/openlibrary/types.js +1 -0
  134. package/dist/providers/openstreetmap/constants.d.ts +6 -0
  135. package/dist/providers/openstreetmap/constants.d.ts.map +1 -0
  136. package/dist/providers/openstreetmap/constants.js +5 -0
  137. package/dist/providers/openstreetmap/index.d.ts +4 -0
  138. package/dist/providers/openstreetmap/index.d.ts.map +1 -0
  139. package/dist/providers/openstreetmap/index.js +3 -0
  140. package/dist/providers/openstreetmap/place.d.ts +4 -0
  141. package/dist/providers/openstreetmap/place.d.ts.map +1 -0
  142. package/dist/providers/openstreetmap/place.js +65 -0
  143. package/dist/providers/openstreetmap/venue.d.ts +2 -0
  144. package/dist/providers/openstreetmap/venue.d.ts.map +1 -0
  145. package/dist/providers/openstreetmap/venue.js +1 -0
  146. package/dist/providers/podcast/constants.d.ts +3 -0
  147. package/dist/providers/podcast/constants.d.ts.map +1 -0
  148. package/dist/providers/podcast/constants.js +2 -0
  149. package/dist/providers/podcast/index.d.ts +3 -0
  150. package/dist/providers/podcast/index.d.ts.map +1 -0
  151. package/dist/providers/podcast/index.js +2 -0
  152. package/dist/providers/podcast/podcast.d.ts +4 -0
  153. package/dist/providers/podcast/podcast.d.ts.map +1 -0
  154. package/dist/providers/podcast/podcast.js +30 -0
  155. package/dist/providers/setlistfm/artist.d.ts +2 -0
  156. package/dist/providers/setlistfm/artist.d.ts.map +1 -0
  157. package/dist/providers/setlistfm/artist.js +1 -0
  158. package/dist/providers/setlistfm/constants.d.ts +5 -0
  159. package/dist/providers/setlistfm/constants.d.ts.map +1 -0
  160. package/dist/providers/setlistfm/constants.js +4 -0
  161. package/dist/providers/setlistfm/index.d.ts +6 -0
  162. package/dist/providers/setlistfm/index.d.ts.map +1 -0
  163. package/dist/providers/setlistfm/index.js +5 -0
  164. package/dist/providers/setlistfm/setlist.d.ts +2 -0
  165. package/dist/providers/setlistfm/setlist.d.ts.map +1 -0
  166. package/dist/providers/setlistfm/setlist.js +1 -0
  167. package/dist/providers/setlistfm/transform.d.ts +7 -0
  168. package/dist/providers/setlistfm/transform.d.ts.map +1 -0
  169. package/dist/providers/setlistfm/transform.js +122 -0
  170. package/dist/providers/setlistfm/venue.d.ts +2 -0
  171. package/dist/providers/setlistfm/venue.d.ts.map +1 -0
  172. package/dist/providers/setlistfm/venue.js +1 -0
  173. package/dist/providers/ticketmaster/attraction.d.ts +2 -0
  174. package/dist/providers/ticketmaster/attraction.d.ts.map +1 -0
  175. package/dist/providers/ticketmaster/attraction.js +1 -0
  176. package/dist/providers/ticketmaster/constants.d.ts +5 -0
  177. package/dist/providers/ticketmaster/constants.d.ts.map +1 -0
  178. package/dist/providers/ticketmaster/constants.js +4 -0
  179. package/dist/providers/ticketmaster/event.d.ts +2 -0
  180. package/dist/providers/ticketmaster/event.d.ts.map +1 -0
  181. package/dist/providers/ticketmaster/event.js +1 -0
  182. package/dist/providers/ticketmaster/index.d.ts +6 -0
  183. package/dist/providers/ticketmaster/index.d.ts.map +1 -0
  184. package/dist/providers/ticketmaster/index.js +5 -0
  185. package/dist/providers/ticketmaster/transform.d.ts +7 -0
  186. package/dist/providers/ticketmaster/transform.d.ts.map +1 -0
  187. package/dist/providers/ticketmaster/transform.js +89 -0
  188. package/dist/providers/ticketmaster/venue.d.ts +2 -0
  189. package/dist/providers/ticketmaster/venue.d.ts.map +1 -0
  190. package/dist/providers/ticketmaster/venue.js +1 -0
  191. package/dist/providers/wger/constants.d.ts +4 -0
  192. package/dist/providers/wger/constants.d.ts.map +1 -0
  193. package/dist/providers/wger/constants.js +3 -0
  194. package/dist/providers/wger/equipment.d.ts +4 -0
  195. package/dist/providers/wger/equipment.d.ts.map +1 -0
  196. package/dist/providers/wger/equipment.js +22 -0
  197. package/dist/providers/wger/exercise.d.ts +4 -0
  198. package/dist/providers/wger/exercise.d.ts.map +1 -0
  199. package/dist/providers/wger/exercise.js +42 -0
  200. package/dist/providers/wger/index.d.ts +4 -0
  201. package/dist/providers/wger/index.d.ts.map +1 -0
  202. package/dist/providers/wger/index.js +3 -0
  203. 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
  });
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtG,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,UAAU,GACV,cAAc,GACd,UAAU,GACV,SAAS,GACT,cAAc,GACd,cAAc,GACd,YAAY,GACZ,SAAS,GACT,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;AAEhH,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC9C,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,UAAU,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAKtE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAgB/G;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAMvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAmE5D"}
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";
@@ -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,2 @@
1
+ export { transformComicVine as transformComicVineCharacter } from "./transform.js";
2
+ //# sourceMappingURL=character.d.ts.map
@@ -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,8 @@
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";
@@ -0,0 +1,2 @@
1
+ export { transformComicVine as transformComicVineIssue } from "./transform.js";
2
+ //# sourceMappingURL=issue.d.ts.map
@@ -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,2 @@
1
+ export { transformComicVine as transformComicVinePerson } from "./transform.js";
2
+ //# sourceMappingURL=person.d.ts.map
@@ -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,2 @@
1
+ export { transformComicVine as transformComicVinePublisher } from "./transform.js";
2
+ //# sourceMappingURL=publisher.d.ts.map
@@ -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,2 @@
1
+ export { transformComicVine as transformComicVineStoryArc } from "./transform.js";
2
+ //# sourceMappingURL=story-arc.d.ts.map
@@ -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,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformComicVine(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=transform.d.ts.map
@@ -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,2 @@
1
+ export { transformComicVine as transformComicVineVolume } from "./transform.js";
2
+ //# sourceMappingURL=volume.d.ts.map
@@ -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":"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"}
@@ -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(/&amp;/g, "&")
88
+ .replace(/&lt;/g, "<")
89
+ .replace(/&gt;/g, ">")
90
+ .replace(/&quot;/g, "\"")
91
+ .replace(/&#39;/g, "'")
92
+ .replace(/&nbsp;/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,4 @@
1
+ export declare const GAMESDB_PROVIDER = "gamesdb";
2
+ export declare const GAMESDB_GAME_CATEGORY = "game";
3
+ export declare const GAMESDB_PLATFORM_CATEGORY = "platform";
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -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,3 @@
1
+ export const GAMESDB_PROVIDER = "gamesdb";
2
+ export const GAMESDB_GAME_CATEGORY = "game";
3
+ export const GAMESDB_PLATFORM_CATEGORY = "platform";
@@ -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,4 @@
1
+ export * from "./constants.js";
2
+ export * from "./game.js";
3
+ export * from "./platform.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./constants.js";
2
+ export * from "./game.js";
3
+ export * from "./platform.js";
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformGamesDbPlatform(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=platform.d.ts.map
@@ -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"}