Skip to content

Commit 719eef3

Browse files
authored
Merge pull request #9 from klerick/new-sdk-version
feat(json-api-nestjs-sdk): new version sdk
2 parents 4dfcf0a + 247d9a9 commit 719eef3

File tree

5 files changed

+142
-7
lines changed

5 files changed

+142
-7
lines changed

apps/example-react-client/src/app/app.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import styles from './app.module.css';
22
import NxWelcome from './nx-welcome';
3-
import { getInstance } from 'json-api-nestjs-sdk';
3+
import { getInstance, getInstancePromise } from 'json-api-nestjs-sdk';
44
import { BookList, Users, Roles, Comments, Addresses } from 'database/entity';
55

66
const service = getInstance(
@@ -17,8 +17,16 @@ const service = getInstance(
1717
}
1818
);
1919

20+
const servicePromise = getInstancePromise();
21+
2022
export function App() {
21-
service.getOne<Users>(Users, 17).subscribe((r) => console.log(r));
23+
service
24+
.getOne<Users>(Users, 17, { include: ['addresses'] })
25+
.subscribe((r) => console.log(r));
26+
27+
servicePromise
28+
.getOne<Users>(Users, 17, { include: ['addresses'] })
29+
.then((r) => console.log(r));
2230
return (
2331
<>
2432
<NxWelcome title="example-react-client" />

babel.config.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"presets": [],
3+
"babelrcRoots": ["*"]
4+
}

libs/json-api-nestjs-sdk/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ You can find more example [here](https://github.com/klerick/nestjs-json-api/blob
9292
## Using with react, etc
9393

9494
```typescript
95-
import { getInstance } from 'json-api-nestjs-sdk';
95+
import {
96+
getInstance,
97+
getInstancePromise // If you want Promise as result
98+
} from 'json-api-nestjs-sdk';
9699
import { Users } from 'database';
97100

98101
const service = getInstance(
@@ -105,6 +108,4 @@ const service = getInstance(
105108
}
106109
);
107110
```
108-
109-
You should add [linker plugin](https://angular.io/guide/creating-libraries#consuming-partial-ivy-code-outside-the-angular-cli) in your webpack config
110-
You can find example webpack config [here](https://github.com/klerick/nestjs-json-api/blob/master/apps/example-react-client/webpack.config.ts)
111+
You should add [linker plugin](https://angular.io/guide/creating-libraries#consuming-partial-ivy-code-outside-the-angular-cli) in your webpack config. You can find example webpack config [here](https://github.com/klerick/nestjs-json-api/blob/master/apps/example-react-client/webpack.config.ts)

libs/json-api-nestjs-sdk/src/lib/init.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import {
2-
ENVIRONMENT_INITIALIZER,
32
EnvironmentInjector,
43
NgZone,
54
StaticProvider,
65
ɵcreateInjector as createInjector,
76
} from '@angular/core';
87
import { BrowserModule, platformBrowser } from '@angular/platform-browser';
8+
import { firstValueFrom, Observable } from 'rxjs';
99

1010
import { JsonApiSdkConfig, ListEntities } from './token/json-api-sdk';
1111
import { JsonApiSdkService } from './service/json-api-sdk/json-api-sdk.service';
1212
import { JsonApiUtilsService } from './service/json-api-utils/json-api-utils.service';
1313
import { JsonApiNestjsSdkModule } from './json-api-nestjs-sdk.module';
1414
import { NoopNgZone } from './utils/noop-ng-zone';
15+
import { JsonApiSdkServicePromise } from './types';
1516

1617
let JsonApiSdkServiceLink: JsonApiSdkService;
18+
let JsonApiSdkServiceLinkPromise: JsonApiSdkServicePromise;
1719

1820
export function getInstance(
1921
config: JsonApiSdkConfig,
@@ -62,3 +64,37 @@ export function getInstance(...arg: any[]): JsonApiSdkService {
6264
contextInjector.get<JsonApiSdkService>(JsonApiSdkService);
6365
return JsonApiSdkServiceLink;
6466
}
67+
68+
export function getInstancePromise(
69+
config: JsonApiSdkConfig,
70+
entities: ListEntities
71+
): JsonApiSdkServicePromise;
72+
export function getInstancePromise(): JsonApiSdkServicePromise;
73+
export function getInstancePromise(...arg: any[]): JsonApiSdkServicePromise {
74+
if (JsonApiSdkServiceLinkPromise) {
75+
return JsonApiSdkServiceLinkPromise;
76+
}
77+
78+
const instService = getInstance(arg[0], arg[1]);
79+
80+
JsonApiSdkServiceLinkPromise = new Proxy<JsonApiSdkServicePromise>(
81+
instService as any,
82+
{
83+
get(
84+
target: JsonApiSdkServicePromise,
85+
p: string | symbol,
86+
receiver: any
87+
): any {
88+
const value = Reflect.get(target, p);
89+
if (typeof value === 'function') {
90+
return (...args: typeof value.arguments) =>
91+
firstValueFrom(value.bind(target)(...args));
92+
} else {
93+
return value;
94+
}
95+
},
96+
}
97+
);
98+
99+
return JsonApiSdkServiceLinkPromise;
100+
}

libs/json-api-nestjs-sdk/src/lib/types/index.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ import {
99
OperandsRelation,
1010
EntityRelation,
1111
ElementType,
12+
Meta,
1213
} from 'json-api-nestjs';
1314

15+
import { ObjectLiteral, ObjectType } from 'typeorm/browser';
16+
import { Observable } from 'rxjs';
17+
import { EntityArray } from '../utils';
18+
1419
export declare type Filter<T> = {
1520
target?: Partial<
1621
{
@@ -38,3 +43,84 @@ export type QueryParamsForOneItem<T> = Pick<
3843
QueryParams<T>,
3944
QueryField.include | QueryField.filter | QueryField.fields
4045
>;
46+
47+
export interface JsonApiSdkServicePromise {
48+
getAll<Entity extends ObjectLiteral>(
49+
resource: ObjectType<Entity>,
50+
params: QueryParams<Entity>,
51+
forAllPage: boolean
52+
): Promise<EntityArray<Entity>>;
53+
54+
getOne<Entity extends ObjectLiteral>(
55+
resource: ObjectType<Entity>,
56+
id: string | number
57+
): Promise<Entity>;
58+
getOne<Entity extends ObjectLiteral, MetaData extends Meta>(
59+
resource: ObjectType<Entity>,
60+
id: string | number,
61+
returnMeta: boolean
62+
): Promise<{ entity: Entity; meta: MetaData }>;
63+
getOne<Entity extends ObjectLiteral>(
64+
entity: ObjectType<Entity>,
65+
id: string | number,
66+
params: QueryParamsForOneItem<Entity>
67+
): Promise<Entity>;
68+
getOne<Entity extends ObjectLiteral>(
69+
resource: ObjectType<Entity>,
70+
id: string | number,
71+
returnMeta: boolean
72+
): Promise<{ entity: Entity; meta: Meta }>;
73+
getOne<Entity extends ObjectLiteral, MetaData extends Meta>(
74+
entity: ObjectType<Entity>,
75+
id: string | number,
76+
params: QueryParamsForOneItem<Entity>,
77+
returnMeta: boolean
78+
): Promise<{ entity: Entity; meta: MetaData }>;
79+
getOne<Entity extends ObjectLiteral>(
80+
entity: ObjectType<Entity>,
81+
id: string | number,
82+
params: QueryParamsForOneItem<Entity>,
83+
returnMeta: boolean
84+
): Promise<{ entity: Entity; meta: Meta }>;
85+
86+
postOne<Entity extends ObjectLiteral>(entity: Entity): Promise<Entity>;
87+
postOne<Entity extends ObjectLiteral>(
88+
entity: Entity,
89+
returnMeta: boolean
90+
): Promise<{ entity: Entity; meta: Meta }>;
91+
postOne<Entity extends ObjectLiteral, MetaData extends Meta>(
92+
entity: Entity,
93+
returnMeta: boolean
94+
): Promise<{ entity: Entity; meta: MetaData }>;
95+
patchOne<Entity extends ObjectLiteral>(entity: Entity): Promise<Entity>;
96+
patchOne<Entity extends ObjectLiteral, MetaData extends Meta>(
97+
entity: Entity,
98+
returnMeta: boolean
99+
): Promise<{ entity: Entity; meta: MetaData }>;
100+
patchOne<Entity extends ObjectLiteral>(
101+
entity: Entity,
102+
returnMeta: boolean
103+
): Promise<{ entity: Entity; meta: any }>;
104+
105+
deleteOne<Entity extends ObjectLiteral>(entity: Entity): Promise<void>;
106+
107+
getRelationships<Entity extends ObjectLiteral>(
108+
entity: Entity,
109+
relationType: EntityRelation<Entity>
110+
): Promise<string[] | string>;
111+
112+
patchRelationships<Entity extends ObjectLiteral>(
113+
entity: Entity,
114+
relationType: EntityRelation<Entity>
115+
): Promise<string[] | string>;
116+
117+
postRelationships<Entity extends ObjectLiteral>(
118+
entity: Entity,
119+
relationType: EntityRelation<Entity>
120+
): Promise<string[] | string>;
121+
122+
deleteRelationships<Entity extends ObjectLiteral>(
123+
entity: Entity,
124+
relationType: EntityRelation<Entity>
125+
): Promise<void>;
126+
}

0 commit comments

Comments
 (0)