diff --git a/dist/browser-store.cjs.js.map b/dist/browser-store.cjs.js.map index f9b585a..68c562b 100644 --- a/dist/browser-store.cjs.js.map +++ b/dist/browser-store.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"browser-store.cjs.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\n\nBrowserStore.defaults = {\n debug: false,\n\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => 'save' === ctx.cmd ? 'entity' : undefined,\n load: (_msg: any, ctx: any) => 'load' === ctx.cmd ? 'entity' : undefined,\n list: (_msg: any, ctx: any) => 'list' === ctx.cmd ? 'entity' : undefined,\n remove: (_msg: any, ctx: any) => 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n }\n else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`)\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({ zone: ctx.zone, base: ctx.base, name: ctx.name })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown list error`,\n )\n reply(err)\n }\n },\n }\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser-store.cjs.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\nBrowserStore.defaults = {\n debug: false,\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => ('save' === ctx.cmd ? 'entity' : undefined),\n load: (_msg: any, ctx: any) => ('load' === ctx.cmd ? 'entity' : undefined),\n list: (_msg: any, ctx: any) => ('list' === ctx.cmd ? 'entity' : undefined),\n remove: (_msg: any, ctx: any) =>\n 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n } else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`,\n )\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({\n zone: ctx.zone,\n base: ctx.base,\n name: ctx.name,\n })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(\n seneca,\n ctx,\n )}: unknown list error`,\n )\n reply(err)\n }\n },\n },\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file diff --git a/dist/browser-store.es.js b/dist/browser-store.es.js index 2f0a725..d36925a 100644 --- a/dist/browser-store.es.js +++ b/dist/browser-store.es.js @@ -143,12 +143,19 @@ S.defaults = { }, list: function(t, e, o, u, i, b, m) { if (m && (m.end = Date.now()), u && o(u), i && i.ok && i.list) { - let d = t.entity({ zone: e.zone, base: e.base, name: e.name }), $ = i.list.map((v) => d.make$().data$(v)); + let d = t.entity({ + zone: e.zone, + base: e.base, + name: e.name + }), $ = i.list.map((v) => d.make$().data$(v)); m && (m.end = Date.now()), o($); } else { let d = i && i.err; d = d || new Error( - `BrowserStore: ${e.cmd} ${y(t, e)}: unknown list error` + `BrowserStore: ${e.cmd} ${y( + t, + e + )}: unknown list error` ), o(d); } } diff --git a/dist/browser-store.es.js.map b/dist/browser-store.es.js.map index 40e272e..358a88a 100644 --- a/dist/browser-store.es.js.map +++ b/dist/browser-store.es.js.map @@ -1 +1 @@ -{"version":3,"file":"browser-store.es.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\n\nBrowserStore.defaults = {\n debug: false,\n\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => 'save' === ctx.cmd ? 'entity' : undefined,\n load: (_msg: any, ctx: any) => 'load' === ctx.cmd ? 'entity' : undefined,\n list: (_msg: any, ctx: any) => 'list' === ctx.cmd ? 'entity' : undefined,\n remove: (_msg: any, ctx: any) => 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n }\n else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`)\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({ zone: ctx.zone, base: ctx.base, name: ctx.name })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown list error`,\n )\n reply(err)\n }\n },\n }\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser-store.es.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\nBrowserStore.defaults = {\n debug: false,\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => ('save' === ctx.cmd ? 'entity' : undefined),\n load: (_msg: any, ctx: any) => ('load' === ctx.cmd ? 'entity' : undefined),\n list: (_msg: any, ctx: any) => ('list' === ctx.cmd ? 'entity' : undefined),\n remove: (_msg: any, ctx: any) =>\n 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n } else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`,\n )\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({\n zone: ctx.zone,\n base: ctx.base,\n name: ctx.name,\n })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(\n seneca,\n ctx,\n )}: unknown list error`,\n )\n reply(err)\n }\n },\n },\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file diff --git a/dist/browser-store.iife.js.map b/dist/browser-store.iife.js.map index c9309cb..479ccb1 100644 --- a/dist/browser-store.iife.js.map +++ b/dist/browser-store.iife.js.map @@ -1 +1 @@ -{"version":3,"file":"browser-store.iife.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\n\nBrowserStore.defaults = {\n debug: false,\n\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => 'save' === ctx.cmd ? 'entity' : undefined,\n load: (_msg: any, ctx: any) => 'load' === ctx.cmd ? 'entity' : undefined,\n list: (_msg: any, ctx: any) => 'list' === ctx.cmd ? 'entity' : undefined,\n remove: (_msg: any, ctx: any) => 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n }\n else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`)\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({ zone: ctx.zone, base: ctx.base, name: ctx.name })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown list error`,\n )\n reply(err)\n }\n },\n }\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser-store.iife.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\nBrowserStore.defaults = {\n debug: false,\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => ('save' === ctx.cmd ? 'entity' : undefined),\n load: (_msg: any, ctx: any) => ('load' === ctx.cmd ? 'entity' : undefined),\n list: (_msg: any, ctx: any) => ('list' === ctx.cmd ? 'entity' : undefined),\n remove: (_msg: any, ctx: any) =>\n 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n } else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`,\n )\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({\n zone: ctx.zone,\n base: ctx.base,\n name: ctx.name,\n })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(\n seneca,\n ctx,\n )}: unknown list error`,\n )\n reply(err)\n }\n },\n },\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file diff --git a/dist/browser-store.umd.js.map b/dist/browser-store.umd.js.map index 6f325e3..38b805a 100644 --- a/dist/browser-store.umd.js.map +++ b/dist/browser-store.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"browser-store.umd.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\n\nBrowserStore.defaults = {\n debug: false,\n\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => 'save' === ctx.cmd ? 'entity' : undefined,\n load: (_msg: any, ctx: any) => 'load' === ctx.cmd ? 'entity' : undefined,\n list: (_msg: any, ctx: any) => 'list' === ctx.cmd ? 'entity' : undefined,\n remove: (_msg: any, ctx: any) => 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n }\n else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`)\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({ zone: ctx.zone, base: ctx.base, name: ctx.name })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n }\n else {\n let err = res && res.err\n err = err || new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown list error`,\n )\n reply(err)\n }\n },\n }\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browser-store.umd.js","sources":["../src/browser-store.ts"],"sourcesContent":["/* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */\n\nfunction BrowserStore(this: any, options: any) {\n let seneca: any = this\n\n let init = seneca.export('entity/init')\n\n let ohr = options.handleResponse\n let handleResponse = ['save', 'load', 'list', 'remove'].reduce(\n (a: any, n) => ((a[n] = ohr[n] || ohr.any), a),\n {},\n )\n\n const msglog: {\n msg: any\n meta: any\n start: number\n ctx?: any\n apimsg?: any\n res?: any\n err?: any\n apimeta?: any\n apiend?: number\n end?: number\n }[] = []\n\n function makeApiMsg(msg: any, ctx: any, options: any) {\n let apimsg: any = {}\n let apimsgtm = options.apimsg\n\n for (let pn in apimsgtm) {\n let pv = apimsgtm[pn]\n if ('function' === typeof pv) {\n apimsg[pn] = pv(msg, ctx, options)\n } else {\n apimsg[pn] = JSON.parse(JSON.stringify(pv))\n }\n }\n\n return apimsg\n }\n\n let store = {\n name: 'BrowserStore',\n\n save: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function save_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.save(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n load: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function load_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.load(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n list: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function list_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.list(this, ctx, reply, err, res, apimeta, logn)\n },\n )\n },\n\n remove: function (this: any, msg: any, reply: any, _meta: any) {\n let logn = options.debug && logstart(arguments)\n let ctx = options.prepareCtx(msg)\n let apimsg = makeApiMsg(msg, ctx, options)\n\n logn && logreq(logn, ctx, apimsg)\n this.act(\n apimsg,\n function remove_result(this: any, err: Error, res: any, apimeta: any) {\n logn && logres(logn, arguments)\n return handleResponse.remove(\n this,\n ctx,\n reply,\n err,\n res,\n apimeta,\n logn,\n )\n },\n )\n },\n\n close: function (this: any, _msg: any, reply: any) {\n reply()\n },\n\n native: function (this: any, _msg: any, reply: any) {\n reply()\n },\n }\n\n let meta = init(seneca, options, store)\n\n function logstart(args: any) {\n let logn = options.debug && {\n msg: args[0],\n meta: args[2],\n start: Date.now(),\n }\n logn && msglog.push(logn)\n return logn\n }\n\n function logreq(logn: any, ctx: any, apimsg: any) {\n logn.apistart = Date.now()\n logn.ctx = ctx\n logn.apimsg = apimsg\n return logn\n }\n\n function logres(logn: any, args: any) {\n logn.apiend = Date.now()\n logn.err = args[0]\n logn.res = args[1]\n logn.apimeta = args[2]\n return logn\n }\n\n return {\n name: store.name,\n tag: meta.tag,\n exports: {\n makeApiMsg,\n msglog,\n },\n }\n}\n\nfunction canonStr(seneca: any, ctx: any) {\n return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$()\n}\n\nBrowserStore.defaults = {\n debug: false,\n\n apimsg: {\n aim: 'req',\n on: 'entity',\n debounce$: true,\n q: (msg: any, _ctx: any) => msg.q,\n ent: (msg: any, _ctx: any) => msg.ent,\n // cmd: (_msg: any, ctx: any) => ctx.cmd,\n save: (_msg: any, ctx: any) => ('save' === ctx.cmd ? 'entity' : undefined),\n load: (_msg: any, ctx: any) => ('load' === ctx.cmd ? 'entity' : undefined),\n list: (_msg: any, ctx: any) => ('list' === ctx.cmd ? 'entity' : undefined),\n remove: (_msg: any, ctx: any) =>\n 'remove' === ctx.cmd ? 'entity' : undefined,\n store: (_msg: any, ctx: any) => ctx.store,\n name: (_msg: any, ctx: any) => ctx.name,\n base: (_msg: any, ctx: any) => ctx.base,\n zone: (_msg: any, ctx: any) => ctx.zone,\n },\n\n prepareCtx: (msg: any, ctx: any) => {\n ctx = ctx || {}\n\n let q = msg.q\n ctx.store = false !== q.store$\n delete q.store$\n\n ctx.cmd = msg.cmd\n\n let ent = msg.ent || msg.qent\n\n if (ent) {\n if (ent.canon$) {\n Object.assign(ctx, ent.canon$({ object: true }))\n } else if (ent.entity$) {\n let parts = ent.entity$.split('/')\n Object.assign(ctx, {\n zone: '-' === parts[0] ? null : parts[0],\n base: '-' === parts[1] ? null : parts[1],\n name: '-' === parts[2] ? null : parts[2],\n })\n }\n }\n\n return ctx\n },\n\n handleResponse: {\n any: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n return reply(err)\n }\n\n if (res && res.ok) {\n return reply(res.ent)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`,\n )\n return reply(err)\n }\n },\n\n list: function (\n seneca: any,\n ctx: any,\n reply: any,\n err: Error,\n res: any,\n _apimeta: any,\n logn: any,\n ) {\n logn && (logn.end = Date.now())\n\n if (err) {\n reply(err)\n }\n\n if (res && res.ok && res.list) {\n let ent = seneca.entity({\n zone: ctx.zone,\n base: ctx.base,\n name: ctx.name,\n })\n let list = res.list.map((item: any) => ent.make$().data$(item))\n logn && (logn.end = Date.now())\n reply(list)\n } else {\n let err = res && res.err\n err =\n err ||\n new Error(\n `BrowserStore: ${ctx.cmd} ${canonStr(\n seneca,\n ctx,\n )}: unknown list error`,\n )\n reply(err)\n }\n },\n },\n}\n\n// Prevent name mangling\nObject.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' })\n\nexport default BrowserStore\n"],"names":["BrowserStore","options","seneca","init","ohr","handleResponse","a","n","msglog","makeApiMsg","msg","ctx","apimsg","apimsgtm","pn","pv","store","reply","_meta","logn","logstart","logreq","err","res","apimeta","logres","_msg","meta","args","canonStr","_ctx","q","ent","parts","_apimeta","list","item"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 55ba499..9ccfef2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@seneca/browser-store", - "version": "0.0.4", + "version": "0.0.5", "description": "Seneca browwer storage plugin.", "main": "dist/browser-store.cjs.js", "module": "dist/browser-store.es.js", @@ -46,12 +46,12 @@ "seneca-entity": ">=25" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", - "dts-bundle-generator": "^9.2.1", + "@typescript-eslint/eslint-plugin": "^6.18.1", + "@typescript-eslint/parser": "^6.18.1", + "dts-bundle-generator": "^9.2.3", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.2", + "eslint-plugin-prettier": "^5.1.3", "prettier": "^3.1.1", "seneca": "^3.33.0", "seneca-entity": "^25.1.1", @@ -62,7 +62,7 @@ "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.3.3", - "vite": "^5.0.10", + "vite": "^5.0.11", "vite-plugin-dts": "^3.7.0" }, "files": [ diff --git a/src/browser-store.ts b/src/browser-store.ts index e593e68..8311beb 100644 --- a/src/browser-store.ts +++ b/src/browser-store.ts @@ -1,6 +1,5 @@ /* Copyright (c) 2023 Richard Rodger and other contributors, MIT License */ - function BrowserStore(this: any, options: any) { let seneca: any = this @@ -25,7 +24,6 @@ function BrowserStore(this: any, options: any) { end?: number }[] = [] - function makeApiMsg(msg: any, ctx: any, options: any) { let apimsg: any = {} let apimsgtm = options.apimsg @@ -42,7 +40,6 @@ function BrowserStore(this: any, options: any) { return apimsg } - let store = { name: 'BrowserStore', @@ -160,16 +157,13 @@ function BrowserStore(this: any, options: any) { } } - function canonStr(seneca: any, ctx: any) { return seneca.entity(ctx.zone, ctx.base, ctx.name).canon$() } - BrowserStore.defaults = { debug: false, - apimsg: { aim: 'req', on: 'entity', @@ -177,17 +171,17 @@ BrowserStore.defaults = { q: (msg: any, _ctx: any) => msg.q, ent: (msg: any, _ctx: any) => msg.ent, // cmd: (_msg: any, ctx: any) => ctx.cmd, - save: (_msg: any, ctx: any) => 'save' === ctx.cmd ? 'entity' : undefined, - load: (_msg: any, ctx: any) => 'load' === ctx.cmd ? 'entity' : undefined, - list: (_msg: any, ctx: any) => 'list' === ctx.cmd ? 'entity' : undefined, - remove: (_msg: any, ctx: any) => 'remove' === ctx.cmd ? 'entity' : undefined, + save: (_msg: any, ctx: any) => ('save' === ctx.cmd ? 'entity' : undefined), + load: (_msg: any, ctx: any) => ('load' === ctx.cmd ? 'entity' : undefined), + list: (_msg: any, ctx: any) => ('list' === ctx.cmd ? 'entity' : undefined), + remove: (_msg: any, ctx: any) => + 'remove' === ctx.cmd ? 'entity' : undefined, store: (_msg: any, ctx: any) => ctx.store, name: (_msg: any, ctx: any) => ctx.name, base: (_msg: any, ctx: any) => ctx.base, zone: (_msg: any, ctx: any) => ctx.zone, }, - prepareCtx: (msg: any, ctx: any) => { ctx = ctx || {} @@ -202,8 +196,7 @@ BrowserStore.defaults = { if (ent) { if (ent.canon$) { Object.assign(ctx, ent.canon$({ object: true })) - } - else if (ent.entity$) { + } else if (ent.entity$) { let parts = ent.entity$.split('/') Object.assign(ctx, { zone: '-' === parts[0] ? null : parts[0], @@ -234,11 +227,13 @@ BrowserStore.defaults = { if (res && res.ok) { return reply(res.ent) - } - else { + } else { let err = res && res.err - err = err || new Error( - `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`) + err = + err || + new Error( + `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown error`, + ) return reply(err) } }, @@ -259,24 +254,31 @@ BrowserStore.defaults = { } if (res && res.ok && res.list) { - let ent = seneca.entity({ zone: ctx.zone, base: ctx.base, name: ctx.name }) + let ent = seneca.entity({ + zone: ctx.zone, + base: ctx.base, + name: ctx.name, + }) let list = res.list.map((item: any) => ent.make$().data$(item)) logn && (logn.end = Date.now()) reply(list) - } - else { + } else { let err = res && res.err - err = err || new Error( - `BrowserStore: ${ctx.cmd} ${canonStr(seneca, ctx)}: unknown list error`, - ) + err = + err || + new Error( + `BrowserStore: ${ctx.cmd} ${canonStr( + seneca, + ctx, + )}: unknown list error`, + ) reply(err) } }, - } + }, } // Prevent name mangling Object.defineProperty(BrowserStore, 'name', { value: 'BrowserStore' }) - export default BrowserStore