@application-kit/graphql 0.5.0 → 0.7.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/CHANGELOG.md +17 -0
- package/README.md +12 -7
- package/dist/cjs/client/business-message-key-resolver.d.ts +2 -0
- package/dist/cjs/client/business-message-key-resolver.js +12 -0
- package/dist/cjs/client/index.d.ts +1 -0
- package/dist/cjs/client/index.js +1 -0
- package/dist/cjs/contract/business-message-code.d.ts +3 -0
- package/dist/cjs/contract/business-message-code.js +2 -0
- package/dist/cjs/contract/index.d.ts +1 -0
- package/dist/cjs/contract/index.js +1 -0
- package/dist/cjs/errors/business-graphql-error.d.ts +3 -2
- package/dist/cjs/errors/match-business-error.d.ts +4 -3
- package/dist/esm/client/business-message-key-resolver.d.ts +2 -0
- package/dist/esm/client/business-message-key-resolver.js +8 -0
- package/dist/esm/client/index.d.ts +1 -0
- package/dist/esm/client/index.js +1 -0
- package/dist/esm/contract/business-message-code.d.ts +3 -0
- package/dist/esm/contract/business-message-code.js +1 -0
- package/dist/esm/contract/index.d.ts +1 -0
- package/dist/esm/contract/index.js +1 -0
- package/dist/esm/errors/business-graphql-error.d.ts +3 -2
- package/dist/esm/errors/match-business-error.d.ts +4 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @application-kit/graphql
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 06ce168: Клиентские части обработки ошибки запроса и кнопка темы переехали в пакеты.
|
|
8
|
+
|
|
9
|
+
`ui`: очередь страховочного тоста `globalErrorToast` и её подключение `useGlobalErrorToastConnection(translate)`, `withSupportId`, стор страницы ошибки `useErrorStore`, переключатель темы `LayoutTopbarThemeSwitcher`, встроенные иконки `moon` и `sun`. Колбэк `describeRequestError` у `UiVendorPlugin` получает третьим аргументом тексты пакета текущей локали. Ломающее: в `messages` обязательны `layout.topbar.toggleTheme` и группа `requestError` (`supportIdLine`, `title`, `unexpected`); у `LayoutTopbarIconButton` и `LayoutTopbarSubmenu` обязателен `label` — доступное имя кнопки; приложение убирает `moon` и `sun` из своего реестра иконок.
|
|
10
|
+
|
|
11
|
+
`graphql`: `createBusinessMessageKeyResolver` в `/client` — резолвер «ошибка запроса → ключ словаря» по таблице приложения, типизированной реестром кодов.
|
|
12
|
+
|
|
13
|
+
## 0.6.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- abb4a67: Реестр кодов сообщений `BusinessMessageCodeRegistryInterface` и тип `BusinessMessageCode`: приложение объявляет коды через `declare module '@application-kit/graphql'`.
|
|
18
|
+
**Ломающее:** параметр типа у `BusinessGraphQLError` и `BusinessErrorOptionsInterface` снят, `BusinessErrorTable` получил значение параметра по умолчанию. Потребителю — записать коды в реестр и удалить свои привязки параметра; без записи тип кода `never`, и `new BusinessGraphQLError` не компилируется.
|
|
19
|
+
|
|
3
20
|
## 0.5.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ Peer-зависимости: `@nestjs/common`, `@nestjs/graphql`, `class-transfo
|
|
|
27
27
|
|
|
28
28
|
## Сервер
|
|
29
29
|
|
|
30
|
-
- `BusinessGraphQLError
|
|
30
|
+
- `BusinessGraphQLError` — бизнес-ошибка с транспортным кодом (`BAD_USER_INPUT`, `FORBIDDEN`,
|
|
31
31
|
`NOT_FOUND`) и кодом показываемого текста `messageCode`.
|
|
32
32
|
- `matchBusinessError(table, fallback)` — таблица «класс доменной ошибки → опции ответа», первая подходящая строка.
|
|
33
33
|
- `formatGraphQLError(error, supportId)` — единая точка форматирования: `HttpException` → `extensions`,
|
|
@@ -37,14 +37,17 @@ Peer-зависимости: `@nestjs/common`, `@nestjs/graphql`, `class-transfo
|
|
|
37
37
|
|
|
38
38
|
### Словарь кодов сообщений — у приложения
|
|
39
39
|
|
|
40
|
-
Пакет не знает кодов сообщений:
|
|
41
|
-
|
|
40
|
+
Пакет не знает кодов сообщений: реестр `BusinessMessageCodeRegistryInterface` пуст, и без записи приложения тип кода —
|
|
41
|
+
`never`. Приложение объявляет коды один раз, и неизвестный код перестаёт компилироваться в `BusinessGraphQLError`,
|
|
42
|
+
`BusinessErrorOptionsInterface` и `BusinessErrorTable`:
|
|
42
43
|
|
|
43
44
|
```ts
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
declare module '@application-kit/graphql' {
|
|
46
|
+
interface BusinessMessageCodeRegistryInterface {
|
|
47
|
+
'profile.notFound': true
|
|
48
|
+
'signIn.invalidCredentials': true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
48
51
|
```
|
|
49
52
|
|
|
50
53
|
## Клиент (`/client`)
|
|
@@ -53,6 +56,8 @@ export type BusinessErrorOptions = BusinessErrorOptionsInterface<MessageCode>
|
|
|
53
56
|
`HttpLink` как есть. `onError(error)` зовётся на каждую ошибку операции, кроме помеченных флагом
|
|
54
57
|
`SKIP_GLOBAL_ERROR_TOAST` в контексте: их показывает сам вызывающий. Вызывающий получает ошибку в любом случае.
|
|
55
58
|
- `requireApolloData(result)` — данные ответа query; `undefined` вместо них — ошибка транспорта.
|
|
59
|
+
- `createBusinessMessageKeyResolver(keyByCode)` — резолвер «ошибка запроса → ключ словаря». Таблица — приложения, тип `Record`
|
|
60
|
+
по реестру кодов: новый код без ключа не компилируется. Незнакомый код и ответ без кода дают `null`.
|
|
56
61
|
|
|
57
62
|
```ts
|
|
58
63
|
export const apolloClient = createApolloClient({
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBusinessMessageKeyResolver = void 0;
|
|
4
|
+
const message_code_from_error_js_1 = require("./message-code-from-error.js");
|
|
5
|
+
const createBusinessMessageKeyResolver = (keyByCode) => {
|
|
6
|
+
const keys = new Map(Object.entries(keyByCode));
|
|
7
|
+
return (error) => {
|
|
8
|
+
const code = (0, message_code_from_error_js_1.messageCodeFromError)(error);
|
|
9
|
+
return code === null ? null : keys.get(code) ?? null;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
exports.createBusinessMessageKeyResolver = createBusinessMessageKeyResolver;
|
package/dist/cjs/client/index.js
CHANGED
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./business-message-key-resolver.js"), exports);
|
|
17
18
|
__exportStar(require("./create-apollo-client.js"), exports);
|
|
18
19
|
__exportStar(require("./message-code-from-error.js"), exports);
|
|
19
20
|
__exportStar(require("./rejected-characters-from-error.js"), exports);
|
|
@@ -14,4 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./business-message-code.js"), exports);
|
|
17
18
|
__exportStar(require("./graphql-error-contract.js"), exports);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GraphQLError } from 'graphql';
|
|
2
|
+
import type { BusinessMessageCode } from '../contract/business-message-code.js';
|
|
2
3
|
import type { BusinessGraphQLErrorCode, GraphQLErrorWireExtensions } from '../contract/graphql-error-contract.js';
|
|
3
|
-
export declare class BusinessGraphQLError
|
|
4
|
-
constructor(message: string, code: BusinessGraphQLErrorCode, messageCode:
|
|
4
|
+
export declare class BusinessGraphQLError extends GraphQLError {
|
|
5
|
+
constructor(message: string, code: BusinessGraphQLErrorCode, messageCode: BusinessMessageCode, extensions?: GraphQLErrorWireExtensions);
|
|
5
6
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { BusinessMessageCode } from '../contract/business-message-code.js';
|
|
1
2
|
import type { BusinessGraphQLErrorCode } from '../contract/graphql-error-contract.js';
|
|
2
|
-
export interface BusinessErrorOptionsInterface
|
|
3
|
+
export interface BusinessErrorOptionsInterface {
|
|
3
4
|
code: BusinessGraphQLErrorCode;
|
|
4
|
-
messageCode:
|
|
5
|
+
messageCode: BusinessMessageCode;
|
|
5
6
|
}
|
|
6
|
-
export type BusinessErrorTable<TOptions> = readonly [new (...arguments_: never[]) => Error, TOptions][];
|
|
7
|
+
export type BusinessErrorTable<TOptions = BusinessErrorOptionsInterface> = readonly [new (...arguments_: never[]) => Error, TOptions][];
|
|
7
8
|
export declare const matchBusinessError: <TOptions>(table: BusinessErrorTable<TOptions>, fallback: TOptions) => (commandError: Error) => TOptions;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { messageCodeFromError } from './message-code-from-error.js';
|
|
2
|
+
export const createBusinessMessageKeyResolver = (keyByCode) => {
|
|
3
|
+
const keys = new Map(Object.entries(keyByCode));
|
|
4
|
+
return (error) => {
|
|
5
|
+
const code = messageCodeFromError(error);
|
|
6
|
+
return code === null ? null : keys.get(code) ?? null;
|
|
7
|
+
};
|
|
8
|
+
};
|
package/dist/esm/client/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GraphQLError } from 'graphql';
|
|
2
|
+
import type { BusinessMessageCode } from '../contract/business-message-code.js';
|
|
2
3
|
import type { BusinessGraphQLErrorCode, GraphQLErrorWireExtensions } from '../contract/graphql-error-contract.js';
|
|
3
|
-
export declare class BusinessGraphQLError
|
|
4
|
-
constructor(message: string, code: BusinessGraphQLErrorCode, messageCode:
|
|
4
|
+
export declare class BusinessGraphQLError extends GraphQLError {
|
|
5
|
+
constructor(message: string, code: BusinessGraphQLErrorCode, messageCode: BusinessMessageCode, extensions?: GraphQLErrorWireExtensions);
|
|
5
6
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { BusinessMessageCode } from '../contract/business-message-code.js';
|
|
1
2
|
import type { BusinessGraphQLErrorCode } from '../contract/graphql-error-contract.js';
|
|
2
|
-
export interface BusinessErrorOptionsInterface
|
|
3
|
+
export interface BusinessErrorOptionsInterface {
|
|
3
4
|
code: BusinessGraphQLErrorCode;
|
|
4
|
-
messageCode:
|
|
5
|
+
messageCode: BusinessMessageCode;
|
|
5
6
|
}
|
|
6
|
-
export type BusinessErrorTable<TOptions> = readonly [new (...arguments_: never[]) => Error, TOptions][];
|
|
7
|
+
export type BusinessErrorTable<TOptions = BusinessErrorOptionsInterface> = readonly [new (...arguments_: never[]) => Error, TOptions][];
|
|
7
8
|
export declare const matchBusinessError: <TOptions>(table: BusinessErrorTable<TOptions>, fallback: TOptions) => (commandError: Error) => TOptions;
|