@wovin/core 0.0.1-RC9 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/applog/applog-helpers.d.ts +23 -0
- package/dist/applog/applog-helpers.d.ts.map +1 -0
- package/dist/applog/applog-utils.d.ts +41 -0
- package/dist/applog/applog-utils.d.ts.map +1 -0
- package/dist/applog/datom-types.d.ts +84 -0
- package/dist/applog/datom-types.d.ts.map +1 -0
- package/dist/applog.d.ts +4 -70
- package/dist/applog.d.ts.map +1 -0
- package/dist/applog.min.js +2 -0
- package/dist/chunk-5R2ELTEJ.min.js +40 -0
- package/dist/chunk-5R2ELTEJ.min.js.map +1 -0
- package/dist/chunk-7IDQIMQO.min.js +1 -0
- package/dist/chunk-F3MRAJXL.min.js +2 -0
- package/dist/{types.js.map → chunk-F3MRAJXL.min.js.map} +1 -1
- package/dist/chunk-HHXZXKNM.min.js +7 -0
- package/dist/chunk-HHXZXKNM.min.js.map +1 -0
- package/dist/chunk-KESATLM4.min.js +8 -0
- package/dist/chunk-KESATLM4.min.js.map +1 -0
- package/dist/chunk-LECZSORU.min.js +2 -0
- package/dist/chunk-LECZSORU.min.js.map +1 -0
- package/dist/chunk-NGPPHX5A.min.js +2 -0
- package/dist/chunk-NGPPHX5A.min.js.map +1 -0
- package/dist/chunk-PL6CNZTW.min.js +2 -0
- package/dist/chunk-PL6CNZTW.min.js.map +1 -0
- package/dist/chunk-RPPZKO5L.min.js +1 -0
- package/dist/index.d.ts +8 -12
- package/dist/index.d.ts.map +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/dist/ipfs/car.d.ts +15 -0
- package/dist/ipfs/car.d.ts.map +1 -0
- package/dist/ipfs/ipfs-utils.d.ts +17 -0
- package/dist/ipfs/ipfs-utils.d.ts.map +1 -0
- package/dist/ipfs.d.ts +3 -36
- package/dist/ipfs.d.ts.map +1 -0
- package/dist/ipfs.min.js +2 -0
- package/dist/mobx/mobx-utils.d.ts +67 -0
- package/dist/mobx/mobx-utils.d.ts.map +1 -0
- package/dist/pubsub/connector.d.ts +7 -0
- package/dist/pubsub/connector.d.ts.map +1 -0
- package/dist/pubsub/publication.d.ts +6 -0
- package/dist/pubsub/publication.d.ts.map +1 -0
- package/dist/{pubsub.d.cts → pubsub/pubsub-types.d.ts} +7 -12
- package/dist/pubsub/pubsub-types.d.ts.map +1 -0
- package/dist/pubsub.d.ts +4 -41
- package/dist/pubsub.d.ts.map +1 -0
- package/dist/pubsub.min.js +2 -0
- package/dist/query/basic.d.ts +65 -0
- package/dist/query/basic.d.ts.map +1 -0
- package/dist/query/divergences.d.ts +12 -0
- package/dist/query/divergences.d.ts.map +1 -0
- package/dist/query/matchers.d.ts +4 -0
- package/dist/query/matchers.d.ts.map +1 -0
- package/dist/query.d.ts +5 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.min.js +2 -0
- package/dist/query.min.js.map +1 -0
- package/dist/stream/basic.d.ts +34 -0
- package/dist/stream/basic.d.ts.map +1 -0
- package/dist/stream/filters.d.ts +38 -0
- package/dist/stream/filters.d.ts.map +1 -0
- package/dist/{mapped-8h8bwRuM.d.ts → stream/mapped.d.ts} +5 -6
- package/dist/stream/mapped.d.ts.map +1 -0
- package/dist/{writeable-0WbsIiQn.d.cts → stream/writeable.d.ts} +7 -6
- package/dist/stream/writeable.d.ts.map +1 -0
- package/dist/stream.d.ts +5 -44
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.min.js +2 -0
- package/dist/stream.min.js.map +1 -0
- package/dist/types/typescript-utils.d.ts +33 -0
- package/dist/types/typescript-utils.d.ts.map +1 -0
- package/dist/types.d.ts +2 -4
- package/dist/types.d.ts.map +1 -0
- package/dist/types.min.js +2 -0
- package/dist/types.min.js.map +1 -0
- package/dist/utils.d.ts +1 -2
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.min.js +1 -0
- package/dist/utils.min.js.map +1 -0
- package/package.json +80 -46
- package/dist/applog.cjs +0 -85
- package/dist/applog.cjs.map +0 -1
- package/dist/applog.d.cts +0 -70
- package/dist/applog.js +0 -85
- package/dist/chunk-F3FYYIAV.js +0 -11
- package/dist/chunk-GT5X2WN4.cjs +0 -59
- package/dist/chunk-GT5X2WN4.cjs.map +0 -1
- package/dist/chunk-JSAJQXI2.cjs +0 -577
- package/dist/chunk-JSAJQXI2.cjs.map +0 -1
- package/dist/chunk-KDR7QXOQ.js +0 -56
- package/dist/chunk-KDR7QXOQ.js.map +0 -1
- package/dist/chunk-KGTU6PJ3.js +0 -577
- package/dist/chunk-KGTU6PJ3.js.map +0 -1
- package/dist/chunk-KHY3SRML.js +0 -768
- package/dist/chunk-KHY3SRML.js.map +0 -1
- package/dist/chunk-OOC3HK3E.cjs +0 -56
- package/dist/chunk-OOC3HK3E.cjs.map +0 -1
- package/dist/chunk-QXNFGJ5R.js +0 -59
- package/dist/chunk-QXNFGJ5R.js.map +0 -1
- package/dist/chunk-UOPZAYFM.cjs +0 -11
- package/dist/chunk-UOPZAYFM.cjs.map +0 -1
- package/dist/chunk-ZPOYKHY6.cjs +0 -768
- package/dist/chunk-ZPOYKHY6.cjs.map +0 -1
- package/dist/index.cjs +0 -87
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -12
- package/dist/index.js +0 -87
- package/dist/index.js.map +0 -1
- package/dist/ipfs.cjs +0 -28
- package/dist/ipfs.cjs.map +0 -1
- package/dist/ipfs.d.cts +0 -36
- package/dist/ipfs.js +0 -28
- package/dist/mapped-mkKwhQgZ.d.cts +0 -20
- package/dist/pubsub.cjs +0 -14
- package/dist/pubsub.cjs.map +0 -1
- package/dist/pubsub.js +0 -14
- package/dist/pubsub.js.map +0 -1
- package/dist/queries.cjs +0 -112
- package/dist/queries.cjs.map +0 -1
- package/dist/queries.d.cts +0 -141
- package/dist/queries.d.ts +0 -141
- package/dist/queries.js +0 -112
- package/dist/queries.js.map +0 -1
- package/dist/stream.cjs +0 -37
- package/dist/stream.cjs.map +0 -1
- package/dist/stream.d.cts +0 -44
- package/dist/stream.js +0 -37
- package/dist/types-A9kYLtyU.d.cts +0 -153
- package/dist/types-A9kYLtyU.d.ts +0 -153
- package/dist/types.cjs +0 -46
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts +0 -4
- package/dist/types.js +0 -46
- package/dist/utils.cjs +0 -1
- package/dist/utils.cjs.map +0 -1
- package/dist/utils.d.cts +0 -2
- package/dist/utils.js +0 -1
- package/dist/writeable-r_920qCb.d.ts +0 -16
- /package/dist/{applog.js.map → applog.min.js.map} +0 -0
- /package/dist/{chunk-F3FYYIAV.js.map → chunk-7IDQIMQO.min.js.map} +0 -0
- /package/dist/{ipfs.js.map → chunk-RPPZKO5L.min.js.map} +0 -0
- /package/dist/{stream.js.map → ipfs.min.js.map} +0 -0
- /package/dist/{utils.js.map → pubsub.min.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stream/writeable.ts","../src/data/applog-helpers.ts","../src/queries/basic.ts","../src/data/datom-types.ts"],"sourcesContent":["import { Logger } from 'besonders-logger'\nimport { action, makeObservable, observable } from 'mobx'\nimport { withPv, withTs } from '../data/applog-helpers'\nimport { dateNowIso } from '../data/applog-utils'\nimport { isTsBefore, removeDuplicateAppLogs, sortApplogsByTs } from '../data/applog-utils'\nimport { type Applog, ApplogForInsert, getApplogTypeErrors, isValidApplog } from '../data/datom-types'\nimport { encodeApplogAndGetCid } from '../ipfs/ipfs-utils'\nimport { ApplogStream } from './basic'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport abstract class WriteableApplogStream extends ApplogStream {\n\tconstructor(\n\t\tparents: ApplogStream | ApplogStream[] | null,\n\t\tfilters: string[],\n\t\tapplogs: Applog[] = [],\n\t\tname: string,\n\t) {\n\t\tsuper(parents, filters, applogs, name)\n\n\t\tmakeObservable(this, {\n\t\t\tinsert: action, // ? is there an advantage to do this here instead of wrapping the fx in action below?\n\t\t})\n\t}\n\n\tpublic insert(appLogsToInsert: ApplogForInsert[]) {\n\t\tconst ts = dateNowIso()\n\n\t\tconst mapped = appLogsToInsert.map(log => {\n\t\t\tconst logWithTs = withTs(log, ts)\n\t\t\tif (!isValidApplog(logWithTs)) {\n\t\t\t\tthrow ERROR(`Bogus Applog ${JSON.stringify(logWithTs)}`, getApplogTypeErrors(logWithTs))\n\t\t\t}\n\t\t\tconst logWithPv = withPv(logWithTs, this)\n\t\t\tconst cid = encodeApplogAndGetCid(logWithPv).toString()\n\t\t\tconst logWithCid = { ...logWithPv, cid } satisfies Applog\n\t\t\treturn Object.freeze(logWithCid)\n\t\t})\n\t\tconst mappedLogs = removeDuplicateAppLogs(mapped)\n\t\tif (appLogsToInsert.length !== mappedLogs.length) {\n\t\t\tWARN('request to insert duplicate log, inserting mappedLogs:', { appLogsToInsert, mappedLogs })\n\t\t} else if (!appLogsToInsert.length) {\n\t\t\tWARN('request to insert empty logs array')\n\t\t} else {\n\t\t\tLOG('Inserting:', mappedLogs.length === 1 ? mappedLogs[0] : mappedLogs, { ds: this })\n\t\t}\n\t\tif (!mappedLogs.length) return []\n\n\t\tsortApplogsByTs(mappedLogs)\n\t\tconst sortNeeded = this._applogs.length && isTsBefore(mappedLogs[0], this._applogs[this._applogs.length - 1])\n\t\tthis._applogs.push(...mappedLogs)\n\t\tif (sortNeeded) {\n\t\t\tsortApplogsByTs(this._applogs)\n\t\t}\n\t\tthis.notifySubscribers({ added: mappedLogs, removed: null })\n\n\t\t// ? persist sync\n\t\tvoid this.persist(mappedLogs)\n\t\treturn mappedLogs as Applog[]\n\t}\n\n\tget readOnly() {\n\t\treturn false\n\t}\n\n\tprotected abstract persist(logs: Applog[])\n}\nexport class ApplogStreamInMemory extends WriteableApplogStream {\n\tconstructor(\n\t\tapplogs: Applog[],\n\t\tfilters: string[],\n\t\tname: string,\n\t\treadonly _readOnly: boolean,\n\t\tparents: ApplogStream | ApplogStream[] | null = null,\n\t) {\n\t\tsuper(parents, filters, applogs, name)\n\n\t\tmakeObservable(this, {\n\t\t\t// @ts-expect-error bc it's private\n\t\t\t_applogs: observable.shallow,\n\t\t})\n\t}\n\n\tget readOnly() {\n\t\treturn this._readOnly\n\t}\n\n\tprotected persist(logs: Applog[]) {\n\t\tVERBOSE(`[InMem.persist] no persist for`, logs)\n\t\tif (this.readOnly) {\n\t\t\tthrow ERROR(`[persist] called for readOnly stream`)\n\t\t}\n\t}\n}\n","import { Logger } from 'besonders-logger'\nimport { action, untracked } from 'mobx'\nimport { filterAndMap, withoutHistory } from '../queries/basic'\nimport { ApplogEventMapper, ApplogStream, isInitEvent, MappedApplogStream } from '../stream'\nimport { WriteableApplogStream } from '../stream/writeable'\nimport { removeDuplicateAppLogs, sortApplogsByTs } from './applog-utils'\nimport { Applog, ApplogForInsert, ApplogForInsertOptionalAgent, ApplogNoCid, Timestamp } from './datom-types'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport const sortApplogByTs = (p: Applog, n: Applog) => (p.ts < n.ts) ? -1 : ((p.ts > n.ts) ? 1 : 0)\nexport const sortApplogByTsDec = (p: Applog, n: Applog) => (p.ts < n.ts) ? 1 : ((p.ts > n.ts) ? -1 : 0)\n\n/* Fetch applogs for pattern & filter */\nexport function filterOnlyLatest(logs: Applog[], onlyLatest: boolean): Applog[] {\n\tif (!onlyLatest || !logs?.length) {\n\t\treturn logs\n\t}\n\tlogs = [...logs].sort((a, b) => a.ts < b.ts ? -1 : (a.ts == b.ts ? 0 : 1)) // TODO: optimize (e.g. by sorting applogs by default)\n\tconst mapped = new Map()\n\tfor (const log of logs) {\n\t\tif (!log) {\n\t\t\tcontinue\n\t\t}\n\t\tmapped.set(JSON.stringify([log.en, log.at]), log)\n\t}\n\t// VERBOSE('[filterOnlyLatest]', logs, mapped)\n\treturn [...mapped.values()]\n}\n\nexport function hasAg(log: ApplogForInsertOptionalAgent): log is ApplogForInsert {\n\treturn !!log.ag\n}\nexport function hasTs(log: ApplogForInsert): log is Omit<ApplogForInsert, 'ts'> & { ts: Timestamp } {\n\treturn !!log.ts\n}\nexport function hasPv(log: ApplogForInsert): log is ApplogForInsert & { pv: string } {\n\treturn !!log.pv\n}\n\nexport function withTs(log: ApplogForInsert, ts: Timestamp) {\n\treturn hasTs(log) ? log : { ...log, ts }\n}\nexport function withPv(log: ApplogNoCid, ds: WriteableApplogStream) {\n\tconst { en, at } = log\n\tconst pvs = filterAndMap(withoutHistory(ds), { en, at }, 'cid')\n\tif (pvs.length > 1) WARN(`[withPv] unexpected result count:`, pvs.length)\n\tlet pv = pvs.length ? pvs[0] : null\n\tconst isMatchingPv = !!(pv === log.pv)\n\tif (log.pv && !isMatchingPv) WARN(`[withPv] different than pre-set pv:`, { queriedPv: pv, logPv: log.pv }) // TODO: this is actually a normal thing when e.g. pulling\n\tpv = log.pv ?? pv\n\treturn { ...log, pv: pv ?? null }\n}\nexport function joinStreams(streams: ApplogStream[]) {\n\tif (streams.length === 0) throw ERROR(`joinStreams called with empty array`) // ? EmptyStream\n\tif (streams.length === 1) return streams[0]\n\tconst fullJoin = () =>\n\t\tsortApplogsByTs(\n\t\t\tremoveDuplicateAppLogs(streams.flatMap(s => {\n\t\t\t\tconst logs = s.applogs\n\t\t\t\tif (!logs) {\n\t\t\t\t\tERROR(`falsy applogs of stream`, s)\n\t\t\t\t\tthrow new Error(`falsy applogs of stream`)\n\t\t\t\t}\n\t\t\t\treturn logs\n\t\t\t})),\n\t\t)\n\tconst initialMergeResult = untracked(() => fullJoin())\n\tconst eventMapper: ApplogEventMapper = action(function(event, sourceStream) {\n\t\tif (isInitEvent(event)) {\n\t\t\treturn { init: untracked(() => fullJoin()) } // HACK: if this would become a common thing, think of a better solution\n\t\t} else {\n\t\t\treturn {\n\t\t\t\t// TODO: test this stuff\n\t\t\t\tadded: event.added.filter(addedLog => !this.hasApplog(addedLog, true)),\n\t\t\t\tremoved: event.added.filter(addedLog =>\n\t\t\t\t\t!this.parents.some(parent => {\n\t\t\t\t\t\tif (parent === sourceStream) return false\n\t\t\t\t\t\treturn parent.hasApplog(addedLog, true)\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\t})\n\t// TODO @manu check this ['?'] biz\n\treturn new MappedApplogStream(streams, ['?'], initialMergeResult, eventMapper, `join(${streams.map(s => s.name).join(', ')})`)\n}\n","import { Applog, ApplogValue, DatalogQueryPattern, EntityID, SearchContext } from '../data/datom-types'\n\nimport { Logger } from 'besonders-logger'\nimport { autorun, comparer, computed, makeObservable, observable, onBecomeObserved, toJS, untracked } from 'mobx'\n\nimport stringify from 'safe-stable-stringify'\nimport { joinStreams } from '../data/applog-helpers'\nimport { resolveOrRemoveVariables, sortApplogsByTs } from '../data/applog-utils'\nimport {\n\tapplogStreamComparer,\n\tcomputedFnDeepCompare,\n\tcomputedStructuralComparer,\n\tcreateDebugName,\n\tobservableArrayMap,\n\tqueryNodesComparer,\n} from '../mobx/mobx-utils'\nimport { ApplogStream, ApplogStreamEvent, isInitEvent } from '../stream'\nimport { rollingFilter, rollingMapper } from '../stream/filters'\nimport { ApplogStreamInMemory } from '../stream/writeable'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO, { prefix: '[q]' }) // eslint-disable-line no-unused-vars\n\n// util.inspect.defaultOptions.depth = 5;\n\n// export interface QueryExecutorArguments {\n// db: ApplogStream\n// // applogs: AppLog[]\n// nodes: SearchContextWithLog[]\n// }\n// export interface QueryExecutorResult {\n// // applogs: AppLog[]\n// nodes: SearchContextWithLog[]\n// }\n// export type QueryExecutor = (args: QueryExecutorArguments) => QueryExecutorResult\n\nexport class QueryNode {\n\tconstructor(\n\t\tpublic logsOfThisNode: ApplogStream,\n\t\tpublic variables: SearchContext,\n\t\tpublic prev: QueryNode | null = null,\n\t) {\n\t\tmakeObservable(this, {\n\t\t\tallApplogs: computed, // ? intuitively only put the ones here that felt expensive to compute (join)\n\t\t})\n\t}\n\tget record() {\n\t\treturn this.variables // alias for end-user consumption\n\t}\n\n\tget allApplogs() {\n\t\tif (!this.prev) return this.logsOfThisNode\n\t\treturn joinStreams([\n\t\t\tthis.logsOfThisNode,\n\t\t\tthis.prev.allApplogs,\n\t\t])\n\t}\n}\nexport class QueryNodes {\n\tconstructor(\n\t\tpublic nodes: Array<QueryNode>,\n\t) {\n\t\tmakeObservable(this, {\n\t\t\tallApplogs: computed, // ? intuitively only put the ones here that felt expensive to compute (join)\n\t\t\tsize: computed, // ... or cheap to cache\n\t\t\tisEmpty: computed,\n\t\t})\n\t}\n\n\tget size() {\n\t\treturn this.records.length\n\t}\n\tget isEmpty() {\n\t\treturn this.records.length === 0\n\t}\n\tget untrackedSize() {\n\t\treturn untracked(() => this.records.length)\n\t}\n\n\tget records() {\n\t\treturn this.nodes.map(({ variables }) => variables)\n\t}\n\tget applogSets() {\n\t\treturn this.nodes.map(({ logsOfThisNode: stream }) => stream.applogs)\n\t}\n\tget applogStreams() {\n\t\treturn this.nodes.map(({ logsOfThisNode: stream }) => stream)\n\t}\n\tget allApplogs() {\n\t\treturn joinStreams(this.nodes.map(node => node.allApplogs))\n\t}\n}\n\n/////////////\n// QUERIES //\n/////////////\n\nexport const withoutHistory = computedFnDeepCompare(function withoutHistory(\n\tstream: ApplogStream,\n\t{ inverseToOnlyReturnFirstLogs, tolerateAlreadyFiltered }: {\n\t\tinverseToOnlyReturnFirstLogs?: boolean\n\t\ttolerateAlreadyFiltered?: boolean\n\t} = {},\n) {\n\tVERBOSE(`withoutHistory${inverseToOnlyReturnFirstLogs ? '.inversed' : ''} < ${stream.nameAndSizeUntracked} > initializing`)\n\t// if (stream.name.includes('withoutHistory')) WARN(`stream already contains withoutHistory:`, stream.name)\n\tif (stream.filters.includes('withoutHistory')) {\n\t\tif (tolerateAlreadyFiltered) {\n\t\t\tDEBUG(`[withoutHistory] already filtered, but tolerateAlreadyFiltered=true, so returning`)\n\t\t\treturn stream\n\t\t}\n\t\tthrow ERROR(`stream already filtered withoutHistory:`, stream.filters, { name: stream.name })\n\t}\n\n\tlet rollingMap: Map<string, Applog>\n\tconst mappedStream = rollingMapper(stream, function(event, sourceStream) {\n\t\tconst isInitial = isInitEvent(event)\n\n\t\tlet newLogs: readonly Applog[]\n\t\tconst toAdd = [] as Applog[]\n\t\tconst toRemove = isInitial ? null : [] as Applog[]\n\t\tif (isInitial) {\n\t\t\trollingMap = new Map()\n\t\t\tnewLogs = event.init\n\t\t} else {\n\t\t\tnewLogs = event.added\n\t\t}\n\n\t\tlet tsCheck: string\n\t\tfor (\n\t\t\tlet i = inverseToOnlyReturnFirstLogs ? 0 : newLogs.length - 1;\n\t\t\tinverseToOnlyReturnFirstLogs ? i < newLogs.length : i >= 0;\n\t\t\tinverseToOnlyReturnFirstLogs ? i++ : i--\n\t\t) {\n\t\t\tconst log = newLogs[i]\n\t\t\tconst key = stringify([log.en, log.at])\n\n\t\t\tif (tsCheck && (inverseToOnlyReturnFirstLogs ? tsCheck > log.ts : tsCheck < log.ts)) {\n\t\t\t\tthrow ERROR(`withoutHistory.mapper logs not sorted:`, tsCheck, inverseToOnlyReturnFirstLogs ? '>' : '<', log.ts, {\n\t\t\t\t\tlog,\n\t\t\t\t\ti,\n\t\t\t\t\tnewLogs,\n\t\t\t\t\tinverseToOnlyReturnFirstLogs,\n\t\t\t\t})\n\t\t\t}\n\t\t\ttsCheck = log.ts\n\n\t\t\tconst existing = rollingMap.get(key)\n\t\t\tif (!existing || (inverseToOnlyReturnFirstLogs ? (existing.ts > log.ts) : (existing.ts < log.ts))) {\n\t\t\t\tif (existing && !isInitial) toRemove.push(existing)\n\t\t\t\ttoAdd.push(log)\n\t\t\t\trollingMap.set(key, log)\n\t\t\t}\n\t\t}\n\t\tsortApplogsByTs(toAdd) // HACK: find logical solution\n\t\tVERBOSE.isDisabled ||\n\t\t\tVERBOSE(\n\t\t\t\t`withoutHistory${inverseToOnlyReturnFirstLogs ? '.inversed' : ''}<${stream.nameAndSizeUntracked}> mapped event`,\n\t\t\t\tisInitial ?\n\t\t\t\t\t{ ...Object.fromEntries(Object.entries(event).map(([k, v]) => [k, v?.length])), toAdd: toAdd.length, toRemove } :\n\t\t\t\t\t{ ...event, toAdd, toRemove },\n\t\t\t)\n\t\treturn isInitial ?\n\t\t\t{ init: toAdd }\n\t\t\t: { added: toAdd, removed: toRemove }\n\t}, { name: `withoutHistory${inverseToOnlyReturnFirstLogs ? '.inversed' : ''}`, extraFilterName: 'withoutHistory' })\n\tVERBOSE.isDisabled || autorun(() => {\n\t\tVERBOSE(`withoutHistory<${stream.nameAndSizeUntracked}> filtered down to`, mappedStream.applogs.length) // using applogs.length, as size might not change, but we still want a log\n\t})\n\treturn mappedStream\n\t// const filtered = observableArrayMap(() => {\n\t// VERBOSE(`withoutHistory stream deps:`, getDependencyTree(stream.applogs), stream)\n\t// stream.applogs.forEach(applog => {\n\t// const key = stringify([applog.en, applog.at])\n\t// const existing = mapped.get(key)\n\t// if (!existing || existing.ts < applog.ts)\n\t// mapped.set(key, applog)\n\t// })\n\t// VERBOSE(`[withoutHistory] mapped:`, mapped.size)\n\t// return Array.from(mapped.values())\n\t// }, { name: obsArrMapName })\n\t// VERBOSE(`withoutHistory deps of filteredArr:`, getDependencyTree(filtered))\n\t// return new MappedApplogStream(stream, filtered, `${stream.name} | withoutHistory`)\n}, { equals: applogStreamComparer })\n\nexport const withoutDeleted = computedFnDeepCompare(function withoutDeleted(\n\tstream: ApplogStream,\n) {\n\tVERBOSE(`withoutDeleted<${stream.nameAndSizeUntracked}>`)\n\t// if (stream.name.includes('withoutDeleted')) WARN(`stream already contains withoutDeleted:`, withoutDeleted)\n\tif (stream.filters.includes('withoutDeleted')) {\n\t\tthrow ERROR(`stream already filtered withoutDeleted:`, stream.filters, { name: stream.name })\n\t}\n\n\tconst deletionLogs = rollingFilter(stream, { at: ['isDeleted', 'relation/isDeleted', 'block/isDeleted'], vl: true }, {\n\t\tname: 'isDeleted',\n\t})\n\tVERBOSE(`withoutDeleted<${stream.nameAndSizeUntracked}> deletionLogs:`, untracked(() => [...deletionLogs.applogs]))\n\tconst obsArrMapName = createDebugName({ caller: 'allDeletedEntities', stream })\n\tconst deleted = observableArrayMap(() => deletionLogs.map(log => log.en), { name: obsArrMapName })\n\t// VERBOSE(`withoutDeleted<${db.nameAndSize}> deleted:`, untracked(() => [...deleted]))\n\tVERBOSE.isDisabled || autorun(() => {\n\t\tVERBOSE(`withoutDeleted<${stream.nameAndSizeUntracked}> deleted:`, [...deleted])\n\t})\n\n\treturn rollingFilter(stream, { '!en': deleted }, { name: `withoutDeleted`, extraFilterName: 'withoutDeleted' })\n}, { equals: applogStreamComparer })\n\n// export const filterStatic = computedFnDeepCompare(function filterStatic(\n// stream: ApplogStream,\n// pattern: DatalogQueryPattern,\n// opts: { name?: string } = {},\n// ) {\n// VERBOSE(`filterStatic<${stream.nameAndSizeUntracked}>:`, pattern)\n// if (!Object.entries(pattern).length) throw new Error(`Pattern is empty`)\n// //TODO: deprecaate in favor of rollingFilter ?\n// return new ApplogStream(stream, stream.applogs.filter(applog => {\n// for (const [field, patternValue] of Object.entries(pattern)) {\n// const applogValue = applog[field.startsWith('!') ? field.slice(1) : field]\n// if (!matchPartStatic(field, patternValue, applogValue))\n// return false\n// }\n// return true\n// }), `${stream.name} | ${opts.name || `filterStatic{${stringify(pattern)}}`}`)\n// }, { equals: applogStreamComparer })\n\nexport const query = computedFnDeepCompare(function query(\n\tstream: ApplogStream,\n\tpatternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[],\n\tstartVariables: SearchContext = {},\n\topts: { debug?: boolean } = {},\n) {\n\tDEBUG(`query<${stream.nameAndSizeUntracked}>:`, patternOrPatterns)\n\tconst patterns = (Array.isArray(patternOrPatterns) ? patternOrPatterns : [patternOrPatterns]) as DatalogQueryPattern[]\n\n\tlet nodes: QueryNodes | null\n\tif (patterns.length === 1) {\n\t\tnodes = null // new QueryNodes([/* new QueryNode(stream, startVariables) */])\n\t} else {\n\t\tconst pattersExceptLast = patterns.slice(0, -1)\n\t\t// recursively call this function to have partial queries cacheable\n\t\tnodes = query(stream, pattersExceptLast, startVariables, opts)\n\t}\n\tconst lastPattern = patterns[patterns.length - 1]\n\tconst stepResult = queryStep(stream, nodes, lastPattern, opts)\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`query result:`, toJS(stepResult)))\n\treturn stepResult\n}, { equals: queryNodesComparer })\n\nexport const queryStep = computedFnDeepCompare(function queryStep(\n\tstream: ApplogStream,\n\tnodeSet: QueryNodes | null,\n\tpattern: DatalogQueryPattern,\n\t// variables: SearchContext = {},\n\topts: { debug?: boolean } = {},\n) {\n\tDEBUG(`queryStep<${stream.nameAndSizeUntracked}> with`, nodeSet?.untrackedSize ?? 'all', 'nodes, pattern:', pattern)\n\tif (!Object.entries(pattern).length) throw new Error(`Pattern is empty`)\n\n\tconst observableResultNodes = observableArrayMap(\n\t\t() => {\n\t\t\tfunction doQuery(node: QueryNode | null) {\n\t\t\t\tconst [patternWithResolvedVars, variablesToFill] = resolveOrRemoveVariables(pattern, node?.variables ?? {})\n\t\t\t\tVERBOSE(`[queryStep] patternWithoutVars: `, patternWithResolvedVars)\n\t\t\t\tconst applogsMatchingStatic = rollingFilter(stream, patternWithResolvedVars)\n\t\t\t\tconst varMapper = mapTo(variablesToFill)\n\t\t\t\tconst newVarsAndTheirLog = applogsMatchingStatic.map(log => ({ log, vars: varMapper(log) }))\n\t\t\t\tVERBOSE.isDisabled ||\n\t\t\t\t\tVERBOSE(\n\t\t\t\t\t\t`[queryStep] step node:`,\n\t\t\t\t\t\tnode?.variables,\n\t\t\t\t\t\t' =>',\n\t\t\t\t\t\tnewVarsAndTheirLog,\n\t\t\t\t\t\t'from:',\n\t\t\t\t\t\tuntracked(() => applogsMatchingStatic.applogs),\n\t\t\t\t\t)\n\t\t\t\tconst resultNodes = newVarsAndTheirLog.map(({ log, vars }) => {\n\t\t\t\t\tconst nodeVars = Object.assign({}, node?.variables, vars)\n\t\t\t\t\treturn new QueryNode(\n\t\t\t\t\t\tnew ApplogStreamInMemory(\n\t\t\t\t\t\t\t[log],\n\t\t\t\t\t\t\tstream.filters,\n\t\t\t\t\t\t\tcreateDebugName({\n\t\t\t\t\t\t\t\tcaller: 'QueryNode',\n\t\t\t\t\t\t\t\tstream: applogsMatchingStatic,\n\t\t\t\t\t\t\t\tpattern: `${stringify(nodeVars)}@${stringify(patternWithResolvedVars)}`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tapplogsMatchingStatic,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnodeVars,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\tif (opts.debug) {\n\t\t\t\t\tLOG(\n\t\t\t\t\t\t`[queryStep] step result:`,\n\t\t\t\t\t\tuntracked(() =>\n\t\t\t\t\t\t\tresultNodes.map(({ variables, logsOfThisNode: stream }) => ({\n\t\t\t\t\t\t\t\tvariables,\n\t\t\t\t\t\t\t\tstream: /* util.inspect( */ stream.applogs, /* , { showHidden: false, depth: null }) */\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn resultNodes\n\t\t\t}\n\t\t\tif (nodeSet) {\n\t\t\t\treturn nodeSet.nodes.flatMap(doQuery)\n\t\t\t} else {\n\t\t\t\treturn doQuery(null) // initial query step\n\t\t\t}\n\t\t},\n\t\t{ name: createDebugName({ caller: 'queryStep', stream, pattern }) },\n\t)\n\n\tVERBOSE(`queryStep result:`, observableResultNodes)\n\treturn new QueryNodes(observableResultNodes)\n}, { equals: queryNodesComparer })\n\nexport const queryNot = computedFnDeepCompare(function queryNot( // TODO: update old-style query\n\tstream: ApplogStream,\n\tstartNodes: QueryNodes,\n\tpatternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[],\n\topts: { debug?: boolean } = {},\n) {\n\tlet nodes = startNodes.nodes\n\tDEBUG(`queryNot<${stream.nameAndSizeUntracked}> from: ${nodes.length} nodes`)\n\tconst patterns = (Array.isArray(patternOrPatterns) ? patternOrPatterns : [patternOrPatterns]) as DatalogQueryPattern[]\n\n\tfor (const pattern of patterns) {\n\t\tif (!Object.entries(patternOrPatterns).length) throw new Error(`Pattern is empty`)\n\t\tnodes = nodes.filter(({ /* applogs, */ variables }) => {\n\t\t\tconst [patternWithResolvedVars, _variablesToFill] = resolveOrRemoveVariables(pattern, variables ?? {})\n\t\t\tVERBOSE(`[queryNot] patternWithoutVars: `, patternWithResolvedVars)\n\t\t\tconst newApplogs = rollingFilter(stream, patternWithResolvedVars)\n\t\t\tVERBOSE(`[queryNot] step node:`, variables, ' =>', newApplogs.size, 'applogs')\n\t\t\tVERBOSE.isDisabled || VERBOSE(`[queryNot] step node:`, variables, ' => empty?', untracked(() => newApplogs.applogs))\n\n\t\t\tif (opts.debug) LOG(`[queryNot] node result:`, variables, '=>', newApplogs.applogs)\n\t\t\treturn newApplogs.isEmpty\n\t\t})\n\t}\n\treturn new QueryNodes(nodes)\n}, { equals: queryNodesComparer })\n\n// export function or(queries: QueryExecutor[]) {\n// return tagged(\n// `or{${stringify(queries)} } `,\n// function orExecutor(args: QueryExecutorArguments) {\n// const { db, nodes: contexts } = args\n// VERBOSE('[or]', { queries, contexts })\n// let results = []\n// for (const query of queries) {\n// const res = query(args)\n// VERBOSE('[or] query', query, 'result =>', res)\n// results.push(...res.nodes)\n// }\n// return { contexts: results }\n// }\n// )\n// }\n\n// export type Tagged<T> = T & { tag: string }\n// export function tagged<T>(tag: string, thing: T): Tagged<T> {\n// const e = thing as (T & { tag: string })\n// e.tag = tag\n// return e\n// }\n\n//////////////////////\n// COMPOSED QUERIES //\n//////////////////////\n// createDebugName({ caller: 'useKidRelations' }, true)\nexport const filterAndMap = computedFnDeepCompare(function filterAndMap<R>(\n\tstream: ApplogStream,\n\tpattern: DatalogQueryPattern,\n\tmapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string }>) | ((applog: Applog) => R),\n) {\n\tDEBUG(`filterAndMap<${stream.nameAndSizeUntracked}>`, pattern)\n\n\tconst filtered = rollingFilter(stream, pattern)\n\tVERBOSE(`[filterAndMap] filtered:`, filtered.untrackedSize)\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[filterAndMap] filtered:`, filtered.applogs))\n\n\tconst mapperFX = function filterAndMapGetterFx() {\n\t\tif (typeof mapper === 'function') {\n\t\t\treturn filtered.map(mapper)\n\t\t} else if (typeof mapper === 'string') {\n\t\t\treturn filtered.map(log => log[mapper])\n\t\t} else {\n\t\t\treturn filtered.map(mapTo(mapper))\n\t\t}\n\t}\n\tconst name = createDebugName({ stream, pattern, caller: 'filterAndMap' })\n\tconst mapped = observableArrayMap<ApplogValue | any>(mapperFX, { name }) // TODO typing:? Record<string, ApplogValue> ?\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[filterAndMap] mapped:`, mapped))\n\treturn mapped\n}, { equals: comparer.structural })\n\nexport const queryAndMap = computedFnDeepCompare(function queryAndMap<R>(\n\tstream: ApplogStream,\n\tpatternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[],\n\tmap: string | ((record: SearchContext) => R),\n\tvariables: SearchContext = {},\n) {\n\tDEBUG(`queryAndMap<${stream.nameAndSizeUntracked}>`, { patternOrPatterns, variables, map })\n\tconst debugName = createDebugName({ stream, caller: 'queryAndMap' })\n\n\tconst filtered = query(stream, patternOrPatterns)\n\tVERBOSE(`[queryAndMap] filtered count:`, filtered.untrackedSize)\n\tconst mapped = observableArrayMap<ApplogValue | any>(\n\t\t() => {\n\t\t\tif (typeof map === 'function') {\n\t\t\t\treturn filtered.records.map(map)\n\t\t\t} else if (typeof map === 'string') {\n\t\t\t\treturn filtered.records.map(log => log[map])\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"what's this map param about?\")\n\t\t\t}\n\t\t},\n\t\t{ name: debugName },\n\t)\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[queryAndMap] result:`, toJS(mapped)))\n\treturn mapped\n}, { equals: comparer.structural })\n\nexport const queryEntity = computedFnDeepCompare(function queryEntity<R>(\n\tstream: ApplogStream,\n\tname: string,\n\tentityID: EntityID,\n\tattributes: string[],\n) {\n\tDEBUG(`queryEntity<${stream.nameAndSizeUntracked}>`, entityID, name)\n\n\tconst filtered = rollingFilter(stream, { en: entityID, at: prefixAttrs(name, attributes) })\n\tVERBOSE(`queryEntity applogs:`, filtered.applogs)\n\treturn computed(() =>\n\t\tfiltered.isEmpty ? null : Object.fromEntries(\n\t\t\tfiltered.map(({ at, vl }) => [at.slice(name.length + 1), vl]),\n\t\t)\n\t)\n}, { equals: computedStructuralComparer })\n\nexport const agentsOfStream = computedFnDeepCompare(function agentsOfStream<R>(\n\tstream: ApplogStream,\n) {\n\tLOG(`agentsOfStream<${stream.nameAndSizeUntracked}>`)\n\n\tconst mapped = observable.map<string, number>()\n\tfunction onEvent(event: ApplogStreamEvent) {\n\t\tfor (const log of (isInitEvent(event) ? event.init : event.added)) {\n\t\t\tconst prev = mapped.get(log.ag) ?? 0\n\t\t\tmapped.set(log.ag, prev + 1)\n\t\t}\n\t\tfor (const log of (!isInitEvent(event) && event.removed || [])) {\n\t\t\tconst prev = mapped.get(log.ag)\n\t\t\tif (!prev || prev < 1) throw ERROR(`[agentsOfStream] number is now negative`, { log, event, mapped, prev })\n\t\t\tmapped.set(log.ag, prev - 1)\n\t\t}\n\t\tLOG(`agentsOfStream<${stream.nameAndSizeUntracked}> processed event`, { event, mapped })\n\t}\n\tuntracked(() => onEvent({ init: stream.applogs }))\n\tstream.subscribe(onEvent)\n\tonBecomeObserved(mapped, () => stream.unsubscribe(onEvent))\n\n\treturn mapped\n})\n\nexport const entityOverlap = computedFnDeepCompare(function entityOverlapCount(\n\tstreamA: ApplogStream,\n\tstreamB: ApplogStream,\n) {\n\tLOG(`entityOverlap<${streamA.nameAndSizeUntracked}, ${streamB.nameAndSizeUntracked}>`)\n\n\treturn computed(() => {\n\t\tconst entitiesA = new Set(streamA.map(log => log.en))\n\t\tconst entitiesB = new Set(streamB.map(log => log.en))\n\t\treturn [...entitiesA].filter(en => entitiesB.has(en))\n\t})\n})\n\nexport const entityOverlapCount = computedFnDeepCompare(function entityOverlapCount(streamA: ApplogStream, streamB: ApplogStream) {\n\treturn computed(() => entityOverlap(streamA, streamB).get().length)\n})\n\n/////////////\n// HELPERS //\n/////////////\n\nexport function mapTo(applogFieldMap: Partial<{ [key in keyof Applog]: string }>) {\n\treturn applog => {\n\t\treturn Object.entries(applogFieldMap).reduce((acc, [key, value]) => {\n\t\t\tacc[value] = applog[key]\n\t\t\treturn acc\n\t\t}, {} as SearchContext)\n\t}\n}\n\nexport function startsWith(str: string) {\n\treturn (value) => value.startsWith(str)\n}\n\nexport function prefixAttrs(prefix: string, attrs: string[]) {\n\treturn attrs.map(at => prefixAt(prefix, at))\n}\nexport function prefixAt(prefix: string, attr: string) {\n\treturn `${prefix}/${attr}`\n}\n","// import type { CID } from '@oddjs/odd'\nimport { FormatRegistry, Static, TSchema, Type } from '@sinclair/typebox'\nimport { TypeCompiler } from '@sinclair/typebox/compiler'\nimport { CID } from 'multiformats/cid'\nimport { PartialBy, Tagged } from '../types/typescript-utils'\n\nexport const Nullable = <T extends TSchema>(schema: T) => Type.Union([schema, Type.Null()])\nexport const EntityID_LENGTH = 7\n// const bagu = 'baguqeerav3h4b46j2pyxikqhtm5si5vhzsyrba2duhrtltfutrlmj42anmvq'\n// const k51q = 'k51qzi5uqu5dhe1bxxjxj144bj2a225o1681yobevns26xlxtsfidjgnpwknfd'\nconst isCID = /^(k51qz|baguq)[0-9a-z]{56,57}$/\nconst isShortHash = /^[0-9A-Fa-f]{7,8}$/g // TODO awkward why are some 7 and some 8 long\n// engine level: min 6 (lenient within reason)\n// note3 TBD... either fixed for all entity types VS 7 for pub/sub, 8 for tags, 9 for blocks, 10 for relations etc...\n\nFormatRegistry.Set('EntityID', (value) => !!value.match(isShortHash) || !!value.match(isCID))\nexport const EntityID = Type.String({ format: 'EntityID' })\nexport type EntityID = Static<typeof EntityID>\n\nexport type DatomPart = string // TODO refactor\nexport type CidString = Tagged<string, CID>\nexport type AgentID = EntityID\nexport type Attribute = string\nexport type ApplogValue = string | boolean | Number | null // TODO: use Tagged types\n// ? allow objects? or just as serialized strings? Or serialize everything anyways?\n\nexport interface Atom {\n\ten: EntityID\n\tat: Attribute\n\tvl: ApplogValue\n}\n\nexport type AgentHash = string\nexport type Timestamp = string\nexport interface Applog extends Atom {\n\tcid: CidString\n\tpv?: CidString // | CID\n\tts: Timestamp\n\tag: AgentHash\n}\nexport type ApplogNoCid = Omit<Applog, 'cid'>\nexport type ApplogOptionalCid = PartialBy<Applog, 'cid'>\nexport type ApplogForInsert = PartialBy<ApplogNoCid, 'ts'>\nexport type ApplogForInsertOptionalAgent = PartialBy<ApplogForInsert, 'ag'>\n\nexport type AtomPattern = Atom | Applog\n\nexport interface DatalogStateIdentifier {\n\tlastTS: Timestamp\n}\n\n// New generic type for fields that can be a value, an array of that, or a function\nexport type ValueOrMatcher<T> = T | readonly T[] | ((value: T) => boolean)\n// Generic type that applies ValueOrMatcher to each field of T\nexport type WithMatchers<T extends Record<string, any>> = {\n\t[K in keyof T & string as `${K}` | `!${K}`]?: ValueOrMatcher<T[K]>\n}\n\nexport type DatalogQueryPattern = Partial<WithMatchers<Applog>>\nexport type DatalogQueryPatternArray = DatalogQueryPattern[]\nexport interface DatalogQuery<SELECT extends string> {\n\tfind: readonly SELECT[] // see: https://github.com/microsoft/TypeScript/issues/20965#issuecomment-868981458\n\twhere: DatalogQueryPatternArray\n\tonlyLatest?: boolean\n}\nexport type DatalogQueryResultEntry<SELECT extends string> = Record<\n\t// SELECT,\n\tStripPrefix<'?', SELECT>,\n\tDatomPart\n>\nexport type DatalogQueryResultRows<SELECT extends string> = DatalogQueryResultEntry<SELECT>[]\n// export type StripTest = StripPrefix<'?', '?A' | '?B'>\n// export type DatalogQueryResultEntryTEST = DatalogQueryResultEntry<'?A' | '?B'>\n// export type DatalogQueryResultEntryTESTX = MapKeysStripPrefix<'?A' | '?B', '?'>\n\nexport interface SearchContext {\n\t[key: string]: ApplogValue\n}\nexport interface SearchContextWithLog {\n\tcontext: SearchContext\n\tapplog?: Applog\n}\n\nexport type ResultContext = SearchContext | null\n\n/* https://stackoverflow.com/a/72497461 */\ntype StripPrefix<\n\tTPrefix extends string,\n\tT extends string,\n> = T extends `${TPrefix}${infer R}` ? R : never\n\ntype MapKeysStripPrefix<SELECT extends string, TPrefix extends string> = {\n\t[K in SELECT as StripPrefix<TPrefix, K>]: DatomPart\n}\n\nFormatRegistry.Set('CID', (value) => !!value.match(isCID))\nexport const CIDTB = Type.String({ format: 'EntityID' })\nexport type CIDTB = Static<typeof EntityID>\n\nconst isURL = /^http([s]?):\\/\\/.*\\..*/\nFormatRegistry.Set('URL', (value) => !!value.match(isURL))\nexport const URL = Type.String({ format: 'URL' })\nexport type URL = Static<typeof URL>\n\nexport const AppLogTB = Type.Object({\n\ten: EntityID, // EntityID\n\tat: Type.String(), // Attribute\n\tvl: Nullable(Type.Union([Type.String(), Type.Boolean(), Type.Number()])), // TODO refactor to semantic typesafe ApplogValue\n\tts: Type.String(), // Timestamp\n\tag: Type.String(), // AgentHash\n})\nexport type AppLogTB = Static<typeof AppLogTB> // type T = {\n\nexport const AppLogTBC = TypeCompiler.Compile(AppLogTB)\nexport const getApplogTypeErrors = (obj: any) => Array.from(AppLogTBC.Errors(obj))\nexport const isValidApplog = AppLogTBC.Check.bind(AppLogTBC)\n\n// maybe useful for defaulting https://github.com/sinclairzx81/typebox#cast\n"],"mappings":"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","names":["Logger","action","makeObservable","observable","Logger","untracked","withoutHistory","withoutDeleted","query","queryStep","stream","queryNot","filterAndMap","queryAndMap","queryEntity","agentsOfStream","entityOverlapCount","WARN","LOG","DEBUG","VERBOSE","ERROR","Logger","untracked","WARN","LOG","DEBUG","VERBOSE","ERROR","Logger","makeObservable","action","observable"]}
|