@ryuzaki13/react-foundation-lib 2.19.0 → 2.20.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-lib",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "Reusable React and TypeScript foundation utilities, hooks, and primitives.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -4,7 +4,7 @@ import { Meta } from "@storybook/addon-docs/blocks";
4
4
 
5
5
  # Error Report
6
6
 
7
- Модуль `@ryuzaki13/react-foundation-lib/error-report` собирает клиентскую диагностику ошибки в versioned bounded draft, временно хранит последние drafts в `sessionStorage` и предоставляет durable IndexedDB queue для отложенной доставки.
7
+ Модуль `@ryuzaki13/react-foundation-lib/error-report` собирает клиентскую диагностику ошибки в versioned bounded draft, по умолчанию временно хранит последние drafts в `sessionStorage` и предоставляет durable IndexedDB queue для отложенной доставки. Browser bootstrap может односторонне перевести capture/drafts в память документа.
8
8
 
9
9
  Он умеет объединить:
10
10
 
@@ -36,6 +36,7 @@ import {
36
36
  captureRuntimeErrorReport,
37
37
  createErrorReportQueue,
38
38
  createErrorInfo,
39
+ disableErrorReportBrowserStorage,
39
40
  installErrorReportBrowserBreadcrumbs,
40
41
  setErrorReportRuntimeErrorReporter,
41
42
  setErrorReportCaptureOptions,
@@ -76,6 +77,44 @@ isErrorReportingEnabled({ isDev: false });
76
77
  - в development capture-функции возвращают `undefined`;
77
78
  - тест может явно передать `{ isDev: false }` только в эту функцию, но остальные capture-функции всё равно используют общий `__DEV__`.
78
79
 
80
+ ## Документ без browser persistence
81
+
82
+ ### `disableErrorReportBrowserStorage(): void`
83
+
84
+ ```ts
85
+ // Browser bootstrap: до первого capture и запуска UI/error-report lifecycle.
86
+ disableErrorReportBrowserStorage();
87
+ ```
88
+
89
+ Вызов односторонне переводит **capture, drafts и persisted-query diagnostics**
90
+ текущего документа в память. Повторный вызов ничего не сбрасывает. Обратного
91
+ включения нет: документ с другим режимом приложение открывает заново.
92
+ `setErrorReportCaptureOptions`, регистрация reporter и их cleanup не меняют
93
+ эту политику. В SSR вызов ничего не делает и не переключает общий process state.
94
+
95
+ Сам импорт `/error-report` не читает browser storage. В обычном режиме первый
96
+ `getErrorReportDrafts`, `getErrorReportDraft`, `updateErrorReportDraft` или capture
97
+ лениво загружает прежние drafts; дальнейшие чтение и сохранение остаются прежними.
98
+ В memory-режиме последние 10 drafts и отдельный стабильный session ID живут
99
+ только в памяти документа. Уже загруженные обычные drafts не копируются туда,
100
+ а существующие записи в browser storage не удаляются.
101
+
102
+ Memory capture сохраняет прежний контракт: runtime/query/mutation возвращают
103
+ `Promise<ErrorReportDraft | undefined>`, прямой draft capture —
104
+ `ErrorReportDraft | undefined`. В production создаётся обычный draft в памяти;
105
+ SSR/dev по-прежнему не создают draft. Поэтому UI boundary может продолжать
106
+ использовать `.then` и report ID. Сбор QueryClient diagnostics из памяти остаётся
107
+ доступным; `collectPersistedQueryDiagnostics()` возвращает `[]` без открытия IDB.
108
+
109
+ Вызов не отменяет native I/O, начатый ранее. Однако его поздний persisted result
110
+ не попадёт в memory draft, а после отключения drafts больше не пишутся в browser
111
+ storage. Для строгого отсутствия чтений выбирать режим нужно в bootstrap.
112
+
113
+ **Durable queue независима.** `createErrorReportQueue()` — явный storage API;
114
+ эта функция его не переключает. Приложение отдельно исключает создание очереди,
115
+ enqueue и запуск delivery в документе без persistence. Вызов также не меняет
116
+ Query persistence, Service Worker, пользовательские черновики или transport.
117
+
79
118
  ## Compile-time константы
80
119
 
81
120
  Потребитель должен определить:
@@ -430,7 +469,7 @@ type ErrorReportDraft = {
430
469
  };
431
470
  ```
432
471
 
433
- `reportId` — UUID отдельного отчёта. `sessionId` стабилен в текущем `sessionStorage`. `createdUtc` формируется как OData datetime UTC.
472
+ `reportId` — UUID отдельного отчёта. По умолчанию `sessionId` стабилен в текущем `sessionStorage`; после browser opt-out используется отдельный ID только в памяти документа. `createdUtc` формируется как OData datetime UTC.
434
473
 
435
474
  Payload содержит category/source/error, build environment, client, location, viewport, breadcrumbs и optional секции query/mutation/react/context.
436
475
 
@@ -452,11 +491,11 @@ parseErrorReportDrafts(value);
452
491
 
453
492
  ### Хранение
454
493
 
455
- Versioned drafts сохраняются под ключом `${__APP_ID__}.errorReport.drafts.v2`. В одной вкладке остаются последние 10 элементов. Старые удаляются с начала массива. Предыдущая unversioned storage-форма не загружается.
494
+ По умолчанию versioned drafts сохраняются под ключом `${__APP_ID__}.errorReport.drafts.v2`. В одной вкладке остаются последние 10 элементов. Старые удаляются с начала массива. Предыдущая unversioned storage-форма не загружается. После browser opt-out тот же лимит применяется к отдельному memory store без чтения или удаления browser records.
456
495
 
457
496
  Storage errors и некорректный JSON подавляются. При переполнении sessionStorage текущее in-memory состояние обновится, но запись на диск может не сохраниться.
458
497
 
459
- Модуль загружает drafts при первом импорте. Это модульное состояние, общее для всех consumers одного bundle.
498
+ Импорт не загружает drafts. В обычном режиме они читаются лениво при первом обращении к draft API, после чего модульное состояние разделяют consumers одного bundle. В memory-режиме чтения browser drafts нет.
460
499
 
461
500
  ## Durable IndexedDB queue
462
501
 
@@ -708,7 +747,7 @@ Foundation удаляет известные secret-like keys и email, но н
708
747
 
709
748
  ### Мутировать результат `getErrorReportDrafts()`
710
749
 
711
- Используйте `updateErrorReportDraft`; прямое изменение обходит сохранение в sessionStorage.
750
+ Используйте `updateErrorReportDraft`; прямое изменение обходит валидацию lifecycle и выбранное хранилище drafts.
712
751
 
713
752
  ### Передавать `UseQueryResult` вместо cache Query
714
753