krona-front/dist/assets/indexedDb-DZ-aRPMs.js

1 line
No EOL
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{u as e}from"./useToast-CS8pZhce.js";var t=class extends Error{constructor(e=`Отказано в доступе: запись принадлежит другому тенанту или доступ ограничен`){super(e),this.name=`TenantAccessDeniedError`}},n=class extends Error{constructor(e=`Запрашиваемый ресурс не найден`){super(e),this.name=`NotFoundError`}},r=`tenant_main`,i=[`owner`],a=r;function o(){if(typeof window<`u`){let e=localStorage.getItem(`krona_tenant_id`);if(e)return e}return a}function s(e){a=e,typeof window<`u`&&localStorage.setItem(`krona_tenant_id`,e)}function c(t){return{tenantId:t?.tenantId||o(),actorId:t?.actorId||`usr_default`,roleIds:t?.roleIds||[...i],correlationId:t?.correlationId||e()}}var l=(e,t)=>t.some(t=>e instanceof t),u,d;function f(){return u||=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]}function p(){return d||=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey]}var m=new WeakMap,h=new WeakMap,g=new WeakMap;function _(e){let t=new Promise((t,n)=>{let r=()=>{e.removeEventListener(`success`,i),e.removeEventListener(`error`,a)},i=()=>{t(C(e.result)),r()},a=()=>{n(e.error),r()};e.addEventListener(`success`,i),e.addEventListener(`error`,a)});return g.set(t,e),t}function v(e){if(m.has(e))return;let t=new Promise((t,n)=>{let r=()=>{e.removeEventListener(`complete`,i),e.removeEventListener(`error`,a),e.removeEventListener(`abort`,a)},i=()=>{t(),r()},a=()=>{n(e.error||new DOMException(`AbortError`,`AbortError`)),r()};e.addEventListener(`complete`,i),e.addEventListener(`error`,a),e.addEventListener(`abort`,a)});m.set(e,t)}var y={get(e,t,n){if(e instanceof IDBTransaction){if(t===`done`)return m.get(e);if(t===`store`)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return C(e[t])},set(e,t,n){return e[t]=n,!0},has(e,t){return e instanceof IDBTransaction&&(t===`done`||t===`store`)||t in e}};function b(e){y=e(y)}function x(e){return p().includes(e)?function(...t){return e.apply(w(this),t),C(this.request)}:function(...t){return C(e.apply(w(this),t))}}function S(e){return typeof e==`function`?x(e):(e instanceof IDBTransaction&&v(e),l(e,f())?new Proxy(e,y):e)}function C(e){if(e instanceof IDBRequest)return _(e);if(h.has(e))return h.get(e);let t=S(e);return t!==e&&(h.set(e,t),g.set(t,e)),t}var w=e=>g.get(e);function T(e,t,{blocked:n,upgrade:r,blocking:i,terminated:a}={}){let o=indexedDB.open(e,t),s=C(o);return r&&o.addEventListener(`upgradeneeded`,e=>{r(C(o.result),e.oldVersion,e.newVersion,C(o.transaction),e)}),n&&o.addEventListener(`blocked`,e=>n(e.oldVersion,e.newVersion,e)),s.then(e=>{a&&e.addEventListener(`close`,()=>a()),i&&e.addEventListener(`versionchange`,e=>i(e.oldVersion,e.newVersion,e))}).catch(()=>{}),s}var E=[`get`,`getKey`,`getAll`,`getAllKeys`,`count`],D=[`put`,`add`,`delete`,`clear`],O=new Map;function k(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t==`string`))return;if(O.get(t))return O.get(t);let n=t.replace(/FromIndex$/,``),r=t!==n,i=D.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(i||E.includes(n)))return;let a=async function(e,...t){let a=this.transaction(e,i?`readwrite`:`readonly`),o=a.store;return r&&(o=o.index(t.shift())),(await Promise.all([o[n](...t),i&&a.done]))[0]};return O.set(t,a),a}b(e=>({...e,get:(t,n,r)=>k(t,n)||e.get(t,n,r),has:(t,n)=>!!k(t,n)||e.has(t,n)}));var A=[`continue`,`continuePrimaryKey`,`advance`],j={},M=new WeakMap,N=new WeakMap,P={get(e,t){if(!A.includes(t))return e[t];let n=j[t];return n||=j[t]=function(...e){M.set(this,N.get(this)[t](...e))},n}};async function*F(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;t=t;let n=new Proxy(t,P);for(N.set(n,t),g.set(n,w(t));t;)yield n,t=await(M.get(n)||t.continue()),M.delete(n)}function I(e,t){return t===Symbol.asyncIterator&&l(e,[IDBIndex,IDBObjectStore,IDBCursor])||t===`iterate`&&l(e,[IDBIndex,IDBObjectStore])}b(e=>({...e,get(t,n,r){return I(t,n)?F:e.get(t,n,r)},has(t,n){return I(t,n)||e.has(t,n)}}));var L=new class{listeners=new Map;subscribe(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{this.listeners.get(e)?.delete(t)}}emit(e,t){let n={...t,event:e},r=this.listeners.get(e);r&&r.forEach(t=>{try{t(n)}catch(t){console.error(`[StorageEventBus] Error in event listener for ${e}:`,t)}})}clear(){this.listeners.clear()}},R=`krona_business_os_db`,z=[`entities_meta`,`fields_meta`,`layouts_meta`,`views_meta`,`records_data`,`audit_log`,`settings`],B=null;function V(){return B||=T(R,2,{upgrade(e,t){if(t<2){let t=Array.from(e.objectStoreNames);for(let n of t)z.includes(n)||e.deleteObjectStore(n)}if(e.objectStoreNames.contains(`entities_meta`)||e.createObjectStore(`entities_meta`,{keyPath:`id`}).createIndex(`by_code`,`code`,{unique:!0}),e.objectStoreNames.contains(`fields_meta`)||e.createObjectStore(`fields_meta`,{keyPath:`id`}).createIndex(`by_entity`,`entityCode`,{unique:!1}),e.objectStoreNames.contains(`layouts_meta`)||e.createObjectStore(`layouts_meta`,{keyPath:`id`}).createIndex(`by_entity`,`entityCode`,{unique:!1}),e.objectStoreNames.contains(`views_meta`)||e.createObjectStore(`views_meta`,{keyPath:`id`}).createIndex(`by_entity`,`entityCode`,{unique:!1}),!e.objectStoreNames.contains(`records_data`)){let t=e.createObjectStore(`records_data`,{keyPath:`id`});t.createIndex(`by_entity_type`,`entityType`,{unique:!1}),t.createIndex(`by_updated_at`,`updatedAt`,{unique:!1})}if(!e.objectStoreNames.contains(`audit_log`)){let t=e.createObjectStore(`audit_log`,{keyPath:`id`});t.createIndex(`by_entity_type`,`entityType`,{unique:!1}),t.createIndex(`by_entity_id`,`entityId`,{unique:!1}),t.createIndex(`by_timestamp`,`timestamp`,{unique:!1})}e.objectStoreNames.contains(`settings`)||e.createObjectStore(`settings`,{keyPath:`key`})}}),B}async function H(e,n){let r=await(await V()).get(`records_data`,e);if(!r)return null;let i=r,a=n||o();if(a&&i.tenant_id&&i.tenant_id!==a)throw new t(`Отказано в доступе: запись «${e}» принадлежит тенанту «${i.tenant_id}», текущий: «${a}»`);return r}async function U(e,t){let n=await V(),r=e.tenant_id||t||o()||`tenant_main`,i={...e,tenant_id:r,updatedAt:e.updatedAt||new Date().toISOString()};return await n.put(`records_data`,i),L.emit(`records:changed`,{storeName:`records_data`,entityType:i.entityType,id:i.id,action:`update`,data:i}),i}async function W(e,n,r){let i=await V(),a=await i.get(`records_data`,e);if(!a)return!1;let s=a,c=r||o();if(c&&s.tenant_id&&s.tenant_id!==c)throw new t(`Отказано в доступе: запись «${e}» принадлежит тенанту «${s.tenant_id}», текущий: «${c}»`);return await i.delete(`records_data`,e),L.emit(`records:changed`,{storeName:`records_data`,entityType:n||a.entityType,id:e,action:`delete`}),!0}async function G(e,t){let n=await(await V()).transaction(`records_data`,`readonly`).store.index(`by_entity_type`).getAll(e),r=t?.tenantId===void 0?o():t.tenantId;if(r&&(n=n.filter(e=>(e.tenant_id||`tenant_main`)===r)),t?.filter&&(n=n.filter(e=>{let n=e;for(let[e,r]of Object.entries(t.filter)){if(r==null||r===``)continue;let t=n[e];if(Array.isArray(t)){if(!t.includes(r))return!1}else if(t!==r)return!1}return!0})),t?.search&&t.search.trim()!==``){let e=t.search.trim().toLowerCase();n=n.filter(t=>Object.values(t).some(t=>typeof t==`string`?t.toLowerCase().includes(e):typeof t==`number`&&String(t).includes(e)))}if(t?.sort?.field){let{field:e,order:r}=t.sort;n.sort((t,n)=>{let i=t[e],a=n[e];if(i===a)return 0;if(i==null)return 1;if(a==null)return-1;let o=i>a?1:-1;return r===`desc`?-o:o})}let i=n.length,a=Math.max(1,t?.page||1),s=t?.pageSize||50,c=Math.ceil(i/s)||1,l=(a-1)*s;return{items:n.slice(l,l+s),total:i,page:a,pageSize:s,totalPages:c}}async function K(e,t){let n=t===void 0?o():t;if(e)return(await G(e,{tenantId:n})).total;let r=await V();return n?(await r.getAll(`records_data`)).filter(e=>(e.tenant_id||`tenant_main`)===n).length:r.count(`records_data`)}async function q(e,t){return await(await V()).get(e,t)||null}async function J(e,t,n){let r=await V(),i=n||o()||`tenant_main`,a=typeof t==`object`&&t?{...t,tenant_id:t.tenant_id||i}:t;await r.put(e,a),L.emit(`entity:changed`,{storeName:e,data:a,action:`update`})}async function Y(e,t){await(await V()).delete(e,t),L.emit(`entity:changed`,{storeName:e,id:t,action:`delete`})}async function X(e,t){let n=await(await V()).getAll(e);return t?e===`entities_meta`||e===`layouts_meta`||e===`views_meta`?n.filter(e=>!e.tenant_id||e.tenant_id===`system`||e.tenant_id===t):e===`audit_log`||e===`records_data`?n.filter(e=>(e.tenant_id||`tenant_main`)===t):n:n}async function Z(e){await(await V()).clear(e)}async function Q(e){let t=await V(),n=await t.getAll(`entities_meta`),r=await t.getAll(`fields_meta`),i=await t.getAll(`layouts_meta`),a=await t.getAll(`views_meta`),o=await t.getAll(`records_data`),s=await t.getAll(`audit_log`),c=await t.getAll(`settings`);return e&&(o=o.filter(t=>(t.tenant_id||`tenant_main`)===e),s=s.filter(t=>(t.tenant_id||`tenant_main`)===e),n=n.filter(t=>!t.tenant_id||t.tenant_id===`system`||t.tenant_id===e),i=i.filter(t=>!t.tenant_id||t.tenant_id===`system`||t.tenant_id===e),a=a.filter(t=>!t.tenant_id||t.tenant_id===`system`||t.tenant_id===e),c=c.filter(t=>!t.tenant_id||t.tenant_id===e)),{version:1,schemaVersion:2,exportedAt:new Date().toISOString(),system:`Krona Universal Business OS`,tenantId:e||`all`,stores:{entities_meta:n,fields_meta:r,layouts_meta:i,views_meta:a,records_data:o,audit_log:s,settings:c},metadata:{totalRecords:o.length,entitiesCount:n.length,auditLogsCount:s.length}}}async function $(t,n){if(!t||typeof t!=`object`)throw Error(`Некорректный формат снимка базы данных (snapshot).`);if(!t.stores||typeof t.stores!=`object`)throw Error(`Снимок не содержит данных таблиц (stores).`);let r=(await V()).transaction(z,`readwrite`);if(n){let i=r.objectStore(`records_data`),a=await i.getAll();for(let e of a)(e.tenant_id||`tenant_main`)===n&&await i.delete(e.id);let o=t.stores.records_data||[],s=new Map;for(let r of o){let o=!!(n&&t.tenantId&&n!==t.tenantId),c=a.some(e=>e.id===r.id&&(e.tenant_id||`tenant_main`)!==n),l=o||c?e():r.id;s.set(r.id,l),await i.put({...r,id:l,tenant_id:n})}let c=r.objectStore(`audit_log`),l=await c.getAll();for(let e of l)(e.tenant_id||`tenant_main`)===n&&await c.delete(String(e.id));let u=t.stores.audit_log||[];for(let r of u){let i=r.entityId&&s.get(String(r.entityId))||r.entityId,a=n&&t.tenantId&&n!==t.tenantId?e():r.id;await c.put({...r,id:a,entityId:i,tenant_id:n})}for(let i of[`entities_meta`,`fields_meta`,`layouts_meta`,`views_meta`,`settings`]){let a=r.objectStore(i),o=t.stores[i]||[];for(let r of o)if(!r.tenant_id||r.tenant_id===`system`)await a.put(r);else{let i=n&&t.tenantId&&n!==t.tenantId&&r.id?e():r.id;await a.put({...r,id:i,tenant_id:n})}}}else for(let e of z){let n=r.objectStore(e);await n.clear();let i=t.stores[e]||[];for(let e of i)await n.put(e)}await r.done,L.emit(`snapshot:imported`,{action:`import`,data:t.metadata})}async function ee(e){let t=await V();if(e){let n=t.transaction([`records_data`,`audit_log`],`readwrite`),r=n.objectStore(`records_data`),i=await r.getAll();for(let t of i)(t.tenant_id||`tenant_main`)===e&&await r.delete(t.id);let a=n.objectStore(`audit_log`),o=await a.getAll();for(let t of o)(t.tenant_id||`tenant_main`)===e&&await a.delete(String(t.id));await n.done}else{let e=t.transaction(z,`readwrite`);for(let t of z)await e.objectStore(t).clear();await e.done}L.emit(`storage:reset`,{action:`reset`})}export{n as _,Q as a,o as b,H as c,$ as d,U as f,r as g,L as h,Y as i,G as l,ee as m,K as n,X as o,J as p,W as r,V as s,Z as t,q as u,t as v,s as x,c as y};