@napp/dti-client 3.0.8 → 4.0.1

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/builder.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { DtiAction, DtiRoute } from "@napp/dti-core";
2
+ import { DtiClient } from "./client";
3
+ export interface ODtiClientHeaderBuilder {
4
+ (action: DtiAction<any, any>): Record<string, string>;
5
+ }
6
+ export declare class DtiClientBuilder {
7
+ private _baseUrls;
8
+ private _headers;
9
+ baseUrl(route: DtiRoute, url: string): this;
10
+ getBaseUrl(name: string): string | undefined;
11
+ header(route: DtiRoute, builder: ODtiClientHeaderBuilder): this;
12
+ getHeader(name: string): ODtiClientHeaderBuilder | undefined;
13
+ build(): DtiClient;
14
+ }
package/builder.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DtiClientBuilder = void 0;
4
+ const tree_1 = require("./tree");
5
+ const client_1 = require("./client");
6
+ class DtiClientBuilder {
7
+ constructor() {
8
+ this._baseUrls = new tree_1.TreeNamer("root");
9
+ this._headers = new tree_1.TreeNamer("root");
10
+ }
11
+ baseUrl(route, url) {
12
+ this._baseUrls.set(route.getFullname(), url);
13
+ return this;
14
+ }
15
+ getBaseUrl(name) {
16
+ let note = this._baseUrls.findParent(name);
17
+ if (note) {
18
+ return note.getValue();
19
+ }
20
+ return undefined;
21
+ }
22
+ header(route, builder) {
23
+ this._headers.set(route.getFullname(), builder);
24
+ return this;
25
+ }
26
+ getHeader(name) {
27
+ let note = this._headers.findParent(name);
28
+ if (note) {
29
+ return note.getValue();
30
+ }
31
+ return undefined;
32
+ }
33
+ build() {
34
+ return new client_1.DtiClient(this);
35
+ }
36
+ }
37
+ exports.DtiClientBuilder = DtiClientBuilder;
package/caller.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { DtiAction } from "@napp/dti-core";
2
+ import { DtiClientBuilder } from "./builder";
3
+ export declare class DtiClientCaller<RESULT, PARAM> {
4
+ private meta;
5
+ private builder;
6
+ private routeClient;
7
+ constructor(meta: DtiAction<RESULT, PARAM>, builder: DtiClientBuilder);
8
+ validate(param: PARAM): void;
9
+ private getMethod;
10
+ private getBody;
11
+ private getQeury;
12
+ private getHeaders;
13
+ private getUrl;
14
+ call(param: PARAM): Promise<RESULT>;
15
+ }
package/caller.js ADDED
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DtiClientCaller = void 0;
16
+ const dti_core_1 = require("@napp/dti-core");
17
+ const cross_fetch_1 = require("cross-fetch");
18
+ const base64url_1 = __importDefault(require("base64url"));
19
+ const route_1 = require("./route");
20
+ class DtiClientCaller {
21
+ constructor(meta, builder) {
22
+ this.meta = meta;
23
+ this.builder = builder;
24
+ this.routeClient = new route_1.DtiClientRoute(meta.getRoute(), builder);
25
+ }
26
+ validate(param) {
27
+ this.meta.validate(param);
28
+ }
29
+ getMethod() {
30
+ let m = this.meta.getMode();
31
+ if (m === dti_core_1.DtiMode.QString || m === dti_core_1.DtiMode.QJson) {
32
+ return 'get';
33
+ }
34
+ return 'post';
35
+ }
36
+ getBody(param) {
37
+ let m = this.meta.getMode();
38
+ if (m === dti_core_1.DtiMode.BJson) {
39
+ if (param) {
40
+ return JSON.stringify(param);
41
+ }
42
+ }
43
+ if (m === dti_core_1.DtiMode.BFrom) {
44
+ // const formData = new FormData();
45
+ // Object.keys(param as any).forEach(key => formData.append(key, (param as any)[key]));
46
+ if (param) {
47
+ return new URLSearchParams(param).toString();
48
+ }
49
+ }
50
+ return undefined;
51
+ }
52
+ getQeury(param) {
53
+ let m = this.meta.getMode();
54
+ if (m === dti_core_1.DtiMode.QJson) {
55
+ if (param) {
56
+ let p = base64url_1.default.encode(JSON.stringify(param));
57
+ return new URLSearchParams({ p }).toString();
58
+ }
59
+ }
60
+ else if (m === dti_core_1.DtiMode.QString) {
61
+ if (param) {
62
+ return new URLSearchParams(param).toString();
63
+ }
64
+ }
65
+ return undefined;
66
+ }
67
+ getHeaders(param) {
68
+ let m = this.meta.getMode();
69
+ let headers = {};
70
+ let confHeaderBuilder = this.builder.getHeader(this.meta.getRoute().getFullname());
71
+ if (confHeaderBuilder) {
72
+ let confHeaders = confHeaderBuilder(this.meta);
73
+ headers = Object.assign(Object.assign({}, headers), confHeaders);
74
+ }
75
+ if (m === dti_core_1.DtiMode.BFrom) {
76
+ headers["Content-Type"] = "application/x-www-form-urlencoded";
77
+ }
78
+ else {
79
+ headers["Content-Type"] = "application/json";
80
+ }
81
+ return headers;
82
+ }
83
+ getUrl() {
84
+ return this.routeClient.buildUrl(this.meta.getPath());
85
+ }
86
+ call(param) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ try {
89
+ this.validate(param);
90
+ }
91
+ catch (error) {
92
+ throw dti_core_1.DtiError.fromCode('validation', error);
93
+ }
94
+ let url = this.getUrl();
95
+ let query = this.getQeury(param);
96
+ let method = this.getMethod();
97
+ let headers = this.getHeaders(param);
98
+ let body = this.getBody(param);
99
+ let resp = yield (0, cross_fetch_1.fetch)(url + (query ? `?${query}` : ''), {
100
+ method, headers, body
101
+ });
102
+ try {
103
+ let resu = yield resp.text();
104
+ if (resp.ok) {
105
+ try {
106
+ return JSON.parse(resu);
107
+ }
108
+ catch (error) {
109
+ throw dti_core_1.DtiError.fromCode("InvalidJSON", resu);
110
+ }
111
+ }
112
+ try {
113
+ let errObject = JSON.parse(resu);
114
+ let error = dti_core_1.DtiError.from(errObject);
115
+ if (error instanceof dti_core_1.DtiErrorUnknown) {
116
+ throw new dti_core_1.DtiError('' + resp.status, resp.statusText);
117
+ }
118
+ throw error;
119
+ }
120
+ catch (error) {
121
+ throw new dti_core_1.DtiErrorUnknown(resu);
122
+ }
123
+ }
124
+ catch (error) {
125
+ throw dti_core_1.DtiError.from(error);
126
+ }
127
+ });
128
+ }
129
+ }
130
+ exports.DtiClientCaller = DtiClientCaller;
package/client.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { DtiAction, DtiRoute } from "@napp/dti-core";
2
+ import { DtiClientBuilder } from "./builder";
3
+ import { DtiClientCaller } from "./caller";
4
+ export declare class DtiClient {
5
+ private builder;
6
+ constructor(builder: DtiClientBuilder);
7
+ dti<RESULT, PARAM>(meta: DtiAction<RESULT, PARAM>): DtiClientCaller<RESULT, PARAM>;
8
+ buildUrl(route: DtiRoute, actionPath: string): string;
9
+ }
package/client.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DtiClient = void 0;
4
+ const route_1 = require("./route");
5
+ const caller_1 = require("./caller");
6
+ class DtiClient {
7
+ constructor(builder) {
8
+ this.builder = builder;
9
+ }
10
+ dti(meta) {
11
+ return new caller_1.DtiClientCaller(meta, this.builder);
12
+ }
13
+ buildUrl(route, actionPath) {
14
+ return new route_1.DtiClientRoute(route, this.builder).buildUrl(actionPath);
15
+ }
16
+ }
17
+ exports.DtiClient = DtiClient;
package/index.d.ts CHANGED
@@ -1 +1,5 @@
1
- export * from './adapter';
1
+ export * from './builder';
2
+ export * from './caller';
3
+ export * from './client';
4
+ export * from './route';
5
+ export * from './tree';
package/index.js CHANGED
@@ -1,13 +1,21 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./adapter"), exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./builder"), exports);
18
+ __exportStar(require("./caller"), exports);
19
+ __exportStar(require("./client"), exports);
20
+ __exportStar(require("./route"), exports);
21
+ __exportStar(require("./tree"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@napp/dti-client",
3
- "version": "3.0.8",
3
+ "version": "4.0.1",
4
4
  "description": "data transaction interface client library",
5
5
  "types": "index.d.ts",
6
6
  "main": "index.js",
@@ -12,6 +12,8 @@
12
12
  "author": "Farcek <farcek@gmail.com>",
13
13
  "license": "ISC",
14
14
  "dependencies": {
15
- "@napp/dti-core": "3.0.8"
15
+ "@napp/dti-core": "4.0.1",
16
+ "base64url": "latest",
17
+ "cross-fetch": "latest"
16
18
  }
17
19
  }
package/route.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { DtiRoute } from "@napp/dti-core";
2
+ import { DtiClientBuilder } from "./builder";
3
+ export declare class DtiClientRoute {
4
+ private meta;
5
+ private builder;
6
+ constructor(meta: DtiRoute, builder: DtiClientBuilder);
7
+ buildUrl(action: string): string;
8
+ }
package/route.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DtiClientRoute = void 0;
4
+ class DtiClientRoute {
5
+ constructor(meta, builder) {
6
+ this.meta = meta;
7
+ this.builder = builder;
8
+ }
9
+ buildUrl(action) {
10
+ let base = this.builder.getBaseUrl(this.meta.getFullname()) || '';
11
+ return base + this.meta.getPaths().join('') + action;
12
+ }
13
+ }
14
+ exports.DtiClientRoute = DtiClientRoute;
package/tree.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ export interface ITreeNamer<T> {
2
+ name: string;
3
+ parent?: string;
4
+ value?: T;
5
+ childs?: ITreeNamer<T>[];
6
+ }
7
+ export declare class TreeNamer<T> {
8
+ private name;
9
+ private parent?;
10
+ constructor(name: string, parent?: TreeNamer<T> | undefined);
11
+ private value?;
12
+ private childs?;
13
+ set(name: string, value: T): this;
14
+ findEqual(name: string): TreeNamer<T> | undefined;
15
+ findParent(name: string): TreeNamer<T>;
16
+ getValue(): T | undefined;
17
+ private getOrCreate;
18
+ private toObj;
19
+ print(): string;
20
+ }
package/tree.js ADDED
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TreeNamer = void 0;
4
+ class TreeNamer {
5
+ constructor(name, parent) {
6
+ this.name = name;
7
+ this.parent = parent;
8
+ }
9
+ set(name, value) {
10
+ let names = (name || '').split('.').filter(it => !!it);
11
+ let curr = this;
12
+ while (names.length > 0) {
13
+ let name = names.shift() || '';
14
+ curr = curr.getOrCreate(name);
15
+ }
16
+ curr.value = value;
17
+ return this;
18
+ }
19
+ findEqual(name) {
20
+ let names = (name || '').split('.').filter(it => !!it);
21
+ let curr = this;
22
+ while (names.length > 0) {
23
+ let name = names.shift() || '';
24
+ if (curr.childs) {
25
+ if (name in curr.childs) {
26
+ curr = curr.childs[name];
27
+ }
28
+ else {
29
+ return undefined;
30
+ }
31
+ }
32
+ }
33
+ return curr;
34
+ }
35
+ findParent(name) {
36
+ let names = (name || '').split('.').filter(it => !!it);
37
+ let curr = this;
38
+ while (names.length > 0) {
39
+ let name = names.shift() || '';
40
+ if (curr.childs) {
41
+ if (name in curr.childs) {
42
+ curr = curr.childs[name];
43
+ }
44
+ else {
45
+ return curr;
46
+ }
47
+ }
48
+ }
49
+ return curr;
50
+ }
51
+ getValue() {
52
+ if (this.value) {
53
+ return this.value;
54
+ }
55
+ if (this.parent) {
56
+ return this.parent.getValue();
57
+ }
58
+ return undefined;
59
+ }
60
+ getOrCreate(name) {
61
+ this.childs = this.childs || {};
62
+ if (name in this.childs) {
63
+ return this.childs[name];
64
+ }
65
+ return this.childs[name] = new TreeNamer(name, this);
66
+ }
67
+ toObj() {
68
+ var _a;
69
+ let obj = {
70
+ name: this.name,
71
+ parent: (_a = this.parent) === null || _a === void 0 ? void 0 : _a.name,
72
+ value: this.value
73
+ };
74
+ if (this.childs) {
75
+ obj.childs = [];
76
+ for (let p of Object.keys(this.childs)) {
77
+ let it = this.childs[p];
78
+ if (it && it.name && typeof it.toObj === 'function' && typeof it.getOrCreate === 'function') {
79
+ obj.childs.push(it.toObj());
80
+ }
81
+ }
82
+ }
83
+ return obj;
84
+ }
85
+ print() {
86
+ return JSON.stringify(this.toObj(), null, 4);
87
+ }
88
+ }
89
+ exports.TreeNamer = TreeNamer;
package/adapter.d.ts DELETED
@@ -1,31 +0,0 @@
1
- import { Dti } from "@napp/dti-core";
2
- export interface ODtiClientAdapter {
3
- caller: <RES, PQ, PB>(meta: Dti<RES, PQ, PB>, param: {
4
- q?: PQ;
5
- b?: PB;
6
- }) => Promise<RES>;
7
- }
8
- export declare class DtiClientAdapter {
9
- private opt;
10
- constructor(opt: ODtiClientAdapter);
11
- dti<RES, PQ, PB>(meta: Dti<RES, PQ, PB>): DtiClient<RES, PQ, PB>;
12
- }
13
- export interface ODtiClient {
14
- adp: DtiClientAdapter;
15
- }
16
- export declare class DtiClient<RES, PQ, PB> {
17
- private caller;
18
- private meta;
19
- constructor(caller: (param: {
20
- q?: PQ;
21
- b?: PB;
22
- }) => Promise<RES>, meta: Dti<RES, PQ, PB>);
23
- check(param: {
24
- q?: PQ;
25
- b?: PB;
26
- }): void;
27
- call(param: {
28
- q?: PQ;
29
- b?: PB;
30
- }, checkIgnore?: boolean): Promise<RES>;
31
- }
package/adapter.js DELETED
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.DtiClient = exports.DtiClientAdapter = void 0;
40
- var DtiClientAdapter = /** @class */ (function () {
41
- function DtiClientAdapter(opt) {
42
- this.opt = opt;
43
- }
44
- DtiClientAdapter.prototype.dti = function (meta) {
45
- var _this = this;
46
- return new DtiClient(function (param) { return __awaiter(_this, void 0, void 0, function () {
47
- return __generator(this, function (_a) {
48
- switch (_a.label) {
49
- case 0: return [4 /*yield*/, this.opt.caller(meta, param)];
50
- case 1: return [2 /*return*/, _a.sent()];
51
- }
52
- });
53
- }); }, meta);
54
- };
55
- return DtiClientAdapter;
56
- }());
57
- exports.DtiClientAdapter = DtiClientAdapter;
58
- var DtiClient = /** @class */ (function () {
59
- function DtiClient(caller, meta) {
60
- this.caller = caller;
61
- this.meta = meta;
62
- }
63
- DtiClient.prototype.check = function (param) {
64
- this.meta.checkQ(param.q);
65
- this.meta.checkB(param.b);
66
- };
67
- DtiClient.prototype.call = function (param, checkIgnore) {
68
- return __awaiter(this, void 0, void 0, function () {
69
- var c;
70
- return __generator(this, function (_a) {
71
- switch (_a.label) {
72
- case 0:
73
- c = checkIgnore === true ? false : true;
74
- if (c) {
75
- this.check(param);
76
- }
77
- return [4 /*yield*/, this.caller(param)];
78
- case 1: return [2 /*return*/, _a.sent()];
79
- }
80
- });
81
- });
82
- };
83
- return DtiClient;
84
- }());
85
- exports.DtiClient = DtiClient;