@omujs/omu 0.10.2 → 0.10.4

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.
@@ -1,2 +1,2 @@
1
- import{PromiseResult as d}from"../../result.js";import{DashboardApps as l}from"./apps.js";import{DASHBOARD_EXTENSION_TYPE as a,DASHBOARD_PROMPT_CLEAR_BLOCKED as h,DASHBOARD_SET_ENDPOINT as u,DASHBOARD_SET_PERMISSION_ID as c,DASHBOARD_SPEECH_RECOGNITION as D,DASHBOARD_SPEECH_RECOGNITION_START as i}from"./constants.js";import{DragDropAPI as m}from"./dragdrop.js";import{DASHBOARD_OPEN_APP_PACKET as o,DASHBOARD_PROMPT_REQUEST as n,DASHBOARD_PROMPT_RESPONSE as p}from"./packets.js";import{WebviewAPI as R}from"./webview.js";class M{constructor(e){this.omu=e;this.webview=new R(e),this.dragdrop=new m(e),this.apps=new l(e),e.network.registerPacket(o,n,p),e.network.addPacketHandler(n,r=>{this.handlePromptRequest(r)}),e.network.addPacketHandler(o,r=>{this.handleOpenApp(r)}),this.speechRecognition=e.registries.get(D)}type=a;dashboard=null;speechRecognition;webview;dragdrop;apps;async executeRequestForDashboard(e){const r=this.getDashboard();switch(e.kind){case"app/permissions":return await r.handlePermissionRequest(e);case"app/plugins":return await r.handlePluginRequest(e);case"app/install":return await r.handleInstallApp(e);case"app/update":return await r.handleUpdateApp(e);case"index/install":return await r.handleIndexInstall(e);case"http/port":return await r.handleHttpPortRequest(e);default:throw new Error(`Unknown prompt requested: ${JSON.stringify(e)}`)}}async handlePromptRequest(e){const r=await this.executeRequestForDashboard(e);this.omu.send(p,{id:e.id,kind:e.kind,result:r})}async handleOpenApp(e){await this.getDashboard().handleOpenApp(e)}getDashboard(){if(this.dashboard===null)throw new Error("Dashboard not set");return this.dashboard}set(e){if(this.omu.permissions.require(c),this.dashboard!==null)throw new Error("Dashboard already set");this.dashboard=e,this.webview.setDashboard(e),this.dragdrop.setDashboard(e),this.apps.setDashboard(e),this.omu.network.addTask(async()=>{if(!(await this.omu.endpoints.call(u,this.omu.app.id)).success)throw new Error("Failed to set dashboard")}),this.omu.endpoints.bind(i,async(r,t)=>await e.speechRecognitionStart(r,t))}requestWebview(e){return this.webview.requestWebview(e)}getCookies(e){return this.webview.getCookies(e)}async clearBlockedPrompts(){return await this.omu.endpoints.call(h,null)}async requestDragDrop(){return this.dragdrop.requestDragDrop()}async notifyDropDragState(e){return this.notifyDropDragState(e)}requestSpeechRecognition(){const{promise:e,resolve:r,reject:t}=d.create();return this.omu.endpoints.call(i,{type:"start"}).then(s=>{s.type==="ok"?r(this.speechRecognition):t(s)}),e}}export{a as DASHBOARD_EXTENSION_TYPE,M as DashboardExtension};
1
+ import{PromiseResult as d}from"../../result.js";import{DashboardApps as l}from"./apps.js";import{DASHBOARD_EXTENSION_TYPE as a,DASHBOARD_PROMPT_CLEAR_BLOCKED as h,DASHBOARD_SET_ENDPOINT as u,DASHBOARD_SET_PERMISSION_ID as c,DASHBOARD_SPEECH_RECOGNITION as D,DASHBOARD_SPEECH_RECOGNITION_START as o}from"./constants.js";import{DragDropAPI as m}from"./dragdrop.js";import{DASHBOARD_OPEN_APP_PACKET as i,DASHBOARD_PROMPT_REQUEST as n,DASHBOARD_PROMPT_RESPONSE as p}from"./packets.js";import{WebviewAPI as R}from"./webview.js";class M{constructor(e){this.omu=e;this.webview=new R(e),this.dragdrop=new m(e),this.apps=new l(e),e.network.registerPacket(i,n,p),e.network.addPacketHandler(n,r=>{this.handlePromptRequest(r)}),e.network.addPacketHandler(i,r=>{this.handleOpenApp(r)}),this.speechRecognition=e.registries.get(D)}type=a;dashboard=null;speechRecognition;webview;dragdrop;apps;async executeRequestForDashboard(e){const r=this.getDashboard();switch(e.kind){case"app/permissions":return await r.handlePermissionRequest(e);case"app/plugins":return await r.handlePluginRequest(e);case"app/install":return await r.handleInstallApp(e);case"app/update":return await r.handleUpdateApp(e);case"index/install":return await r.handleIndexInstall(e);case"http/port":return await r.handleHttpPortRequest(e);default:throw new Error(`Unknown prompt requested: ${JSON.stringify(e)}`)}}async handlePromptRequest(e){const r=await this.executeRequestForDashboard(e);this.omu.send(p,{id:e.id,kind:e.kind,result:r})}async handleOpenApp(e){await this.getDashboard().handleOpenApp(e)}getDashboard(){if(this.dashboard===null)throw new Error("Dashboard not set");return this.dashboard}set(e){if(this.omu.permissions.require(c),this.dashboard!==null)throw new Error("Dashboard already set");this.dashboard=e,this.webview.setDashboard(e),this.dragdrop.setDashboard(e),this.apps.setDashboard(e),this.omu.network.addTask(async()=>{if(!(await this.omu.endpoints.call(u,this.omu.app.id)).success)throw new Error("Failed to set dashboard")}),this.omu.endpoints.bind(o,async(r,t)=>await e.speechRecognitionStart(r,t))}requestWebview(e){return this.webview.requestWebview(e)}getCookies(e){return this.webview.getCookies(e)}async clearBlockedPrompts(){return await this.omu.endpoints.call(h,null)}async requestDragDrop(){return this.dragdrop.requestDragDrop()}async notifyDropDragState(e){return this.dragdrop.notifyDropDragState(e)}requestSpeechRecognition(){const{promise:e,resolve:r,reject:t}=d.create();return this.omu.endpoints.call(o,{type:"start"}).then(s=>{s.type==="ok"?r(this.speechRecognition):t(s)}),e}}export{a as DASHBOARD_EXTENSION_TYPE,M as DashboardExtension};
2
2
  //# sourceMappingURL=extension.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api/dashboard/extension.ts"],
4
- "sourcesContent": ["import { App } from '../../app.js';\nimport { Omu } from '../../omu.js';\nimport { PromiseResult } from '../../result.js';\nimport { ExtensionType } from '../extension.js';\nimport { Registry } from '../registry/registry.js';\nimport { DashboardApps } from './apps.js';\nimport { DASHBOARD_EXTENSION_TYPE, DASHBOARD_PROMPT_CLEAR_BLOCKED, DASHBOARD_SET_ENDPOINT, DASHBOARD_SET_PERMISSION_ID, DASHBOARD_SPEECH_RECOGNITION, DASHBOARD_SPEECH_RECOGNITION_START, TranscriptStatus, UserError, UserResponse } from './constants.js';\nimport { DragDropAPI, DragDropHandler, FileDragPacket } from './dragdrop.js';\n\nimport type { DashboardHandler } from './handler.js';\nimport { DASHBOARD_OPEN_APP_PACKET, DASHBOARD_PROMPT_REQUEST, DASHBOARD_PROMPT_RESPONSE, PromptRequest, PromptResult } from './packets.js';\nimport { GetCookiesRequest, WebviewAPI, WebviewHandle, WebviewRequest } from './webview.js';\n\nexport { DASHBOARD_EXTENSION_TYPE };\n\nexport class DashboardExtension {\n public readonly type: ExtensionType<DashboardExtension> = DASHBOARD_EXTENSION_TYPE;\n private dashboard: DashboardHandler | null = null;\n public readonly speechRecognition: Registry<TranscriptStatus>;\n private readonly webview: WebviewAPI;\n private readonly dragdrop: DragDropAPI;\n public readonly apps: DashboardApps;\n\n constructor(private readonly omu: Omu) {\n this.webview = new WebviewAPI(omu);\n this.dragdrop = new DragDropAPI(omu);\n this.apps = new DashboardApps(omu);\n omu.network.registerPacket(\n DASHBOARD_OPEN_APP_PACKET,\n DASHBOARD_PROMPT_REQUEST,\n DASHBOARD_PROMPT_RESPONSE,\n );\n omu.network.addPacketHandler(DASHBOARD_PROMPT_REQUEST, (request) => {\n this.handlePromptRequest(request);\n });\n omu.network.addPacketHandler(DASHBOARD_OPEN_APP_PACKET, (app) => {\n this.handleOpenApp(app);\n });\n this.speechRecognition = omu.registries.get(DASHBOARD_SPEECH_RECOGNITION);\n }\n\n private async executeRequestForDashboard(request: PromptRequest): Promise<PromptResult> {\n const dashboard = this.getDashboard();\n switch (request.kind) {\n case 'app/permissions':\n return await dashboard.handlePermissionRequest(request);\n case 'app/plugins':\n return await dashboard.handlePluginRequest(request);\n case 'app/install':\n return await dashboard.handleInstallApp(request);\n case 'app/update':\n return await dashboard.handleUpdateApp(request);\n case 'index/install':\n return await dashboard.handleIndexInstall(request);\n case 'http/port':\n return await dashboard.handleHttpPortRequest(request);\n default:\n throw new Error(`Unknown prompt requested: ${JSON.stringify(request)}`);\n }\n }\n\n private async handlePromptRequest(request: PromptRequest): Promise<void> {\n const response = await this.executeRequestForDashboard(request);\n this.omu.send(DASHBOARD_PROMPT_RESPONSE, {\n id: request.id,\n kind: request.kind,\n result: response,\n });\n }\n\n private async handleOpenApp(app: App): Promise<void> {\n const dashboard = this.getDashboard();\n await dashboard.handleOpenApp(app);\n }\n\n private getDashboard(): DashboardHandler {\n if (this.dashboard === null) {\n throw new Error('Dashboard not set');\n }\n return this.dashboard;\n }\n\n public set(dashboard: DashboardHandler): void {\n this.omu.permissions.require(DASHBOARD_SET_PERMISSION_ID);\n if (this.dashboard !== null) {\n throw new Error('Dashboard already set');\n }\n this.dashboard = dashboard;\n\n this.webview.setDashboard(dashboard);\n this.dragdrop.setDashboard(dashboard);\n this.apps.setDashboard(dashboard);\n this.omu.network.addTask(async () => {\n const response = await this.omu.endpoints.call(\n DASHBOARD_SET_ENDPOINT,\n this.omu.app.id,\n );\n if (!response.success) {\n throw new Error('Failed to set dashboard');\n }\n });\n this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {\n const result = await dashboard.speechRecognitionStart(request, params);\n return result;\n });\n }\n\n public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {\n return this.webview.requestWebview(options);\n }\n\n public getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError> {\n return this.webview.getCookies(options);\n }\n\n public async clearBlockedPrompts(): Promise<null> {\n return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);\n }\n\n public async requestDragDrop(): Promise<DragDropHandler> {\n return this.dragdrop.requestDragDrop();\n }\n\n public async notifyDropDragState(packet: FileDragPacket): Promise<void> {\n return this.notifyDropDragState(packet);\n }\n\n public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();\n this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {\n if (result.type === 'ok') {\n resolve(this.speechRecognition);\n } else {\n reject(result);\n }\n });\n return promise;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { App } from '../../app.js';\nimport { Omu } from '../../omu.js';\nimport { PromiseResult } from '../../result.js';\nimport { ExtensionType } from '../extension.js';\nimport { Registry } from '../registry/registry.js';\nimport { DashboardApps } from './apps.js';\nimport { DASHBOARD_EXTENSION_TYPE, DASHBOARD_PROMPT_CLEAR_BLOCKED, DASHBOARD_SET_ENDPOINT, DASHBOARD_SET_PERMISSION_ID, DASHBOARD_SPEECH_RECOGNITION, DASHBOARD_SPEECH_RECOGNITION_START, TranscriptStatus, UserError, UserResponse } from './constants.js';\nimport { DragDropAPI, DragDropHandler, FileDragPacket } from './dragdrop.js';\n\nimport type { DashboardHandler } from './handler.js';\nimport { DASHBOARD_OPEN_APP_PACKET, DASHBOARD_PROMPT_REQUEST, DASHBOARD_PROMPT_RESPONSE, PromptRequest, PromptResult } from './packets.js';\nimport { GetCookiesRequest, WebviewAPI, WebviewHandle, WebviewRequest } from './webview.js';\n\nexport { DASHBOARD_EXTENSION_TYPE };\n\nexport class DashboardExtension {\n public readonly type: ExtensionType<DashboardExtension> = DASHBOARD_EXTENSION_TYPE;\n private dashboard: DashboardHandler | null = null;\n public readonly speechRecognition: Registry<TranscriptStatus>;\n private readonly webview: WebviewAPI;\n private readonly dragdrop: DragDropAPI;\n public readonly apps: DashboardApps;\n\n constructor(private readonly omu: Omu) {\n this.webview = new WebviewAPI(omu);\n this.dragdrop = new DragDropAPI(omu);\n this.apps = new DashboardApps(omu);\n omu.network.registerPacket(\n DASHBOARD_OPEN_APP_PACKET,\n DASHBOARD_PROMPT_REQUEST,\n DASHBOARD_PROMPT_RESPONSE,\n );\n omu.network.addPacketHandler(DASHBOARD_PROMPT_REQUEST, (request) => {\n this.handlePromptRequest(request);\n });\n omu.network.addPacketHandler(DASHBOARD_OPEN_APP_PACKET, (app) => {\n this.handleOpenApp(app);\n });\n this.speechRecognition = omu.registries.get(DASHBOARD_SPEECH_RECOGNITION);\n }\n\n private async executeRequestForDashboard(request: PromptRequest): Promise<PromptResult> {\n const dashboard = this.getDashboard();\n switch (request.kind) {\n case 'app/permissions':\n return await dashboard.handlePermissionRequest(request);\n case 'app/plugins':\n return await dashboard.handlePluginRequest(request);\n case 'app/install':\n return await dashboard.handleInstallApp(request);\n case 'app/update':\n return await dashboard.handleUpdateApp(request);\n case 'index/install':\n return await dashboard.handleIndexInstall(request);\n case 'http/port':\n return await dashboard.handleHttpPortRequest(request);\n default:\n throw new Error(`Unknown prompt requested: ${JSON.stringify(request)}`);\n }\n }\n\n private async handlePromptRequest(request: PromptRequest): Promise<void> {\n const response = await this.executeRequestForDashboard(request);\n this.omu.send(DASHBOARD_PROMPT_RESPONSE, {\n id: request.id,\n kind: request.kind,\n result: response,\n });\n }\n\n private async handleOpenApp(app: App): Promise<void> {\n const dashboard = this.getDashboard();\n await dashboard.handleOpenApp(app);\n }\n\n private getDashboard(): DashboardHandler {\n if (this.dashboard === null) {\n throw new Error('Dashboard not set');\n }\n return this.dashboard;\n }\n\n public set(dashboard: DashboardHandler): void {\n this.omu.permissions.require(DASHBOARD_SET_PERMISSION_ID);\n if (this.dashboard !== null) {\n throw new Error('Dashboard already set');\n }\n this.dashboard = dashboard;\n\n this.webview.setDashboard(dashboard);\n this.dragdrop.setDashboard(dashboard);\n this.apps.setDashboard(dashboard);\n this.omu.network.addTask(async () => {\n const response = await this.omu.endpoints.call(\n DASHBOARD_SET_ENDPOINT,\n this.omu.app.id,\n );\n if (!response.success) {\n throw new Error('Failed to set dashboard');\n }\n });\n this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {\n const result = await dashboard.speechRecognitionStart(request, params);\n return result;\n });\n }\n\n public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {\n return this.webview.requestWebview(options);\n }\n\n public getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError> {\n return this.webview.getCookies(options);\n }\n\n public async clearBlockedPrompts(): Promise<null> {\n return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);\n }\n\n public async requestDragDrop(): Promise<DragDropHandler> {\n return this.dragdrop.requestDragDrop();\n }\n\n public async notifyDropDragState(packet: FileDragPacket): Promise<void> {\n return this.dragdrop.notifyDropDragState(packet);\n }\n\n public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();\n this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {\n if (result.type === 'ok') {\n resolve(this.speechRecognition);\n } else {\n reject(result);\n }\n });\n return promise;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["PromiseResult", "DashboardApps", "DASHBOARD_EXTENSION_TYPE", "DASHBOARD_PROMPT_CLEAR_BLOCKED", "DASHBOARD_SET_ENDPOINT", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION", "DASHBOARD_SPEECH_RECOGNITION_START", "DragDropAPI", "DASHBOARD_OPEN_APP_PACKET", "DASHBOARD_PROMPT_REQUEST", "DASHBOARD_PROMPT_RESPONSE", "WebviewAPI", "DashboardExtension", "omu", "request", "app", "dashboard", "response", "params", "options", "packet", "promise", "resolve", "reject", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{EventEmitter as m}from"../../event";import{Identifier as I,IdentifierMap as x}from"../../identifier";import{PacketType as o}from"../../network/packet/packet.js";import{Serializer as h}from"../../serialize";import{EndpointType as l}from"../endpoint/endpoint.js";import{ExtensionType as C}from"../extension.js";import{SetConfigPacket as L,SetPermissionPacket as N,TableFetchPacket as g,TableFetchRangePacket as O,TableItemsPacket as d,TableKeysPacket as p,TablePacket as u,TableProxyPacket as B}from"./packets.js";import{TableType as _}from"./table.js";const r=new C("table",T=>new H(T)),c=r.join("permission"),R=o.createSerialized(r,{name:"set_permission",serializer:N}),S=o.createSerialized(r,{name:"set_config",serializer:L}),k=o.createJson(r,{name:"listen",serializer:I}),v=o.createJson(r,{name:"proxy_listen",serializer:I}),b=o.createSerialized(r,{name:"proxy",serializer:B}),f=o.createSerialized(r,{name:"item_add",serializer:d}),E=o.createSerialized(r,{name:"item_update",serializer:d}),z=o.createSerialized(r,{name:"item_remove",serializer:d}),M=l.createSerialized(r,{name:"item_get",requestSerializer:p,responseSerializer:d,permissionId:c}),A=l.createSerialized(r,{name:"item_has",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),j=l.createSerialized(r,{name:"item_has_all",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),K=l.createSerialized(r,{name:"item_has_any",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),q=l.createSerialized(r,{name:"fetch",requestSerializer:g,responseSerializer:d,permissionId:c}),D=l.createSerialized(r,{name:"fetch_range",requestSerializer:O,responseSerializer:d,permissionId:c}),U=l.createSerialized(r,{name:"fetch_all",requestSerializer:u,responseSerializer:d,permissionId:c}),F=l.createSerialized(r,{name:"size",requestSerializer:u,responseSerializer:h.json(),permissionId:c}),P=o.createSerialized(r,{name:"clear",serializer:u});class H{constructor(e){this.omu=e;e.network.registerPacket(R,S,k,v,b,f,E,z,P)}type=r;tableMap=new x;createTable(e){this.omu.permissions.require(c);const i=this.tableMap.get(e.id);if(i)return i;const t=new J(this.omu,e);return this.tableMap.set(e.id,t),t}json(e,i){const t=new _(this.omu.app.id.base.join(e),h.pipe(i.serializer??h.noop(),h.json()),i.key);return this.createTable(t)}serialized(e,i){const t=new _(this.omu.app.id.base.join(e),i.serializer,i.key);return this.createTable(t)}get(e){return this.has(e.id)?this.tableMap.get(e.id):this.createTable(e)}has(e){return this.tableMap.has(e)}}class J{constructor(e,i){this.omu=e;this.id=i.id,this.serializer=i.serializer,this.keyFunction=i.keyFunction,this.cache=new Map,this.event={add:new m,update:new m,remove:new m,clear:new m,cacheUpdate:new m},this.promiseMap=new Map,this.proxies=[],this.listening=!1,e.network.addPacketHandler(b,t=>{if(!t.id.isEqual(this.id))return;let s=this.deserializeItems(t.items);this.proxies.forEach(a=>{s=new Map([...s.entries()].map(([n,w])=>{const y=a(w);if(y!==void 0)return[n,y]}).filter(n=>typeof n<"u"))}),e.send(b,{id:this.id,key:t.key,items:Object.fromEntries([...s.entries()].map(([a,n])=>[a,this.serializer.serialize(n)]))})}),e.network.addPacketHandler(f,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.add.emit(s)}),e.network.addPacketHandler(E,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.update.emit(s)}),e.network.addPacketHandler(z,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);s.forEach((a,n)=>{this.cache.delete(n)}),this.event.remove.emit(s),this.event.cacheUpdate.emit(this.cache)}),e.network.addPacketHandler(P,t=>{t.id.isEqual(this.id)&&(this.cache=new Map,this.event.clear.emit(),this.event.cacheUpdate.emit(this.cache))}),e.event.ready.listen(()=>this.onReady())}cache;event;promiseMap;proxies;id;serializer;keyFunction;listening;cacheSize;config;permissions;updateCache(e){if(!this.cacheSize)this.cache=e;else{const i=new Map([...this.cache,...e].slice(-this.cacheSize));this.cache=i}this.event.cacheUpdate.emit(this.cache)}listen(e){return this.listening||(this.omu.onReady(()=>{this.omu.send(k,this.id)}),this.listening=!0),e?this.event.cacheUpdate.listen(e):()=>{}}proxy(e){return this.proxies.length===0&&this.omu.onReady(()=>{this.omu.send(v,this.id)}),this.proxies.push(e),()=>{this.proxies.splice(this.proxies.indexOf(e),1)}}onReady(){this.config&&this.omu.send(S,{id:this.id,config:this.config})}async get(e){if(this.cache.has(e))return this.cache.get(e);if(this.promiseMap.has(e))return await this.promiseMap.get(e);const i=this.omu.endpoints.call(M,{id:this.id,keys:[e]}).then(t=>{const s=this.deserializeItems(t.items);return this.updateCache(s),this.cache.get(e)});return this.promiseMap.set(e,i),await i.then(t=>(this.promiseMap.delete(e),t))}async getMany(...e){const i=e.filter(a=>!this.cache.has(a)).filter(a=>!this.promiseMap.has(a));if(i.length===0)return new Map([...this.cache].filter(([a])=>e.includes(a)));const t=this.omu.endpoints.call(M,{id:this.id,keys:i}).then(a=>{const n=this.deserializeItems(a.items);return this.updateCache(n),n});for(const a of i)this.promiseMap.set(a,t.then(n=>n.get(a)));const s=await t;for(const a of i)this.promiseMap.delete(a);return new Map([...this.cache,...s].filter(([a])=>e.includes(a)))}async add(...e){const i=this.serializeItems(e);this.omu.send(f,{id:this.id,items:i})}async update(...e){const i=this.serializeItems(e);this.omu.send(E,{id:this.id,items:i})}async remove(...e){const i=this.serializeItems(e),t=Object.keys(i);this.cache=new Map([...this.cache].filter(([s])=>!t.includes(s))),this.omu.send(z,{id:this.id,items:i})}async clear(){this.omu.send(P,{id:this.id})}async has(e){return this.cache.has(e)?!0:(await this.omu.endpoints.call(A,{id:this.id,keys:[e]}))[e]??!1}async hasMany(...e){return await this.omu.endpoints.call(A,{id:this.id,keys:e})}async hasAll(...e){return await this.omu.endpoints.call(j,{id:this.id,keys:e})}async hasAny(...e){return await this.omu.endpoints.call(K,{id:this.id,keys:e})}async fetchItems({limit:e,backward:i,cursor:t}){const s=await this.omu.endpoints.call(q,new g(this.id,e,i,t)),a=this.deserializeItems(s.items);return this.updateCache(a),a}async fetchRange({start:e,end:i}){const t=await this.omu.endpoints.call(D,{id:this.id,start:e,end:i}),s=this.deserializeItems(t.items);return this.updateCache(s),s}async fetchAll(){const e=await this.omu.endpoints.call(U,{id:this.id}),i=this.deserializeItems(e.items);return this.updateCache(i),i}async*iterate({backward:e,cursor:i}){for(;;){const t=await this.fetchItems({limit:this.cacheSize??100,backward:e,cursor:i});if(t.size===0)break;yield*t.values(),i!==void 0&&t.delete(i);const s=e?t.values().next().value:[...t.values()].pop();if(!s)break;i=this.keyFunction(s)}}async size(){return await this.omu.endpoints.call(F,{id:this.id})}deserializeItems(e){return new Map(Object.entries(e).map(([i,t])=>{const s=this.serializer.deserialize(t);return this.cache.set(i,s),[i,s]}))}serializeItems(e){return Object.fromEntries(e.map(i=>[this.keyFunction(i),this.serializer.serialize(i)]))}setCacheSize(e){this.cacheSize=e}setConfig(e){if(this.omu.running)throw new Error("Cannot set config after client has started");this.config=e}setPermissions(e){this.permissions=e}}export{r as TABLE_EXTENSION_TYPE,c as TABLE_PERMISSION_ID,H as TableExtension};
1
+ import{EventEmitter as m}from"../../event";import{Identifier as I,IdentifierMap as x}from"../../identifier";import{PacketType as o}from"../../network/packet/packet.js";import{Serializer as h}from"../../serialize";import{EndpointType as l}from"../endpoint/endpoint.js";import{ExtensionType as C}from"../extension.js";import{SetConfigPacket as L,SetPermissionPacket as N,TableFetchPacket as g,TableFetchRangePacket as O,TableItemsPacket as d,TableKeysPacket as p,TablePacket as u,TableProxyPacket as B}from"./packets.js";import{TableType as _}from"./table.js";const r=new C("table",T=>new H(T)),c=r.join("permission"),R=o.createSerialized(r,{name:"set_permission",serializer:N}),S=o.createSerialized(r,{name:"set_config",serializer:L}),k=o.createJson(r,{name:"listen",serializer:I}),v=o.createJson(r,{name:"proxy_listen",serializer:I}),b=o.createSerialized(r,{name:"proxy",serializer:B}),f=o.createSerialized(r,{name:"item_add",serializer:d}),E=o.createSerialized(r,{name:"item_update",serializer:d}),z=o.createSerialized(r,{name:"item_remove",serializer:d}),M=l.createSerialized(r,{name:"item_get",requestSerializer:p,responseSerializer:d,permissionId:c}),A=l.createSerialized(r,{name:"item_has",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),j=l.createSerialized(r,{name:"item_has_all",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),K=l.createSerialized(r,{name:"item_has_any",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),q=l.createSerialized(r,{name:"fetch",requestSerializer:g,responseSerializer:d,permissionId:c}),D=l.createSerialized(r,{name:"fetch_range",requestSerializer:O,responseSerializer:d,permissionId:c}),U=l.createSerialized(r,{name:"fetch_all",requestSerializer:u,responseSerializer:d,permissionId:c}),F=l.createSerialized(r,{name:"size",requestSerializer:u,responseSerializer:h.json(),permissionId:c}),P=o.createSerialized(r,{name:"clear",serializer:u});class H{constructor(e){this.omu=e;e.network.registerPacket(R,S,k,v,b,f,E,z,P)}type=r;tableMap=new x;createTable(e){this.omu.permissions.require(c);const i=this.tableMap.get(e.id);if(i)return i;const t=new J(this.omu,e);return this.tableMap.set(e.id,t),t}json(e,i){const t=new _(this.omu.app.id.base.join(e),h.pipe(i.serializer??h.noop(),h.json()),i.key);return this.createTable(t)}serialized(e,i){const t=new _(this.omu.app.id.base.join(e),i.serializer,i.key);return this.createTable(t)}get(e){return this.has(e.id)?this.tableMap.get(e.id):this.createTable(e)}has(e){return this.tableMap.has(e)}}class J{constructor(e,i){this.omu=e;this.type=i;this.id=i.id,this.serializer=i.serializer,this.keyFunction=i.keyFunction,this.cache=new Map,this.event={add:new m,update:new m,remove:new m,clear:new m,cacheUpdate:new m},this.promiseMap=new Map,this.proxies=[],this.listening=!1,e.network.addPacketHandler(b,t=>{if(!t.id.isEqual(this.id))return;let s=this.deserializeItems(t.items);this.proxies.forEach(a=>{s=new Map([...s.entries()].map(([n,w])=>{const y=a(w);if(y!==void 0)return[n,y]}).filter(n=>typeof n<"u"))}),e.send(b,{id:this.id,key:t.key,items:Object.fromEntries([...s.entries()].map(([a,n])=>[a,this.serializer.serialize(n)]))})}),e.network.addPacketHandler(f,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.add.emit(s)}),e.network.addPacketHandler(E,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.update.emit(s)}),e.network.addPacketHandler(z,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);s.forEach((a,n)=>{this.cache.delete(n)}),this.event.remove.emit(s),this.event.cacheUpdate.emit(this.cache)}),e.network.addPacketHandler(P,t=>{t.id.isEqual(this.id)&&(this.cache=new Map,this.event.clear.emit(),this.event.cacheUpdate.emit(this.cache))}),e.event.ready.listen(()=>this.onReady())}cache;event;promiseMap;proxies;id;serializer;keyFunction;listening;cacheSize;config;permissions;updateCache(e){if(!this.cacheSize)this.cache=e;else{const i=new Map([...this.cache,...e].slice(-this.cacheSize));this.cache=i}this.event.cacheUpdate.emit(this.cache)}listen(e){return this.listening||(this.omu.onReady(()=>{this.omu.send(k,this.id)}),this.listening=!0),e?this.event.cacheUpdate.listen(e):()=>{}}proxy(e){return this.proxies.length===0&&this.omu.onReady(()=>{this.omu.send(v,this.id)}),this.proxies.push(e),()=>{this.proxies.splice(this.proxies.indexOf(e),1)}}onReady(){this.config&&this.omu.send(S,{id:this.id,config:this.config})}async get(e){if(this.cache.has(e))return this.cache.get(e);if(this.promiseMap.has(e))return await this.promiseMap.get(e);const i=this.omu.endpoints.call(M,{id:this.id,keys:[e]}).then(t=>{const s=this.deserializeItems(t.items);return this.updateCache(s),this.cache.get(e)});return this.promiseMap.set(e,i),await i.then(t=>(this.promiseMap.delete(e),t))}async getMany(...e){const i=e.filter(a=>!this.cache.has(a)).filter(a=>!this.promiseMap.has(a));if(i.length===0)return new Map([...this.cache].filter(([a])=>e.includes(a)));const t=this.omu.endpoints.call(M,{id:this.id,keys:i}).then(a=>{const n=this.deserializeItems(a.items);return this.updateCache(n),n});for(const a of i)this.promiseMap.set(a,t.then(n=>n.get(a)));const s=await t;for(const a of i)this.promiseMap.delete(a);return new Map([...this.cache,...s].filter(([a])=>e.includes(a)))}async add(...e){const i=this.serializeItems(e);this.omu.send(f,{id:this.id,items:i})}async update(...e){const i=this.serializeItems(e);this.omu.send(E,{id:this.id,items:i})}async remove(...e){const i=this.serializeItems(e),t=Object.keys(i);this.cache=new Map([...this.cache].filter(([s])=>!t.includes(s))),this.omu.send(z,{id:this.id,items:i})}async clear(){this.omu.send(P,{id:this.id})}async has(e){return this.cache.has(e)?!0:(await this.omu.endpoints.call(A,{id:this.id,keys:[e]}))[e]??!1}async hasMany(...e){return await this.omu.endpoints.call(A,{id:this.id,keys:e})}async hasAll(...e){return await this.omu.endpoints.call(j,{id:this.id,keys:e})}async hasAny(...e){return await this.omu.endpoints.call(K,{id:this.id,keys:e})}async fetchItems({limit:e,backward:i,cursor:t}){const s=await this.omu.endpoints.call(q,new g(this.id,e,i,t)),a=this.deserializeItems(s.items);return this.updateCache(a),a}async fetchRange({start:e,end:i}){const t=await this.omu.endpoints.call(D,{id:this.id,start:e,end:i}),s=this.deserializeItems(t.items);return this.updateCache(s),s}async fetchAll(){const e=await this.omu.endpoints.call(U,{id:this.id}),i=this.deserializeItems(e.items);return this.updateCache(i),i}async*iterate({backward:e,cursor:i}){for(;;){const t=await this.fetchItems({limit:this.cacheSize??100,backward:e,cursor:i});if(t.size===0)break;yield*t.values(),i!==void 0&&t.delete(i);const s=e?t.values().next().value:[...t.values()].pop();if(!s)break;i=this.keyFunction(s)}}async size(){return await this.omu.endpoints.call(F,{id:this.id})}deserializeItems(e){return new Map(Object.entries(e).map(([i,t])=>{const s=this.serializer.deserialize(t);return this.cache.set(i,s),[i,s]}))}serializeItems(e){return Object.fromEntries(e.map(i=>[this.keyFunction(i),this.serializer.serialize(i)]))}setCacheSize(e){this.cacheSize=e}setConfig(e){if(this.omu.running)throw new Error("Cannot set config after client has started");this.config=e}setPermissions(e){this.permissions=e}}export{r as TABLE_EXTENSION_TYPE,c as TABLE_PERMISSION_ID,H as TableExtension};
2
2
  //# sourceMappingURL=extension.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api/table/extension.ts"],
4
- "sourcesContent": ["import type { Unlisten } from '../../event';\nimport { EventEmitter } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport type { Extension } from '../extension.js';\nimport { ExtensionType } from '../extension.js';\n\nimport {\n SetConfigPacket,\n SetPermissionPacket,\n TableFetchPacket,\n TableFetchRangePacket,\n TableItemsPacket,\n TableKeysPacket,\n TablePacket,\n TableProxyPacket,\n} from './packets.js';\nimport type { Table, TableConfig, TableEvents, TablePermissions } from './table.js';\nimport { TableType } from './table.js';\n\nexport const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension> = new ExtensionType(\n 'table',\n (client) => new TableExtension(client),\n);\nexport const TABLE_PERMISSION_ID: Identifier = TABLE_EXTENSION_TYPE.join('permission');\n\nconst TABLE_SET_PERMISSION_PACKET = PacketType.createSerialized<SetPermissionPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_permission',\n serializer: SetPermissionPacket,\n});\nconst TABLE_SET_CONFIG_PACKET = PacketType.createSerialized<SetConfigPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_config',\n serializer: SetConfigPacket,\n});\nconst TABLE_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'proxy_listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_PACKET = PacketType.createSerialized<TableProxyPacket>(TABLE_EXTENSION_TYPE, {\n name: 'proxy',\n serializer: TableProxyPacket,\n});\nconst TABLE_ITEM_ADD_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_add',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_UPDATE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_update',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_REMOVE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_remove',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_get',\n requestSerializer: TableKeysPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(TABLE_EXTENSION_TYPE, {\n name: 'item_has',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_all',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_any',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch',\n requestSerializer: TableFetchPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_RANGE_ENDPOINT = EndpointType.createSerialized<TableFetchRangePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_range',\n requestSerializer: TableFetchRangePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ALL_ENDPOINT = EndpointType.createSerialized<TablePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_all',\n requestSerializer: TablePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_SIZE_ENDPOINT = EndpointType.createSerialized<TablePacket, number>(TABLE_EXTENSION_TYPE, {\n name: 'size',\n requestSerializer: TablePacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_CLEAR_PACKET = PacketType.createSerialized<TablePacket>(TABLE_EXTENSION_TYPE, {\n name: 'clear',\n serializer: TablePacket,\n});\n\nexport class TableExtension implements Extension {\n public readonly type: ExtensionType<TableExtension> = TABLE_EXTENSION_TYPE;\n private readonly tableMap = new IdentifierMap<Table<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n TABLE_SET_PERMISSION_PACKET,\n TABLE_SET_CONFIG_PACKET,\n TABLE_LISTEN_PACKET,\n TABLE_PROXY_LISTEN_PACKET,\n TABLE_PROXY_PACKET,\n TABLE_ITEM_ADD_PACKET,\n TABLE_ITEM_UPDATE_PACKET,\n TABLE_ITEM_REMOVE_PACKET,\n TABLE_ITEM_CLEAR_PACKET,\n );\n }\n\n private createTable<T>(tableType: TableType<T>): Table<T> {\n this.omu.permissions.require(TABLE_PERMISSION_ID);\n const existing = this.tableMap.get(tableType.id);\n if (existing) {\n return existing as Table<T>;\n }\n const table = new TableImpl<T>(this.omu, tableType);\n this.tableMap.set(tableType.id, table as Table<unknown>);\n return table;\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options: { key: (item: T) => string; serializer?: Serializable<T, D> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n Serializer.pipe<T, JsonType, Uint8Array>(options.serializer ?? Serializer.noop(), Serializer.json()),\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public serialized<T>(name: string, options: { key: (item: T) => string; serializer: Serializable<T, Uint8Array> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n options.serializer,\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public get<T>(type: TableType<T>): Table<T> {\n if (this.has(type.id)) {\n return this.tableMap.get(type.id) as Table<T>;\n }\n return this.createTable(type);\n }\n\n public has(identifier: Identifier): boolean {\n return this.tableMap.has(identifier);\n }\n}\n\nclass TableImpl<T> implements Table<T> {\n public cache: Map<string, T>;\n public readonly event: TableEvents<T>;\n private readonly promiseMap: Map<string, Promise<T | undefined>>;\n private readonly proxies: Array<(item: T) => T | undefined>;\n private id: Identifier;\n private serializer: Serializable<T, Uint8Array>;\n private keyFunction: (item: T) => string;\n private listening: boolean;\n private cacheSize?: number;\n private config?: TableConfig;\n private permissions?: TablePermissions;\n\n constructor(\n private readonly omu: Omu,\n tableType: TableType<T>,\n ) {\n this.id = tableType.id;\n this.serializer = tableType.serializer;\n this.keyFunction = tableType.keyFunction;\n this.cache = new Map();\n this.event = {\n add: new EventEmitter<[Map<string, T>]>(),\n update: new EventEmitter<[Map<string, T>]>(),\n remove: new EventEmitter<[Map<string, T>]>(),\n clear: new EventEmitter<[]>(),\n cacheUpdate: new EventEmitter<[Map<string, T>]>(),\n };\n this.promiseMap = new Map();\n this.proxies = [];\n this.listening = false;\n\n omu.network.addPacketHandler(TABLE_PROXY_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n let items = this.deserializeItems(packet.items);\n this.proxies.forEach((proxy) => {\n items = new Map(\n [...items.entries()]\n .map(([key, item]) => {\n const proxyItem = proxy(item);\n if (proxyItem !== undefined) {\n return [key, proxyItem as T];\n }\n return undefined;\n })\n .filter((item): item is [string, T] => {\n return typeof item !== 'undefined';\n }),\n );\n });\n omu.send(TABLE_PROXY_PACKET, {\n id: this.id,\n key: packet.key,\n items: Object.fromEntries(\n [...items.entries()].map(([key, item]) => {\n return [key, this.serializer.serialize(item)];\n }),\n ),\n });\n });\n omu.network.addPacketHandler(TABLE_ITEM_ADD_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.add.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_UPDATE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.update.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_REMOVE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n items.forEach((_, key) => {\n this.cache.delete(key);\n });\n this.event.remove.emit(items);\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.network.addPacketHandler(TABLE_ITEM_CLEAR_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n this.cache = new Map();\n this.event.clear.emit();\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.event.ready.listen(() => this.onReady());\n }\n\n private updateCache(items: Map<string, T>): void {\n if (!this.cacheSize) {\n this.cache = items;\n } else {\n const cache = new Map([...this.cache, ...items].slice(-this.cacheSize));\n this.cache = cache;\n }\n this.event.cacheUpdate.emit(this.cache);\n }\n\n public listen(listener?: (items: Map<string, T>) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_LISTEN_PACKET, this.id);\n });\n this.listening = true;\n }\n if (listener) {\n return this.event.cacheUpdate.listen(listener);\n }\n return () => {};\n }\n\n public proxy(callback: (item: T) => T | undefined): Unlisten {\n if (this.proxies.length === 0) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_PROXY_LISTEN_PACKET, this.id);\n });\n }\n this.proxies.push(callback);\n return () => {\n this.proxies.splice(this.proxies.indexOf(callback), 1);\n };\n }\n\n private onReady(): void {\n if (this.config) {\n this.omu.send(TABLE_SET_CONFIG_PACKET, {\n id: this.id,\n config: this.config,\n });\n }\n }\n\n public async get(key: string): Promise<T | undefined> {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n if (this.promiseMap.has(key)) {\n return await this.promiseMap.get(key);\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: [key],\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return this.cache.get(key);\n });\n this.promiseMap.set(key, promise);\n return await promise.then((item) => {\n this.promiseMap.delete(key);\n return item;\n });\n }\n\n public async getMany(...keys: string[]): Promise<Map<string, T>> {\n const filteredKeys = keys\n .filter((key) => !this.cache.has(key))\n .filter((key) => !this.promiseMap.has(key));\n if (filteredKeys.length === 0) {\n return new Map([...this.cache].filter(([key]) => keys.includes(key)));\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: filteredKeys,\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n });\n for (const key of filteredKeys) {\n this.promiseMap.set(\n key,\n promise.then((items) => items.get(key)),\n );\n }\n const items = await promise;\n for (const key of filteredKeys) {\n this.promiseMap.delete(key);\n }\n return new Map([...this.cache, ...items].filter(([key]) => keys.includes(key)));\n }\n\n public async add(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_ADD_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async update(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_UPDATE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async remove(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n const keys = Object.keys(data);\n this.cache = new Map([...this.cache].filter(([key]) => !keys.includes(key)));\n this.omu.send(TABLE_ITEM_REMOVE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async clear(): Promise<void> {\n this.omu.send(TABLE_ITEM_CLEAR_PACKET, {\n id: this.id,\n });\n }\n\n public async has(key: string): Promise<boolean> {\n if (this.cache.has(key)) {\n return true;\n }\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: [key],\n });\n return res[key] ?? false;\n }\n\n public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: keys,\n });\n return res as { [key in keyof T]: boolean };\n }\n\n public async hasAll(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async hasAny(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(\n TABLE_FETCH_ENDPOINT,\n new TableFetchPacket(this.id, limit, backward, cursor),\n );\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchRange({\n start,\n end,\n }: {\n start: string;\n end: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_RANGE_ENDPOINT, {\n id: this.id,\n start,\n end,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchAll(): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_ALL_ENDPOINT, {\n id: this.id,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async *iterate({\n backward,\n cursor,\n }: {\n backward?: boolean;\n cursor?: string;\n }): AsyncIterable<T> {\n while (true) {\n const items = await this.fetchItems({\n limit: this.cacheSize ?? 100,\n backward,\n cursor,\n });\n if (items.size === 0) {\n break;\n }\n yield* items.values();\n if (cursor !== undefined) {\n items.delete(cursor);\n }\n const cursorItem = backward ? items.values().next().value : [...items.values()].pop();\n if (!cursorItem) {\n break;\n }\n cursor = this.keyFunction(cursorItem);\n }\n }\n\n public async size(): Promise<number> {\n return await this.omu.endpoints.call(TABLE_SIZE_ENDPOINT, {\n id: this.id,\n });\n }\n\n private deserializeItems(items: Record<string, Uint8Array>): Map<string, T> {\n return new Map(\n Object.entries(items).map(([key, data]) => {\n const item = this.serializer.deserialize(data);\n this.cache.set(key, item);\n return [key, item];\n }),\n );\n }\n\n private serializeItems(items: T[]): Record<string, Uint8Array> {\n return Object.fromEntries(\n items.map((item) => {\n return [this.keyFunction(item), this.serializer.serialize(item)];\n }),\n );\n }\n\n public setCacheSize(size: number): void {\n this.cacheSize = size;\n }\n\n public setConfig(config: TableConfig): void {\n if (this.omu.running) {\n throw new Error('Cannot set config after client has started');\n }\n this.config = config;\n }\n\n public setPermissions(permissions: TablePermissions): void {\n this.permissions = permissions;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Unlisten } from '../../event';\nimport { EventEmitter } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport type { Extension } from '../extension.js';\nimport { ExtensionType } from '../extension.js';\n\nimport {\n SetConfigPacket,\n SetPermissionPacket,\n TableFetchPacket,\n TableFetchRangePacket,\n TableItemsPacket,\n TableKeysPacket,\n TablePacket,\n TableProxyPacket,\n} from './packets.js';\nimport type { Table, TableConfig, TableEvents, TablePermissions } from './table.js';\nimport { TableType } from './table.js';\n\nexport const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension> = new ExtensionType(\n 'table',\n (client) => new TableExtension(client),\n);\nexport const TABLE_PERMISSION_ID: Identifier = TABLE_EXTENSION_TYPE.join('permission');\n\nconst TABLE_SET_PERMISSION_PACKET = PacketType.createSerialized<SetPermissionPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_permission',\n serializer: SetPermissionPacket,\n});\nconst TABLE_SET_CONFIG_PACKET = PacketType.createSerialized<SetConfigPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_config',\n serializer: SetConfigPacket,\n});\nconst TABLE_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'proxy_listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_PACKET = PacketType.createSerialized<TableProxyPacket>(TABLE_EXTENSION_TYPE, {\n name: 'proxy',\n serializer: TableProxyPacket,\n});\nconst TABLE_ITEM_ADD_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_add',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_UPDATE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_update',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_REMOVE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_remove',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_get',\n requestSerializer: TableKeysPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(TABLE_EXTENSION_TYPE, {\n name: 'item_has',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_all',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_any',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch',\n requestSerializer: TableFetchPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_RANGE_ENDPOINT = EndpointType.createSerialized<TableFetchRangePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_range',\n requestSerializer: TableFetchRangePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ALL_ENDPOINT = EndpointType.createSerialized<TablePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_all',\n requestSerializer: TablePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_SIZE_ENDPOINT = EndpointType.createSerialized<TablePacket, number>(TABLE_EXTENSION_TYPE, {\n name: 'size',\n requestSerializer: TablePacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_CLEAR_PACKET = PacketType.createSerialized<TablePacket>(TABLE_EXTENSION_TYPE, {\n name: 'clear',\n serializer: TablePacket,\n});\n\nexport class TableExtension implements Extension {\n public readonly type: ExtensionType<TableExtension> = TABLE_EXTENSION_TYPE;\n private readonly tableMap = new IdentifierMap<Table<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n TABLE_SET_PERMISSION_PACKET,\n TABLE_SET_CONFIG_PACKET,\n TABLE_LISTEN_PACKET,\n TABLE_PROXY_LISTEN_PACKET,\n TABLE_PROXY_PACKET,\n TABLE_ITEM_ADD_PACKET,\n TABLE_ITEM_UPDATE_PACKET,\n TABLE_ITEM_REMOVE_PACKET,\n TABLE_ITEM_CLEAR_PACKET,\n );\n }\n\n private createTable<T>(tableType: TableType<T>): Table<T> {\n this.omu.permissions.require(TABLE_PERMISSION_ID);\n const existing = this.tableMap.get(tableType.id);\n if (existing) {\n return existing as Table<T>;\n }\n const table = new TableImpl<T>(this.omu, tableType);\n this.tableMap.set(tableType.id, table as Table<unknown>);\n return table;\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options: { key: (item: T) => string; serializer?: Serializable<T, D> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n Serializer.pipe<T, JsonType, Uint8Array>(options.serializer ?? Serializer.noop(), Serializer.json()),\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public serialized<T>(name: string, options: { key: (item: T) => string; serializer: Serializable<T, Uint8Array> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n options.serializer,\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public get<T>(type: TableType<T>): Table<T> {\n if (this.has(type.id)) {\n return this.tableMap.get(type.id) as Table<T>;\n }\n return this.createTable(type);\n }\n\n public has(identifier: Identifier): boolean {\n return this.tableMap.has(identifier);\n }\n}\n\nclass TableImpl<T> implements Table<T> {\n public cache: Map<string, T>;\n public readonly event: TableEvents<T>;\n private readonly promiseMap: Map<string, Promise<T | undefined>>;\n private readonly proxies: Array<(item: T) => T | undefined>;\n private id: Identifier;\n private serializer: Serializable<T, Uint8Array>;\n private keyFunction: (item: T) => string;\n private listening: boolean;\n private cacheSize?: number;\n private config?: TableConfig;\n private permissions?: TablePermissions;\n\n constructor(\n private readonly omu: Omu,\n public readonly type: TableType<T>,\n ) {\n this.id = type.id;\n this.serializer = type.serializer;\n this.keyFunction = type.keyFunction;\n this.cache = new Map();\n this.event = {\n add: new EventEmitter<[Map<string, T>]>(),\n update: new EventEmitter<[Map<string, T>]>(),\n remove: new EventEmitter<[Map<string, T>]>(),\n clear: new EventEmitter<[]>(),\n cacheUpdate: new EventEmitter<[Map<string, T>]>(),\n };\n this.promiseMap = new Map();\n this.proxies = [];\n this.listening = false;\n\n omu.network.addPacketHandler(TABLE_PROXY_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n let items = this.deserializeItems(packet.items);\n this.proxies.forEach((proxy) => {\n items = new Map(\n [...items.entries()]\n .map(([key, item]) => {\n const proxyItem = proxy(item);\n if (proxyItem !== undefined) {\n return [key, proxyItem as T];\n }\n return undefined;\n })\n .filter((item): item is [string, T] => {\n return typeof item !== 'undefined';\n }),\n );\n });\n omu.send(TABLE_PROXY_PACKET, {\n id: this.id,\n key: packet.key,\n items: Object.fromEntries(\n [...items.entries()].map(([key, item]) => {\n return [key, this.serializer.serialize(item)];\n }),\n ),\n });\n });\n omu.network.addPacketHandler(TABLE_ITEM_ADD_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.add.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_UPDATE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.update.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_REMOVE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n items.forEach((_, key) => {\n this.cache.delete(key);\n });\n this.event.remove.emit(items);\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.network.addPacketHandler(TABLE_ITEM_CLEAR_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n this.cache = new Map();\n this.event.clear.emit();\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.event.ready.listen(() => this.onReady());\n }\n\n private updateCache(items: Map<string, T>): void {\n if (!this.cacheSize) {\n this.cache = items;\n } else {\n const cache = new Map([...this.cache, ...items].slice(-this.cacheSize));\n this.cache = cache;\n }\n this.event.cacheUpdate.emit(this.cache);\n }\n\n public listen(listener?: (items: Map<string, T>) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_LISTEN_PACKET, this.id);\n });\n this.listening = true;\n }\n if (listener) {\n return this.event.cacheUpdate.listen(listener);\n }\n return () => {};\n }\n\n public proxy(callback: (item: T) => T | undefined): Unlisten {\n if (this.proxies.length === 0) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_PROXY_LISTEN_PACKET, this.id);\n });\n }\n this.proxies.push(callback);\n return () => {\n this.proxies.splice(this.proxies.indexOf(callback), 1);\n };\n }\n\n private onReady(): void {\n if (this.config) {\n this.omu.send(TABLE_SET_CONFIG_PACKET, {\n id: this.id,\n config: this.config,\n });\n }\n }\n\n public async get(key: string): Promise<T | undefined> {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n if (this.promiseMap.has(key)) {\n return await this.promiseMap.get(key);\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: [key],\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return this.cache.get(key);\n });\n this.promiseMap.set(key, promise);\n return await promise.then((item) => {\n this.promiseMap.delete(key);\n return item;\n });\n }\n\n public async getMany(...keys: string[]): Promise<Map<string, T>> {\n const filteredKeys = keys\n .filter((key) => !this.cache.has(key))\n .filter((key) => !this.promiseMap.has(key));\n if (filteredKeys.length === 0) {\n return new Map([...this.cache].filter(([key]) => keys.includes(key)));\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: filteredKeys,\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n });\n for (const key of filteredKeys) {\n this.promiseMap.set(\n key,\n promise.then((items) => items.get(key)),\n );\n }\n const items = await promise;\n for (const key of filteredKeys) {\n this.promiseMap.delete(key);\n }\n return new Map([...this.cache, ...items].filter(([key]) => keys.includes(key)));\n }\n\n public async add(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_ADD_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async update(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_UPDATE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async remove(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n const keys = Object.keys(data);\n this.cache = new Map([...this.cache].filter(([key]) => !keys.includes(key)));\n this.omu.send(TABLE_ITEM_REMOVE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async clear(): Promise<void> {\n this.omu.send(TABLE_ITEM_CLEAR_PACKET, {\n id: this.id,\n });\n }\n\n public async has(key: string): Promise<boolean> {\n if (this.cache.has(key)) {\n return true;\n }\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: [key],\n });\n return res[key] ?? false;\n }\n\n public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: keys,\n });\n return res as { [key in keyof T]: boolean };\n }\n\n public async hasAll(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async hasAny(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(\n TABLE_FETCH_ENDPOINT,\n new TableFetchPacket(this.id, limit, backward, cursor),\n );\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchRange({\n start,\n end,\n }: {\n start: string;\n end: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_RANGE_ENDPOINT, {\n id: this.id,\n start,\n end,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchAll(): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_ALL_ENDPOINT, {\n id: this.id,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async *iterate({\n backward,\n cursor,\n }: {\n backward?: boolean;\n cursor?: string;\n }): AsyncIterable<T> {\n while (true) {\n const items = await this.fetchItems({\n limit: this.cacheSize ?? 100,\n backward,\n cursor,\n });\n if (items.size === 0) {\n break;\n }\n yield* items.values();\n if (cursor !== undefined) {\n items.delete(cursor);\n }\n const cursorItem = backward ? items.values().next().value : [...items.values()].pop();\n if (!cursorItem) {\n break;\n }\n cursor = this.keyFunction(cursorItem);\n }\n }\n\n public async size(): Promise<number> {\n return await this.omu.endpoints.call(TABLE_SIZE_ENDPOINT, {\n id: this.id,\n });\n }\n\n private deserializeItems(items: Record<string, Uint8Array>): Map<string, T> {\n return new Map(\n Object.entries(items).map(([key, data]) => {\n const item = this.serializer.deserialize(data);\n this.cache.set(key, item);\n return [key, item];\n }),\n );\n }\n\n private serializeItems(items: T[]): Record<string, Uint8Array> {\n return Object.fromEntries(\n items.map((item) => {\n return [this.keyFunction(item), this.serializer.serialize(item)];\n }),\n );\n }\n\n public setCacheSize(size: number): void {\n this.cacheSize = size;\n }\n\n public setConfig(config: TableConfig): void {\n if (this.omu.running) {\n throw new Error('Cannot set config after client has started');\n }\n this.config = config;\n }\n\n public setPermissions(permissions: TablePermissions): void {\n this.permissions = permissions;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["EventEmitter", "Identifier", "IdentifierMap", "PacketType", "Serializer", "EndpointType", "ExtensionType", "SetConfigPacket", "SetPermissionPacket", "TableFetchPacket", "TableFetchRangePacket", "TableItemsPacket", "TableKeysPacket", "TablePacket", "TableProxyPacket", "TableType", "TABLE_EXTENSION_TYPE", "client", "TableExtension", "TABLE_PERMISSION_ID", "TABLE_SET_PERMISSION_PACKET", "TABLE_SET_CONFIG_PACKET", "TABLE_LISTEN_PACKET", "TABLE_PROXY_LISTEN_PACKET", "TABLE_PROXY_PACKET", "TABLE_ITEM_ADD_PACKET", "TABLE_ITEM_UPDATE_PACKET", "TABLE_ITEM_REMOVE_PACKET", "TABLE_ITEM_GET_ENDPOINT", "TABLE_ITEM_HAS_ENDPOINT", "TABLE_ITEM_HAS_ALL_ENDPOINT", "TABLE_ITEM_HAS_ANY_ENDPOINT", "TABLE_FETCH_ENDPOINT", "TABLE_FETCH_RANGE_ENDPOINT", "TABLE_FETCH_ALL_ENDPOINT", "TABLE_SIZE_ENDPOINT", "TABLE_ITEM_CLEAR_PACKET", "omu", "tableType", "existing", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "promise", "res", "keys", "filteredKeys", "data", "limit", "backward", "cursor", "start", "end", "cursorItem", "size", "config", "permissions"]
7
7
  }
@@ -5,6 +5,7 @@ export type TableConfig = {
5
5
  cache_size: number;
6
6
  };
7
7
  export interface Table<T> {
8
+ type: TableType<T>;
8
9
  readonly cache: ReadonlyMap<string, T>;
9
10
  readonly event: TableEvents<T>;
10
11
  get(key: string): Promise<T | undefined>;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api/table/table.ts"],
4
- "sourcesContent": ["import type { EventEmitter, Unlisten } from '../../event';\nimport { Identifier, IntoId } from '../../identifier';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\n\nexport type TableConfig = {\n cache_size: number;\n};\n\nexport interface Table<T> {\n readonly cache: ReadonlyMap<string, T>;\n readonly event: TableEvents<T>;\n get(key: string): Promise<T | undefined>;\n getMany(...keys: string[]): Promise<Map<string, T>>;\n add(...item: T[]): Promise<void>;\n update(...item: T[]): Promise<void>;\n remove(...items: T[]): Promise<void>;\n clear(): Promise<void>;\n has(key: string): Promise<boolean>;\n hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }>;\n hasAll(...keys: string[]): Promise<boolean>;\n hasAny(...keys: string[]): Promise<boolean>;\n\n fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>>;\n fetchRange({ start, end }: { start: string; end: string }): Promise<Map<string, T>>;\n fetchAll(): Promise<Map<string, T>>;\n iterate({ backward, cursor }: { backward?: boolean; cursor?: string }): AsyncIterable<T>;\n size(): Promise<number>;\n\n proxy(proxy: (item: T) => T | undefined): Unlisten;\n setCacheSize(size: number): void;\n setConfig(config: TableConfig): void;\n setPermissions(permissions: TablePermissions): void;\n\n listen(listener?: (items: Map<string, T>) => void): Unlisten;\n}\n\nexport type TableEvents<T> = {\n add: EventEmitter<[Map<string, T>]>;\n update: EventEmitter<[Map<string, T>]>;\n remove: EventEmitter<[Map<string, T>]>;\n clear: EventEmitter<[]>;\n cacheUpdate: EventEmitter<[Map<string, T>]>;\n};\n\nexport type TablePermissions = {\n all?: Identifier;\n read?: Identifier;\n write?: Identifier;\n remove?: Identifier;\n proxy?: Identifier;\n};\n\nexport class TableType<T> {\n constructor(\n public id: Identifier,\n public serializer: Serializable<T, Uint8Array>,\n public keyFunction: (item: T) => string,\n public permissions?: TablePermissions | undefined,\n ) {}\n\n public static createJson<T, D extends JsonType = JsonType>(\n identifier: IntoId,\n {\n name,\n key,\n permissions,\n serializer,\n }: {\n name: string;\n key: (item: T) => string;\n permissions?: TablePermissions;\n serializer?: Serializable<T, D>;\n },\n ): TableType<T> {\n return new TableType<T>(\n Identifier.from(identifier).join(name),\n Serializer.pipe<T, D, Uint8Array>(serializer ?? Serializer.noop(), Serializer.json()),\n key,\n permissions,\n );\n }\n\n public static createSerialized<T>(\n identifier: IntoId,\n {\n name,\n key,\n permissions,\n serializer,\n }: {\n name: string;\n key: (item: T) => string;\n permissions?: TablePermissions;\n serializer: Serializable<T, Uint8Array>;\n },\n ): TableType<T> {\n return new TableType<T>(\n Identifier.from(identifier).join(name),\n serializer,\n key,\n permissions,\n );\n }\n}\n"],
5
- "mappings": "AACA,OAAS,cAAAA,MAA0B,mBAEnC,OAAS,cAAAC,MAAkB,kBA0DpB,MAAMC,CAAa,CACtB,YACWC,EACAC,EACAC,EACAC,EACT,CAJS,QAAAH,EACA,gBAAAC,EACA,iBAAAC,EACA,iBAAAC,CACR,CAEH,OAAc,WACVC,EACA,CACI,KAAAC,EACA,IAAAC,EACA,YAAAH,EACA,WAAAF,CACJ,EAMY,CACZ,OAAO,IAAIF,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCP,EAAW,KAAuBG,GAAcH,EAAW,KAAK,EAAGA,EAAW,KAAK,CAAC,EACpFQ,EACAH,CACJ,CACJ,CAEA,OAAc,iBACVC,EACA,CACI,KAAAC,EACA,IAAAC,EACA,YAAAH,EACA,WAAAF,CACJ,EAMY,CACZ,OAAO,IAAIF,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCJ,EACAK,EACAH,CACJ,CACJ,CACJ",
4
+ "sourcesContent": ["import type { EventEmitter, Unlisten } from '../../event';\nimport { Identifier, IntoId } from '../../identifier';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\n\nexport type TableConfig = {\n cache_size: number;\n};\n\nexport interface Table<T> {\n type: TableType<T>;\n readonly cache: ReadonlyMap<string, T>;\n readonly event: TableEvents<T>;\n get(key: string): Promise<T | undefined>;\n getMany(...keys: string[]): Promise<Map<string, T>>;\n add(...item: T[]): Promise<void>;\n update(...item: T[]): Promise<void>;\n remove(...items: T[]): Promise<void>;\n clear(): Promise<void>;\n has(key: string): Promise<boolean>;\n hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }>;\n hasAll(...keys: string[]): Promise<boolean>;\n hasAny(...keys: string[]): Promise<boolean>;\n\n fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>>;\n fetchRange({ start, end }: { start: string; end: string }): Promise<Map<string, T>>;\n fetchAll(): Promise<Map<string, T>>;\n iterate({ backward, cursor }: { backward?: boolean; cursor?: string }): AsyncIterable<T>;\n size(): Promise<number>;\n\n proxy(proxy: (item: T) => T | undefined): Unlisten;\n setCacheSize(size: number): void;\n setConfig(config: TableConfig): void;\n setPermissions(permissions: TablePermissions): void;\n\n listen(listener?: (items: Map<string, T>) => void): Unlisten;\n}\n\nexport type TableEvents<T> = {\n add: EventEmitter<[Map<string, T>]>;\n update: EventEmitter<[Map<string, T>]>;\n remove: EventEmitter<[Map<string, T>]>;\n clear: EventEmitter<[]>;\n cacheUpdate: EventEmitter<[Map<string, T>]>;\n};\n\nexport type TablePermissions = {\n all?: Identifier;\n read?: Identifier;\n write?: Identifier;\n remove?: Identifier;\n proxy?: Identifier;\n};\n\nexport class TableType<T> {\n constructor(\n public id: Identifier,\n public serializer: Serializable<T, Uint8Array>,\n public keyFunction: (item: T) => string,\n public permissions?: TablePermissions | undefined,\n ) {}\n\n public static createJson<T, D extends JsonType = JsonType>(\n identifier: IntoId,\n {\n name,\n key,\n permissions,\n serializer,\n }: {\n name: string;\n key: (item: T) => string;\n permissions?: TablePermissions;\n serializer?: Serializable<T, D>;\n },\n ): TableType<T> {\n return new TableType<T>(\n Identifier.from(identifier).join(name),\n Serializer.pipe<T, D, Uint8Array>(serializer ?? Serializer.noop(), Serializer.json()),\n key,\n permissions,\n );\n }\n\n public static createSerialized<T>(\n identifier: IntoId,\n {\n name,\n key,\n permissions,\n serializer,\n }: {\n name: string;\n key: (item: T) => string;\n permissions?: TablePermissions;\n serializer: Serializable<T, Uint8Array>;\n },\n ): TableType<T> {\n return new TableType<T>(\n Identifier.from(identifier).join(name),\n serializer,\n key,\n permissions,\n );\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,cAAAA,MAA0B,mBAEnC,OAAS,cAAAC,MAAkB,kBA2DpB,MAAMC,CAAa,CACtB,YACWC,EACAC,EACAC,EACAC,EACT,CAJS,QAAAH,EACA,gBAAAC,EACA,iBAAAC,EACA,iBAAAC,CACR,CAEH,OAAc,WACVC,EACA,CACI,KAAAC,EACA,IAAAC,EACA,YAAAH,EACA,WAAAF,CACJ,EAMY,CACZ,OAAO,IAAIF,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCP,EAAW,KAAuBG,GAAcH,EAAW,KAAK,EAAGA,EAAW,KAAK,CAAC,EACpFQ,EACAH,CACJ,CACJ,CAEA,OAAc,iBACVC,EACA,CACI,KAAAC,EACA,IAAAC,EACA,YAAAH,EACA,WAAAF,CACJ,EAMY,CACZ,OAAO,IAAIF,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCJ,EACAK,EACAH,CACJ,CACJ,CACJ",
6
6
  "names": ["Identifier", "Serializer", "TableType", "id", "serializer", "keyFunction", "permissions", "identifier", "name", "key"]
7
7
  }
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.10.2";
1
+ export declare const VERSION = "0.10.4";
2
2
  export declare const VERSION_MINOR = "0.10.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- const o="0.10.2",t="0.10.0";export{o as VERSION,t as VERSION_MINOR};
1
+ const o="0.10.4",t="0.10.0";export{o as VERSION,t as VERSION_MINOR};
2
2
  //# sourceMappingURL=version.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["export const VERSION = '0.10.2';\nexport const VERSION_MINOR = '0.10.0';\n"],
4
+ "sourcesContent": ["export const VERSION = '0.10.4';\nexport const VERSION_MINOR = '0.10.0';\n"],
5
5
  "mappings": "AAAO,MAAMA,EAAU,SACVC,EAAgB",
6
6
  "names": ["VERSION", "VERSION_MINOR"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@omujs/omu",
4
- "version": "0.10.2",
4
+ "version": "0.10.4",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {