Skip to content

Commit

Permalink
new TAJSON logic enables additional arbitrary JSON data
Browse files Browse the repository at this point in the history
  • Loading branch information
danielweck committed Nov 21, 2019
1 parent 3114f2d commit 2141370
Show file tree
Hide file tree
Showing 16 changed files with 344 additions and 589 deletions.
84 changes: 38 additions & 46 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@
"image-size": "^0.8.3",
"mime-types": "^2.1.25",
"moment": "^2.24.0",
"r2-lcp-js": "^1.0.17",
"r2-lcp-js": "^1.0.18",
"r2-utils-js": "^1.0.17",
"slugify": "^1.3.6",
"ta-json-x": "^2.5.1",
"ta-json-x": "^2.5.2",
"tslib": "^1.10.0",
"xmldom": "^0.1.27",
"xpath": "^0.0.27"
Expand All @@ -62,12 +62,12 @@
"@types/debug": "^4.1.5",
"@types/image-size": "^0.8.0",
"@types/mime-types": "^2.1.0",
"@types/node": "^12.12.7",
"@types/node": "^12.12.11",
"@types/xmldom": "^0.1.29",
"ava": "^2.4.0",
"cpy-cli": "^2.0.0",
"cross-env": "^6.0.3",
"cson": "^6.2.0",
"cson": "^6.4.0",
"eclint": "^2.8.1",
"filehound": "^1.17.3",
"git-rev-sync": "^1.12.0",
Expand Down
38 changes: 1 addition & 37 deletions src/models/metadata-belongsto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,16 @@
// https://github.com/edcarroll/ta-json
import { JsonConverter, JsonElementType, JsonObject, JsonProperty } from "ta-json-x";

import { JsonArray, JsonMap } from "../json";
import { Contributor } from "./metadata-contributor";
import { JsonContributorConverter } from "./metadata-contributor-json-converter";
import { IWithAdditionalJSON } from "./serializable";

const SERIES_JSON_PROP = "series";
const COLLECTION_JSON_PROP = "collection";

// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/0976680e25852b8a4c4802a052ba750ab3e89284/schema/metadata.schema.json#L140
@JsonObject()
export class BelongsTo implements IWithAdditionalJSON {
export class BelongsTo {

// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/0976680e25852b8a4c4802a052ba750ab3e89284/schema/metadata.schema.json#L146
Expand All @@ -42,38 +40,4 @@ export class BelongsTo implements IWithAdditionalJSON {
@JsonElementType(Contributor)
@JsonConverter(JsonContributorConverter)
public Collection!: Contributor[];

// BEGIN IWithAdditionalJSON
public AdditionalJSON!: JsonMap;
public SupportedKeys!: string[];

public parseAdditionalJSON(json: JsonMap) {
// parseAdditionalJSON(this, json);

if (this.Series) {
this.Series.forEach((cont, i) => {
cont.parseAdditionalJSON((json[SERIES_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
if (this.Collection) {
this.Collection.forEach((cont, i) => {
cont.parseAdditionalJSON((json[COLLECTION_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
}
public generateAdditionalJSON(json: JsonMap) {
// generateAdditionalJSON(this, json);

if (this.Series) {
this.Series.forEach((cont, i) => {
cont.generateAdditionalJSON((json[SERIES_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
if (this.Collection) {
this.Collection.forEach((cont, i) => {
cont.generateAdditionalJSON((json[COLLECTION_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
}
// END IWithAdditionalJSON
}
7 changes: 4 additions & 3 deletions src/models/metadata-contributor-json-converter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
// that can be found in the LICENSE file exposed on Github (readium) in the project repository.
// ==LICENSE-END==

import { IPropertyConverter, JSON as TAJSON, JsonValue } from "ta-json-x";
import { IPropertyConverter, JsonValue } from "ta-json-x";

import { Contributor } from "./metadata-contributor";
import { TaJsonDeserialize, TaJsonSerialize } from "./serializable";

// import { IStringMap } from "./metadata-multilang";

Expand All @@ -27,7 +28,7 @@ export class JsonContributorConverter implements IPropertyConverter {
// return c.Name; // IStringMap
// }
}
return TAJSON.serialize(c);
return TaJsonSerialize(c);
}

public deserialize(value: JsonValue): Contributor {
Expand Down Expand Up @@ -55,7 +56,7 @@ export class JsonContributorConverter implements IPropertyConverter {
// });
// return c;
// }
return TAJSON.deserialize<Contributor>(value, Contributor);
return TaJsonDeserialize<Contributor>(value, Contributor);
}

public collapseArrayWithSingleItem(): boolean {
Expand Down
31 changes: 2 additions & 29 deletions src/models/metadata-contributor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@ import {

import { JsonStringConverter } from "@r2-utils-js/_utils/ta-json-string-converter";

import { JsonArray, JsonMap } from "../json";
import { IStringMap } from "./metadata-multilang";
import { Link } from "./publication-link";
import { IWithAdditionalJSON } from "./serializable";

const LINKS_JSON_PROP = "links";

// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/0ac78ab5c270a608c39b4b04fc90bd9b1d281896/schema/contributor-object.schema.json
@JsonObject()
export class Contributor implements IWithAdditionalJSON {
export class Contributor {

// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/0ac78ab5c270a608c39b4b04fc90bd9b1d281896/schema/contributor-object.schema.json#L7
Expand Down Expand Up @@ -66,35 +64,10 @@ export class Contributor implements IWithAdditionalJSON {
// https://github.com/readium/webpub-manifest/blob/0ac78ab5c270a608c39b4b04fc90bd9b1d281896/schema/contributor-object.schema.json#L44
// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/ca6d887caa2d0495200fef4695f41aacb5fed2e9/schema/link.schema.json
@JsonProperty("links")
@JsonProperty(LINKS_JSON_PROP)
@JsonElementType(Link)
public Links!: Link[];

// BEGIN IWithAdditionalJSON
// tslint:disable: member-ordering
public AdditionalJSON!: JsonMap; // unused
public SupportedKeys!: string[]; // unused

public parseAdditionalJSON(json: JsonMap) {
// parseAdditionalJSON(this, json);

if (this.Links) {
this.Links.forEach((link, i) => {
link.parseAdditionalJSON((json[LINKS_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
}
public generateAdditionalJSON(json: JsonMap) {
// generateAdditionalJSON(this, json);

if (this.Links) {
this.Links.forEach((link, i) => {
link.generateAdditionalJSON((json[LINKS_JSON_PROP] as JsonArray)[i] as JsonMap);
});
}
}
// END IWithAdditionalJSON

@OnDeserialized()
// tslint:disable-next-line:no-unused-variable
// tslint:disable-next-line
Expand Down
24 changes: 12 additions & 12 deletions src/models/metadata-properties.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { JsonElementType, JsonObject, JsonProperty } from "ta-json-x";
import { Encrypted } from "@r2-lcp-js/models/metadata-encrypted";

import { JsonMap } from "../json";
import { IWithAdditionalJSON, generateAdditionalJSON, parseAdditionalJSON } from "./serializable";
import { IWithAdditionalJSON } from "./serializable";

export enum LayoutEnum {
Fixed = "fixed",
Expand Down Expand Up @@ -48,7 +48,7 @@ export enum SpreadEnum {
// regexp replace all:
// $1,
// tslint:disable-next-line:max-line-length
export const PropertiesSupportedKeys = ["contains", "layout", "orientation", "overflow", "page", "spread", "encrypted", "media-overlay"];
// export const PropertiesSupportedKeys = ["contains", "layout", "orientation", "overflow", "page", "spread", "encrypted", "media-overlay"];

// tslint:disable-next-line:max-line-length
// https://github.com/readium/webpub-manifest/blob/917c83e798e3eda42b3e9d0dc92f0fef31b16211/schema/extensions/epub/properties.schema.json
Expand Down Expand Up @@ -111,15 +111,15 @@ export class Properties implements IWithAdditionalJSON {

// BEGIN IWithAdditionalJSON
public AdditionalJSON!: JsonMap;
public get SupportedKeys() {
return PropertiesSupportedKeys;
}

public parseAdditionalJSON(json: JsonMap) {
parseAdditionalJSON(this, json);
}
public generateAdditionalJSON(json: JsonMap) {
generateAdditionalJSON(this, json);
}
// public get SupportedKeys() {
// return PropertiesSupportedKeys;
// }

// public parseAdditionalJSON(json: JsonMap) {
// parseAdditionalJSON(this, json);
// }
// public generateAdditionalJSON(json: JsonMap) {
// generateAdditionalJSON(this, json);
// }
// END IWithAdditionalJSON
}
Loading

0 comments on commit 2141370

Please sign in to comment.