setti 0.0.0-stage → 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +1406 -2
- package/bin/nixo.mjs +8 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +3060 -0
- package/dist/client/index.d.ts +180 -0
- package/dist/client/index.js +958 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +816 -0
- package/dist/not-found-fz-2RDV6.d.ts +340 -0
- package/dist/prefetch-Bp9dMSTK.d.ts +766 -0
- package/dist/server.d.ts +635 -0
- package/dist/server.js +2813 -0
- package/package.json +85 -3
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { g as NixoConfig, h as NixoRoute, c as FactoryMap, y as ServiceOptions, C as CrudOp, V as CallOptions } from './prefetch-Bp9dMSTK.js';
|
|
2
|
+
import { Component, ReactNode, ComponentType } from 'react';
|
|
3
|
+
import 'devalue';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* JSDoc-обёртка для `nixo.config.ts` — даёт типобезопасность.
|
|
7
|
+
*
|
|
8
|
+
* Pure-функция (без jiti/fastify) — можно импортировать из любого окружения.
|
|
9
|
+
*
|
|
10
|
+
* @param config объект конфигурации.
|
|
11
|
+
* @returns тот же объект.
|
|
12
|
+
*/
|
|
13
|
+
declare function defineNixoConfig(config: NixoConfig): NixoConfig;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Обёртка над массивом маршрутов.
|
|
17
|
+
*
|
|
18
|
+
* Возвращает тот же массив, но даёт типизацию и точку расширения:
|
|
19
|
+
* позже здесь можно добавлять валидацию во время выполнения
|
|
20
|
+
* (например, проверку обязательных полей в dev-режиме).
|
|
21
|
+
*
|
|
22
|
+
* @param routes массив маршрутов, объявленных в `router.ts`.
|
|
23
|
+
* @returns тот же массив, типобезопасно.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* export default defineRoute([
|
|
28
|
+
* {
|
|
29
|
+
* id: 'home',
|
|
30
|
+
* index: true,
|
|
31
|
+
* title: 'Главная',
|
|
32
|
+
* type: 'main',
|
|
33
|
+
* contentConfig: {
|
|
34
|
+
* workspaceConfig: { template: 'HomePage/view:View' },
|
|
35
|
+
* prefetchConfig: { configLoader: 'HomePage/Factories/Root' },
|
|
36
|
+
* },
|
|
37
|
+
* },
|
|
38
|
+
* ])
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
declare function defineRoute(routes: NixoRoute[]): NixoRoute[];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Обёртка над картой глобальных загрузчиков.
|
|
45
|
+
*
|
|
46
|
+
* Формат совпадает с возвращаемым значением `getConfig` в `configLoader`.
|
|
47
|
+
* Файл должен называться `*.loader.ts` и лежать в любом месте `clientDir` —
|
|
48
|
+
* сканнер найдёт его автоматически.
|
|
49
|
+
*
|
|
50
|
+
* @param map карта фабрик `имя → описание`.
|
|
51
|
+
* @returns та же карта.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* // client/User.loader.ts
|
|
56
|
+
* export default defineGlobalLoader({
|
|
57
|
+
* userInfo: {
|
|
58
|
+
* dataFactoryName: 'User/loaders/userInfo:UserInfoLoader',
|
|
59
|
+
* },
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
declare function defineGlobalLoader(map: FactoryMap): FactoryMap;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Строит человекочитаемый URL-паттерн маршрута.
|
|
67
|
+
*
|
|
68
|
+
* - `path` — как есть.
|
|
69
|
+
* - Иначе: `/<id-chain>[/<slug-сегменты>]`.
|
|
70
|
+
*
|
|
71
|
+
* Для regex-сегментов возвращает `:slug`, `:slug1`, ... (для отображения).
|
|
72
|
+
*
|
|
73
|
+
* @param route маршрут.
|
|
74
|
+
* @param byId карта.
|
|
75
|
+
* @returns паттерн.
|
|
76
|
+
*/
|
|
77
|
+
declare function computePath(route: NixoRoute, byId: Map<string, NixoRoute>): string;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Базовый класс ошибок фреймворка nixo.
|
|
81
|
+
*
|
|
82
|
+
* Все ошибки, которые может бросить сканнер, валидатор или сам фреймворк,
|
|
83
|
+
* наследуются от `NixoError` — это позволяет вызывающему коду отличать
|
|
84
|
+
* ошибки фреймворка от случайных исключений.
|
|
85
|
+
*/
|
|
86
|
+
declare class NixoError extends Error {
|
|
87
|
+
constructor(message: string);
|
|
88
|
+
}
|
|
89
|
+
/** JSON-RPC ошибка. */
|
|
90
|
+
interface JsonRpcErrorPayload {
|
|
91
|
+
code: number;
|
|
92
|
+
message: string;
|
|
93
|
+
detail?: string;
|
|
94
|
+
data?: unknown;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Ошибка JSON-RPC. Бросается `Service.call` при `error` в ответе.
|
|
98
|
+
*/
|
|
99
|
+
declare class NixoRpcError extends NixoError {
|
|
100
|
+
/** Оригинальный JSON-RPC error. */
|
|
101
|
+
readonly rpcError: JsonRpcErrorPayload;
|
|
102
|
+
/**
|
|
103
|
+
* @param rpcError JSON-RPC error payload.
|
|
104
|
+
*/
|
|
105
|
+
constructor(rpcError: JsonRpcErrorPayload);
|
|
106
|
+
/**
|
|
107
|
+
* Код ошибки.
|
|
108
|
+
*
|
|
109
|
+
* @returns код JSON-RPC.
|
|
110
|
+
*/
|
|
111
|
+
get code(): number;
|
|
112
|
+
/**
|
|
113
|
+
* Дополнительное описание.
|
|
114
|
+
*
|
|
115
|
+
* @returns detail или `undefined`.
|
|
116
|
+
*/
|
|
117
|
+
get detail(): string | undefined;
|
|
118
|
+
/**
|
|
119
|
+
* Дополнительные данные.
|
|
120
|
+
*
|
|
121
|
+
* @returns data или `undefined`.
|
|
122
|
+
*/
|
|
123
|
+
get data(): unknown;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Базовый класс для CRUD-обёрток над JSON-RPC.
|
|
128
|
+
*
|
|
129
|
+
* Не знает про URL/headers — это делает `Service`.
|
|
130
|
+
* Пока — минимальный каркас; полная реализация (list/read/create/update/delete) — R5.
|
|
131
|
+
*/
|
|
132
|
+
declare abstract class Remote<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
133
|
+
protected _remoteOpts: ServiceOptions;
|
|
134
|
+
/**
|
|
135
|
+
* @param opts опции сервиса.
|
|
136
|
+
*/
|
|
137
|
+
constructor(opts: ServiceOptions);
|
|
138
|
+
/**
|
|
139
|
+
* Получить имя метода объекта для CRUD-операции.
|
|
140
|
+
*
|
|
141
|
+
* @param op CRUD-операция.
|
|
142
|
+
* @returns имя метода (`Read`, `List`, ...).
|
|
143
|
+
*/
|
|
144
|
+
protected resolveMethod(op: CrudOp): string;
|
|
145
|
+
/**
|
|
146
|
+
* Заглушка; полная реализация в R5.
|
|
147
|
+
*
|
|
148
|
+
* @param _method имя метода объекта.
|
|
149
|
+
* @param _params параметры вызова.
|
|
150
|
+
* @returns `Response`.
|
|
151
|
+
*/
|
|
152
|
+
protected _call(_method: string, _params?: unknown): Promise<Response>;
|
|
153
|
+
protected _phantom?: T;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Изоморфный JSON-RPC 2.0 клиент с кэшем.
|
|
158
|
+
*
|
|
159
|
+
* - Клиент: `fetch(url, { method: 'POST', body })` + кэш в модульном `Map`.
|
|
160
|
+
* - Сервер (SSR): executor из ALS + кэш в ALS (per-request).
|
|
161
|
+
*
|
|
162
|
+
* Кэш:
|
|
163
|
+
* - Включается через `new NixoService({ ..., cache: 30000 })`.
|
|
164
|
+
* - Per-call override: `service.call(method, params, { cache: 60000 })`.
|
|
165
|
+
* - `cache: false` в опциях вызова — не кэшировать.
|
|
166
|
+
* - Инвалидация: `service.invalidate()` / `invalidate(method)` / `invalidate(method, params)` / `NixoService.invalidateAll()`.
|
|
167
|
+
*/
|
|
168
|
+
declare class Service<T extends Record<string, unknown> = Record<string, unknown>> extends Remote<T> {
|
|
169
|
+
private _serviceOpts;
|
|
170
|
+
/**
|
|
171
|
+
* @param opts опции.
|
|
172
|
+
*/
|
|
173
|
+
constructor(opts?: ServiceOptions);
|
|
174
|
+
/**
|
|
175
|
+
* Ключ кэша: `endpoint.method:devalueStringify(params)`.
|
|
176
|
+
*
|
|
177
|
+
* @param method метод.
|
|
178
|
+
* @param params параметры.
|
|
179
|
+
* @returns ключ.
|
|
180
|
+
*/
|
|
181
|
+
private getCacheKey;
|
|
182
|
+
/**
|
|
183
|
+
* Хранилище кэша: ALS (SSR) или модульный `Map` (клиент).
|
|
184
|
+
*
|
|
185
|
+
* @returns `Map` или `null`.
|
|
186
|
+
*/
|
|
187
|
+
private getCacheStore;
|
|
188
|
+
/**
|
|
189
|
+
* Низкоуровневый JSON-RPC вызов (без кэша).
|
|
190
|
+
*
|
|
191
|
+
* @param method имя метода.
|
|
192
|
+
* @param params параметры.
|
|
193
|
+
* @returns `Response`.
|
|
194
|
+
*/
|
|
195
|
+
callRaw(method: string, params?: unknown): Promise<Response>;
|
|
196
|
+
/**
|
|
197
|
+
* JSON-RPC вызов с кэшем.
|
|
198
|
+
*
|
|
199
|
+
* @param method имя метода.
|
|
200
|
+
* @param params параметры.
|
|
201
|
+
* @param opts per-call опции (`{ cache }`).
|
|
202
|
+
* @returns `result`.
|
|
203
|
+
* @throws {NixoRpcError} при `error` в ответе.
|
|
204
|
+
*/
|
|
205
|
+
call<R = unknown>(method: string, params?: unknown, opts?: CallOptions): Promise<R>;
|
|
206
|
+
/**
|
|
207
|
+
* Инвалидирует кэш.
|
|
208
|
+
*
|
|
209
|
+
* - `invalidate()` — всё для текущего `endpoint`.
|
|
210
|
+
* - `invalidate(method)` — все ключи метода.
|
|
211
|
+
* - `invalidate(method, params)` — точечно.
|
|
212
|
+
*
|
|
213
|
+
* @param method метод.
|
|
214
|
+
* @param params параметры.
|
|
215
|
+
*/
|
|
216
|
+
invalidate(method?: string, params?: unknown): void;
|
|
217
|
+
/**
|
|
218
|
+
* Очищает **всё** клиентский кэш (кросс-инстанс).
|
|
219
|
+
*
|
|
220
|
+
* На сервере — no-op (per-request кэш в ALS всё равно уничтожится).
|
|
221
|
+
*/
|
|
222
|
+
static invalidateAll(): void;
|
|
223
|
+
/**
|
|
224
|
+
* CRUD: query (`List` по дефолту).
|
|
225
|
+
*
|
|
226
|
+
* @param params параметры.
|
|
227
|
+
* @param opts per-call опции.
|
|
228
|
+
* @returns `result`.
|
|
229
|
+
*/
|
|
230
|
+
query<P = unknown, R = unknown>(params?: P, opts?: CallOptions): Promise<R>;
|
|
231
|
+
/**
|
|
232
|
+
* CRUD: read (`Read` по дефолту).
|
|
233
|
+
*
|
|
234
|
+
* @param params параметры.
|
|
235
|
+
* @param opts per-call опции.
|
|
236
|
+
* @returns `result`.
|
|
237
|
+
*/
|
|
238
|
+
read<P = unknown, R = unknown>(params?: P, opts?: CallOptions): Promise<R>;
|
|
239
|
+
/**
|
|
240
|
+
* CRUD: create (`Create` по дефолту).
|
|
241
|
+
*
|
|
242
|
+
* @param params параметры.
|
|
243
|
+
* @param opts per-call опции.
|
|
244
|
+
* @returns `result`.
|
|
245
|
+
*/
|
|
246
|
+
create<P = unknown, R = unknown>(params?: P, opts?: CallOptions): Promise<R>;
|
|
247
|
+
/**
|
|
248
|
+
* CRUD: update (`Update` по дефолту).
|
|
249
|
+
*
|
|
250
|
+
* @param params параметры.
|
|
251
|
+
* @param opts per-call опции.
|
|
252
|
+
* @returns `result`.
|
|
253
|
+
*/
|
|
254
|
+
update<P = unknown, R = unknown>(params?: P, opts?: CallOptions): Promise<R>;
|
|
255
|
+
/**
|
|
256
|
+
* CRUD: destroy (`Delete` по дефолту).
|
|
257
|
+
*
|
|
258
|
+
* @param params параметры.
|
|
259
|
+
* @param opts per-call опции.
|
|
260
|
+
* @returns `result`.
|
|
261
|
+
*/
|
|
262
|
+
destroy<P = unknown, R = unknown>(params?: P, opts?: CallOptions): Promise<R>;
|
|
263
|
+
/**
|
|
264
|
+
* URL endpoint.
|
|
265
|
+
*
|
|
266
|
+
* @returns URL.
|
|
267
|
+
*/
|
|
268
|
+
protected getUrl(): string;
|
|
269
|
+
/**
|
|
270
|
+
* Заголовки (на сервере — из ALS).
|
|
271
|
+
*
|
|
272
|
+
* @returns headers.
|
|
273
|
+
*/
|
|
274
|
+
protected prepareHeaders(): Record<string, string>;
|
|
275
|
+
/**
|
|
276
|
+
* Изоморфный execute:
|
|
277
|
+
* - SSR + executor → прямой вызов (без HTTP);
|
|
278
|
+
* - иначе → fetch.
|
|
279
|
+
*
|
|
280
|
+
* @param payload JSON-RPC payload.
|
|
281
|
+
* @returns `Response`.
|
|
282
|
+
*/
|
|
283
|
+
protected executeRequest(payload: string): Promise<Response>;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Пропсы `NixoErrorBoundary`. */
|
|
287
|
+
interface NixoErrorBoundaryProps {
|
|
288
|
+
children?: ReactNode;
|
|
289
|
+
/** Fallback-компонент, получает `{ error }`. */
|
|
290
|
+
fallback?: ComponentType<{
|
|
291
|
+
error: Error;
|
|
292
|
+
}>;
|
|
293
|
+
}
|
|
294
|
+
/** Состояние. */
|
|
295
|
+
interface NixoErrorBoundaryState {
|
|
296
|
+
error: Error | null;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Error Boundary фреймворка. Оборачивает дерево страницы.
|
|
300
|
+
*
|
|
301
|
+
* Работает в SSR (`renderToPipeableStream` ловит ошибки через boundary)
|
|
302
|
+
* и на клиенте. Если `fallback` не задан — минимальная заглушка.
|
|
303
|
+
*/
|
|
304
|
+
declare class NixoErrorBoundary extends Component<NixoErrorBoundaryProps, NixoErrorBoundaryState> {
|
|
305
|
+
state: NixoErrorBoundaryState;
|
|
306
|
+
/**
|
|
307
|
+
* @param error ошибка из дочернего дерева.
|
|
308
|
+
* @returns новое состояние.
|
|
309
|
+
*/
|
|
310
|
+
static getDerivedStateFromError(error: Error): NixoErrorBoundaryState;
|
|
311
|
+
/**
|
|
312
|
+
* Логирует ошибку.
|
|
313
|
+
*
|
|
314
|
+
* @param error ошибка.
|
|
315
|
+
* @param info React error info.
|
|
316
|
+
*/
|
|
317
|
+
componentDidCatch(error: Error, info: unknown): void;
|
|
318
|
+
/**
|
|
319
|
+
* Рендер: fallback при ошибке, иначе `children`.
|
|
320
|
+
*
|
|
321
|
+
* @returns ReactNode.
|
|
322
|
+
*/
|
|
323
|
+
render(): ReactNode;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Дефолтный индикатор загрузки (показывается во время первого SPA-prefetch).
|
|
328
|
+
*
|
|
329
|
+
* @returns ReactNode.
|
|
330
|
+
*/
|
|
331
|
+
declare function NixoLoading(): ReactNode;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Дефолтная 404-страница (если `config.components.notFound` не задан).
|
|
335
|
+
*
|
|
336
|
+
* @returns ReactNode.
|
|
337
|
+
*/
|
|
338
|
+
declare function NixoNotFound(): ReactNode;
|
|
339
|
+
|
|
340
|
+
export { type JsonRpcErrorPayload as J, NixoError as N, Remote as R, Service as S, NixoErrorBoundary as a, type NixoErrorBoundaryProps as b, NixoLoading as c, NixoNotFound as d, NixoRpcError as e, computePath as f, defineGlobalLoader as g, defineNixoConfig as h, defineRoute as i };
|