@iamjulianacosta/mobx-data 1.0.1 → 1.1.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/dist/{JsonApiSerializer-CC5HXp4b.js → JsonApiSerializer-BLoE046A.js} +2 -2
- package/dist/{JsonApiSerializer-CC5HXp4b.js.map → JsonApiSerializer-BLoE046A.js.map} +1 -1
- package/dist/{JsonApiSerializer-CKB02AgP.cjs → JsonApiSerializer-DKemcyw-.cjs} +2 -2
- package/dist/{JsonApiSerializer-CKB02AgP.cjs.map → JsonApiSerializer-DKemcyw-.cjs.map} +1 -1
- package/dist/{MemoryAdapter-Bx1e7ndV.js → MemoryAdapter-Bp-BGHH3.js} +2 -2
- package/dist/{MemoryAdapter-Bx1e7ndV.js.map → MemoryAdapter-Bp-BGHH3.js.map} +1 -1
- package/dist/{MemoryAdapter-D1cTyydm.cjs → MemoryAdapter-DH-gzSSl.cjs} +2 -2
- package/dist/{MemoryAdapter-D1cTyydm.cjs.map → MemoryAdapter-DH-gzSSl.cjs.map} +1 -1
- package/dist/{ODataAdapter-DyyF1sdA.cjs → ODataAdapter-CrDFvBEZ.cjs} +2 -2
- package/dist/{ODataAdapter-DyyF1sdA.cjs.map → ODataAdapter-CrDFvBEZ.cjs.map} +1 -1
- package/dist/{ODataAdapter-C4IHK4BK.js → ODataAdapter-RQUjVTcf.js} +2 -2
- package/dist/{ODataAdapter-C4IHK4BK.js.map → ODataAdapter-RQUjVTcf.js.map} +1 -1
- package/dist/RestAdapter-CSoJg7D2.cjs +2 -0
- package/dist/{RestAdapter-CJOwTsKK.cjs.map → RestAdapter-CSoJg7D2.cjs.map} +1 -1
- package/dist/{RestAdapter-B4aRvs4m.js → RestAdapter-D6bGIHZT.js} +32 -23
- package/dist/{RestAdapter-B4aRvs4m.js.map → RestAdapter-D6bGIHZT.js.map} +1 -1
- package/dist/{Store-CZ7Z-Nme.js → Store-Bm5JivTc.js} +195 -150
- package/dist/Store-Bm5JivTc.js.map +1 -0
- package/dist/Store-DX9D0Mmy.cjs +2 -0
- package/dist/Store-DX9D0Mmy.cjs.map +1 -0
- package/dist/adapter/RestAdapter.d.ts.map +1 -1
- package/dist/adapter/index.cjs +1 -1
- package/dist/adapter/index.js +2 -2
- package/dist/cache/IndexedDBCache.d.ts +22 -0
- package/dist/cache/IndexedDBCache.d.ts.map +1 -0
- package/dist/cache/cache-utils.d.ts +4 -0
- package/dist/cache/cache-utils.d.ts.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/types.d.ts +25 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache-utils-B2wFhisx.js +39 -0
- package/dist/cache-utils-B2wFhisx.js.map +1 -0
- package/dist/cache-utils-CSwsqOi3.cjs +2 -0
- package/dist/cache-utils-CSwsqOi3.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +144 -49
- package/dist/index.js.map +1 -1
- package/dist/json-api/index.cjs +1 -1
- package/dist/json-api/index.js +1 -1
- package/dist/odata/index.cjs +1 -1
- package/dist/odata/index.js +1 -1
- package/dist/store/Store.d.ts +6 -0
- package/dist/store/Store.d.ts.map +1 -1
- package/dist/store/index.cjs +1 -1
- package/dist/store/index.js +1 -1
- package/package.json +2 -1
- package/src/adapter/RestAdapter.ts +12 -2
- package/src/cache/IndexedDBCache.ts +171 -0
- package/src/cache/cache-utils.ts +57 -0
- package/src/cache/index.ts +12 -0
- package/src/cache/types.ts +33 -0
- package/src/index.ts +1 -0
- package/src/store/Store.ts +100 -0
- package/dist/RestAdapter-CJOwTsKK.cjs +0 -2
- package/dist/Store-BdwMrbDi.cjs +0 -2
- package/dist/Store-BdwMrbDi.cjs.map +0 -1
- package/dist/Store-CZ7Z-Nme.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-utils-B2wFhisx.js","sources":["../src/cache/types.ts","../src/cache/cache-utils.ts"],"sourcesContent":["import type { RelationshipRef } from '@mobx-data/model';\n\nexport const RESPONSE_HEADERS: unique symbol = Symbol('response-headers');\n\nexport interface CacheEntryData {\n modelName: string;\n id: string;\n attributes: Record<string, unknown>;\n relationships?: Record<string, RelationshipRef>;\n cachedAt: number;\n expiresAt: number;\n}\n\nexport interface IndexedDBCacheOptions {\n databaseName?: string;\n defaultTTL?: number;\n}\n\nexport interface CacheLike {\n get(modelName: string, id: string): Promise<CacheEntryData | null>;\n set(\n modelName: string,\n id: string,\n attributes: Record<string, unknown>,\n options?: {\n relationships?: Record<string, RelationshipRef>;\n ttl?: number;\n },\n ): Promise<void>;\n has(modelName: string, id: string): Promise<boolean>;\n invalidate(modelName: string, id: string): Promise<void>;\n invalidateAll(modelName?: string): Promise<void>;\n}\n","import { RESPONSE_HEADERS } from './types.js';\n\nexport function parseCacheTTLFromHeaders(\n headers: Record<string, string>,\n): number | null {\n const cacheControl = headers['cache-control'];\n if (cacheControl) {\n if (/no-store/i.test(cacheControl) || /no-cache/i.test(cacheControl)) {\n return 0;\n }\n const sMaxAge = /s-maxage=(\\d+)/i.exec(cacheControl);\n if (sMaxAge) {\n return parseInt(sMaxAge[1]!, 10) * 1000;\n }\n const maxAge = /max-age=(\\d+)/i.exec(cacheControl);\n if (maxAge) {\n return parseInt(maxAge[1]!, 10) * 1000;\n }\n }\n\n const expires = headers['expires'];\n if (expires) {\n const expiresMilliseconds = new Date(expires).getTime();\n if (!Number.isNaN(expiresMilliseconds)) {\n return Math.max(0, expiresMilliseconds - Date.now());\n }\n }\n\n return null;\n}\n\nexport function extractResponseHeaders(\n payload: unknown,\n): Record<string, string> | null {\n if (payload !== null && typeof payload === 'object') {\n return (\n (payload as Record<symbol, unknown>)[RESPONSE_HEADERS] as\n | Record<string, string>\n | undefined\n ) ?? null;\n }\n return null;\n}\n\nexport function attachResponseHeaders(\n payload: unknown,\n headers: Record<string, string>,\n): void {\n if (payload !== null && typeof payload === 'object') {\n Object.defineProperty(payload, RESPONSE_HEADERS, {\n value: headers,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n}\n"],"names":["RESPONSE_HEADERS","parseCacheTTLFromHeaders","headers","cacheControl","sMaxAge","maxAge","expires","expiresMilliseconds","extractResponseHeaders","payload","attachResponseHeaders"],"mappings":"AAEO,MAAMA,IAAkC,OAAO,kBAAkB;ACAjE,SAASC,EACdC,GACe;AACf,QAAMC,IAAeD,EAAQ,eAAe;AAC5C,MAAIC,GAAc;AAChB,QAAI,YAAY,KAAKA,CAAY,KAAK,YAAY,KAAKA,CAAY;AACjE,aAAO;AAET,UAAMC,IAAU,kBAAkB,KAAKD,CAAY;AACnD,QAAIC;AACF,aAAO,SAASA,EAAQ,CAAC,GAAI,EAAE,IAAI;AAErC,UAAMC,IAAS,iBAAiB,KAAKF,CAAY;AACjD,QAAIE;AACF,aAAO,SAASA,EAAO,CAAC,GAAI,EAAE,IAAI;AAAA,EAEtC;AAEA,QAAMC,IAAUJ,EAAQ;AACxB,MAAII,GAAS;AACX,UAAMC,IAAsB,IAAI,KAAKD,CAAO,EAAE,QAAA;AAC9C,QAAI,CAAC,OAAO,MAAMC,CAAmB;AACnC,aAAO,KAAK,IAAI,GAAGA,IAAsB,KAAK,KAAK;AAAA,EAEvD;AAEA,SAAO;AACT;AAEO,SAASC,EACdC,GAC+B;AAC/B,SAAIA,MAAY,QAAQ,OAAOA,KAAY,WAEtCA,EAAoCT,CAAgB,KAGlD,OAEA;AACT;AAEO,SAASU,EACdD,GACAP,GACM;AACN,EAAIO,MAAY,QAAQ,OAAOA,KAAY,YACzC,OAAO,eAAeA,GAAST,GAAkB;AAAA,IAC/C,OAAOE;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAAA,CACf;AAEL;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const s=Symbol("response-headers");function c(e){const t=e["cache-control"];if(t){if(/no-store/i.test(t)||/no-cache/i.test(t))return 0;const r=/s-maxage=(\d+)/i.exec(t);if(r)return parseInt(r[1],10)*1e3;const a=/max-age=(\d+)/i.exec(t);if(a)return parseInt(a[1],10)*1e3}const n=e.expires;if(n){const r=new Date(n).getTime();if(!Number.isNaN(r))return Math.max(0,r-Date.now())}return null}function o(e){return e!==null&&typeof e=="object"?e[s]??null:null}function i(e,t){e!==null&&typeof e=="object"&&Object.defineProperty(e,s,{value:t,enumerable:!1,writable:!1,configurable:!1})}exports.RESPONSE_HEADERS=s;exports.attachResponseHeaders=i;exports.extractResponseHeaders=o;exports.parseCacheTTLFromHeaders=c;
|
|
2
|
+
//# sourceMappingURL=cache-utils-CSwsqOi3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-utils-CSwsqOi3.cjs","sources":["../src/cache/types.ts","../src/cache/cache-utils.ts"],"sourcesContent":["import type { RelationshipRef } from '@mobx-data/model';\n\nexport const RESPONSE_HEADERS: unique symbol = Symbol('response-headers');\n\nexport interface CacheEntryData {\n modelName: string;\n id: string;\n attributes: Record<string, unknown>;\n relationships?: Record<string, RelationshipRef>;\n cachedAt: number;\n expiresAt: number;\n}\n\nexport interface IndexedDBCacheOptions {\n databaseName?: string;\n defaultTTL?: number;\n}\n\nexport interface CacheLike {\n get(modelName: string, id: string): Promise<CacheEntryData | null>;\n set(\n modelName: string,\n id: string,\n attributes: Record<string, unknown>,\n options?: {\n relationships?: Record<string, RelationshipRef>;\n ttl?: number;\n },\n ): Promise<void>;\n has(modelName: string, id: string): Promise<boolean>;\n invalidate(modelName: string, id: string): Promise<void>;\n invalidateAll(modelName?: string): Promise<void>;\n}\n","import { RESPONSE_HEADERS } from './types.js';\n\nexport function parseCacheTTLFromHeaders(\n headers: Record<string, string>,\n): number | null {\n const cacheControl = headers['cache-control'];\n if (cacheControl) {\n if (/no-store/i.test(cacheControl) || /no-cache/i.test(cacheControl)) {\n return 0;\n }\n const sMaxAge = /s-maxage=(\\d+)/i.exec(cacheControl);\n if (sMaxAge) {\n return parseInt(sMaxAge[1]!, 10) * 1000;\n }\n const maxAge = /max-age=(\\d+)/i.exec(cacheControl);\n if (maxAge) {\n return parseInt(maxAge[1]!, 10) * 1000;\n }\n }\n\n const expires = headers['expires'];\n if (expires) {\n const expiresMilliseconds = new Date(expires).getTime();\n if (!Number.isNaN(expiresMilliseconds)) {\n return Math.max(0, expiresMilliseconds - Date.now());\n }\n }\n\n return null;\n}\n\nexport function extractResponseHeaders(\n payload: unknown,\n): Record<string, string> | null {\n if (payload !== null && typeof payload === 'object') {\n return (\n (payload as Record<symbol, unknown>)[RESPONSE_HEADERS] as\n | Record<string, string>\n | undefined\n ) ?? null;\n }\n return null;\n}\n\nexport function attachResponseHeaders(\n payload: unknown,\n headers: Record<string, string>,\n): void {\n if (payload !== null && typeof payload === 'object') {\n Object.defineProperty(payload, RESPONSE_HEADERS, {\n value: headers,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n}\n"],"names":["RESPONSE_HEADERS","parseCacheTTLFromHeaders","headers","cacheControl","sMaxAge","maxAge","expires","expiresMilliseconds","extractResponseHeaders","payload","attachResponseHeaders"],"mappings":"aAEO,MAAMA,EAAkC,OAAO,kBAAkB,ECAjE,SAASC,EACdC,EACe,CACf,MAAMC,EAAeD,EAAQ,eAAe,EAC5C,GAAIC,EAAc,CAChB,GAAI,YAAY,KAAKA,CAAY,GAAK,YAAY,KAAKA,CAAY,EACjE,MAAO,GAET,MAAMC,EAAU,kBAAkB,KAAKD,CAAY,EACnD,GAAIC,EACF,OAAO,SAASA,EAAQ,CAAC,EAAI,EAAE,EAAI,IAErC,MAAMC,EAAS,iBAAiB,KAAKF,CAAY,EACjD,GAAIE,EACF,OAAO,SAASA,EAAO,CAAC,EAAI,EAAE,EAAI,GAEtC,CAEA,MAAMC,EAAUJ,EAAQ,QACxB,GAAII,EAAS,CACX,MAAMC,EAAsB,IAAI,KAAKD,CAAO,EAAE,QAAA,EAC9C,GAAI,CAAC,OAAO,MAAMC,CAAmB,EACnC,OAAO,KAAK,IAAI,EAAGA,EAAsB,KAAK,KAAK,CAEvD,CAEA,OAAO,IACT,CAEO,SAASC,EACdC,EAC+B,CAC/B,OAAIA,IAAY,MAAQ,OAAOA,GAAY,SAEtCA,EAAoCT,CAAgB,GAGlD,KAEA,IACT,CAEO,SAASU,EACdD,EACAP,EACM,CACFO,IAAY,MAAQ,OAAOA,GAAY,UACzC,OAAO,eAAeA,EAAST,EAAkB,CAC/C,MAAOE,EACP,WAAY,GACZ,SAAU,GACV,aAAc,EAAA,CACf,CAEL"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./types-uWOXMPWW.cjs"),A=require("./decorators-HQ1KnRdh.cjs"),_=require("./SchemaService-Di_yjVzU.cjs"),u=require("./relationships-B55LBaCW.cjs"),b=require("./Store-DX9D0Mmy.cjs"),f=require("./RestAdapter-CSoJg7D2.cjs"),g=require("./MemoryAdapter-DH-gzSSl.cjs"),M=require("./Serializer-95gi5edy.cjs"),S=require("./EmbeddedRecordsMixin-CBvqNdgC.cjs"),p=require("./date-CRCe-9gf.cjs"),T=require("./CacheHandler-CXgY9IJo.cjs"),E=require("./JsonApiSerializer-DKemcyw-.cjs"),O=require("./ODataAdapter-CrDFvBEZ.cjs"),y=require("./cache-utils-CSwsqOi3.cjs"),s="cache-entries",R=1,j=36e5;class l{constructor(e={}){this._database=null,this._openPromise=null,this._databaseName=e.databaseName??"mobx-data-cache",this._defaultTTL=e.defaultTTL??j}get defaultTTL(){return this._defaultTTL}async open(){return this._database?this._database:this._openPromise?this._openPromise:(this._openPromise=new Promise((e,t)=>{const r=indexedDB.open(this._databaseName,R);r.onupgradeneeded=()=>{const a=r.result;if(!a.objectStoreNames.contains(s)){const o=a.createObjectStore(s,{keyPath:"key"});o.createIndex("modelName","modelName",{unique:!1}),o.createIndex("expiresAt","expiresAt",{unique:!1})}},r.onsuccess=()=>{this._database=r.result,e(this._database)},r.onerror=()=>{this._openPromise=null,t(r.error)}}),this._openPromise)}static cacheKey(e,t){return`${e}:${t}`}async get(e,t){const r=await this.open();return new Promise((a,o)=>{const n=r.transaction(s,"readonly").objectStore(s).get(l.cacheKey(e,t));n.onsuccess=()=>{const i=n.result;if(!i){a(null);return}if(Date.now()>i.expiresAt){this.invalidate(e,t),a(null);return}a(i)},n.onerror=()=>o(n.error)})}async set(e,t,r,a={}){const o=await this.open(),d=Date.now(),c=a.ttl??this._defaultTTL,n={key:l.cacheKey(e,t),modelName:e,id:t,attributes:r,relationships:a.relationships,cachedAt:d,expiresAt:d+c};return new Promise((i,P)=>{const m=o.transaction(s,"readwrite").objectStore(s).put(n);m.onsuccess=()=>i(),m.onerror=()=>P(m.error)})}async has(e,t){return await this.get(e,t)!==null}async invalidate(e,t){const r=await this.open();return new Promise((a,o)=>{const n=r.transaction(s,"readwrite").objectStore(s).delete(l.cacheKey(e,t));n.onsuccess=()=>a(),n.onerror=()=>o(n.error)})}async invalidateAll(e){const t=await this.open();return e?new Promise((r,a)=>{const n=t.transaction(s,"readwrite").objectStore(s).index("modelName").openCursor(IDBKeyRange.only(e));n.onsuccess=()=>{const i=n.result;i?(i.delete(),i.continue()):r()},n.onerror=()=>a(n.error)}):new Promise((r,a)=>{const c=t.transaction(s,"readwrite").objectStore(s).clear();c.onsuccess=()=>r(),c.onerror=()=>a(c.error)})}async close(){this._database&&(this._database.close(),this._database=null,this._openPromise=null)}}exports.ATTRIBUTES_META_KEY=h.ATTRIBUTES_META_KEY;exports.MODEL_NAME_META_KEY=h.MODEL_NAME_META_KEY;exports.RELATIONSHIPS_META_KEY=h.RELATIONSHIPS_META_KEY;exports.attr=A.attr;exports.belongsTo=A.belongsTo;exports.hasMany=A.hasMany;Object.defineProperty(exports,"SchemaService",{enumerable:!0,get:()=>_.SchemaService});exports.AsyncBelongsTo=u.AsyncBelongsTo;exports.AsyncHasMany=u.AsyncHasMany;Object.defineProperty(exports,"Errors",{enumerable:!0,get:()=>u.Errors});exports.ManyArray=u.ManyArray;exports.Model=u.Model;exports.Snapshot=u.Snapshot;exports.StateMachine=u.StateMachine;exports.AdapterPopulatedRecordArray=b.AdapterPopulatedRecordArray;exports.IdentityMap=b.IdentityMap;exports.RecordArray=b.RecordArray;Object.defineProperty(exports,"Store",{enumerable:!0,get:()=>b.Store});exports.Adapter=f.Adapter;Object.defineProperty(exports,"RestAdapter",{enumerable:!0,get:()=>f.RestAdapter});Object.defineProperty(exports,"MemoryAdapter",{enumerable:!0,get:()=>g.MemoryAdapter});exports.Serializer=M.Serializer;exports.EmbeddedRecordsMixin=S.EmbeddedRecordsMixin;Object.defineProperty(exports,"JsonSerializer",{enumerable:!0,get:()=>S.JsonSerializer});Object.defineProperty(exports,"RestSerializer",{enumerable:!0,get:()=>S.RestSerializer});exports.BaseTransform=p.BaseTransform;Object.defineProperty(exports,"BooleanTransform",{enumerable:!0,get:()=>p.BooleanTransform});Object.defineProperty(exports,"DateTransform",{enumerable:!0,get:()=>p.DateTransform});Object.defineProperty(exports,"NumberTransform",{enumerable:!0,get:()=>p.NumberTransform});Object.defineProperty(exports,"StringTransform",{enumerable:!0,get:()=>p.StringTransform});Object.defineProperty(exports,"CacheHandler",{enumerable:!0,get:()=>T.CacheHandler});Object.defineProperty(exports,"FetchHandler",{enumerable:!0,get:()=>T.FetchHandler});Object.defineProperty(exports,"RequestManager",{enumerable:!0,get:()=>T.RequestManager});Object.defineProperty(exports,"JsonApiAdapter",{enumerable:!0,get:()=>E.JsonApiAdapter});Object.defineProperty(exports,"JsonApiSerializer",{enumerable:!0,get:()=>E.JsonApiSerializer});Object.defineProperty(exports,"ODataAdapter",{enumerable:!0,get:()=>O.ODataAdapter});exports.RESPONSE_HEADERS=y.RESPONSE_HEADERS;exports.attachResponseHeaders=y.attachResponseHeaders;exports.extractResponseHeaders=y.extractResponseHeaders;exports.parseCacheTTLFromHeaders=y.parseCacheTTLFromHeaders;exports.IndexedDBCache=l;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/cache/IndexedDBCache.ts"],"sourcesContent":["import type { RelationshipRef } from '@mobx-data/model';\nimport type { CacheEntryData, IndexedDBCacheOptions, CacheLike } from './types.js';\n\nconst STORE_NAME = 'cache-entries';\nconst DATABASE_VERSION = 1;\nconst DEFAULT_TTL = 3_600_000;\n\ninterface StoredEntry extends CacheEntryData {\n key: string;\n}\n\nexport class IndexedDBCache implements CacheLike {\n private _databaseName: string;\n\n private _defaultTTL: number;\n\n private _database: IDBDatabase | null = null;\n\n private _openPromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexedDBCacheOptions = {}) {\n this._databaseName = options.databaseName ?? 'mobx-data-cache';\n this._defaultTTL = options.defaultTTL ?? DEFAULT_TTL;\n }\n\n get defaultTTL(): number {\n return this._defaultTTL;\n }\n\n private async open(): Promise<IDBDatabase> {\n if (this._database) {\n return this._database;\n }\n if (this._openPromise) {\n return this._openPromise;\n }\n\n this._openPromise = new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this._databaseName, DATABASE_VERSION);\n request.onupgradeneeded = () => {\n const database = request.result;\n if (!database.objectStoreNames.contains(STORE_NAME)) {\n const store = database.createObjectStore(STORE_NAME, {\n keyPath: 'key',\n });\n store.createIndex('modelName', 'modelName', { unique: false });\n store.createIndex('expiresAt', 'expiresAt', { unique: false });\n }\n };\n request.onsuccess = () => {\n this._database = request.result;\n resolve(this._database);\n };\n request.onerror = () => {\n this._openPromise = null;\n reject(request.error);\n };\n });\n return this._openPromise;\n }\n\n static cacheKey(modelName: string, id: string): string {\n return `${modelName}:${id}`;\n }\n\n async get(modelName: string, id: string): Promise<CacheEntryData | null> {\n const database = await this.open();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readonly');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.get(IndexedDBCache.cacheKey(modelName, id));\n request.onsuccess = () => {\n const entry = request.result as StoredEntry | undefined;\n if (!entry) {\n resolve(null);\n return;\n }\n if (Date.now() > entry.expiresAt) {\n this.invalidate(modelName, id);\n resolve(null);\n return;\n }\n resolve(entry);\n };\n request.onerror = () => reject(request.error);\n });\n }\n\n async set(\n modelName: string,\n id: string,\n attributes: Record<string, unknown>,\n options: {\n relationships?: Record<string, RelationshipRef>;\n ttl?: number;\n } = {},\n ): Promise<void> {\n const database = await this.open();\n const now = Date.now();\n const ttl = options.ttl ?? this._defaultTTL;\n const entry: StoredEntry = {\n key: IndexedDBCache.cacheKey(modelName, id),\n modelName,\n id,\n attributes,\n relationships: options.relationships,\n cachedAt: now,\n expiresAt: now + ttl,\n };\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.put(entry);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n async has(modelName: string, id: string): Promise<boolean> {\n const entry = await this.get(modelName, id);\n return entry !== null;\n }\n\n async invalidate(modelName: string, id: string): Promise<void> {\n const database = await this.open();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.delete(IndexedDBCache.cacheKey(modelName, id));\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n async invalidateAll(modelName?: string): Promise<void> {\n const database = await this.open();\n if (!modelName) {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.clear();\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const index = store.index('modelName');\n const cursorRequest = index.openCursor(IDBKeyRange.only(modelName));\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor) {\n cursor.delete();\n cursor.continue();\n } else {\n resolve();\n }\n };\n cursorRequest.onerror = () => reject(cursorRequest.error);\n });\n }\n\n async close(): Promise<void> {\n if (this._database) {\n this._database.close();\n this._database = null;\n this._openPromise = null;\n }\n }\n}\n"],"names":["STORE_NAME","DATABASE_VERSION","DEFAULT_TTL","IndexedDBCache","options","resolve","reject","request","database","store","modelName","id","entry","attributes","now","ttl","cursorRequest","cursor"],"mappings":"woBAGMA,EAAa,gBACbC,EAAmB,EACnBC,EAAc,KAMb,MAAMC,CAAoC,CAS/C,YAAYC,EAAiC,GAAI,CAJjD,KAAQ,UAAgC,KAExC,KAAQ,aAA4C,KAGlD,KAAK,cAAgBA,EAAQ,cAAgB,kBAC7C,KAAK,YAAcA,EAAQ,YAAcF,CAC3C,CAEA,IAAI,YAAqB,CACvB,OAAO,KAAK,WACd,CAEA,MAAc,MAA6B,CACzC,OAAI,KAAK,UACA,KAAK,UAEV,KAAK,aACA,KAAK,cAGd,KAAK,aAAe,IAAI,QAAqB,CAACG,EAASC,IAAW,CAChE,MAAMC,EAAU,UAAU,KAAK,KAAK,cAAeN,CAAgB,EACnEM,EAAQ,gBAAkB,IAAM,CAC9B,MAAMC,EAAWD,EAAQ,OACzB,GAAI,CAACC,EAAS,iBAAiB,SAASR,CAAU,EAAG,CACnD,MAAMS,EAAQD,EAAS,kBAAkBR,EAAY,CACnD,QAAS,KAAA,CACV,EACDS,EAAM,YAAY,YAAa,YAAa,CAAE,OAAQ,GAAO,EAC7DA,EAAM,YAAY,YAAa,YAAa,CAAE,OAAQ,GAAO,CAC/D,CACF,EACAF,EAAQ,UAAY,IAAM,CACxB,KAAK,UAAYA,EAAQ,OACzBF,EAAQ,KAAK,SAAS,CACxB,EACAE,EAAQ,QAAU,IAAM,CACtB,KAAK,aAAe,KACpBD,EAAOC,EAAQ,KAAK,CACtB,CACF,CAAC,EACM,KAAK,aACd,CAEA,OAAO,SAASG,EAAmBC,EAAoB,CACrD,MAAO,GAAGD,CAAS,IAAIC,CAAE,EAC3B,CAEA,MAAM,IAAID,EAAmBC,EAA4C,CACvE,MAAMH,EAAW,MAAM,KAAK,KAAA,EAC5B,OAAO,IAAI,QAAQ,CAACH,EAASC,IAAW,CAGtC,MAAMC,EAFcC,EAAS,YAAYR,EAAY,UAAU,EACrC,YAAYA,CAAU,EAC1B,IAAIG,EAAe,SAASO,EAAWC,CAAE,CAAC,EAChEJ,EAAQ,UAAY,IAAM,CACxB,MAAMK,EAAQL,EAAQ,OACtB,GAAI,CAACK,EAAO,CACVP,EAAQ,IAAI,EACZ,MACF,CACA,GAAI,KAAK,MAAQO,EAAM,UAAW,CAChC,KAAK,WAAWF,EAAWC,CAAE,EAC7BN,EAAQ,IAAI,EACZ,MACF,CACAA,EAAQO,CAAK,CACf,EACAL,EAAQ,QAAU,IAAMD,EAAOC,EAAQ,KAAK,CAC9C,CAAC,CACH,CAEA,MAAM,IACJG,EACAC,EACAE,EACAT,EAGI,CAAA,EACW,CACf,MAAMI,EAAW,MAAM,KAAK,KAAA,EACtBM,EAAM,KAAK,IAAA,EACXC,EAAMX,EAAQ,KAAO,KAAK,YAC1BQ,EAAqB,CACzB,IAAKT,EAAe,SAASO,EAAWC,CAAE,EAC1C,UAAAD,EACA,GAAAC,EACA,WAAAE,EACA,cAAeT,EAAQ,cACvB,SAAUU,EACV,UAAWA,EAAMC,CAAA,EAEnB,OAAO,IAAI,QAAQ,CAACV,EAASC,IAAW,CAGtC,MAAMC,EAFcC,EAAS,YAAYR,EAAY,WAAW,EACtC,YAAYA,CAAU,EAC1B,IAAIY,CAAK,EAC/BL,EAAQ,UAAY,IAAMF,EAAA,EAC1BE,EAAQ,QAAU,IAAMD,EAAOC,EAAQ,KAAK,CAC9C,CAAC,CACH,CAEA,MAAM,IAAIG,EAAmBC,EAA8B,CAEzD,OADc,MAAM,KAAK,IAAID,EAAWC,CAAE,IACzB,IACnB,CAEA,MAAM,WAAWD,EAAmBC,EAA2B,CAC7D,MAAMH,EAAW,MAAM,KAAK,KAAA,EAC5B,OAAO,IAAI,QAAQ,CAACH,EAASC,IAAW,CAGtC,MAAMC,EAFcC,EAAS,YAAYR,EAAY,WAAW,EACtC,YAAYA,CAAU,EAC1B,OAAOG,EAAe,SAASO,EAAWC,CAAE,CAAC,EACnEJ,EAAQ,UAAY,IAAMF,EAAA,EAC1BE,EAAQ,QAAU,IAAMD,EAAOC,EAAQ,KAAK,CAC9C,CAAC,CACH,CAEA,MAAM,cAAcG,EAAmC,CACrD,MAAMF,EAAW,MAAM,KAAK,KAAA,EAC5B,OAAKE,EASE,IAAI,QAAQ,CAACL,EAASC,IAAW,CAItC,MAAMU,EAHcR,EAAS,YAAYR,EAAY,WAAW,EACtC,YAAYA,CAAU,EAC5B,MAAM,WAAW,EACT,WAAW,YAAY,KAAKU,CAAS,CAAC,EAClEM,EAAc,UAAY,IAAM,CAC9B,MAAMC,EAASD,EAAc,OACzBC,GACFA,EAAO,OAAA,EACPA,EAAO,SAAA,GAEPZ,EAAA,CAEJ,EACAW,EAAc,QAAU,IAAMV,EAAOU,EAAc,KAAK,CAC1D,CAAC,EAvBQ,IAAI,QAAQ,CAACX,EAASC,IAAW,CAGtC,MAAMC,EAFcC,EAAS,YAAYR,EAAY,WAAW,EACtC,YAAYA,CAAU,EAC1B,MAAA,EACtBO,EAAQ,UAAY,IAAMF,EAAA,EAC1BE,EAAQ,QAAU,IAAMD,EAAOC,EAAQ,KAAK,CAC9C,CAAC,CAkBL,CAEA,MAAM,OAAuB,CACvB,KAAK,YACP,KAAK,UAAU,MAAA,EACf,KAAK,UAAY,KACjB,KAAK,aAAe,KAExB,CACF"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,EACX,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,EACX,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,52 +1,147 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { a as
|
|
3
|
-
import { S as
|
|
4
|
-
import { A as
|
|
5
|
-
import { A as
|
|
6
|
-
import { A as
|
|
7
|
-
import { M as
|
|
8
|
-
import { S as
|
|
9
|
-
import { E as
|
|
10
|
-
import { B as
|
|
11
|
-
import { C as
|
|
12
|
-
import { J as
|
|
13
|
-
import { O as
|
|
1
|
+
import { A as T, M as b, R as _ } from "./types-C9NB2gRj.js";
|
|
2
|
+
import { a as E, b as R, h as w } from "./decorators-Zr35qr6A.js";
|
|
3
|
+
import { S as P } from "./SchemaService-DZwkFgZu.js";
|
|
4
|
+
import { A as g, a as L, E as q, M as D, b as H, S as K, c as O } from "./relationships-BEXANmWg.js";
|
|
5
|
+
import { A as I, I as B, R as J, S as z } from "./Store-Bm5JivTc.js";
|
|
6
|
+
import { A as k, R as Y } from "./RestAdapter-D6bGIHZT.js";
|
|
7
|
+
import { M as C } from "./MemoryAdapter-Bp-BGHH3.js";
|
|
8
|
+
import { S as $ } from "./Serializer-FxJbsZ50.js";
|
|
9
|
+
import { E as G, J as Q, R as W } from "./EmbeddedRecordsMixin-VoHluHCT.js";
|
|
10
|
+
import { B as Z, a as ee, D as te, N as se, S as ae } from "./date-Bj4O2W1F.js";
|
|
11
|
+
import { C as oe, F as ne, R as ce } from "./CacheHandler-BTU_rYkv.js";
|
|
12
|
+
import { J as de, a as ue } from "./JsonApiSerializer-BLoE046A.js";
|
|
13
|
+
import { O as pe } from "./ODataAdapter-RQUjVTcf.js";
|
|
14
|
+
import { R as me, a as Ae, e as fe, p as ye } from "./cache-utils-B2wFhisx.js";
|
|
15
|
+
const o = "cache-entries", h = 1, m = 36e5;
|
|
16
|
+
class u {
|
|
17
|
+
constructor(e = {}) {
|
|
18
|
+
this._database = null, this._openPromise = null, this._databaseName = e.databaseName ?? "mobx-data-cache", this._defaultTTL = e.defaultTTL ?? m;
|
|
19
|
+
}
|
|
20
|
+
get defaultTTL() {
|
|
21
|
+
return this._defaultTTL;
|
|
22
|
+
}
|
|
23
|
+
async open() {
|
|
24
|
+
return this._database ? this._database : this._openPromise ? this._openPromise : (this._openPromise = new Promise((e, s) => {
|
|
25
|
+
const t = indexedDB.open(this._databaseName, h);
|
|
26
|
+
t.onupgradeneeded = () => {
|
|
27
|
+
const a = t.result;
|
|
28
|
+
if (!a.objectStoreNames.contains(o)) {
|
|
29
|
+
const n = a.createObjectStore(o, {
|
|
30
|
+
keyPath: "key"
|
|
31
|
+
});
|
|
32
|
+
n.createIndex("modelName", "modelName", { unique: !1 }), n.createIndex("expiresAt", "expiresAt", { unique: !1 });
|
|
33
|
+
}
|
|
34
|
+
}, t.onsuccess = () => {
|
|
35
|
+
this._database = t.result, e(this._database);
|
|
36
|
+
}, t.onerror = () => {
|
|
37
|
+
this._openPromise = null, s(t.error);
|
|
38
|
+
};
|
|
39
|
+
}), this._openPromise);
|
|
40
|
+
}
|
|
41
|
+
static cacheKey(e, s) {
|
|
42
|
+
return `${e}:${s}`;
|
|
43
|
+
}
|
|
44
|
+
async get(e, s) {
|
|
45
|
+
const t = await this.open();
|
|
46
|
+
return new Promise((a, n) => {
|
|
47
|
+
const r = t.transaction(o, "readonly").objectStore(o).get(u.cacheKey(e, s));
|
|
48
|
+
r.onsuccess = () => {
|
|
49
|
+
const c = r.result;
|
|
50
|
+
if (!c) {
|
|
51
|
+
a(null);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (Date.now() > c.expiresAt) {
|
|
55
|
+
this.invalidate(e, s), a(null);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
a(c);
|
|
59
|
+
}, r.onerror = () => n(r.error);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async set(e, s, t, a = {}) {
|
|
63
|
+
const n = await this.open(), d = Date.now(), i = a.ttl ?? this._defaultTTL, r = {
|
|
64
|
+
key: u.cacheKey(e, s),
|
|
65
|
+
modelName: e,
|
|
66
|
+
id: s,
|
|
67
|
+
attributes: t,
|
|
68
|
+
relationships: a.relationships,
|
|
69
|
+
cachedAt: d,
|
|
70
|
+
expiresAt: d + i
|
|
71
|
+
};
|
|
72
|
+
return new Promise((c, p) => {
|
|
73
|
+
const l = n.transaction(o, "readwrite").objectStore(o).put(r);
|
|
74
|
+
l.onsuccess = () => c(), l.onerror = () => p(l.error);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async has(e, s) {
|
|
78
|
+
return await this.get(e, s) !== null;
|
|
79
|
+
}
|
|
80
|
+
async invalidate(e, s) {
|
|
81
|
+
const t = await this.open();
|
|
82
|
+
return new Promise((a, n) => {
|
|
83
|
+
const r = t.transaction(o, "readwrite").objectStore(o).delete(u.cacheKey(e, s));
|
|
84
|
+
r.onsuccess = () => a(), r.onerror = () => n(r.error);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async invalidateAll(e) {
|
|
88
|
+
const s = await this.open();
|
|
89
|
+
return e ? new Promise((t, a) => {
|
|
90
|
+
const r = s.transaction(o, "readwrite").objectStore(o).index("modelName").openCursor(IDBKeyRange.only(e));
|
|
91
|
+
r.onsuccess = () => {
|
|
92
|
+
const c = r.result;
|
|
93
|
+
c ? (c.delete(), c.continue()) : t();
|
|
94
|
+
}, r.onerror = () => a(r.error);
|
|
95
|
+
}) : new Promise((t, a) => {
|
|
96
|
+
const i = s.transaction(o, "readwrite").objectStore(o).clear();
|
|
97
|
+
i.onsuccess = () => t(), i.onerror = () => a(i.error);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async close() {
|
|
101
|
+
this._database && (this._database.close(), this._database = null, this._openPromise = null);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
14
104
|
export {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
105
|
+
T as ATTRIBUTES_META_KEY,
|
|
106
|
+
k as Adapter,
|
|
107
|
+
I as AdapterPopulatedRecordArray,
|
|
108
|
+
g as AsyncBelongsTo,
|
|
109
|
+
L as AsyncHasMany,
|
|
110
|
+
Z as BaseTransform,
|
|
111
|
+
ee as BooleanTransform,
|
|
112
|
+
oe as CacheHandler,
|
|
113
|
+
te as DateTransform,
|
|
114
|
+
G as EmbeddedRecordsMixin,
|
|
115
|
+
q as Errors,
|
|
116
|
+
ne as FetchHandler,
|
|
117
|
+
B as IdentityMap,
|
|
118
|
+
u as IndexedDBCache,
|
|
119
|
+
de as JsonApiAdapter,
|
|
120
|
+
ue as JsonApiSerializer,
|
|
121
|
+
Q as JsonSerializer,
|
|
122
|
+
b as MODEL_NAME_META_KEY,
|
|
123
|
+
D as ManyArray,
|
|
124
|
+
C as MemoryAdapter,
|
|
125
|
+
H as Model,
|
|
126
|
+
se as NumberTransform,
|
|
127
|
+
pe as ODataAdapter,
|
|
128
|
+
_ as RELATIONSHIPS_META_KEY,
|
|
129
|
+
me as RESPONSE_HEADERS,
|
|
130
|
+
J as RecordArray,
|
|
131
|
+
ce as RequestManager,
|
|
132
|
+
Y as RestAdapter,
|
|
133
|
+
W as RestSerializer,
|
|
134
|
+
P as SchemaService,
|
|
135
|
+
$ as Serializer,
|
|
136
|
+
K as Snapshot,
|
|
137
|
+
O as StateMachine,
|
|
138
|
+
z as Store,
|
|
139
|
+
ae as StringTransform,
|
|
140
|
+
Ae as attachResponseHeaders,
|
|
141
|
+
E as attr,
|
|
142
|
+
R as belongsTo,
|
|
143
|
+
fe as extractResponseHeaders,
|
|
144
|
+
w as hasMany,
|
|
145
|
+
ye as parseCacheTTLFromHeaders
|
|
51
146
|
};
|
|
52
147
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/cache/IndexedDBCache.ts"],"sourcesContent":["import type { RelationshipRef } from '@mobx-data/model';\nimport type { CacheEntryData, IndexedDBCacheOptions, CacheLike } from './types.js';\n\nconst STORE_NAME = 'cache-entries';\nconst DATABASE_VERSION = 1;\nconst DEFAULT_TTL = 3_600_000;\n\ninterface StoredEntry extends CacheEntryData {\n key: string;\n}\n\nexport class IndexedDBCache implements CacheLike {\n private _databaseName: string;\n\n private _defaultTTL: number;\n\n private _database: IDBDatabase | null = null;\n\n private _openPromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexedDBCacheOptions = {}) {\n this._databaseName = options.databaseName ?? 'mobx-data-cache';\n this._defaultTTL = options.defaultTTL ?? DEFAULT_TTL;\n }\n\n get defaultTTL(): number {\n return this._defaultTTL;\n }\n\n private async open(): Promise<IDBDatabase> {\n if (this._database) {\n return this._database;\n }\n if (this._openPromise) {\n return this._openPromise;\n }\n\n this._openPromise = new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this._databaseName, DATABASE_VERSION);\n request.onupgradeneeded = () => {\n const database = request.result;\n if (!database.objectStoreNames.contains(STORE_NAME)) {\n const store = database.createObjectStore(STORE_NAME, {\n keyPath: 'key',\n });\n store.createIndex('modelName', 'modelName', { unique: false });\n store.createIndex('expiresAt', 'expiresAt', { unique: false });\n }\n };\n request.onsuccess = () => {\n this._database = request.result;\n resolve(this._database);\n };\n request.onerror = () => {\n this._openPromise = null;\n reject(request.error);\n };\n });\n return this._openPromise;\n }\n\n static cacheKey(modelName: string, id: string): string {\n return `${modelName}:${id}`;\n }\n\n async get(modelName: string, id: string): Promise<CacheEntryData | null> {\n const database = await this.open();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readonly');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.get(IndexedDBCache.cacheKey(modelName, id));\n request.onsuccess = () => {\n const entry = request.result as StoredEntry | undefined;\n if (!entry) {\n resolve(null);\n return;\n }\n if (Date.now() > entry.expiresAt) {\n this.invalidate(modelName, id);\n resolve(null);\n return;\n }\n resolve(entry);\n };\n request.onerror = () => reject(request.error);\n });\n }\n\n async set(\n modelName: string,\n id: string,\n attributes: Record<string, unknown>,\n options: {\n relationships?: Record<string, RelationshipRef>;\n ttl?: number;\n } = {},\n ): Promise<void> {\n const database = await this.open();\n const now = Date.now();\n const ttl = options.ttl ?? this._defaultTTL;\n const entry: StoredEntry = {\n key: IndexedDBCache.cacheKey(modelName, id),\n modelName,\n id,\n attributes,\n relationships: options.relationships,\n cachedAt: now,\n expiresAt: now + ttl,\n };\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.put(entry);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n async has(modelName: string, id: string): Promise<boolean> {\n const entry = await this.get(modelName, id);\n return entry !== null;\n }\n\n async invalidate(modelName: string, id: string): Promise<void> {\n const database = await this.open();\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.delete(IndexedDBCache.cacheKey(modelName, id));\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n async invalidateAll(modelName?: string): Promise<void> {\n const database = await this.open();\n if (!modelName) {\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.clear();\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n return new Promise((resolve, reject) => {\n const transaction = database.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const index = store.index('modelName');\n const cursorRequest = index.openCursor(IDBKeyRange.only(modelName));\n cursorRequest.onsuccess = () => {\n const cursor = cursorRequest.result;\n if (cursor) {\n cursor.delete();\n cursor.continue();\n } else {\n resolve();\n }\n };\n cursorRequest.onerror = () => reject(cursorRequest.error);\n });\n }\n\n async close(): Promise<void> {\n if (this._database) {\n this._database.close();\n this._database = null;\n this._openPromise = null;\n }\n }\n}\n"],"names":["STORE_NAME","DATABASE_VERSION","DEFAULT_TTL","IndexedDBCache","options","resolve","reject","request","database","store","modelName","id","entry","attributes","now","ttl","cursorRequest","cursor"],"mappings":"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"}
|
package/dist/json-api/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../JsonApiSerializer-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../JsonApiSerializer-DKemcyw-.cjs");Object.defineProperty(exports,"JsonApiAdapter",{enumerable:!0,get:()=>e.JsonApiAdapter});Object.defineProperty(exports,"JsonApiSerializer",{enumerable:!0,get:()=>e.JsonApiSerializer});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/json-api/index.js
CHANGED
package/dist/odata/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../ODataAdapter-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../ODataAdapter-CrDFvBEZ.cjs");Object.defineProperty(exports,"ODataAdapter",{enumerable:!0,get:()=>e.ODataAdapter});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/odata/index.js
CHANGED
package/dist/store/Store.d.ts
CHANGED
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
*/
|
|
37
37
|
import { SchemaService, type RelationshipDef, type AttributeDef } from '@mobx-data/schema';
|
|
38
38
|
import { Model, type RelationshipRef, type ModelStoreLike, type SaveOptions } from '@mobx-data/model';
|
|
39
|
+
import type { CacheLike } from '../cache/types.js';
|
|
39
40
|
import { IdentityMap } from './IdentityMap.js';
|
|
40
41
|
import { RecordArray, AdapterPopulatedRecordArray } from './RecordArray.js';
|
|
41
42
|
/** Options forwarded from the Store to adapter fetch methods. */
|
|
@@ -127,11 +128,15 @@ export declare class Store implements ModelStoreLike {
|
|
|
127
128
|
private relationshipCache;
|
|
128
129
|
/** Tracks new records that have been appended to a hasMany but not yet saved. */
|
|
129
130
|
private pendingMembers;
|
|
131
|
+
/** Optional persistent cache layer (e.g. IndexedDB). */
|
|
132
|
+
private _cache;
|
|
130
133
|
constructor(schema: SchemaService);
|
|
131
134
|
/** Registers an adapter for a given model name (or `'application'` as a fallback). */
|
|
132
135
|
registerAdapter(modelName: string, adapter: AdapterLike): void;
|
|
133
136
|
/** Registers a serializer for a given model name (or `'application'` as a fallback). */
|
|
134
137
|
registerSerializer(modelName: string, serializer: SerializerLike): void;
|
|
138
|
+
/** Registers a persistent cache layer (e.g. IndexedDB) for offline-first reads. */
|
|
139
|
+
registerCache(cache: CacheLike): void;
|
|
135
140
|
/**
|
|
136
141
|
* Returns the adapter for `modelName`, falling back to `'application'`.
|
|
137
142
|
* @throws when no adapter is registered.
|
|
@@ -305,6 +310,7 @@ export declare class Store implements ModelStoreLike {
|
|
|
305
310
|
* the inverse. Pending members are removed from the pending set.
|
|
306
311
|
*/
|
|
307
312
|
_hasManyRemove(record: Model, name: string, meta: RelationshipDef, value: Model): void;
|
|
313
|
+
private cacheNormalizedDocument;
|
|
308
314
|
private coalescePending;
|
|
309
315
|
private coalesceScheduled;
|
|
310
316
|
private scheduleCoalescedFind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/store/Store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/store/Store.ts"],"names":[],"mappings":"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"}
|
package/dist/store/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../Store-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../Store-DX9D0Mmy.cjs");exports.AdapterPopulatedRecordArray=e.AdapterPopulatedRecordArray;exports.IdentityMap=e.IdentityMap;exports.RecordArray=e.RecordArray;Object.defineProperty(exports,"Store",{enumerable:!0,get:()=>e.Store});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/store/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamjulianacosta/mobx-data",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Ember Data feature-complete clone for MobX",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -123,6 +123,7 @@
|
|
|
123
123
|
"eslint-config-airbnb-typescript": "^18.0.0",
|
|
124
124
|
"eslint-import-resolver-typescript": "^3.7.0",
|
|
125
125
|
"eslint-plugin-import": "^2.31.0",
|
|
126
|
+
"fake-indexeddb": "^6.2.5",
|
|
126
127
|
"mobx": "^6.13.5",
|
|
127
128
|
"nyc": "^18.0.0",
|
|
128
129
|
"reflect-metadata": "^0.2.2",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
import { injectable } from 'tsyringe';
|
|
24
24
|
import { Adapter, type AdapterSnapshot } from './Adapter.js';
|
|
25
|
+
import { attachResponseHeaders } from '../cache/cache-utils.js';
|
|
25
26
|
|
|
26
27
|
@injectable()
|
|
27
28
|
export class RestAdapter extends Adapter {
|
|
@@ -104,11 +105,20 @@ export class RestAdapter extends Adapter {
|
|
|
104
105
|
if (!text) {
|
|
105
106
|
return null;
|
|
106
107
|
}
|
|
108
|
+
let result: unknown;
|
|
107
109
|
try {
|
|
108
|
-
|
|
110
|
+
result = JSON.parse(text);
|
|
109
111
|
} catch {
|
|
110
|
-
|
|
112
|
+
result = text;
|
|
111
113
|
}
|
|
114
|
+
if (result !== null && typeof result === 'object') {
|
|
115
|
+
const headers: Record<string, string> = {};
|
|
116
|
+
response.headers.forEach((value, key) => {
|
|
117
|
+
headers[key.toLowerCase()] = value;
|
|
118
|
+
});
|
|
119
|
+
attachResponseHeaders(result, headers);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
112
122
|
}
|
|
113
123
|
|
|
114
124
|
override async findRecord(
|