Comparing version 0.20.0 to 0.20.1
@@ -20,2 +20,5 @@ export { ApiEdgeDefinition, ApiEdge, ApiEdgeMetadata } from "./src/edge/ApiEdgeDefinition"; | ||
export { ApiAction, ApiActionTriggerKind } from "./src/query/ApiAction"; | ||
export { Api, ApiInfo, ApiMetadata, ApiResolver, LocalApiResolver } from "./src/Api"; | ||
export { ApiResolver } from "./src/resolver/ApiResolver"; | ||
export { LazyApiEdge } from "./src/resolver/LazyApiEdge"; | ||
export { LocalApiResolver } from "./src/resolver/LocalApiResolver"; | ||
export { Api, ApiInfo, ApiMetadata } from "./src/Api"; |
@@ -69,5 +69,8 @@ "use strict"; | ||
exports.ApiActionTriggerKind = ApiAction_1.ApiActionTriggerKind; | ||
var LazyApiEdge_1 = require("./src/resolver/LazyApiEdge"); | ||
exports.LazyApiEdge = LazyApiEdge_1.LazyApiEdge; | ||
var LocalApiResolver_1 = require("./src/resolver/LocalApiResolver"); | ||
exports.LocalApiResolver = LocalApiResolver_1.LocalApiResolver; | ||
var Api_1 = require("./src/Api"); | ||
exports.Api = Api_1.Api; | ||
exports.LocalApiResolver = Api_1.LocalApiResolver; | ||
//# sourceMappingURL=index.js.map |
@@ -6,2 +6,3 @@ import { ApiEdgeDefinition, ApiEdgeMetadata } from "./edge/ApiEdgeDefinition"; | ||
import { ApiAction, ApiActionTriggerKind } from "./query/ApiAction"; | ||
import { ApiResolver } from "./resolver/ApiResolver"; | ||
export interface ApiInfo { | ||
@@ -28,18 +29,2 @@ title: string; | ||
} | ||
export interface ApiResolver { | ||
resolveEdge(name: string, plural: boolean): Promise<ApiEdgeDefinition | undefined>; | ||
resolveRelation(name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationOfEdge(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationTo(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationFrom(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
} | ||
export declare class LocalApiResolver implements ApiResolver { | ||
private readonly api; | ||
constructor(api: Api); | ||
resolveEdge(name: string, plural: boolean): Promise<ApiEdgeDefinition | undefined>; | ||
resolveRelation(name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationOfEdge(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationFrom(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
resolveRelationTo(edge: string, name: string): Promise<ApiEdgeRelation | undefined>; | ||
} | ||
export declare class Api { | ||
@@ -56,3 +41,3 @@ static defaultIdPostfix: string; | ||
private queryBuilder; | ||
private resolver; | ||
resolver: ApiResolver; | ||
constructor(version: string, ...edges: ApiEdgeDefinition[]); | ||
@@ -70,5 +55,5 @@ findEdge: (name: string, plural?: boolean) => Promise<ApiEdgeDefinition | undefined>; | ||
action: (name: string, execute: (scope: ApiQueryScope) => Promise<ApiQueryScope>, triggerKind?: ApiActionTriggerKind) => Api; | ||
metadata: () => ApiMetadata; | ||
metadata: () => Promise<ApiMetadata>; | ||
static fromMetadata(metadata: ApiMetadata): Promise<Api>; | ||
prepare(): Promise<void>; | ||
} |
@@ -16,29 +16,4 @@ "use strict"; | ||
const ExternalApiEdge_1 = require("./edge/ExternalApiEdge"); | ||
const LocalApiResolver_1 = require("./resolver/LocalApiResolver"); | ||
const pkg = require('../../package.json'); | ||
class LocalApiResolver { | ||
constructor(api) { | ||
this.api = api; | ||
} | ||
resolveEdge(name, plural) { | ||
if (plural) { | ||
return Promise.resolve(this.api.edges.find(edge => edge.pluralName == name)); | ||
} | ||
else { | ||
return Promise.resolve(this.api.edges.find(edge => edge.name == name)); | ||
} | ||
} | ||
resolveRelation(name) { | ||
return Promise.resolve(this.api.relations.find(relation => relation.name === name)); | ||
} | ||
resolveRelationOfEdge(edge, name) { | ||
return Promise.resolve(this.api.relations.find(relation => relation.name === name && (relation.from.pluralName === edge || relation.to.pluralName === edge))); | ||
} | ||
resolveRelationFrom(edge, name) { | ||
return Promise.resolve(this.api.relations.find(relation => relation.name === name && relation.from.pluralName === edge)); | ||
} | ||
resolveRelationTo(edge, name) { | ||
return Promise.resolve(this.api.relations.find(relation => relation.name === name && relation.to.pluralName === edge)); | ||
} | ||
} | ||
exports.LocalApiResolver = LocalApiResolver; | ||
class Api { | ||
@@ -71,3 +46,3 @@ constructor(version, ...edges) { | ||
}; | ||
this.metadata = () => { | ||
this.metadata = () => __awaiter(this, void 0, void 0, function* () { | ||
return { | ||
@@ -77,6 +52,10 @@ 'api-core': pkg.version, | ||
version: this.version, | ||
edges: this.edges.map(edge => edge.metadata()), | ||
relations: this.relations.map(relation => relation.toJSON()) | ||
edges: this.edges | ||
.filter(edge => !edge.external) | ||
.map(edge => edge.metadata()), | ||
relations: yield Promise.all(this.relations | ||
.filter(relation => !relation.external) | ||
.map(relation => relation.toJSON())) | ||
}; | ||
}; | ||
}); | ||
this.version = version; | ||
@@ -86,3 +65,3 @@ this.edges = edges; | ||
this.queryBuilder = new ApiQueryBuilder_1.ApiQueryBuilder(this); | ||
this.resolver = new LocalApiResolver(this); | ||
this.resolver = new LocalApiResolver_1.LocalApiResolver(this); | ||
} | ||
@@ -89,0 +68,0 @@ findRelation(name) { |
@@ -59,2 +59,3 @@ import { ApiEdgeRelation } from "../relations/ApiEdgeRelation"; | ||
prepare: (api: Api) => Promise<void>; | ||
resolve: () => Promise<void>; | ||
metadata: () => ApiEdgeMetadata; | ||
@@ -90,2 +91,3 @@ relation: (name: string) => Promise<ApiEdgeRelation | undefined>; | ||
prepare: (api: Api) => Promise<void>; | ||
resolve: () => Promise<void>; | ||
metadata: () => { | ||
@@ -92,0 +94,0 @@ name: string; |
@@ -23,2 +23,3 @@ "use strict"; | ||
this.external = false; | ||
this.resolve = () => Promise.resolve(); | ||
this.metadata = () => { | ||
@@ -25,0 +26,0 @@ return { |
@@ -25,3 +25,6 @@ import { ApiEdgeDefinition } from "../edge/ApiEdgeDefinition"; | ||
hasPair: boolean; | ||
toJSON(): { | ||
readonly external: boolean; | ||
private resolved; | ||
onResolve: () => void; | ||
toJSON(): Promise<{ | ||
type: string; | ||
@@ -34,4 +37,5 @@ name: string; | ||
hasPair: boolean; | ||
}; | ||
}>; | ||
static fromJSON(obj: ExportedApiEdgeRelation, api: Api): Promise<ApiEdgeRelation>; | ||
resolve(): Promise<void>; | ||
} |
@@ -14,15 +14,21 @@ "use strict"; | ||
constructor(from, to) { | ||
this.resolved = false; | ||
this.onResolve = () => { }; | ||
this.from = from; | ||
this.to = to; | ||
this.external = from.external; | ||
} | ||
toJSON() { | ||
return { | ||
type: this.getType(), | ||
name: this.name, | ||
relationId: this.relationId, | ||
relatedId: this.relatedId, | ||
from: this.from.name, | ||
to: this.to.name, | ||
hasPair: this.hasPair | ||
}; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
yield this.resolve(); | ||
return { | ||
type: this.getType(), | ||
name: this.name, | ||
relationId: this.relationId, | ||
relatedId: this.relatedId, | ||
from: this.from.name, | ||
to: this.to.name, | ||
hasPair: this.hasPair | ||
}; | ||
}); | ||
} | ||
@@ -40,4 +46,14 @@ static fromJSON(obj, api) { | ||
} | ||
resolve() { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
if (this.resolved) | ||
return; | ||
this.resolved = true; | ||
yield this.from.resolve(); | ||
yield this.to.resolve(); | ||
this.onResolve(); | ||
}); | ||
} | ||
} | ||
exports.ApiEdgeRelation = ApiEdgeRelation; | ||
//# sourceMappingURL=ApiEdgeRelation.js.map |
@@ -31,2 +31,6 @@ export {ApiEdgeDefinition, ApiEdge, ApiEdgeMetadata} from "./src/edge/ApiEdgeDefinition"; | ||
export {Api, ApiInfo, ApiMetadata, ApiResolver, LocalApiResolver} from "./src/Api"; | ||
export {ApiResolver} from "./src/resolver/ApiResolver"; | ||
export {LazyApiEdge} from "./src/resolver/LazyApiEdge"; | ||
export {LocalApiResolver} from "./src/resolver/LocalApiResolver"; | ||
export {Api, ApiInfo, ApiMetadata} from "./src/Api"; |
{ | ||
"name": "api-core", | ||
"version": "0.20.0", | ||
"version": "0.20.1", | ||
"description": "Model-based dynamic multi-level APIs for any provider, plus multiple consumption channels", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -9,2 +9,4 @@ import {ApiEdgeDefinition, ApiEdgeMetadata} from "./edge/ApiEdgeDefinition"; | ||
import {ExternalApiEdge} from "./edge/ExternalApiEdge"; | ||
import {ApiResolver} from "./resolver/ApiResolver"; | ||
import {LocalApiResolver} from "./resolver/LocalApiResolver"; | ||
const pkg = require('../../package.json'); | ||
@@ -35,61 +37,2 @@ | ||
export interface ApiResolver { | ||
resolveEdge(name: string, plural: boolean): Promise<ApiEdgeDefinition|undefined>; | ||
resolveRelation(name: string): Promise<ApiEdgeRelation|undefined>; | ||
resolveRelationOfEdge(edge: string, name: string): Promise<ApiEdgeRelation|undefined>; | ||
resolveRelationTo(edge: string, name: string): Promise<ApiEdgeRelation|undefined>; | ||
resolveRelationFrom(edge: string, name: string): Promise<ApiEdgeRelation|undefined>; | ||
} | ||
export class LocalApiResolver implements ApiResolver { | ||
private readonly api: Api; | ||
constructor(api: Api) { | ||
this.api = api | ||
} | ||
resolveEdge(name: string, plural: boolean) { | ||
if(plural) { | ||
return Promise.resolve( | ||
this.api.edges.find(edge => edge.pluralName == name) | ||
) | ||
} | ||
else { | ||
return Promise.resolve( | ||
this.api.edges.find(edge => edge.name == name) | ||
) | ||
} | ||
} | ||
resolveRelation(name: string) { | ||
return Promise.resolve( | ||
this.api.relations.find(relation => relation.name === name) | ||
) | ||
} | ||
resolveRelationOfEdge(edge: string, name: string) { | ||
return Promise.resolve( | ||
this.api.relations.find(relation => | ||
relation.name === name && (relation.from.pluralName === edge || relation.to.pluralName === edge) | ||
) | ||
) | ||
} | ||
resolveRelationFrom(edge: string, name: string) { | ||
return Promise.resolve( | ||
this.api.relations.find(relation => | ||
relation.name === name && relation.from.pluralName === edge | ||
) | ||
) | ||
} | ||
resolveRelationTo(edge: string, name: string) { | ||
return Promise.resolve( | ||
this.api.relations.find(relation => | ||
relation.name === name && relation.to.pluralName === edge | ||
) | ||
) | ||
} | ||
} | ||
export class Api { | ||
@@ -108,3 +51,3 @@ static defaultIdPostfix: string = "Id"; | ||
private queryBuilder: ApiQueryBuilder; | ||
private resolver: ApiResolver; | ||
resolver: ApiResolver; | ||
@@ -179,3 +122,3 @@ constructor(version: string, ...edges: ApiEdgeDefinition[]) { | ||
metadata = (): ApiMetadata => { | ||
metadata = async (): Promise<ApiMetadata> => { | ||
return { | ||
@@ -185,4 +128,8 @@ 'api-core': pkg.version, | ||
version: this.version, | ||
edges: this.edges.map(edge => edge.metadata()), | ||
relations: this.relations.map(relation => relation.toJSON()) | ||
edges: this.edges | ||
.filter(edge => !edge.external) | ||
.map(edge => edge.metadata()), | ||
relations: await Promise.all(this.relations | ||
.filter(relation => !relation.external) | ||
.map(relation => relation.toJSON())) | ||
} | ||
@@ -189,0 +136,0 @@ }; |
@@ -61,2 +61,3 @@ import {ApiEdgeRelation} from "../relations/ApiEdgeRelation"; | ||
prepare: (api: Api) => Promise<void>; | ||
resolve: () => Promise<void>; | ||
metadata: () => ApiEdgeMetadata | ||
@@ -99,2 +100,4 @@ relation: (name: string) => Promise<ApiEdgeRelation|undefined>; | ||
resolve = () => Promise.resolve(); | ||
metadata = () => { | ||
@@ -101,0 +104,0 @@ return { |
@@ -22,3 +22,4 @@ import {ApiEdgeDefinition} from "../edge/ApiEdgeDefinition"; | ||
this.from = from; | ||
this.to = to | ||
this.to = to; | ||
this.external = from.external; | ||
} | ||
@@ -32,4 +33,9 @@ | ||
hasPair: boolean; | ||
readonly external: boolean; | ||
toJSON() { | ||
private resolved = false; | ||
onResolve: () => void = () => {}; | ||
async toJSON() { | ||
await this.resolve(); | ||
return { | ||
@@ -58,2 +64,11 @@ type: this.getType(), | ||
} | ||
async resolve() { | ||
if(this.resolved) return; | ||
this.resolved = true; | ||
await this.from.resolve(); | ||
await this.to.resolve(); | ||
this.onResolve() | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
670416
176
8233