@superbia/untrue 2.1.8 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Api.d.ts +10 -10
- package/dist/Api.js +2 -2
- package/dist/DocumentContext.d.ts +11 -9
- package/dist/DocumentContext.js +32 -14
- package/dist/RequestContext.d.ts +14 -13
- package/dist/RequestContext.js +22 -1
- package/dist/SuperbiaContext.d.ts +6 -8
- package/dist/SuperbiaContext.js +6 -26
- package/dist/index.d.ts +2 -2
- package/package.json +2 -2
package/dist/Api.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Context, State } from "untrue";
|
|
2
2
|
import { Client, EndpointRecord, ResponseResult } from "@superbia/client";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export default class Api<
|
|
3
|
+
import { DocumentContext, ApiDocuments } from "./DocumentContext";
|
|
4
|
+
import { RequestContext, ApiRequest, RequestResult } from "./RequestContext";
|
|
5
|
+
import { IdDocumentRecord } from "./SuperbiaContext";
|
|
6
|
+
export default class Api<O extends string, K extends IdDocumentRecord<O>, M extends EndpointRecord, N extends EndpointRecord = {}, P = any> extends Context<State, P> {
|
|
7
7
|
readonly client: Client<M, N>;
|
|
8
|
-
readonly documents: DocumentContext<
|
|
9
|
-
readonly requests: RequestContext<
|
|
10
|
-
constructor(client: Client<M, N>, idKey
|
|
11
|
-
useDocuments<W>(selector: (documents:
|
|
12
|
-
useRequest<Y extends ResponseResult, W, X extends any[] = any[]>(key: string, selector: (request:
|
|
13
|
-
useLoad<Y extends ResponseResult, W, X extends any[]>(key: string, selector: (request:
|
|
8
|
+
readonly documents: DocumentContext<O, K>;
|
|
9
|
+
readonly requests: RequestContext<O, M>;
|
|
10
|
+
constructor(client: Client<M, N>, idKey: string);
|
|
11
|
+
useDocuments<W>(selector: (documents: ApiDocuments<O, K>) => W): W;
|
|
12
|
+
useRequest<Y extends ResponseResult, W, X extends any[] = any[]>(key: string, selector: (request: ApiRequest<RequestResult<O, Y>>) => W, requester?: (...args: X) => Promise<Y>): [W, (...args: X) => Promise<void>];
|
|
13
|
+
useLoad<Y extends ResponseResult, W, X extends any[]>(key: string, selector: (request: ApiRequest<RequestResult<O, Y>>) => W, loader: (...args: X) => Promise<Y>): [W, (...args: X) => Promise<void>];
|
|
14
14
|
useRequestKey(params?: any[]): string;
|
|
15
15
|
}
|
package/dist/Api.js
CHANGED
|
@@ -5,7 +5,7 @@ const uuid_1 = require("uuid");
|
|
|
5
5
|
const DocumentContext_1 = require("./DocumentContext");
|
|
6
6
|
const RequestContext_1 = require("./RequestContext");
|
|
7
7
|
class Api extends untrue_1.Context {
|
|
8
|
-
constructor(client, idKey
|
|
8
|
+
constructor(client, idKey) {
|
|
9
9
|
super();
|
|
10
10
|
this.client = client;
|
|
11
11
|
this.documents = new DocumentContext_1.DocumentContext(client, idKey);
|
|
@@ -85,8 +85,8 @@ class Api extends untrue_1.Context {
|
|
|
85
85
|
throw new Error('Request is in "error" state.');
|
|
86
86
|
}
|
|
87
87
|
const tmpResult = request.result;
|
|
88
|
-
let tmpPagination;
|
|
89
88
|
let endpointName;
|
|
89
|
+
let tmpPagination;
|
|
90
90
|
let rethrow = false;
|
|
91
91
|
this.client.once("request", (endpoints) => {
|
|
92
92
|
const keys = Object.keys(endpoints);
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { Client, Result, ResponseResult
|
|
2
|
-
import {
|
|
3
|
-
export type
|
|
4
|
-
[K in keyof T]: ParsedResult<T[K]
|
|
1
|
+
import { Client, Result, ResponseResult } from "@superbia/client";
|
|
2
|
+
import { IdDocument, IdDocumentRecord, ParsedResult, SuperbiaContext } from "./SuperbiaContext";
|
|
3
|
+
export type ApiDocument<O extends string, T extends IdDocument<O>> = {
|
|
4
|
+
[K in keyof T]: ParsedResult<O, T[K]>;
|
|
5
5
|
};
|
|
6
|
-
export type
|
|
7
|
-
[K in keyof T]: Record<string, Result<
|
|
6
|
+
export type ApiDocuments<O extends string, T extends IdDocumentRecord<O>> = Partial<{
|
|
7
|
+
[K in keyof T]: Record<string, Result<ApiDocument<O, T[K]>>>;
|
|
8
8
|
}>;
|
|
9
|
-
export declare class DocumentContext<
|
|
10
|
-
data:
|
|
11
|
-
|
|
9
|
+
export declare class DocumentContext<O extends string, K extends IdDocumentRecord<O>> extends SuperbiaContext {
|
|
10
|
+
data: ApiDocuments<O, K>;
|
|
11
|
+
private updateAfterResultLoop;
|
|
12
|
+
constructor(client: Client<any, any>, idKey: string);
|
|
12
13
|
handleResult(result: ResponseResult): void;
|
|
14
|
+
private parseResultValue;
|
|
13
15
|
}
|
package/dist/DocumentContext.js
CHANGED
|
@@ -6,6 +6,7 @@ class DocumentContext extends SuperbiaContext_1.SuperbiaContext {
|
|
|
6
6
|
constructor(client, idKey) {
|
|
7
7
|
super(idKey);
|
|
8
8
|
this.data = {};
|
|
9
|
+
this.updateAfterResultLoop = false;
|
|
9
10
|
const listener = (endpoints, emitter) => {
|
|
10
11
|
emitter.on("result", (result) => {
|
|
11
12
|
this.handleResult(result);
|
|
@@ -15,25 +16,42 @@ class DocumentContext extends SuperbiaContext_1.SuperbiaContext {
|
|
|
15
16
|
client.on("subscribe", listener);
|
|
16
17
|
}
|
|
17
18
|
handleResult(result) {
|
|
18
|
-
const
|
|
19
|
-
for (const
|
|
20
|
-
this.parseResultValue(
|
|
19
|
+
const endpointResults = Object.values(result);
|
|
20
|
+
for (const endpointResult of endpointResults) {
|
|
21
|
+
this.parseResultValue(endpointResult);
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return;
|
|
23
|
+
if (this.updateAfterResultLoop) {
|
|
24
|
+
this.update();
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
this.updateAfterResultLoop = false;
|
|
27
|
+
}
|
|
28
|
+
parseResultValue(value) {
|
|
29
|
+
if (value === null) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(value)) {
|
|
33
|
+
return value.map((tmpValue) => this.parseResultValue(tmpValue));
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === "object") {
|
|
36
|
+
const tmpValue = {};
|
|
37
|
+
for (const key in value) {
|
|
38
|
+
tmpValue[key] = this.parseResultValue(value[key]);
|
|
39
|
+
}
|
|
40
|
+
const isIdDocument = this.isIdDocument(value);
|
|
41
|
+
if (!isIdDocument) {
|
|
42
|
+
return tmpValue;
|
|
30
43
|
}
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
44
|
+
const id = value[this.idKey];
|
|
45
|
+
const typename = value[this.typenameKey];
|
|
46
|
+
const documents = this.data;
|
|
47
|
+
if (!(typename in documents)) {
|
|
48
|
+
documents[typename] = {};
|
|
34
49
|
}
|
|
50
|
+
documents[typename][id] = tmpValue;
|
|
51
|
+
this.updateAfterResultLoop = true;
|
|
52
|
+
return id;
|
|
35
53
|
}
|
|
36
|
-
|
|
54
|
+
return value;
|
|
37
55
|
}
|
|
38
56
|
}
|
|
39
57
|
exports.DocumentContext = DocumentContext;
|
package/dist/RequestContext.d.ts
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
import { Result, Pagination, EndpointRecord, ResponseResult } from "@superbia/client";
|
|
2
2
|
import { ParsedResult, SuperbiaContext } from "./SuperbiaContext";
|
|
3
|
-
export declare class PaginationResult<T extends Pagination<any
|
|
3
|
+
export declare class PaginationResult<O extends string, T extends Pagination<any>> {
|
|
4
4
|
loading: boolean;
|
|
5
|
-
result: ParsedResult<
|
|
6
|
-
error:
|
|
5
|
+
result: ParsedResult<O, T>;
|
|
6
|
+
error: any;
|
|
7
7
|
constructor({ loading, result, error, }: {
|
|
8
8
|
loading: boolean;
|
|
9
|
-
result: ParsedResult<
|
|
10
|
-
error:
|
|
9
|
+
result: ParsedResult<O, T>;
|
|
10
|
+
error: any;
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
|
-
export type RequestResult<
|
|
14
|
-
[K in keyof T]: T[K] extends Pagination<any> ? PaginationResult<T[K]
|
|
13
|
+
export type RequestResult<O extends string, T extends ResponseResult> = {
|
|
14
|
+
[K in keyof T]: T[K] extends Pagination<any> ? PaginationResult<O, T[K]> : ParsedResult<O, T[K]>;
|
|
15
15
|
};
|
|
16
|
-
export type
|
|
16
|
+
export type ApiRequest<T extends ResponseResult> = {
|
|
17
17
|
loading: boolean;
|
|
18
18
|
done: boolean;
|
|
19
19
|
result: T | null;
|
|
20
|
-
error:
|
|
20
|
+
error: any;
|
|
21
21
|
};
|
|
22
|
-
export type
|
|
22
|
+
export type ApiRequests<O extends string, T extends EndpointRecord> = Record<string, ApiRequest<Partial<RequestResult<O, {
|
|
23
23
|
[K in keyof T]: Result<T[K]["result"]>;
|
|
24
|
-
}
|
|
25
|
-
export declare class RequestContext<
|
|
26
|
-
data:
|
|
24
|
+
}>>>>;
|
|
25
|
+
export declare class RequestContext<O extends string, M extends EndpointRecord> extends SuperbiaContext {
|
|
26
|
+
data: ApiRequests<O, M>;
|
|
27
27
|
parseResult(result: ResponseResult): ResponseResult;
|
|
28
|
+
private parseResultValue;
|
|
28
29
|
}
|
package/dist/RequestContext.js
CHANGED
|
@@ -23,7 +23,7 @@ class RequestContext extends SuperbiaContext_1.SuperbiaContext {
|
|
|
23
23
|
if (endpointResult !== null &&
|
|
24
24
|
typeof endpointResult === "object" &&
|
|
25
25
|
this.typenameKey in endpointResult &&
|
|
26
|
-
endpointResult[this.typenameKey]
|
|
26
|
+
endpointResult[this.typenameKey] === "__pagination__") {
|
|
27
27
|
tmpEndpointResult = new PaginationResult({
|
|
28
28
|
loading: false,
|
|
29
29
|
result: this.parseResultValue(endpointResult),
|
|
@@ -37,5 +37,26 @@ class RequestContext extends SuperbiaContext_1.SuperbiaContext {
|
|
|
37
37
|
}
|
|
38
38
|
return tmpResult;
|
|
39
39
|
}
|
|
40
|
+
parseResultValue(value) {
|
|
41
|
+
if (value === null) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
return value.map((tmpValue) => this.parseResultValue(tmpValue));
|
|
46
|
+
}
|
|
47
|
+
if (typeof value === "object") {
|
|
48
|
+
const isIdDocument = this.isIdDocument(value);
|
|
49
|
+
if (isIdDocument) {
|
|
50
|
+
const id = value[this.idKey];
|
|
51
|
+
return id;
|
|
52
|
+
}
|
|
53
|
+
const tmpValue = {};
|
|
54
|
+
for (const key in value) {
|
|
55
|
+
tmpValue[key] = this.parseResultValue(value[key]);
|
|
56
|
+
}
|
|
57
|
+
return tmpValue;
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
40
61
|
}
|
|
41
62
|
exports.RequestContext = RequestContext;
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { Context } from "untrue";
|
|
2
|
-
|
|
2
|
+
import { Document } from "@superbia/client";
|
|
3
|
+
export type IdDocument<O extends string> = Document & {
|
|
3
4
|
[K in O]: string;
|
|
4
5
|
};
|
|
5
|
-
export type
|
|
6
|
-
|
|
6
|
+
export type IdDocumentRecord<O extends string> = Record<string, IdDocument<O>>;
|
|
7
|
+
export type ParsedResult<O extends string, T> = T extends string | number | boolean | null ? T : T extends IdDocument<O> ? string : {
|
|
8
|
+
[K in keyof T]: ParsedResult<O, T[K]>;
|
|
7
9
|
};
|
|
8
|
-
export type DocumentSchema = Record<string, any>;
|
|
9
|
-
export type DocumentSchemaRecord = Record<string, DocumentSchema>;
|
|
10
|
-
export type DocumentData = Record<string, Record<string, DocumentSchema>>;
|
|
11
10
|
export declare class SuperbiaContext extends Context {
|
|
12
11
|
protected idKey: string;
|
|
13
12
|
protected typenameKey: string;
|
|
14
13
|
constructor(idKey: string);
|
|
15
|
-
|
|
14
|
+
protected isIdDocument(value: Record<string, any>): boolean;
|
|
16
15
|
}
|
|
17
|
-
export {};
|
package/dist/SuperbiaContext.js
CHANGED
|
@@ -6,33 +6,13 @@ class SuperbiaContext extends untrue_1.Context {
|
|
|
6
6
|
constructor(idKey) {
|
|
7
7
|
super();
|
|
8
8
|
this.idKey = idKey;
|
|
9
|
-
this.typenameKey = "
|
|
9
|
+
this.typenameKey = "__typename__";
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return result.map((element) => this.parseResultValue(element, data));
|
|
17
|
-
}
|
|
18
|
-
if (typeof result === "object") {
|
|
19
|
-
const tmpResult = {};
|
|
20
|
-
for (const key in result) {
|
|
21
|
-
tmpResult[key] = this.parseResultValue(result[key], data);
|
|
22
|
-
}
|
|
23
|
-
const isDocument = this.idKey in result && this.typenameKey in result;
|
|
24
|
-
if (!isDocument) {
|
|
25
|
-
return tmpResult;
|
|
26
|
-
}
|
|
27
|
-
const id = result[this.idKey];
|
|
28
|
-
const typename = result[this.typenameKey];
|
|
29
|
-
if (!(typename in data)) {
|
|
30
|
-
data[typename] = {};
|
|
31
|
-
}
|
|
32
|
-
data[typename][id] = tmpResult;
|
|
33
|
-
return result[this.idKey];
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
11
|
+
isIdDocument(value) {
|
|
12
|
+
return (this.idKey in value &&
|
|
13
|
+
this.typenameKey in value &&
|
|
14
|
+
typeof value[this.idKey] === "string" &&
|
|
15
|
+
typeof value[this.typenameKey] === "string");
|
|
36
16
|
}
|
|
37
17
|
}
|
|
38
18
|
exports.SuperbiaContext = SuperbiaContext;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default } from "./Api";
|
|
2
2
|
export { ParsedResult } from "./SuperbiaContext";
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { ApiDocument, ApiDocuments } from "./DocumentContext";
|
|
4
|
+
export { ApiRequest, ApiRequests, RequestResult, PaginationResult, } from "./RequestContext";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superbia/untrue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Integrate Superbia and Untrue.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
],
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@superbia/client": "^2.
|
|
21
|
+
"@superbia/client": "^2.2.2",
|
|
22
22
|
"untrue": "^5.15.2"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|