@internetarchive/metadata-service 0.1.1 → 1.0.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 (108) hide show
  1. package/.prettierignore +2 -0
  2. package/demo/app-root.ts +6 -6
  3. package/dist/demo/app-root.js +3 -3
  4. package/dist/demo/app-root.js.map +1 -1
  5. package/dist/index.d.ts +1 -14
  6. package/dist/index.js +0 -12
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/backend/default-metadata-backend.d.ts +1 -1
  9. package/dist/src/backend/default-metadata-backend.js.map +1 -1
  10. package/dist/src/backend/metadata-backend-interface.js.map +1 -1
  11. package/dist/src/metadata-service-error.js +1 -2
  12. package/dist/src/metadata-service-error.js.map +1 -1
  13. package/dist/src/metadata-service-interface.d.ts +1 -1
  14. package/dist/src/metadata-service-interface.js.map +1 -1
  15. package/dist/src/metadata-service.d.ts +3 -3
  16. package/dist/src/metadata-service.js +2 -2
  17. package/dist/src/metadata-service.js.map +1 -1
  18. package/dist/src/responses/metadata-response.d.ts +16 -19
  19. package/dist/src/responses/metadata-response.js +6 -5
  20. package/dist/src/responses/metadata-response.js.map +1 -1
  21. package/dist/test/default-metadata-backend.test.js +5 -6
  22. package/dist/test/default-metadata-backend.test.js.map +1 -1
  23. package/dist/test/metadata-service.test.js +2 -2
  24. package/dist/test/metadata-service.test.js.map +1 -1
  25. package/eslint.config.mjs +53 -0
  26. package/index.ts +1 -27
  27. package/package.json +25 -26
  28. package/src/backend/default-metadata-backend.ts +11 -11
  29. package/src/backend/metadata-backend-interface.ts +1 -1
  30. package/src/metadata-service-error.ts +2 -2
  31. package/src/metadata-service-interface.ts +3 -3
  32. package/src/metadata-service.ts +7 -7
  33. package/src/responses/metadata-response.ts +29 -22
  34. package/test/default-metadata-backend.test.ts +11 -8
  35. package/test/metadata-service.test.ts +16 -16
  36. package/.eslintrc.js +0 -14
  37. package/dist/src/models/file.d.ts +0 -29
  38. package/dist/src/models/file.js +0 -95
  39. package/dist/src/models/file.js.map +0 -1
  40. package/dist/src/models/metadata-fields/field-types/boolean.d.ts +0 -5
  41. package/dist/src/models/metadata-fields/field-types/boolean.js +0 -8
  42. package/dist/src/models/metadata-fields/field-types/boolean.js.map +0 -1
  43. package/dist/src/models/metadata-fields/field-types/byte.d.ts +0 -13
  44. package/dist/src/models/metadata-fields/field-types/byte.js +0 -16
  45. package/dist/src/models/metadata-fields/field-types/byte.js.map +0 -1
  46. package/dist/src/models/metadata-fields/field-types/date.d.ts +0 -5
  47. package/dist/src/models/metadata-fields/field-types/date.js +0 -8
  48. package/dist/src/models/metadata-fields/field-types/date.js.map +0 -1
  49. package/dist/src/models/metadata-fields/field-types/duration.d.ts +0 -14
  50. package/dist/src/models/metadata-fields/field-types/duration.js +0 -17
  51. package/dist/src/models/metadata-fields/field-types/duration.js.map +0 -1
  52. package/dist/src/models/metadata-fields/field-types/list.d.ts +0 -25
  53. package/dist/src/models/metadata-fields/field-types/list.js +0 -34
  54. package/dist/src/models/metadata-fields/field-types/list.js.map +0 -1
  55. package/dist/src/models/metadata-fields/field-types/mediatype.d.ts +0 -5
  56. package/dist/src/models/metadata-fields/field-types/mediatype.js +0 -8
  57. package/dist/src/models/metadata-fields/field-types/mediatype.js.map +0 -1
  58. package/dist/src/models/metadata-fields/field-types/number.d.ts +0 -5
  59. package/dist/src/models/metadata-fields/field-types/number.js +0 -8
  60. package/dist/src/models/metadata-fields/field-types/number.js.map +0 -1
  61. package/dist/src/models/metadata-fields/field-types/page-progression.d.ts +0 -5
  62. package/dist/src/models/metadata-fields/field-types/page-progression.js +0 -8
  63. package/dist/src/models/metadata-fields/field-types/page-progression.js.map +0 -1
  64. package/dist/src/models/metadata-fields/field-types/string.d.ts +0 -5
  65. package/dist/src/models/metadata-fields/field-types/string.js +0 -8
  66. package/dist/src/models/metadata-fields/field-types/string.js.map +0 -1
  67. package/dist/src/models/metadata-fields/metadata-field.d.ts +0 -70
  68. package/dist/src/models/metadata-fields/metadata-field.js +0 -67
  69. package/dist/src/models/metadata-fields/metadata-field.js.map +0 -1
  70. package/dist/src/models/metadata.d.ts +0 -169
  71. package/dist/src/models/metadata.js +0 -627
  72. package/dist/src/models/metadata.js.map +0 -1
  73. package/dist/src/models/review.d.ts +0 -10
  74. package/dist/src/models/review.js +0 -43
  75. package/dist/src/models/review.js.map +0 -1
  76. package/dist/src/models/speech-music-asr-entry.d.ts +0 -10
  77. package/dist/src/models/speech-music-asr-entry.js +0 -2
  78. package/dist/src/models/speech-music-asr-entry.js.map +0 -1
  79. package/dist/test/models/file.test.d.ts +0 -1
  80. package/dist/test/models/file.test.js +0 -9
  81. package/dist/test/models/file.test.js.map +0 -1
  82. package/dist/test/models/metadata-fields/list-field.test.d.ts +0 -1
  83. package/dist/test/models/metadata-fields/list-field.test.js +0 -52
  84. package/dist/test/models/metadata-fields/list-field.test.js.map +0 -1
  85. package/dist/test/models/metadata-fields/metadata-field.test.d.ts +0 -1
  86. package/dist/test/models/metadata-fields/metadata-field.test.js +0 -121
  87. package/dist/test/models/metadata-fields/metadata-field.test.js.map +0 -1
  88. package/dist/test/models/metadata.test.d.ts +0 -1
  89. package/dist/test/models/metadata.test.js +0 -10
  90. package/dist/test/models/metadata.test.js.map +0 -1
  91. package/src/models/file.ts +0 -105
  92. package/src/models/metadata-fields/field-types/boolean.ts +0 -8
  93. package/src/models/metadata-fields/field-types/byte.ts +0 -16
  94. package/src/models/metadata-fields/field-types/date.ts +0 -8
  95. package/src/models/metadata-fields/field-types/duration.ts +0 -17
  96. package/src/models/metadata-fields/field-types/list.ts +0 -44
  97. package/src/models/metadata-fields/field-types/mediatype.ts +0 -8
  98. package/src/models/metadata-fields/field-types/number.ts +0 -8
  99. package/src/models/metadata-fields/field-types/page-progression.ts +0 -14
  100. package/src/models/metadata-fields/field-types/string.ts +0 -8
  101. package/src/models/metadata-fields/metadata-field.ts +0 -108
  102. package/src/models/metadata.ts +0 -463
  103. package/src/models/review.ts +0 -41
  104. package/src/models/speech-music-asr-entry.ts +0 -10
  105. package/test/models/file.test.ts +0 -10
  106. package/test/models/metadata-fields/list-field.test.ts +0 -64
  107. package/test/models/metadata-fields/metadata-field.test.ts +0 -151
  108. package/test/models/metadata.test.ts +0 -11
@@ -0,0 +1,2 @@
1
+ coverage
2
+ docs
package/demo/app-root.ts CHANGED
@@ -3,16 +3,16 @@ import {
3
3
  CSSResult,
4
4
  customElement,
5
5
  html,
6
- internalProperty,
7
6
  LitElement,
8
7
  query,
8
+ state,
9
9
  TemplateResult,
10
10
  } from 'lit-element';
11
- import { unsafeHTML } from 'lit-html/directives/unsafe-html';
12
11
  import { nothing } from 'lit-html';
13
- import { MetadataResponse } from '../src/responses/metadata-response';
14
- import { MetadataServiceInterface } from '../src/metadata-service-interface';
12
+ import { unsafeHTML } from 'lit-html/directives/unsafe-html';
15
13
  import { MetadataService } from '../src/metadata-service';
14
+ import { MetadataServiceInterface } from '../src/metadata-service-interface';
15
+ import { MetadataResponse } from '../src/responses/metadata-response';
16
16
 
17
17
  @customElement('app-root')
18
18
  export class AppRoot extends LitElement {
@@ -21,7 +21,7 @@ export class AppRoot extends LitElement {
21
21
  @query('#metadata-input')
22
22
  private metadataInput!: HTMLInputElement;
23
23
 
24
- @internalProperty()
24
+ @state()
25
25
  private metadataResponse?: MetadataResponse;
26
26
 
27
27
  /** @inheritdoc */
@@ -57,7 +57,7 @@ export class AppRoot extends LitElement {
57
57
  <td>${key}</td>
58
58
  <td>${unsafeHTML(rawMetadata[key])}</td>
59
59
  </tr>
60
- `
60
+ `,
61
61
  )}
62
62
  </table>
63
63
  `;
@@ -1,7 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
- import { css, customElement, html, internalProperty, LitElement, query, } from 'lit-element';
3
- import { unsafeHTML } from 'lit-html/directives/unsafe-html';
2
+ import { css, customElement, html, LitElement, query, state, } from 'lit-element';
4
3
  import { nothing } from 'lit-html';
4
+ import { unsafeHTML } from 'lit-html/directives/unsafe-html';
5
5
  import { MetadataService } from '../src/metadata-service';
6
6
  let AppRoot = class AppRoot extends LitElement {
7
7
  constructor() {
@@ -62,7 +62,7 @@ __decorate([
62
62
  query('#metadata-input')
63
63
  ], AppRoot.prototype, "metadataInput", void 0);
64
64
  __decorate([
65
- internalProperty()
65
+ state()
66
66
  ], AppRoot.prototype, "metadataResponse", void 0);
67
67
  AppRoot = __decorate([
68
68
  customElement('app-root')
@@ -1 +1 @@
1
- {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,GAAG,EAEH,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,UAAU,EACV,KAAK,GAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,UAAU;IAAvC;;QACU,oBAAe,GAA6B,eAAe,CAAC,OAAO,CAAC;IA6D9E,CAAC;IArDC,kBAAkB;IAClB,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;qBASM,IAAI,CAAC,WAAW;;;;;QAK7B,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO;KAC1D,CAAC;IACJ,CAAC;IAED,IAAY,gBAAgB;;QAC1B,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,QAAQ,CAAC,WAAW,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAA;;;UAGL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA;;oBAED,GAAG;oBACH,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;;WAErC,CACF;;KAEJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,CAAQ;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;KAIT,CAAC;IACJ,CAAC;CACF,CAAA;AA1DC;IADC,KAAK,CAAC,iBAAiB,CAAC;8CACgB;AAGzC;IADC,gBAAgB,EAAE;iDACyB;AAPjC,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CA8DnB;SA9DY,OAAO","sourcesContent":["import {\n css,\n CSSResult,\n customElement,\n html,\n internalProperty,\n LitElement,\n query,\n TemplateResult,\n} from 'lit-element';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html';\nimport { nothing } from 'lit-html';\nimport { MetadataResponse } from '../src/responses/metadata-response';\nimport { MetadataServiceInterface } from '../src/metadata-service-interface';\nimport { MetadataService } from '../src/metadata-service';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private metadataService: MetadataServiceInterface = MetadataService.default;\n\n @query('#metadata-input')\n private metadataInput!: HTMLInputElement;\n\n @internalProperty()\n private metadataResponse?: MetadataResponse;\n\n /** @inheritdoc */\n render(): TemplateResult {\n return html`\n <fieldset>\n <legend>Metadata Fetch</legend>\n <form>\n <label>Metadata</label>\n <input type=\"text\" id=\"metadata-input\" placeholder=\"Identifier\" />\n <input\n type=\"submit\"\n value=\"Get Metadata\"\n @click=${this.getMetadata}\n />\n </form>\n </fieldset>\n\n ${this.metadataResponse ? this.metadataTemplate : nothing}\n `;\n }\n\n private get metadataTemplate(): TemplateResult {\n const rawMetadata = this.metadataResponse?.metadata.rawMetadata;\n if (!rawMetadata) return html`${nothing}`;\n\n return html`\n <h2>Metadata Response</h2>\n <table>\n ${Object.keys(rawMetadata).map(\n key => html`\n <tr>\n <td>${key}</td>\n <td>${unsafeHTML(rawMetadata[key])}</td>\n </tr>\n `\n )}\n </table>\n `;\n }\n\n async getMetadata(e: Event): Promise<void> {\n e.preventDefault();\n const identifier = this.metadataInput.value;\n const result = await this.metadataService.fetchMetadata(identifier);\n this.metadataResponse = result?.success;\n }\n\n static get styles(): CSSResult {\n return css`\n /* th {\n font-weight: bold;\n } */\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../demo/app-root.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,GAAG,EAEH,aAAa,EACb,IAAI,EACJ,UAAU,EACV,KAAK,EACL,KAAK,GAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAKnD,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,UAAU;IAAhC;;QACG,oBAAe,GAA6B,eAAe,CAAC,OAAO,CAAC;IA6D9E,CAAC;IArDC,kBAAkB;IAClB,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;qBASM,IAAI,CAAC,WAAW;;;;;QAK7B,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO;KAC1D,CAAC;IACJ,CAAC;IAED,IAAY,gBAAgB;;QAC1B,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,QAAQ,CAAC,WAAW,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAA;;;UAGL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA;;oBAED,GAAG;oBACH,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;;WAErC,CACF;;KAEJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,CAAQ;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;KAIT,CAAC;IACJ,CAAC;CACF,CAAA;AA1DS;IADP,KAAK,CAAC,iBAAiB,CAAC;8CACgB;AAGjC;IADP,KAAK,EAAE;iDACoC;AAPjC,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CA8DnB","sourcesContent":["import {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n query,\n state,\n TemplateResult,\n} from 'lit-element';\nimport { nothing } from 'lit-html';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html';\nimport { MetadataService } from '../src/metadata-service';\nimport { MetadataServiceInterface } from '../src/metadata-service-interface';\nimport { MetadataResponse } from '../src/responses/metadata-response';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private metadataService: MetadataServiceInterface = MetadataService.default;\n\n @query('#metadata-input')\n private metadataInput!: HTMLInputElement;\n\n @state()\n private metadataResponse?: MetadataResponse;\n\n /** @inheritdoc */\n render(): TemplateResult {\n return html`\n <fieldset>\n <legend>Metadata Fetch</legend>\n <form>\n <label>Metadata</label>\n <input type=\"text\" id=\"metadata-input\" placeholder=\"Identifier\" />\n <input\n type=\"submit\"\n value=\"Get Metadata\"\n @click=${this.getMetadata}\n />\n </form>\n </fieldset>\n\n ${this.metadataResponse ? this.metadataTemplate : nothing}\n `;\n }\n\n private get metadataTemplate(): TemplateResult {\n const rawMetadata = this.metadataResponse?.metadata.rawMetadata;\n if (!rawMetadata) return html`${nothing}`;\n\n return html`\n <h2>Metadata Response</h2>\n <table>\n ${Object.keys(rawMetadata).map(\n key => html`\n <tr>\n <td>${key}</td>\n <td>${unsafeHTML(rawMetadata[key])}</td>\n </tr>\n `,\n )}\n </table>\n `;\n }\n\n async getMetadata(e: Event): Promise<void> {\n e.preventDefault();\n const identifier = this.metadataInput.value;\n const result = await this.metadataService.fetchMetadata(identifier);\n this.metadataResponse = result?.success;\n }\n\n static get styles(): CSSResult {\n return css`\n /* th {\n font-weight: bold;\n } */\n `;\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,5 @@
1
- export { Metadata } from './src/models/metadata';
2
- export { File } from './src/models/file';
3
- export { Review } from './src/models/review';
4
- export { SpeechMusicASREntry } from './src/models/speech-music-asr-entry';
5
- export { DateField } from './src/models/metadata-fields/field-types/date';
6
- export { NumberField } from './src/models/metadata-fields/field-types/number';
7
- export { StringField } from './src/models/metadata-fields/field-types/string';
8
- export { BooleanField } from './src/models/metadata-fields/field-types/boolean';
9
- export { ByteField } from './src/models/metadata-fields/field-types/byte';
10
- export { DurationField } from './src/models/metadata-fields/field-types/duration';
11
- export { PageProgressionField } from './src/models/metadata-fields/field-types/page-progression';
12
- export { MediaTypeField } from './src/models/metadata-fields/field-types/mediatype';
13
- export { MetadataFieldInterface, MetadataField, } from './src/models/metadata-fields/metadata-field';
14
1
  export { MetadataResponse } from './src/responses/metadata-response';
15
2
  export { DefaultMetadataBackend } from './src/backend/default-metadata-backend';
16
- export { MetadataServiceInterface } from './src/metadata-service-interface';
17
3
  export { MetadataService } from './src/metadata-service';
18
4
  export { MetadataServiceError } from './src/metadata-service-error';
5
+ export { MetadataServiceInterface } from './src/metadata-service-interface';
package/dist/index.js CHANGED
@@ -1,15 +1,3 @@
1
- export { Metadata } from './src/models/metadata';
2
- export { File } from './src/models/file';
3
- export { Review } from './src/models/review';
4
- export { DateField } from './src/models/metadata-fields/field-types/date';
5
- export { NumberField } from './src/models/metadata-fields/field-types/number';
6
- export { StringField } from './src/models/metadata-fields/field-types/string';
7
- export { BooleanField } from './src/models/metadata-fields/field-types/boolean';
8
- export { ByteField } from './src/models/metadata-fields/field-types/byte';
9
- export { DurationField } from './src/models/metadata-fields/field-types/duration';
10
- export { PageProgressionField } from './src/models/metadata-fields/field-types/page-progression';
11
- export { MediaTypeField } from './src/models/metadata-fields/field-types/mediatype';
12
- export { MetadataField, } from './src/models/metadata-fields/metadata-field';
13
1
  export { MetadataResponse } from './src/responses/metadata-response';
14
2
  export { DefaultMetadataBackend } from './src/backend/default-metadata-backend';
15
3
  export { MetadataService } from './src/metadata-service';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AAEpF,OAAO,EAEL,aAAa,GACd,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC","sourcesContent":["export { Metadata } from './src/models/metadata';\nexport { File } from './src/models/file';\nexport { Review } from './src/models/review';\nexport { SpeechMusicASREntry } from './src/models/speech-music-asr-entry';\n\nexport { DateField } from './src/models/metadata-fields/field-types/date';\n\nexport { NumberField } from './src/models/metadata-fields/field-types/number';\n\nexport { StringField } from './src/models/metadata-fields/field-types/string';\n\nexport { BooleanField } from './src/models/metadata-fields/field-types/boolean';\n\nexport { ByteField } from './src/models/metadata-fields/field-types/byte';\n\nexport { DurationField } from './src/models/metadata-fields/field-types/duration';\n\nexport { PageProgressionField } from './src/models/metadata-fields/field-types/page-progression';\n\nexport { MediaTypeField } from './src/models/metadata-fields/field-types/mediatype';\n\nexport {\n MetadataFieldInterface,\n MetadataField,\n} from './src/models/metadata-fields/metadata-field';\n\nexport { MetadataResponse } from './src/responses/metadata-response';\n\nexport { DefaultMetadataBackend } from './src/backend/default-metadata-backend';\nexport { MetadataServiceInterface } from './src/metadata-service-interface';\nexport { MetadataService } from './src/metadata-service';\nexport { MetadataServiceError } from './src/metadata-service-error';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC","sourcesContent":["export { MetadataResponse } from './src/responses/metadata-response';\n\nexport { DefaultMetadataBackend } from './src/backend/default-metadata-backend';\nexport { MetadataService } from './src/metadata-service';\nexport { MetadataServiceError } from './src/metadata-service-error';\nexport { MetadataServiceInterface } from './src/metadata-service-interface';\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from '@internetarchive/result-type';
2
- import { MetadataBackendInterface } from './metadata-backend-interface';
3
2
  import { MetadataServiceError } from '../metadata-service-error';
3
+ import { MetadataBackendInterface } from './metadata-backend-interface';
4
4
  /**
5
5
  * The DefaultSearchBackend performs a `window.fetch` request to archive.org
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"default-metadata-backend.js","sourceRoot":"","sources":["../../../src/backend/default-metadata-backend.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Result } from '@internetarchive/result-type';\nimport { MetadataBackendInterface } from './metadata-backend-interface';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from '../metadata-service-error';\n\n/**\n * The DefaultSearchBackend performs a `window.fetch` request to archive.org\n */\nexport class DefaultMetadataBackend implements MetadataBackendInterface {\n private baseUrl: string;\n\n private includeCredentials: boolean;\n\n private requestScope?: string;\n\n constructor(options?: {\n baseUrl?: string;\n includeCredentials?: boolean;\n scope?: string;\n }) {\n this.baseUrl = options?.baseUrl ?? 'archive.org';\n\n if (options?.includeCredentials !== undefined) {\n this.includeCredentials = options.includeCredentials;\n } else {\n // include credentials if the request is coming from an archive.org domain\n // since credentialed requests are only allowed from archive.org domains\n // due to CORS restrictions, see\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials\n this.includeCredentials =\n window.location.href.match(/^https?:\\/\\/.*archive\\.org(:[0-9]+)?/) !==\n null;\n }\n\n if (options?.scope !== undefined) {\n this.requestScope = options.scope;\n } else {\n const currentUrl = new URL(window.location.href);\n const scope = currentUrl.searchParams.get('scope');\n if (scope) {\n this.requestScope = scope;\n }\n }\n }\n\n /** @inheritdoc */\n async fetchMetadata(\n identifier: string,\n keypath?: string\n ): Promise<Result<any, MetadataServiceError>> {\n const path = keypath ? `/${keypath}` : '';\n const url = `https://${this.baseUrl}/metadata/${identifier}${path}`;\n // the metadata endpoint doesn't currently support credentialed requests\n // so don't include credentials until that is fixed\n return this.fetchUrl(url, {\n requestOptions: {\n credentials: 'omit',\n },\n });\n }\n\n /**\n * Fires a request to the URL (with this backend's options applied) and\n * asynchronously returns a Result object containing either the raw response\n * JSON or a MetadataServiceError.\n */\n protected async fetchUrl(\n url: string,\n options?: {\n requestOptions?: RequestInit;\n }\n ): Promise<Result<any, MetadataServiceError>> {\n const finalUrl = new URL(url);\n if (this.requestScope) {\n finalUrl.searchParams.set('scope', this.requestScope);\n }\n\n let response: Response;\n // first try the fetch and return a networkError if it fails\n try {\n const fetchOptions = options?.requestOptions ?? {\n credentials: this.includeCredentials ? 'include' : 'same-origin',\n };\n response = await fetch(finalUrl.href, fetchOptions);\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'Unknown error';\n return this.getErrorResult(\n MetadataServiceErrorType.networkError,\n message\n );\n }\n\n // then try json decoding and return a decodingError if it fails\n try {\n const json = await response.json();\n // the advanced search endpoint doesn't return an HTTP Error 400\n // and instead returns an HTTP 200 with an `error` key in the payload\n const error = json['error'];\n if (error) {\n const forensics = json['forensics'];\n return this.getErrorResult(\n MetadataServiceErrorType.searchEngineError,\n error,\n forensics\n );\n } else {\n // success\n return { success: json };\n }\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'Unknown error';\n return this.getErrorResult(\n MetadataServiceErrorType.decodingError,\n message\n );\n }\n }\n\n private getErrorResult(\n errorType: MetadataServiceErrorType,\n message?: string,\n details?: any\n ): Result<any, MetadataServiceError> {\n const error = new MetadataServiceError(errorType, message, details);\n const result = { error };\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"default-metadata-backend.js","sourceRoot":"","sources":["../../../src/backend/default-metadata-backend.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Result } from '@internetarchive/result-type';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from '../metadata-service-error';\nimport { MetadataBackendInterface } from './metadata-backend-interface';\n\n/**\n * The DefaultSearchBackend performs a `window.fetch` request to archive.org\n */\nexport class DefaultMetadataBackend implements MetadataBackendInterface {\n private baseUrl: string;\n\n private includeCredentials: boolean;\n\n private requestScope?: string;\n\n constructor(options?: {\n baseUrl?: string;\n includeCredentials?: boolean;\n scope?: string;\n }) {\n this.baseUrl = options?.baseUrl ?? 'archive.org';\n\n if (options?.includeCredentials !== undefined) {\n this.includeCredentials = options.includeCredentials;\n } else {\n // include credentials if the request is coming from an archive.org domain\n // since credentialed requests are only allowed from archive.org domains\n // due to CORS restrictions, see\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials\n this.includeCredentials =\n window.location.href.match(/^https?:\\/\\/.*archive\\.org(:[0-9]+)?/) !==\n null;\n }\n\n if (options?.scope !== undefined) {\n this.requestScope = options.scope;\n } else {\n const currentUrl = new URL(window.location.href);\n const scope = currentUrl.searchParams.get('scope');\n if (scope) {\n this.requestScope = scope;\n }\n }\n }\n\n /** @inheritdoc */\n async fetchMetadata(\n identifier: string,\n keypath?: string,\n ): Promise<Result<any, MetadataServiceError>> {\n const path = keypath ? `/${keypath}` : '';\n const url = `https://${this.baseUrl}/metadata/${identifier}${path}`;\n // the metadata endpoint doesn't currently support credentialed requests\n // so don't include credentials until that is fixed\n return this.fetchUrl(url, {\n requestOptions: {\n credentials: 'omit',\n },\n });\n }\n\n /**\n * Fires a request to the URL (with this backend's options applied) and\n * asynchronously returns a Result object containing either the raw response\n * JSON or a MetadataServiceError.\n */\n protected async fetchUrl(\n url: string,\n options?: {\n requestOptions?: RequestInit;\n },\n ): Promise<Result<any, MetadataServiceError>> {\n const finalUrl = new URL(url);\n if (this.requestScope) {\n finalUrl.searchParams.set('scope', this.requestScope);\n }\n\n let response: Response;\n // first try the fetch and return a networkError if it fails\n try {\n const fetchOptions = options?.requestOptions ?? {\n credentials: this.includeCredentials ? 'include' : 'same-origin',\n };\n response = await fetch(finalUrl.href, fetchOptions);\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'Unknown error';\n return this.getErrorResult(\n MetadataServiceErrorType.networkError,\n message,\n );\n }\n\n // then try json decoding and return a decodingError if it fails\n try {\n const json = await response.json();\n // the advanced search endpoint doesn't return an HTTP Error 400\n // and instead returns an HTTP 200 with an `error` key in the payload\n const error = json['error'];\n if (error) {\n const forensics = json['forensics'];\n return this.getErrorResult(\n MetadataServiceErrorType.searchEngineError,\n error,\n forensics,\n );\n } else {\n // success\n return { success: json };\n }\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : typeof err === 'string'\n ? err\n : 'Unknown error';\n return this.getErrorResult(\n MetadataServiceErrorType.decodingError,\n message,\n );\n }\n }\n\n private getErrorResult(\n errorType: MetadataServiceErrorType,\n message?: string,\n details?: any,\n ): Result<any, MetadataServiceError> {\n const error = new MetadataServiceError(errorType, message, details);\n const result = { error };\n return result;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-backend-interface.js","sourceRoot":"","sources":["../../../src/backend/metadata-backend-interface.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Result } from '@internetarchive/result-type';\nimport { MetadataServiceError } from '../metadata-service-error';\n\n/**\n * An interface to provide the network layer to the `MetadataService`.\n *\n * Objects implementing this interface are responsible for making calls to the Internet Archive\n * `metadata` endpoint or otherwise providing a similar reponse in JSON format.\n *\n * @export\n * @interface MetadataBackendInterface\n */\nexport interface MetadataBackendInterface {\n /**\n * Fetch metadata for a single item with an optional keypath\n *\n * @param identifier\n * @param keypath\n */\n fetchMetadata(\n identifier: string,\n keypath?: string\n ): Promise<Result<any, MetadataServiceError>>;\n}\n"]}
1
+ {"version":3,"file":"metadata-backend-interface.js","sourceRoot":"","sources":["../../../src/backend/metadata-backend-interface.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Result } from '@internetarchive/result-type';\nimport { MetadataServiceError } from '../metadata-service-error';\n\n/**\n * An interface to provide the network layer to the `MetadataService`.\n *\n * Objects implementing this interface are responsible for making calls to the Internet Archive\n * `metadata` endpoint or otherwise providing a similar reponse in JSON format.\n *\n * @export\n * @interface MetadataBackendInterface\n */\nexport interface MetadataBackendInterface {\n /**\n * Fetch metadata for a single item with an optional keypath\n *\n * @param identifier\n * @param keypath\n */\n fetchMetadata(\n identifier: string,\n keypath?: string,\n ): Promise<Result<any, MetadataServiceError>>;\n}\n"]}
@@ -1,5 +1,3 @@
1
- /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
1
  export var MetadataServiceErrorType;
4
2
  (function (MetadataServiceErrorType) {
5
3
  MetadataServiceErrorType["networkError"] = "MetadataService.NetworkError";
@@ -8,6 +6,7 @@ export var MetadataServiceErrorType;
8
6
  MetadataServiceErrorType["searchEngineError"] = "MetadataService.SearchEngineError";
9
7
  })(MetadataServiceErrorType || (MetadataServiceErrorType = {}));
10
8
  export class MetadataServiceError extends Error {
9
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
11
10
  constructor(type, message, details) {
12
11
  super(message);
13
12
  this.name = type;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-service-error.js","sourceRoot":"","sources":["../../src/metadata-service-error.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,uDAAuD;AACvD,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,yEAA6C,CAAA;IAC7C,yEAA6C,CAAA;IAC7C,2EAA+C,CAAA;IAC/C,mFAAuD,CAAA;AACzD,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAK7C,YAAY,IAA8B,EAAE,OAAgB,EAAE,OAAa;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport enum MetadataServiceErrorType {\n networkError = 'MetadataService.NetworkError',\n itemNotFound = 'MetadataService.ItemNotFound',\n decodingError = 'MetadataService.DecodingError',\n searchEngineError = 'MetadataService.SearchEngineError',\n}\n\nexport class MetadataServiceError extends Error {\n type: MetadataServiceErrorType;\n\n details?: any;\n\n constructor(type: MetadataServiceErrorType, message?: string, details?: any) {\n super(message);\n this.name = type;\n this.type = type;\n this.details = details;\n }\n}\n"]}
1
+ {"version":3,"file":"metadata-service-error.js","sourceRoot":"","sources":["../../src/metadata-service-error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,yEAA6C,CAAA;IAC7C,yEAA6C,CAAA;IAC7C,2EAA+C,CAAA;IAC/C,mFAAuD,CAAA;AACzD,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAM7C,iEAAiE;IACjE,YAAY,IAA8B,EAAE,OAAgB,EAAE,OAAa;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF","sourcesContent":["export enum MetadataServiceErrorType {\n networkError = 'MetadataService.NetworkError',\n itemNotFound = 'MetadataService.ItemNotFound',\n decodingError = 'MetadataService.DecodingError',\n searchEngineError = 'MetadataService.SearchEngineError',\n}\n\nexport class MetadataServiceError extends Error {\n type: MetadataServiceErrorType;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n details?: any;\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n constructor(type: MetadataServiceErrorType, message?: string, details?: any) {\n super(message);\n this.name = type;\n this.type = type;\n this.details = details;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { MetadataResponse } from './responses/metadata-response';
2
1
  import type { Result } from '@internetarchive/result-type';
3
2
  import type { MetadataServiceError } from './metadata-service-error';
3
+ import type { MetadataResponse } from './responses/metadata-response';
4
4
  export interface MetadataServiceInterface {
5
5
  /**
6
6
  * Fetch metadata for a given identifier
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-service-interface.js","sourceRoot":"","sources":["../../src/metadata-service-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { MetadataResponse } from './responses/metadata-response';\nimport type { Result } from '@internetarchive/result-type';\nimport type { MetadataServiceError } from './metadata-service-error';\n\nexport interface MetadataServiceInterface {\n /**\n * Fetch metadata for a given identifier\n *\n * @param {string} identifier\n * @returns {Promise<Result<MetadataResponse, MetadataServiceError>>}\n */\n fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>>;\n\n /**\n * Fetch the metadata value for a given identifier and keypath\n *\n * The response from this request can take any form, object, array, string, etc.\n * depending on the query. You can provide return typing in the response by\n * specifying the type. Note, there is no automatic type conversion since it can be anything.\n *\n * For example:\n *\n * ```ts\n * const collection = await searchService.fetchMetadataValue<string>('goody', 'metadata/collection/0');\n * console.debug('collection:', collection); => 'Goody Collection'\n *\n * const files_count = await searchService.fetchMetadataValue<number>('goody', 'files_count');\n * console.debug('files_count:', files_count); => 12\n * ```\n *\n * Keypath examples:\n *\n * /metadata/:identifier/metadata // returns the entire metadata object\n * /metadata/:identifier/server // returns the server for the given identifier\n * /metadata/:identifier/files_count\n * /metadata/:identifier/files?start=1&count=2 // query for files\n * /metadata/:identifier/metadata/collection // all collections\n * /metadata/:identifier/metadata/collection/0 // first collection\n * /metadata/:identifier/metadata/title\n * /metadata/:identifier/files/0/name // first file name\n *\n * @param identifier\n * @param keypath\n */\n fetchMetadataValue<T>(\n identifier: string,\n keypath: string\n ): Promise<Result<T, MetadataServiceError>>;\n}\n"]}
1
+ {"version":3,"file":"metadata-service-interface.js","sourceRoot":"","sources":["../../src/metadata-service-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { Result } from '@internetarchive/result-type';\nimport type { MetadataServiceError } from './metadata-service-error';\nimport type { MetadataResponse } from './responses/metadata-response';\n\nexport interface MetadataServiceInterface {\n /**\n * Fetch metadata for a given identifier\n *\n * @param {string} identifier\n * @returns {Promise<Result<MetadataResponse, MetadataServiceError>>}\n */\n fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>>;\n\n /**\n * Fetch the metadata value for a given identifier and keypath\n *\n * The response from this request can take any form, object, array, string, etc.\n * depending on the query. You can provide return typing in the response by\n * specifying the type. Note, there is no automatic type conversion since it can be anything.\n *\n * For example:\n *\n * ```ts\n * const collection = await searchService.fetchMetadataValue<string>('goody', 'metadata/collection/0');\n * console.debug('collection:', collection); => 'Goody Collection'\n *\n * const files_count = await searchService.fetchMetadataValue<number>('goody', 'files_count');\n * console.debug('files_count:', files_count); => 12\n * ```\n *\n * Keypath examples:\n *\n * /metadata/:identifier/metadata // returns the entire metadata object\n * /metadata/:identifier/server // returns the server for the given identifier\n * /metadata/:identifier/files_count\n * /metadata/:identifier/files?start=1&count=2 // query for files\n * /metadata/:identifier/metadata/collection // all collections\n * /metadata/:identifier/metadata/collection/0 // first collection\n * /metadata/:identifier/metadata/title\n * /metadata/:identifier/files/0/name // first file name\n *\n * @param identifier\n * @param keypath\n */\n fetchMetadataValue<T>(\n identifier: string,\n keypath: string,\n ): Promise<Result<T, MetadataServiceError>>;\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { MetadataResponse } from './responses/metadata-response';
2
- import { MetadataServiceError } from './metadata-service-error';
3
- import type { MetadataServiceInterface } from './metadata-service-interface';
4
1
  import type { Result } from '@internetarchive/result-type';
5
2
  import { MetadataBackendInterface } from './backend/metadata-backend-interface';
3
+ import { MetadataServiceError } from './metadata-service-error';
4
+ import type { MetadataServiceInterface } from './metadata-service-interface';
5
+ import { MetadataResponse } from './responses/metadata-response';
6
6
  /**
7
7
  * The Metadata Service is responsible for taking the raw response provided by
8
8
  * the backend and modeling it as a `MetadataResponse` object.
@@ -1,6 +1,6 @@
1
- import { MetadataResponse } from './responses/metadata-response';
2
- import { MetadataServiceError, MetadataServiceErrorType, } from './metadata-service-error';
3
1
  import { DefaultMetadataBackend } from './backend/default-metadata-backend';
2
+ import { MetadataServiceError, MetadataServiceErrorType, } from './metadata-service-error';
3
+ import { MetadataResponse } from './responses/metadata-response';
4
4
  /**
5
5
  * The Metadata Service is responsible for taking the raw response provided by
6
6
  * the backend and modeling it as a `MetadataResponse` object.
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-service.js","sourceRoot":"","sources":["../../src/metadata-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAG5E;;;GAGG;AACH,MAAM,OAAO,eAAe;IAO1B,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,aAAa,CACjB,UAAkB;;QAElB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,WAAW,CAAC,KAAK,EAAE;YACrB,OAAO,WAAW,CAAC;SACpB;QAED,IAAI,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,QAAQ,MAAK,SAAS,EAAE;YAC/C,OAAO;gBACL,KAAK,EAAE,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,CAAC;aACvE,CAAC;SACH;QAED,MAAM,eAAe,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACtC,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,kBAAkB,CACtB,UAAkB,EAClB,OAAe;;QAEf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,OAAO,MAAM,CAAC;SACf;QAED,IAAI,CAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,MAAM,MAAK,SAAS,EAAE;YACxC,OAAO;gBACL,KAAK,EAAE,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,CAAC;aACvE,CAAC;SACH;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;;AA9Ca,uBAAO,GAA6B,IAAI,eAAe,CACnE,IAAI,sBAAsB,EAAE,CAC7B,CAAC","sourcesContent":["import { MetadataResponse } from './responses/metadata-response';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from './metadata-service-error';\nimport type { MetadataServiceInterface } from './metadata-service-interface';\nimport type { Result } from '@internetarchive/result-type';\nimport { DefaultMetadataBackend } from './backend/default-metadata-backend';\nimport { MetadataBackendInterface } from './backend/metadata-backend-interface';\n\n/**\n * The Metadata Service is responsible for taking the raw response provided by\n * the backend and modeling it as a `MetadataResponse` object.\n */\nexport class MetadataService implements MetadataServiceInterface {\n public static default: MetadataServiceInterface = new MetadataService(\n new DefaultMetadataBackend()\n );\n\n private backend: MetadataBackendInterface;\n\n constructor(backend: MetadataBackendInterface) {\n this.backend = backend;\n }\n\n /** @inheritdoc */\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const rawResponse = await this.backend.fetchMetadata(identifier);\n if (rawResponse.error) {\n return rawResponse;\n }\n\n if (rawResponse.success?.metadata === undefined) {\n return {\n error: new MetadataServiceError(MetadataServiceErrorType.itemNotFound),\n };\n }\n\n const modeledResponse = new MetadataResponse(rawResponse.success);\n return { success: modeledResponse };\n }\n\n /** @inheritdoc */\n async fetchMetadataValue<T>(\n identifier: string,\n keypath: string\n ): Promise<Result<T, MetadataServiceError>> {\n const result = await this.backend.fetchMetadata(identifier, keypath);\n if (result.error) {\n return result;\n }\n\n if (result.success?.result === undefined) {\n return {\n error: new MetadataServiceError(MetadataServiceErrorType.itemNotFound),\n };\n }\n\n return { success: result.success.result };\n }\n}\n"]}
1
+ {"version":3,"file":"metadata-service.js","sourceRoot":"","sources":["../../src/metadata-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;;GAGG;AACH,MAAM,OAAO,eAAe;IAO1B,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,aAAa,CACjB,UAAkB;;QAElB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAI,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,QAAQ,MAAK,SAAS,EAAE,CAAC;YAChD,OAAO;gBACL,KAAK,EAAE,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,CAAC;aACvE,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACtC,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,kBAAkB,CACtB,UAAkB,EAClB,OAAe;;QAEf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,MAAM,MAAK,SAAS,EAAE,CAAC;YACzC,OAAO;gBACL,KAAK,EAAE,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,CAAC;aACvE,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;;AA9Ca,uBAAO,GAA6B,IAAI,eAAe,CACnE,IAAI,sBAAsB,EAAE,CAC7B,CAAC","sourcesContent":["import type { Result } from '@internetarchive/result-type';\nimport { DefaultMetadataBackend } from './backend/default-metadata-backend';\nimport { MetadataBackendInterface } from './backend/metadata-backend-interface';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from './metadata-service-error';\nimport type { MetadataServiceInterface } from './metadata-service-interface';\nimport { MetadataResponse } from './responses/metadata-response';\n\n/**\n * The Metadata Service is responsible for taking the raw response provided by\n * the backend and modeling it as a `MetadataResponse` object.\n */\nexport class MetadataService implements MetadataServiceInterface {\n public static default: MetadataServiceInterface = new MetadataService(\n new DefaultMetadataBackend(),\n );\n\n private backend: MetadataBackendInterface;\n\n constructor(backend: MetadataBackendInterface) {\n this.backend = backend;\n }\n\n /** @inheritdoc */\n async fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const rawResponse = await this.backend.fetchMetadata(identifier);\n if (rawResponse.error) {\n return rawResponse;\n }\n\n if (rawResponse.success?.metadata === undefined) {\n return {\n error: new MetadataServiceError(MetadataServiceErrorType.itemNotFound),\n };\n }\n\n const modeledResponse = new MetadataResponse(rawResponse.success);\n return { success: modeledResponse };\n }\n\n /** @inheritdoc */\n async fetchMetadataValue<T>(\n identifier: string,\n keypath: string,\n ): Promise<Result<T, MetadataServiceError>> {\n const result = await this.backend.fetchMetadata(identifier, keypath);\n if (result.error) {\n return result;\n }\n\n if (result.success?.result === undefined) {\n return {\n error: new MetadataServiceError(MetadataServiceErrorType.itemNotFound),\n };\n }\n\n return { success: result.success.result };\n }\n}\n"]}
@@ -1,7 +1,4 @@
1
- import { File } from '../models/file';
2
- import { Metadata } from '../models/metadata';
3
- import { Review } from '../models/review';
4
- import { SpeechMusicASREntry } from '../models/speech-music-asr-entry';
1
+ import { File, Metadata, Review, SpeechMusicASREntry } from '@internetarchive/iaux-item-metadata';
5
2
  /**
6
3
  * The main top-level reponse when fetching Metadata
7
4
  *
@@ -9,20 +6,20 @@ import { SpeechMusicASREntry } from '../models/speech-music-asr-entry';
9
6
  * @class MetadataResponse
10
7
  */
11
8
  export declare class MetadataResponse {
12
- rawResponse: any;
13
- created: number;
14
- d1: string;
15
- d2: string;
16
- dir: string;
17
- files: File[];
18
- files_count: number;
19
- item_last_updated: number;
20
- item_size: number;
21
- metadata: Metadata;
22
- server: string;
23
- uniq: number;
24
- workable_servers: string[];
25
- speech_vs_music_asr?: SpeechMusicASREntry[];
26
- reviews?: Review[];
9
+ readonly rawResponse: Readonly<Record<string, any>>;
10
+ readonly created: number;
11
+ readonly d1: string;
12
+ readonly d2: string;
13
+ readonly dir: string;
14
+ readonly files: File[];
15
+ readonly files_count: number;
16
+ readonly item_last_updated: number;
17
+ readonly item_size: number;
18
+ readonly metadata: Metadata;
19
+ readonly server: string;
20
+ readonly uniq: number;
21
+ readonly workable_servers: string[];
22
+ readonly speech_vs_music_asr?: SpeechMusicASREntry[];
23
+ readonly reviews?: Review[];
27
24
  constructor(json: Record<string, any>);
28
25
  }
@@ -1,7 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { File } from '../models/file';
3
- import { Metadata } from '../models/metadata';
4
- import { Review } from '../models/review';
1
+ import { File, Metadata, Review, } from '@internetarchive/iaux-item-metadata';
5
2
  /**
6
3
  * The main top-level reponse when fetching Metadata
7
4
  *
@@ -9,6 +6,7 @@ import { Review } from '../models/review';
9
6
  * @class MetadataResponse
10
7
  */
11
8
  export class MetadataResponse {
9
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
12
10
  constructor(json) {
13
11
  var _a, _b;
14
12
  this.rawResponse = json;
@@ -16,6 +14,7 @@ export class MetadataResponse {
16
14
  this.d1 = json.d1;
17
15
  this.d2 = json.d2;
18
16
  this.dir = json.dir;
17
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
19
18
  this.files = (_a = json.files) === null || _a === void 0 ? void 0 : _a.map((file) => new File(file));
20
19
  this.files_count = json.files_count;
21
20
  this.item_last_updated = json.item_last_updated;
@@ -25,7 +24,9 @@ export class MetadataResponse {
25
24
  this.uniq = json.uniq;
26
25
  this.workable_servers = json.workable_servers;
27
26
  this.speech_vs_music_asr = json.speech_vs_music_asr;
28
- this.reviews = (_b = json.reviews) === null || _b === void 0 ? void 0 : _b.map((entry) => new Review(entry));
27
+ this.reviews = (_b = json.reviews) === null || _b === void 0 ? void 0 : _b.map(
28
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
29
+ (entry) => new Review(entry));
29
30
  }
30
31
  }
31
32
  //# sourceMappingURL=metadata-response.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-response.js","sourceRoot":"","sources":["../../../src/responses/metadata-response.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IA+B3B,YAAY,IAAyB;;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { File } from '../models/file';\nimport { Metadata } from '../models/metadata';\nimport { Review } from '../models/review';\nimport { SpeechMusicASREntry } from '../models/speech-music-asr-entry';\n\n/**\n * The main top-level reponse when fetching Metadata\n *\n * @export\n * @class MetadataResponse\n */\nexport class MetadataResponse {\n rawResponse: any;\n\n created: number;\n\n d1: string;\n\n d2: string;\n\n dir: string;\n\n files: File[];\n\n files_count: number;\n\n item_last_updated: number;\n\n item_size: number;\n\n metadata: Metadata;\n\n server: string;\n\n uniq: number;\n\n workable_servers: string[];\n\n speech_vs_music_asr?: SpeechMusicASREntry[];\n\n reviews?: Review[];\n\n constructor(json: Record<string, any>) {\n this.rawResponse = json;\n this.created = json.created;\n this.d1 = json.d1;\n this.d2 = json.d2;\n this.dir = json.dir;\n this.files = json.files?.map((file: any) => new File(file));\n this.files_count = json.files_count;\n this.item_last_updated = json.item_last_updated;\n this.item_size = json.item_size;\n this.metadata = new Metadata(json.metadata);\n this.server = json.server;\n this.uniq = json.uniq;\n this.workable_servers = json.workable_servers;\n this.speech_vs_music_asr = json.speech_vs_music_asr;\n this.reviews = json.reviews?.map((entry: any) => new Review(entry));\n }\n}\n"]}
1
+ {"version":3,"file":"metadata-response.js","sourceRoot":"","sources":["../../../src/responses/metadata-response.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,GAEP,MAAM,qCAAqC,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IAgC3B,iEAAiE;IACjE,YAAY,IAAyB;;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,iEAAiE;QACjE,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,IAAyB,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,GAAG;QAC9B,iEAAiE;QACjE,CAAC,KAA0B,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import {\n File,\n Metadata,\n Review,\n SpeechMusicASREntry,\n} from '@internetarchive/iaux-item-metadata';\n\n/**\n * The main top-level reponse when fetching Metadata\n *\n * @export\n * @class MetadataResponse\n */\nexport class MetadataResponse {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n readonly rawResponse: Readonly<Record<string, any>>;\n\n readonly created: number;\n\n readonly d1: string;\n\n readonly d2: string;\n\n readonly dir: string;\n\n readonly files: File[];\n\n readonly files_count: number;\n\n readonly item_last_updated: number;\n\n readonly item_size: number;\n\n readonly metadata: Metadata;\n\n readonly server: string;\n\n readonly uniq: number;\n\n readonly workable_servers: string[];\n\n readonly speech_vs_music_asr?: SpeechMusicASREntry[];\n\n readonly reviews?: Review[];\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n constructor(json: Record<string, any>) {\n this.rawResponse = json;\n this.created = json.created;\n this.d1 = json.d1;\n this.d2 = json.d2;\n this.dir = json.dir;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.files = json.files?.map((file: Record<string, any>) => new File(file));\n this.files_count = json.files_count;\n this.item_last_updated = json.item_last_updated;\n this.item_size = json.item_size;\n this.metadata = new Metadata(json.metadata);\n this.server = json.server;\n this.uniq = json.uniq;\n this.workable_servers = json.workable_servers;\n this.speech_vs_music_asr = json.speech_vs_music_asr;\n this.reviews = json.reviews?.map(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n (entry: Record<string, any>) => new Review(entry),\n );\n }\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  import { expect } from '@open-wc/testing';
4
3
  import { DefaultMetadataBackend } from '../src/backend/default-metadata-backend';
5
4
  import { MetadataServiceErrorType } from '../src/metadata-service-error';
@@ -57,8 +56,8 @@ describe('DefaultMetadataBackend', () => {
57
56
  it('appends the scope if provided', async () => {
58
57
  const fetchBackup = window.fetch;
59
58
  let urlCalled = '';
60
- window.fetch = (url) => {
61
- urlCalled = url.toString();
59
+ window.fetch = (input, init) => {
60
+ urlCalled = input.toString();
62
61
  const response = new Response('boop');
63
62
  return new Promise(resolve => resolve(response));
64
63
  };
@@ -73,9 +72,9 @@ describe('DefaultMetadataBackend', () => {
73
72
  const fetchBackup = window.fetch;
74
73
  let urlCalled;
75
74
  let urlConfig;
76
- window.fetch = (url, config) => {
77
- urlCalled = url;
78
- urlConfig = config;
75
+ window.fetch = (input, init) => {
76
+ urlCalled = input;
77
+ urlConfig = init;
79
78
  const response = new Response('boop');
80
79
  return new Promise(resolve => resolve(response));
81
80
  };
@@ -1 +1 @@
1
- {"version":3,"file":"default-metadata-backend.test.js","sourceRoot":"","sources":["../../test/default-metadata-backend.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { expect } from '@open-wc/testing';\nimport { DefaultMetadataBackend } from '../src/backend/default-metadata-backend';\nimport { MetadataServiceErrorType } from '../src/metadata-service-error';\n\ndescribe('DefaultMetadataBackend', () => {\n it('can fetch metadata', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n return new Promise(resolve => {\n const response = new Response('{ \"foo\": \"bar\" }');\n resolve(response);\n });\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.success?.foo).to.equal('bar');\n window.fetch = fetchBackup;\n });\n\n it('returns a networkError if theres a problem fetching using String type', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n throw 'network error';\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.networkError);\n expect(result.error?.message).to.equal('network error');\n window.fetch = fetchBackup;\n });\n\n it('returns a networkError if theres a problem fetching using Error type', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n throw new Error('network error');\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.networkError);\n expect(result.error?.message).to.equal('network error');\n window.fetch = fetchBackup;\n });\n\n it('returns a decodingError if theres a problem decoding the json', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.decodingError);\n window.fetch = fetchBackup;\n });\n\n it('appends the scope if provided', async () => {\n const fetchBackup = window.fetch;\n let urlCalled = '';\n window.fetch = (url: RequestInfo): Promise<Response> => {\n urlCalled = url.toString();\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend({\n scope: 'foo',\n });\n const result = await backend.fetchMetadata('foo');\n expect(urlCalled.includes('scope=foo')).to.be.true;\n window.fetch = fetchBackup;\n });\n\n it('does not credentials for metadata endpoint', async () => {\n const fetchBackup = window.fetch;\n let urlCalled: RequestInfo;\n let urlConfig: RequestInit | undefined;\n window.fetch = (\n url: RequestInfo,\n config?: RequestInit\n ): Promise<Response> => {\n urlCalled = url;\n urlConfig = config;\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend({\n scope: 'foo',\n includeCredentials: true,\n });\n await backend.fetchMetadata('foo');\n expect(urlConfig?.credentials).to.equal('omit');\n window.fetch = fetchBackup;\n });\n});\n"]}
1
+ {"version":3,"file":"default-metadata-backend.test.js","sourceRoot":"","sources":["../../test/default-metadata-backend.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { expect } from '@open-wc/testing';\nimport { DefaultMetadataBackend } from '../src/backend/default-metadata-backend';\nimport { MetadataServiceErrorType } from '../src/metadata-service-error';\n\ndescribe('DefaultMetadataBackend', () => {\n it('can fetch metadata', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n return new Promise(resolve => {\n const response = new Response('{ \"foo\": \"bar\" }');\n resolve(response);\n });\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.success?.foo).to.equal('bar');\n window.fetch = fetchBackup;\n });\n\n it('returns a networkError if theres a problem fetching using String type', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n throw 'network error';\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.networkError);\n expect(result.error?.message).to.equal('network error');\n window.fetch = fetchBackup;\n });\n\n it('returns a networkError if theres a problem fetching using Error type', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n throw new Error('network error');\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.networkError);\n expect(result.error?.message).to.equal('network error');\n window.fetch = fetchBackup;\n });\n\n it('returns a decodingError if theres a problem decoding the json', async () => {\n const fetchBackup = window.fetch;\n window.fetch = (): Promise<Response> => {\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend();\n const result = await backend.fetchMetadata('foo');\n expect(result.error?.type).to.equal(MetadataServiceErrorType.decodingError);\n window.fetch = fetchBackup;\n });\n\n it('appends the scope if provided', async () => {\n const fetchBackup = window.fetch;\n let urlCalled = '';\n window.fetch = (\n input: RequestInfo | URL,\n init?: RequestInit | undefined,\n ): Promise<Response> => {\n urlCalled = input.toString();\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend({\n scope: 'foo',\n });\n const result = await backend.fetchMetadata('foo');\n expect(urlCalled.includes('scope=foo')).to.be.true;\n window.fetch = fetchBackup;\n });\n\n it('does not credentials for metadata endpoint', async () => {\n const fetchBackup = window.fetch;\n let urlCalled: RequestInfo | URL;\n let urlConfig: RequestInit | undefined;\n window.fetch = (\n input: RequestInfo | URL,\n init?: RequestInit | undefined,\n ): Promise<Response> => {\n urlCalled = input;\n urlConfig = init;\n const response = new Response('boop');\n return new Promise(resolve => resolve(response));\n };\n\n const backend = new DefaultMetadataBackend({\n scope: 'foo',\n includeCredentials: true,\n });\n await backend.fetchMetadata('foo');\n expect(urlConfig?.credentials).to.equal('omit');\n window.fetch = fetchBackup;\n });\n});\n"]}
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
  import { expect } from '@open-wc/testing';
4
- import { MockResponseGenerator } from './mock-response-generator';
5
- import { MetadataServiceError, MetadataServiceErrorType, } from '../src/metadata-service-error';
6
4
  import { MetadataService } from '../src/metadata-service';
5
+ import { MetadataServiceError, MetadataServiceErrorType, } from '../src/metadata-service-error';
6
+ import { MockResponseGenerator } from './mock-response-generator';
7
7
  describe('MetadataService', () => {
8
8
  it('can request metadata when requested', async () => {
9
9
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-service.test.js","sourceRoot":"","sources":["../../test/metadata-service.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { expect } from '@open-wc/testing';\n\nimport { MockResponseGenerator } from './mock-response-generator';\nimport { MetadataResponse } from '../src/responses/metadata-response';\nimport { Result } from '@internetarchive/result-type';\nimport { MetadataBackendInterface } from '../src/backend/metadata-backend-interface';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from '../src/metadata-service-error';\nimport { MetadataService } from '../src/metadata-service';\n\ndescribe('MetadataService', () => {\n it('can request metadata when requested', async () => {\n class MockMetadataBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const responseGenerator = new MockResponseGenerator();\n const mockResponse =\n responseGenerator.generateMockMetadataResponse(identifier);\n return { success: mockResponse };\n }\n }\n\n const backend = new MockMetadataBackend();\n const service = new MetadataService(backend);\n const result = await service.fetchMetadata('foo');\n expect(result.success?.metadata.identifier).to.equal('foo');\n });\n\n describe('requestMetadataValue', async () => {\n class MockMetadataBackend implements MetadataBackendInterface {\n response: any;\n async fetchMetadata(\n identifier: string,\n keypath?: string\n ): Promise<Result<any, MetadataServiceError>> {\n return {\n success: {\n result: this.response,\n },\n };\n }\n }\n\n it('can request a metadata value', async () => {\n const backend = new MockMetadataBackend();\n const service = new MetadataService(backend);\n\n let expectedResult: any = 'foo';\n backend.response = expectedResult;\n\n let result = await service.fetchMetadataValue<typeof expectedResult>(\n 'foo',\n 'metadata'\n );\n expect(result.success).to.equal(expectedResult);\n\n expectedResult = { foo: 'bar' };\n backend.response = expectedResult;\n\n result = await service.fetchMetadataValue<typeof expectedResult>(\n 'foo',\n 'metadata'\n );\n expect(result.success).to.equal(expectedResult);\n expect(result.success.foo).to.equal('bar');\n });\n });\n\n it('returns an error result if the item is not found', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n // this is unfortunate.. instead of getting an http 404 error,\n // we get an empty JSON object when an item is not found\n return { success: {} as any };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const result = await service.fetchMetadata('foo');\n expect(result.error).to.not.equal(undefined);\n expect(result.error?.type).to.equal(MetadataServiceErrorType.itemNotFound);\n\n const valueResult = await service.fetchMetadataValue('foo', 'metadata');\n expect(valueResult.error).to.not.equal(undefined);\n expect(valueResult.error?.type).to.equal(\n MetadataServiceErrorType.itemNotFound\n );\n });\n\n it('returns the network error if one occurs', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const error = new MetadataServiceError(\n MetadataServiceErrorType.networkError,\n 'network error'\n );\n return { error };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const metadataResult = await service.fetchMetadata('foo');\n expect(metadataResult.error).to.not.equal(undefined);\n expect(metadataResult.error?.type).to.equal(\n MetadataServiceErrorType.networkError\n );\n expect(metadataResult.error?.message).to.equal('network error');\n\n const metadataValueResult = await service.fetchMetadataValue('foo', 'bar');\n expect(metadataValueResult.error).to.not.equal(undefined);\n expect(metadataValueResult.error?.type).to.equal(\n MetadataServiceErrorType.networkError\n );\n expect(metadataValueResult.error?.message).to.equal('network error');\n });\n\n it('returns a decoding error if one occurs', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const error = new MetadataServiceError(\n MetadataServiceErrorType.decodingError,\n 'decoding error'\n );\n return { error };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const metadataResult = await service.fetchMetadata('foo');\n expect(metadataResult.error).to.not.equal(undefined);\n expect(metadataResult.error?.type).to.equal(\n MetadataServiceErrorType.decodingError\n );\n expect(metadataResult.error?.message).to.equal('decoding error');\n });\n});\n"]}
1
+ {"version":3,"file":"metadata-service.test.js","sourceRoot":"","sources":["../../test/metadata-service.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { expect } from '@open-wc/testing';\n\nimport { Result } from '@internetarchive/result-type';\nimport { MetadataBackendInterface } from '../src/backend/metadata-backend-interface';\nimport { MetadataService } from '../src/metadata-service';\nimport {\n MetadataServiceError,\n MetadataServiceErrorType,\n} from '../src/metadata-service-error';\nimport { MetadataResponse } from '../src/responses/metadata-response';\nimport { MockResponseGenerator } from './mock-response-generator';\n\ndescribe('MetadataService', () => {\n it('can request metadata when requested', async () => {\n class MockMetadataBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const responseGenerator = new MockResponseGenerator();\n const mockResponse =\n responseGenerator.generateMockMetadataResponse(identifier);\n return { success: mockResponse };\n }\n }\n\n const backend = new MockMetadataBackend();\n const service = new MetadataService(backend);\n const result = await service.fetchMetadata('foo');\n expect(result.success?.metadata.identifier).to.equal('foo');\n });\n\n describe('requestMetadataValue', async () => {\n class MockMetadataBackend implements MetadataBackendInterface {\n response: any;\n async fetchMetadata(\n identifier: string,\n keypath?: string,\n ): Promise<Result<any, MetadataServiceError>> {\n return {\n success: {\n result: this.response,\n },\n };\n }\n }\n\n it('can request a metadata value', async () => {\n const backend = new MockMetadataBackend();\n const service = new MetadataService(backend);\n\n let expectedResult: any = 'foo';\n backend.response = expectedResult;\n\n let result = await service.fetchMetadataValue<typeof expectedResult>(\n 'foo',\n 'metadata',\n );\n expect(result.success).to.equal(expectedResult);\n\n expectedResult = { foo: 'bar' };\n backend.response = expectedResult;\n\n result = await service.fetchMetadataValue<typeof expectedResult>(\n 'foo',\n 'metadata',\n );\n expect(result.success).to.equal(expectedResult);\n expect(result.success.foo).to.equal('bar');\n });\n });\n\n it('returns an error result if the item is not found', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n // this is unfortunate.. instead of getting an http 404 error,\n // we get an empty JSON object when an item is not found\n return { success: {} as any };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const result = await service.fetchMetadata('foo');\n expect(result.error).to.not.equal(undefined);\n expect(result.error?.type).to.equal(MetadataServiceErrorType.itemNotFound);\n\n const valueResult = await service.fetchMetadataValue('foo', 'metadata');\n expect(valueResult.error).to.not.equal(undefined);\n expect(valueResult.error?.type).to.equal(\n MetadataServiceErrorType.itemNotFound,\n );\n });\n\n it('returns the network error if one occurs', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const error = new MetadataServiceError(\n MetadataServiceErrorType.networkError,\n 'network error',\n );\n return { error };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const metadataResult = await service.fetchMetadata('foo');\n expect(metadataResult.error).to.not.equal(undefined);\n expect(metadataResult.error?.type).to.equal(\n MetadataServiceErrorType.networkError,\n );\n expect(metadataResult.error?.message).to.equal('network error');\n\n const metadataValueResult = await service.fetchMetadataValue('foo', 'bar');\n expect(metadataValueResult.error).to.not.equal(undefined);\n expect(metadataValueResult.error?.type).to.equal(\n MetadataServiceErrorType.networkError,\n );\n expect(metadataValueResult.error?.message).to.equal('network error');\n });\n\n it('returns a decoding error if one occurs', async () => {\n class MockSearchBackend implements MetadataBackendInterface {\n async fetchMetadata(\n identifier: string,\n ): Promise<Result<MetadataResponse, MetadataServiceError>> {\n const error = new MetadataServiceError(\n MetadataServiceErrorType.decodingError,\n 'decoding error',\n );\n return { error };\n }\n }\n\n const backend = new MockSearchBackend();\n const service = new MetadataService(backend);\n const metadataResult = await service.fetchMetadata('foo');\n expect(metadataResult.error).to.not.equal(undefined);\n expect(metadataResult.error?.type).to.equal(\n MetadataServiceErrorType.decodingError,\n );\n expect(metadataResult.error?.message).to.equal('decoding error');\n });\n});\n"]}
@@ -0,0 +1,53 @@
1
+ import typescriptEslint from '@typescript-eslint/eslint-plugin';
2
+ import html from 'eslint-plugin-html';
3
+ import tsParser from '@typescript-eslint/parser';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import js from '@eslint/js';
7
+ import { FlatCompat } from '@eslint/eslintrc';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const compat = new FlatCompat({
12
+ baseDirectory: __dirname,
13
+ recommendedConfig: js.configs.recommended,
14
+ allConfig: js.configs.all,
15
+ });
16
+
17
+ export default [
18
+ ...compat.extends('plugin:@typescript-eslint/recommended'),
19
+ {
20
+ plugins: {
21
+ '@typescript-eslint': typescriptEslint,
22
+ html,
23
+ },
24
+
25
+ languageOptions: {
26
+ parser: tsParser,
27
+ },
28
+
29
+ settings: {
30
+ 'import/resolver': {
31
+ node: {
32
+ extensions: ['.ts', '.tsx'],
33
+ moduleDirectory: ['node_modules', 'src', 'demo'],
34
+ },
35
+ },
36
+ },
37
+
38
+ rules: {
39
+ '@typescript-eslint/no-unsafe-function-type': 'warn',
40
+ '@typescript-eslint/no-unused-vars': 'warn',
41
+ '@typescript-eslint/no-explicit-any': 'warn',
42
+ },
43
+ },
44
+ {
45
+ ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
46
+ },
47
+ {
48
+ files: ['**/*.test.ts'],
49
+ rules: {
50
+ '@typescript-eslint/no-unused-expressions': 'off',
51
+ },
52
+ },
53
+ ];