@ryuzaki13/react-foundation-lib 2.30.1 → 2.31.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/README.md +3 -2
- package/dist/promise/createDeferredPromise.d.ts +8 -0
- package/dist/promise/createDeferredPromise.d.ts.map +1 -0
- package/dist/promise/deferredPromiseTypes.d.ts +7 -0
- package/dist/promise/deferredPromiseTypes.d.ts.map +1 -0
- package/dist/promise/index.d.ts +3 -0
- package/dist/promise/index.d.ts.map +1 -0
- package/dist/promise/index.js +16 -0
- package/dist/promise/index.js.map +1 -0
- package/package.json +5 -1
- package/src/promise/README.md +44 -0
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ import type { RowRecord } from "@ryuzaki13/react-foundation-lib/types";
|
|
|
29
29
|
|
|
30
30
|
| Entry point | Что может потребоваться в host-проекте |
|
|
31
31
|
| --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
32
|
-
| `formatters`, `array`
|
|
32
|
+
| `formatters`, `array`, `promise` | Обычно не требуют дополнительных runtime-зависимостей. |
|
|
33
33
|
| `utils`, `hooks`, `binary`, `dom`, `copy`, `media`, `pwa` | `react`: `utils` экспортирует React helpers, `binary` — `useBinaryFile`, остальные entrypoints содержат hooks. |
|
|
34
34
|
| `query-client`, `error-report` | `@tanstack/react-query`, `@tanstack/query-persist-client-core`, `@tanstack/query-broadcast-client-experimental`. |
|
|
35
35
|
| `odata-service` | `zod`, `zustand`, `immer`, `react`; `unwrapODataQueryResult` типизирован вокруг `@tanstack/react-query`. |
|
|
@@ -101,7 +101,7 @@ npm run pack:dry-run
|
|
|
101
101
|
|
|
102
102
|
## Полный каталог документации
|
|
103
103
|
|
|
104
|
-
Каждый публичный subpath из `package.json#exports` покрыт русскоязычным
|
|
104
|
+
Каждый публичный subpath из `package.json#exports` покрыт русскоязычным руководством. Документы `tree-table` и `pwa/sw-cache-policy` намеренно объединены с ближайшим владельцем, чтобы правила одного сценария не расходились между файлами.
|
|
105
105
|
|
|
106
106
|
| Публичный import path | Подробная документация |
|
|
107
107
|
| ---------------------- | ------------------------------------------------------------------------------ |
|
|
@@ -133,6 +133,7 @@ npm run pack:dry-run
|
|
|
133
133
|
| `/number-scale` | [`number-scale/README.mdx`](./src/number-scale/README.mdx) |
|
|
134
134
|
| `/odata-service` | [`odata-service/README.mdx`](./src/odata-service/README.mdx) |
|
|
135
135
|
| `/presets` | [`presets/README.mdx`](./src/presets/README.mdx) |
|
|
136
|
+
| `/promise` | [Управляемое ожидание через Promise](./src/promise/README.md) |
|
|
136
137
|
| `/pwa` | [`pwa/README.mdx`](./src/pwa/README.mdx) |
|
|
137
138
|
| `/pwa/sw-cache-policy` | Раздел cache policy в [`pwa/README.mdx`](./src/pwa/README.mdx) |
|
|
138
139
|
| `/query-client` | [`query-client/README.mdx`](./src/query-client/README.mdx) |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type DeferredPromise } from "./deferredPromiseTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Создаёт управляемое ожидание через обычный Promise без дополнительных runtime API.
|
|
4
|
+
* Подходит для завершения операции из callback; не устанавливает полифиллы и
|
|
5
|
+
* сохраняет нативные правила разрешения thenable и первого завершения.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createDeferredPromise<T>(): DeferredPromise<T>;
|
|
8
|
+
//# sourceMappingURL=createDeferredPromise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDeferredPromise.d.ts","sourceRoot":"","sources":["../../src/promise/createDeferredPromise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,CAc7D"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Promise, завершением которого владелец управляет из внешнего события или lifecycle. */
|
|
2
|
+
export type DeferredPromise<T> = {
|
|
3
|
+
readonly promise: Promise<T>;
|
|
4
|
+
readonly resolve: (value: T | PromiseLike<T>) => void;
|
|
5
|
+
readonly reject: (reason?: unknown) => void;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=deferredPromiseTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferredPromiseTypes.d.ts","sourceRoot":"","sources":["../../src/promise/deferredPromiseTypes.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/promise/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/promise/createDeferredPromise.ts
|
|
2
|
+
function e() {
|
|
3
|
+
let e, t, n = new Promise((n, r) => {
|
|
4
|
+
e = n, t = r;
|
|
5
|
+
});
|
|
6
|
+
if (e === void 0 || t === void 0) throw Error("Конструктор Promise не предоставил функции завершения синхронно.");
|
|
7
|
+
return {
|
|
8
|
+
promise: n,
|
|
9
|
+
resolve: e,
|
|
10
|
+
reject: t
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { e as createDeferredPromise };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/promise/createDeferredPromise.ts"],"sourcesContent":["import { type DeferredPromise } from \"./deferredPromiseTypes\";\n\n/**\n * Создаёт управляемое ожидание через обычный Promise без дополнительных runtime API.\n * Подходит для завершения операции из callback; не устанавливает полифиллы и\n * сохраняет нативные правила разрешения thenable и первого завершения.\n */\nexport function createDeferredPromise<T>(): DeferredPromise<T> {\n\tlet resolve: DeferredPromise<T>[\"resolve\"] | undefined;\n\tlet reject: DeferredPromise<T>[\"reject\"] | undefined;\n\tconst promise = new Promise<T>((resolvePromise, rejectPromise) => {\n\t\tresolve = resolvePromise;\n\t\treject = rejectPromise;\n\t});\n\n\t// Promise вызывает executor синхронно. Проверка фиксирует этот invariant для\n\t// TypeScript, который не отслеживает присваивания внутри callback конструктора.\n\tif (resolve === undefined || reject === undefined) {\n\t\tthrow new Error(\"Конструктор Promise не предоставил функции завершения синхронно.\");\n\t}\n\treturn { promise, resolve, reject };\n}\n"],"mappings":";AAOA,SAAgB,IAA+C;CAC9D,IAAI,GACA,GACE,IAAU,IAAI,SAAY,GAAgB,MAAkB;EAEjE,AADA,IAAU,GACV,IAAS;CACV,CAAC;CAID,IAAI,MAAY,KAAA,KAAa,MAAW,KAAA,GACvC,MAAU,MAAM,kEAAkE;CAEnF,OAAO;EAAE;EAAS;EAAS;CAAO;AACnC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuzaki13/react-foundation-lib",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.31.0",
|
|
4
4
|
"description": "Reusable React and TypeScript foundation utilities, hooks, and primitives.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ryuzaki13",
|
|
@@ -161,6 +161,10 @@
|
|
|
161
161
|
"types": "./dist/presets/index.d.ts",
|
|
162
162
|
"import": "./dist/presets/index.js"
|
|
163
163
|
},
|
|
164
|
+
"./promise": {
|
|
165
|
+
"types": "./dist/promise/index.d.ts",
|
|
166
|
+
"import": "./dist/promise/index.js"
|
|
167
|
+
},
|
|
164
168
|
"./pwa": {
|
|
165
169
|
"types": "./dist/pwa/index.d.ts",
|
|
166
170
|
"import": "./dist/pwa/index.js"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Управляемое ожидание через Promise
|
|
2
|
+
|
|
3
|
+
Модуль `@ryuzaki13/react-foundation-lib/promise` создаёт Promise, который можно
|
|
4
|
+
завершить из внешнего callback или события. Он подходит для ожидания освобождения
|
|
5
|
+
ресурсов, остановки фоновой операции и других технических lifecycle без знания
|
|
6
|
+
конкретного приложения.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { createDeferredPromise } from "@ryuzaki13/react-foundation-lib/promise";
|
|
10
|
+
|
|
11
|
+
const completion = createDeferredPromise<void>();
|
|
12
|
+
|
|
13
|
+
// Владелец операции завершает ожидание после освобождения своих ресурсов.
|
|
14
|
+
completion.resolve();
|
|
15
|
+
await completion.promise;
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Публичный API
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
type DeferredPromise<T> = {
|
|
22
|
+
readonly promise: Promise<T>;
|
|
23
|
+
readonly resolve: (value: T | PromiseLike<T>) => void;
|
|
24
|
+
readonly reject: (reason?: unknown) => void;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function createDeferredPromise<T>(): DeferredPromise<T>;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`promise` остаётся незавершённым до вызова `resolve` или `reject`. `resolve`
|
|
31
|
+
принимает значение либо другой Promise/thenable и ожидает его итог. Для
|
|
32
|
+
`DeferredPromise<void>` допустим вызов `resolve()` без аргумента. `reject`
|
|
33
|
+
сохраняет исходную причину отказа, в том числе значение, отличное от `Error`.
|
|
34
|
+
|
|
35
|
+
Каждый вызов создаёт независимое ожидание. Нативный Promise сохраняет первое
|
|
36
|
+
решение: последующие вызовы `resolve`/`reject` его не меняют. Сам примитив не
|
|
37
|
+
добавляет отмену, timeout или обработчик ошибок; владелец операции отвечает за
|
|
38
|
+
обязательное завершение ожидания и обработку rejection.
|
|
39
|
+
|
|
40
|
+
## Совместимость
|
|
41
|
+
|
|
42
|
+
Реализация использует обычный `new Promise` и не требует API новее ES2022.
|
|
43
|
+
Импорт не устанавливает полифиллы и не изменяет глобальный `Promise`.
|
|
44
|
+
Модуль не зависит от React, Router, браузерного хранилища или Node.js.
|