Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WEBDEV-7246: Extract item metadata #63

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
23 changes: 1 addition & 22 deletions index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export { Metadata } from './src/models/metadata';
export { ItemHit } from './src/models/hit-types/item-hit';
export { TextHit } from './src/models/hit-types/text-hit';
export { SearchResult, HitType } from './src/models/hit-types/hit';
Expand All @@ -8,27 +7,7 @@ export {
Bucket,
} from './src/models/aggregation';

export { DateField } from './src/models/metadata-fields/field-types/date';

export { NumberField } from './src/models/metadata-fields/field-types/number';

export { StringField } from './src/models/metadata-fields/field-types/string';

export { BooleanField } from './src/models/metadata-fields/field-types/boolean';

export { ByteField } from './src/models/metadata-fields/field-types/byte';

export { DurationField } from './src/models/metadata-fields/field-types/duration';

export { PageProgressionField } from './src/models/metadata-fields/field-types/page-progression';

export { MediaTypeField } from './src/models/metadata-fields/field-types/mediatype';

export {
MetadataFieldInterface,
MetadataField,
} from './src/models/metadata-fields/metadata-field';

export { SearchMetadata } from './src/models/search-metadata';
export { SearchResponse } from './src/responses/search-response';
export { SearchResponseHeader } from './src/responses/search-response-header';
export { SearchResponseSessionContext } from './src/responses/search-response-session-context';
Expand Down
6,278 changes: 3,982 additions & 2,296 deletions package-lock.json

Large diffs are not rendered by default.

12 changes: 7 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@internetarchive/search-service",
"version": "1.4.1",
"version": "2.0.0",
"description": "A search service for the Internet Archive",
"license": "AGPL-3.0-only",
"main": "dist/index.js",
Expand Down Expand Up @@ -30,13 +30,15 @@
"ghpages:generate": "gh-pages -t -d ghpages -m \"Build for $(git log --pretty=format:\"%h %an %ai %s\" -n1) [skip ci]\""
},
"devDependencies": {
"@internetarchive/field-parsers": "^0.1.4",
"@open-wc/eslint-config": "^4.2.0",
"@open-wc/testing": "^2.0.0",
"@open-wc/testing": "^4.0.0",
"@types/mocha": "^10.0.10",
"@types/node": "13.11.1",
"@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.16.1",
"@web/dev-server": "^0.0.12",
"@web/test-runner": "^0.13.23",
"@web/test-runner": "^0.19.0",
"concurrently": "^5.1.0",
"eslint": "^7.21.0",
"eslint-config-prettier": "^6.11.0",
Expand Down Expand Up @@ -75,9 +77,9 @@
]
},
"dependencies": {
"@internetarchive/field-parsers": "^0.1.4",
"@internetarchive/iaux-item-metadata": "^1.0.4",
"@internetarchive/result-type": "^0.0.1",
"decorator-cache-getter": "^1.0.0",
"typescript-memoize": "^1.1.0"
"typescript-memoize": "^1.1.1"
}
}
42 changes: 19 additions & 23 deletions src/models/hit-types/favorited-search-hit.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Memoize } from 'typescript-memoize';
import type { Metadata } from '../metadata';
import { DateField } from '../metadata-fields/field-types/date';
import { StringField } from '../metadata-fields/field-types/string';
import type {
DateField,
StringField,
} from '@internetarchive/iaux-item-metadata';
import { SearchMetadata } from '../search-metadata';

/**
* A model that describes an item hit from a Metadata Search via the PPS endpoint.
Expand All @@ -19,10 +20,13 @@
* This is the raw hit response; useful for inspecting the raw data
* returned from the server.
*/
rawMetadata?: Record<string, any>;
readonly rawMetadata: Readonly<Record<string, any>>;

readonly fields: Readonly<SearchMetadata>;

constructor(json: Record<string, any>) {
this.rawMetadata = json;
this.fields = new SearchMetadata(json.fields ?? {});
}

/**
Expand All @@ -31,39 +35,31 @@
* _Note_: This is a plain string instead of a `MetadataField` since it's
* the primary key of the item.
*/
get identifier(): typeof Metadata.prototype.identifier {
return this.rawMetadata?.fields.query;
get identifier(): string | undefined {
return this.fields.query?.value;

Check warning on line 39 in src/models/hit-types/favorited-search-hit.ts

View check run for this annotation

Codecov / codecov/patch

src/models/hit-types/favorited-search-hit.ts#L39

Added line #L39 was not covered by tests
}

/** Optional. */
@Memoize() get title(): StringField | undefined {
return this.rawMetadata?.fields?.title
? new StringField(this.rawMetadata.fields.title)
: undefined;
get title(): StringField | undefined {
return this.fields.title;
}

/** Optional. */
@Memoize() get query(): typeof Metadata.prototype.query {
return this.rawMetadata?.fields?.query
? new StringField(this.rawMetadata.fields.query)
: undefined;
get query(): StringField | undefined {
return this.fields.query;
}

/**
* Optional.
*/
@Memoize() get date_favorited(): typeof Metadata.prototype.date_favorited {
return this.rawMetadata?.fields?.date_favorited
? new DateField(this.rawMetadata.fields.date_favorited)
: undefined;
get date_favorited(): DateField | undefined {
return this.fields.date_favorited;

Check warning on line 56 in src/models/hit-types/favorited-search-hit.ts

View check run for this annotation

Codecov / codecov/patch

src/models/hit-types/favorited-search-hit.ts#L56

Added line #L56 was not covered by tests
}

/**
* Optional.
*/
@Memoize() get __href__(): typeof Metadata.prototype.__href__ {
return this.rawMetadata?.fields?.__href__
? new StringField(this.rawMetadata.fields.__href__)
: undefined;
get __href__(): StringField | undefined {
return this.fields.__href__;

Check warning on line 63 in src/models/hit-types/favorited-search-hit.ts

View check run for this annotation

Codecov / codecov/patch

src/models/hit-types/favorited-search-hit.ts#L63

Added line #L63 was not covered by tests
}
}
Loading
Loading