@note3/utils 0.0.25 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -2
- package/dist/applog-collection.d.ts +0 -49
- package/dist/applog-collection.d.ts.map +0 -1
- package/dist/applog-collection.min.js +0 -2
- package/dist/applog-collection.min.js.map +0 -1
- package/dist/chunk-7XDDTUI3.min.js +0 -78
- package/dist/chunk-7XDDTUI3.min.js.map +0 -1
- package/dist/chunk-GEH2WV7I.min.js +0 -2
- package/dist/chunk-GEH2WV7I.min.js.map +0 -1
- package/dist/chunk-IFY2JCCQ.min.js +0 -2
- package/dist/chunk-IFY2JCCQ.min.js.map +0 -1
- package/dist/chunk-KHOUPFOL.min.js +0 -1
- package/dist/chunk-KHOUPFOL.min.js.map +0 -1
- package/dist/chunk-KY36PVHK.min.js +0 -2
- package/dist/chunk-KY36PVHK.min.js.map +0 -1
- package/dist/chunk-LDNVHZO7.min.js +0 -2
- package/dist/chunk-LDNVHZO7.min.js.map +0 -1
- package/dist/chunk-MXMMU6NF.min.js +0 -2
- package/dist/chunk-MXMMU6NF.min.js.map +0 -1
- package/dist/chunk-PA6WBVCJ.min.js +0 -3
- package/dist/chunk-PA6WBVCJ.min.js.map +0 -1
- package/dist/chunk-POX3PUJK.min.js +0 -2
- package/dist/chunk-POX3PUJK.min.js.map +0 -1
- package/dist/chunk-WZPDIIA2.min.js +0 -2
- package/dist/chunk-WZPDIIA2.min.js.map +0 -1
- package/dist/chunk-XL6QVLYO.min.js +0 -2
- package/dist/chunk-XL6QVLYO.min.js.map +0 -1
- package/dist/corejs.d.ts +0 -19
- package/dist/corejs.d.ts.map +0 -1
- package/dist/corejs.min.js +0 -2
- package/dist/corejs.min.js.map +0 -1
- package/dist/helpers.d.ts +0 -7
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.min.js +0 -2
- package/dist/helpers.min.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.min.js +0 -2
- package/dist/index.min.js.map +0 -1
- package/dist/map.d.ts +0 -5
- package/dist/map.d.ts.map +0 -1
- package/dist/map.min.js +0 -2
- package/dist/map.min.js.map +0 -1
- package/dist/note3-regex-constants.d.ts +0 -21
- package/dist/note3-regex-constants.d.ts.map +0 -1
- package/dist/note3-regex-constants.min.js +0 -2
- package/dist/note3-regex-constants.min.js.map +0 -1
- package/dist/note3-utils-nodeps.d.ts +0 -22
- package/dist/note3-utils-nodeps.d.ts.map +0 -1
- package/dist/note3-utils-nodeps.min.js +0 -2
- package/dist/note3-utils-nodeps.min.js.map +0 -1
- package/dist/queries.d.ts +0 -53
- package/dist/queries.d.ts.map +0 -1
- package/dist/queries.min.js +0 -2
- package/dist/queries.min.js.map +0 -1
- package/dist/relation-ordering.d.ts +0 -13
- package/dist/relation-ordering.d.ts.map +0 -1
- package/dist/relation-ordering.min.js +0 -2
- package/dist/relation-ordering.min.js.map +0 -1
- package/dist/tree-builder.d.ts +0 -117
- package/dist/tree-builder.d.ts.map +0 -1
- package/dist/tree-builder.min.js +0 -2
- package/dist/tree-builder.min.js.map +0 -1
- package/dist/types.d.ts +0 -20
- package/dist/types.d.ts.map +0 -1
- package/dist/types.min.js +0 -2
- package/dist/types.min.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{v as i,x as s}from"./chunk-7XDDTUI3.min.js";function A(t){return typeof t=="string"?t:JSON.stringify(t)}function u(t,n,p,e){let o=A(t),r=e??i({content:o,parentID:n,after:p,ts:s()},7);return{en:r,applogs:[{en:r,at:"block/content",vl:o}]}}function I(t,n,p,e){let o=e??i({blockID:t,childOf:n,after:p,ts:s()},7);return{en:o,applogs:[{en:o,at:"relation/block",vl:t},{en:o,at:"relation/childOf",vl:n},{en:o,at:"relation/after",vl:p}]}}function g(t,n,p){let e=[],{en:o,applogs:r}=u(t.content,n,p);if(e.push(...r),n){let{applogs:a}=I(o,n,p??null);e.push(...a)}let l=null;if(t.children)for(let a of t.children){let c=g(a,o,l);e.push(...c.applogs),l=c.blockID}return{blockID:o,applogs:e}}function ct(t,n){let p=[],e=[],o=null;for(let r of t){let l=g(r,n,o);p.push(...l.applogs),e.push(l.blockID),o=l.blockID}return{rootIDs:e,applogs:p}}function At(t){return g(t)}export{u as a,I as b,g as c,ct as d,At as e};
|
|
2
|
-
//# sourceMappingURL=chunk-GEH2WV7I.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tree-builder.ts"],"sourcesContent":["import type { ApplogForInsertOptionalAgent, EntityID } from '@wovin/core/applog'\nimport { dateNowIso, getHashID } from '@wovin/core/applog'\nimport type { TiptapContent } from './note3-utils-nodeps'\n\n/**\n * Represents a single node in a tree structure.\n * Content can be a string or a Tiptap JSON object.\n * Children are optional and can be recursively nested.\n */\nexport interface TreeNode {\n\t/** Content as string or Tiptap object (auto-serialized) */\n\tcontent: string | TiptapContent\n\t/** Optional child nodes */\n\tchildren?: TreeNode[]\n}\n\n/**\n * Result of creating a single node with its applogs\n */\nexport interface NodeCreationResult {\n\tblockID: EntityID\n\tapplogs: ApplogForInsertOptionalAgent[]\n}\n\n/**\n * Result of creating a tree with applogs\n */\nexport interface TreeCreationResult {\n\trootIDs: EntityID[]\n\tapplogs: ApplogForInsertOptionalAgent[]\n}\n\n/**\n * Serializes content to a string.\n * If content is a TiptapContent object, it's stringified.\n * If content is already a string, it's returned as-is.\n */\nfunction serializeContent(content: string | TiptapContent): string {\n\treturn typeof content === 'string' ? content : JSON.stringify(content)\n}\n\n/**\n * Creates block applogs for a single piece of content.\n * Generates an entity ID using getHashID, including positional context\n * (parent and after) to ensure uniqueness even for identical content.\n *\n * @param content - String or TiptapContent object\n * @param parentID - Optional parent ID for positional context in hash\n * @param after - Optional previous sibling ID for positional context in hash\n * @param entityID - Optional pre-computed entity ID\n * @returns Object with generated entityID and applogs array\n */\nexport function createBlockApplogs(\n\tcontent: string | TiptapContent,\n\tparentID?: EntityID,\n\tafter?: EntityID | null,\n\tentityID?: EntityID,\n): { en: EntityID; applogs: ApplogForInsertOptionalAgent[] } {\n\tconst serialized = serializeContent(content)\n\tconst en = entityID ?? getHashID({ content: serialized, parentID, after, ts: dateNowIso() }, 7)\n\n\tconst applog: ApplogForInsertOptionalAgent = {\n\t\ten,\n\t\tat: 'block/content',\n\t\tvl: serialized,\n\t}\n\n\treturn {\n\t\ten,\n\t\tapplogs: [applog],\n\t}\n}\n\n/**\n * Creates relation applogs that connect a block as a child of a parent.\n * Generates three applogs: one for the block reference, one for the parent reference,\n * and one for the sibling ordering (after).\n *\n * @param blockID - The ID of the child block\n * @param childOf - The ID of the parent block\n * @param after - The ID of the previous sibling (or null if first child)\n * @param relationID - Optional pre-computed relation entity ID\n * @returns Object with relation entity ID and applogs array\n */\nexport function createRelationApplogs(\n\tblockID: EntityID,\n\tchildOf: EntityID,\n\tafter: EntityID | null,\n\trelationID?: EntityID,\n): { en: EntityID; applogs: ApplogForInsertOptionalAgent[] } {\n\tconst en = relationID ?? getHashID({ blockID, childOf, after, ts: dateNowIso() }, 7)\n\n\tconst applogs: ApplogForInsertOptionalAgent[] = [\n\t\t{ en, at: 'relation/block', vl: blockID },\n\t\t{ en, at: 'relation/childOf', vl: childOf },\n\t\t{ en, at: 'relation/after', vl: after },\n\t]\n\n\treturn {\n\t\ten,\n\t\tapplogs,\n\t}\n}\n\n/**\n * Recursively creates applogs for a single node and its children.\n * Maintains proper sibling ordering using the 'after' field.\n *\n * @param node - The node to create\n * @param parentID - Optional parent block ID. If provided, creates a relation to parent.\n * @param after - Optional previous sibling ID for proper ordering\n * @returns Object with block ID and flattened applogs array\n */\nexport function createSingleNodeApplogs(\n\tnode: TreeNode,\n\tparentID?: EntityID,\n\tafter?: EntityID | null,\n): NodeCreationResult {\n\tconst allApplogs: ApplogForInsertOptionalAgent[] = []\n\n\t// Create the block for this node, including positional context in the hash\n\tconst { en: blockID, applogs: blockApplogs } = createBlockApplogs(node.content, parentID, after)\n\tallApplogs.push(...blockApplogs)\n\n\t// Create relation to parent if parentID is provided\n\tif (parentID) {\n\t\tconst { applogs: relationApplogs } = createRelationApplogs(blockID, parentID, after ?? null)\n\t\tallApplogs.push(...relationApplogs)\n\t}\n\n\t// Recursively create children with proper 'after' ordering\n\tlet lastChildID: EntityID | null = null\n\tif (node.children) {\n\t\tfor (const child of node.children) {\n\t\t\tconst childResult = createSingleNodeApplogs(child, blockID, lastChildID)\n\t\t\tallApplogs.push(...childResult.applogs)\n\t\t\tlastChildID = childResult.blockID\n\t\t}\n\t}\n\n\treturn {\n\t\tblockID,\n\t\tapplogs: allApplogs,\n\t}\n}\n\n/**\n * Creates applogs for multiple root nodes (nodes without a parent).\n * All nodes are created as standalone roots.\n *\n * @param nodes - Array of root nodes\n * @returns Object with array of root IDs and flattened applogs\n *\n * @example\n * const nodes: TreeNode[] = [\n * { content: 'Root 1', children: [{ content: 'Child 1' }] },\n * { content: 'Root 2' }\n * ]\n * const { rootIDs, applogs } = createTreeApplogs(nodes)\n */\nexport function createTreeApplogs(nodes: TreeNode[]): TreeCreationResult\n/**\n * Creates applogs for multiple nodes as children of a parent.\n * All nodes are created as children of the specified parent.\n *\n * @param nodes - Array of nodes\n * @param parentID - Parent block ID. Nodes will be created as children of this parent.\n * @returns Object with array of created block IDs and flattened applogs\n *\n * @example\n * const subtree: TreeNode[] = [\n * { content: 'Child 1' },\n * { content: 'Child 2' }\n * ]\n * const { rootIDs, applogs } = createTreeApplogs(subtree, 'existingParentID')\n */\nexport function createTreeApplogs(nodes: TreeNode[], parentID: EntityID): TreeCreationResult\n\nexport function createTreeApplogs(nodes: TreeNode[], parentID?: EntityID): TreeCreationResult {\n\tconst allApplogs: ApplogForInsertOptionalAgent[] = []\n\tconst rootIDs: EntityID[] = []\n\n\tlet afterID: EntityID | null = null\n\tfor (const node of nodes) {\n\t\tconst result = createSingleNodeApplogs(node, parentID, afterID)\n\t\tallApplogs.push(...result.applogs)\n\t\trootIDs.push(result.blockID)\n\t\tafterID = result.blockID\n\t}\n\n\treturn {\n\t\trootIDs,\n\t\tapplogs: allApplogs,\n\t}\n}\n\n/**\n * Creates applogs for a single root node with its descendants.\n * Convenience function that returns just the root block ID instead of an array.\n *\n * @param root - The root node\n * @returns Object with root block ID and applogs\n *\n * @example\n * const node: TreeNode = {\n * content: 'Parent',\n * children: [\n * { content: 'Child 1' },\n * { content: 'Child 2' }\n * ]\n * }\n * const { blockID, applogs } = createSingleTree(node)\n */\nexport function createSingleTree(root: TreeNode): NodeCreationResult {\n\treturn createSingleNodeApplogs(root)\n}\n"],"mappings":"mDAqCA,SAASA,EAAiBC,EAAyC,CAClE,OAAO,OAAOA,GAAY,SAAWA,EAAU,KAAK,UAAUA,CAAO,CACtE,CAaO,SAASC,EACfD,EACAE,EACAC,EACAC,EAC4D,CAC5D,IAAMC,EAAaN,EAAiBC,CAAO,EACrCM,EAAKF,GAAYG,EAAU,CAAE,QAASF,EAAY,SAAAH,EAAU,MAAAC,EAAO,GAAIK,EAAW,CAAE,EAAG,CAAC,EAQ9F,MAAO,CACN,GAAAF,EACA,QAAS,CARmC,CAC5C,GAAAA,EACA,GAAI,gBACJ,GAAID,CACL,CAIiB,CACjB,CACD,CAaO,SAASI,EACfC,EACAC,EACAR,EACAS,EAC4D,CAC5D,IAAMN,EAAKM,GAAcL,EAAU,CAAE,QAAAG,EAAS,QAAAC,EAAS,MAAAR,EAAO,GAAIK,EAAW,CAAE,EAAG,CAAC,EAQnF,MAAO,CACN,GAAAF,EACA,QAR+C,CAC/C,CAAE,GAAAA,EAAI,GAAI,iBAAkB,GAAII,CAAQ,EACxC,CAAE,GAAAJ,EAAI,GAAI,mBAAoB,GAAIK,CAAQ,EAC1C,CAAE,GAAAL,EAAI,GAAI,iBAAkB,GAAIH,CAAM,CACvC,CAKA,CACD,CAWO,SAASU,EACfC,EACAZ,EACAC,EACqB,CACrB,IAAMY,EAA6C,CAAC,EAG9C,CAAE,GAAIL,EAAS,QAASM,CAAa,EAAIf,EAAmBa,EAAK,QAASZ,EAAUC,CAAK,EAI/F,GAHAY,EAAW,KAAK,GAAGC,CAAY,EAG3Bd,EAAU,CACb,GAAM,CAAE,QAASe,CAAgB,EAAIR,EAAsBC,EAASR,EAAUC,GAAS,IAAI,EAC3FY,EAAW,KAAK,GAAGE,CAAe,CACnC,CAGA,IAAIC,EAA+B,KACnC,GAAIJ,EAAK,SACR,QAAWK,KAASL,EAAK,SAAU,CAClC,IAAMM,EAAcP,EAAwBM,EAAOT,EAASQ,CAAW,EACvEH,EAAW,KAAK,GAAGK,EAAY,OAAO,EACtCF,EAAcE,EAAY,OAC3B,CAGD,MAAO,CACN,QAAAV,EACA,QAASK,CACV,CACD,CAkCO,SAASM,GAAkBC,EAAmBpB,EAAyC,CAC7F,IAAMa,EAA6C,CAAC,EAC9CQ,EAAsB,CAAC,EAEzBC,EAA2B,KAC/B,QAAWV,KAAQQ,EAAO,CACzB,IAAMG,EAASZ,EAAwBC,EAAMZ,EAAUsB,CAAO,EAC9DT,EAAW,KAAK,GAAGU,EAAO,OAAO,EACjCF,EAAQ,KAAKE,EAAO,OAAO,EAC3BD,EAAUC,EAAO,OAClB,CAEA,MAAO,CACN,QAAAF,EACA,QAASR,CACV,CACD,CAmBO,SAASW,GAAiBC,EAAoC,CACpE,OAAOd,EAAwBc,CAAI,CACpC","names":["serializeContent","content","createBlockApplogs","parentID","after","entityID","serialized","en","getHashID","dateNowIso","createRelationApplogs","blockID","childOf","relationID","createSingleNodeApplogs","node","allApplogs","blockApplogs","relationApplogs","lastChildID","child","childResult","createTreeApplogs","nodes","rootIDs","afterID","result","createSingleTree","root"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/map.ts"],"sourcesContent":["export class SetMap<K, V = K> extends Map<K, Set<V>> {\n\tadd(key: K, value: V) {\n\t\tthis.emplace(key, {\n\t\t\tinsert: () => new Set([value]),\n\t\t\tupdate: (s) => {\n\t\t\t\ts.add(value)\n\t\t\t\treturn s\n\t\t\t},\n\t\t})\n\t}\n\n\taddAll(key: K, values: Array<V>) {\n\t\tthis.emplace(key, {\n\t\t\tinsert: () => new Set(values),\n\t\t\tupdate: (s) => {\n\t\t\t\tvalues.forEach(s.add.bind(s))\n\t\t\t\treturn s\n\t\t\t},\n\t\t})\n\t}\n}\n"],"mappings":"AAAO,IAAMA,EAAN,cAA+B,GAAe,CACpD,IAAIC,EAAQC,EAAU,CACrB,KAAK,QAAQD,EAAK,CACjB,OAAQ,IAAM,IAAI,IAAI,CAACC,CAAK,CAAC,EAC7B,OAASC,IACRA,EAAE,IAAID,CAAK,EACJC,EAET,CAAC,CACF,CAEA,OAAOF,EAAQG,EAAkB,CAChC,KAAK,QAAQH,EAAK,CACjB,OAAQ,IAAM,IAAI,IAAIG,CAAM,EAC5B,OAASD,IACRC,EAAO,QAAQD,EAAE,IAAI,KAAKA,CAAC,CAAC,EACrBA,EAET,CAAC,CACF,CACD","names":["SetMap","key","value","s","values"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=chunk-KHOUPFOL.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function u(s){if(!s?.length)return[];let o=s.filter(e=>!e.isDeleted).slice();o.sort((e,n)=>e.id<n.id?-1:1);let r=new Set(o.map(e=>e.childOf));if(r.size!==1)throw new Error(`[orderRelations] All relations must have the same parent. Found ${r.size} different parents: ${Array.from(r).join(", ")}`);let t=[],d=new Map,f=new Map;for(let e of o)d.set(e.id,e),f.set(e.block,e);function l(e,n=[]){if(n.includes(e.id)){let i=[...n,e.id].join(" \u2192 ");throw new Error(`[orderRelations] Circular reference detected in relation ordering: ${i}`)}if(n.push(e.id),!e.after)t.unshift(e.id);else{let i=f.get(e.after);if(!i)t.push(e.id);else{t.includes(i.id)||l(i,n);let p=t.indexOf(i.id);p===-1?(console.warn(`[orderRelations] Could not find position after placing relation ${i.id}. Adding relation ${e.id} to end.`),t.push(e.id)):t.splice(p+1,0,e.id)}}let c=o.indexOf(e);c!==-1&&o.splice(c,1)}for(;o.length;){let e=o[0];l(e)}let a=[];for(let e of t){let n=d.get(e);n&&a.push(n)}return a}export{u as a};
|
|
2
|
-
//# sourceMappingURL=chunk-KY36PVHK.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/relation-ordering.ts"],"sourcesContent":["import type { EntityID } from '@wovin/core/applog'\nimport type { RelationInfo } from './types'\n\n/**\n * Orders relations based on their 'after' field (sibling ordering).\n *\n * This is a pure function that takes relations and returns them in the correct order\n * based on their 'after' field, which specifies which sibling block each relation should come after.\n *\n * @param relations - Array of relations to order (all must have same childOf)\n * @returns Ordered array of relations\n * @throws Error if relations have different parents or if circular references are detected\n */\nexport function orderRelations(originalList: readonly RelationInfo[]): RelationInfo[] {\n\tif (!originalList?.length) return []\n\n\t// Filter out deleted relations and create mutable working copy\n\tconst list = originalList.filter(rel => !rel.isDeleted).slice()\n\n\t// Sort by ID to make it deterministic\n\tlist.sort((a, b) => (a.id < b.id) ? -1 : 1)\n\n\t// Validate all relations have the same parent\n\tconst uniqueParents = new Set(list.map(rel => rel.childOf))\n\tif (uniqueParents.size !== 1) {\n\t\tthrow new Error(\n\t\t\t`[orderRelations] All relations must have the same parent. ` +\n\t\t\t`Found ${uniqueParents.size} different parents: ${Array.from(uniqueParents).join(', ')}`\n\t\t)\n\t}\n\n\tconst orderedRelationIDs: EntityID[] = []\n\tconst relIDMap = new Map<EntityID, RelationInfo>()\n\tconst blockToRel = new Map<EntityID, RelationInfo>()\n\n\tfor (const rel of list) {\n\t\trelIDMap.set(rel.id, rel)\n\t\tblockToRel.set(rel.block, rel)\n\t}\n\n\tfunction placeRecursively(rel: RelationInfo, trace: EntityID[] = []) {\n\t\t// Detect circular references\n\t\tif (trace.includes(rel.id)) {\n\t\t\tconst cycle = [...trace, rel.id].join(' → ')\n\t\t\tthrow new Error(\n\t\t\t\t`[orderRelations] Circular reference detected in relation ordering: ${cycle}`\n\t\t\t)\n\t\t}\n\t\ttrace.push(rel.id)\n\n\t\tif (!rel.after) {\n\t\t\t// No 'after' means this goes at the top\n\t\t\torderedRelationIDs.unshift(rel.id)\n\t\t} else {\n\t\t\t// Find the relation we should be after\n\t\t\tconst relWeAreAfter = blockToRel.get(rel.after)\n\t\t\tif (!relWeAreAfter) {\n\t\t\t\t// Referenced block doesn't exist or isn't a child - add to bottom\n\t\t\t\torderedRelationIDs.push(rel.id)\n\t\t\t} else {\n\t\t\t\t// Recursively place the relation we're after (if not already placed)\n\t\t\t\tif (!orderedRelationIDs.includes(relWeAreAfter.id)) {\n\t\t\t\t\tplaceRecursively(relWeAreAfter, trace)\n\t\t\t\t}\n\n\t\t\t\tconst posOfNodeWeAreAfter = orderedRelationIDs.indexOf(relWeAreAfter.id)\n\t\t\t\tif (posOfNodeWeAreAfter === -1) {\n\t\t\t\t\t// This shouldn't happen, but if it does, add to end\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[orderRelations] Could not find position after placing relation ${relWeAreAfter.id}. ` +\n\t\t\t\t\t\t`Adding relation ${rel.id} to end.`\n\t\t\t\t\t)\n\t\t\t\t\torderedRelationIDs.push(rel.id)\n\t\t\t\t} else {\n\t\t\t\t\t// Insert right after the relation we're supposed to be after\n\t\t\t\t\torderedRelationIDs.splice(posOfNodeWeAreAfter + 1, 0, rel.id)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove from 'to be placed' list\n\t\tconst index = list.indexOf(rel)\n\t\tif (index !== -1) {\n\t\t\tlist.splice(index, 1)\n\t\t}\n\t}\n\n\t// Place all relations\n\twhile (list.length) {\n\t\tconst toPlace = list[0]\n\t\tplaceRecursively(toPlace)\n\t}\n\n\t// Build final ordered list\n\tconst sortedList: RelationInfo[] = []\n\tfor (const relID of orderedRelationIDs) {\n\t\tconst rel = relIDMap.get(relID)\n\t\tif (rel) {\n\t\t\tsortedList.push(rel)\n\t\t}\n\t}\n\n\treturn sortedList\n}\n"],"mappings":"AAaO,SAASA,EAAeC,EAAuD,CACrF,GAAI,CAACA,GAAc,OAAQ,MAAO,CAAC,EAGnC,IAAMC,EAAOD,EAAa,OAAOE,GAAO,CAACA,EAAI,SAAS,EAAE,MAAM,EAG9DD,EAAK,KAAK,CAACE,EAAGC,IAAOD,EAAE,GAAKC,EAAE,GAAM,GAAK,CAAC,EAG1C,IAAMC,EAAgB,IAAI,IAAIJ,EAAK,IAAIC,GAAOA,EAAI,OAAO,CAAC,EAC1D,GAAIG,EAAc,OAAS,EAC1B,MAAM,IAAI,MACT,mEACSA,EAAc,IAAI,uBAAuB,MAAM,KAAKA,CAAa,EAAE,KAAK,IAAI,CAAC,EACvF,EAGD,IAAMC,EAAiC,CAAC,EAClCC,EAAW,IAAI,IACfC,EAAa,IAAI,IAEvB,QAAWN,KAAOD,EACjBM,EAAS,IAAIL,EAAI,GAAIA,CAAG,EACxBM,EAAW,IAAIN,EAAI,MAAOA,CAAG,EAG9B,SAASO,EAAiBP,EAAmBQ,EAAoB,CAAC,EAAG,CAEpE,GAAIA,EAAM,SAASR,EAAI,EAAE,EAAG,CAC3B,IAAMS,EAAQ,CAAC,GAAGD,EAAOR,EAAI,EAAE,EAAE,KAAK,UAAK,EAC3C,MAAM,IAAI,MACT,sEAAsES,CAAK,EAC5E,CACD,CAGA,GAFAD,EAAM,KAAKR,EAAI,EAAE,EAEb,CAACA,EAAI,MAERI,EAAmB,QAAQJ,EAAI,EAAE,MAC3B,CAEN,IAAMU,EAAgBJ,EAAW,IAAIN,EAAI,KAAK,EAC9C,GAAI,CAACU,EAEJN,EAAmB,KAAKJ,EAAI,EAAE,MACxB,CAEDI,EAAmB,SAASM,EAAc,EAAE,GAChDH,EAAiBG,EAAeF,CAAK,EAGtC,IAAMG,EAAsBP,EAAmB,QAAQM,EAAc,EAAE,EACnEC,IAAwB,IAE3B,QAAQ,KACP,mEAAmED,EAAc,EAAE,qBAChEV,EAAI,EAAE,UAC1B,EACAI,EAAmB,KAAKJ,EAAI,EAAE,GAG9BI,EAAmB,OAAOO,EAAsB,EAAG,EAAGX,EAAI,EAAE,CAE9D,CACD,CAGA,IAAMY,EAAQb,EAAK,QAAQC,CAAG,EAC1BY,IAAU,IACbb,EAAK,OAAOa,EAAO,CAAC,CAEtB,CAGA,KAAOb,EAAK,QAAQ,CACnB,IAAMc,EAAUd,EAAK,CAAC,EACtBQ,EAAiBM,CAAO,CACzB,CAGA,IAAMC,EAA6B,CAAC,EACpC,QAAWC,KAASX,EAAoB,CACvC,IAAMJ,EAAMK,EAAS,IAAIU,CAAK,EAC1Bf,GACHc,EAAW,KAAKd,CAAG,CAErB,CAEA,OAAOc,CACR","names":["orderRelations","originalList","list","rel","a","b","uniqueParents","orderedRelationIDs","relIDMap","blockToRel","placeRecursively","trace","cycle","relWeAreAfter","posOfNodeWeAreAfter","index","toPlace","sortedList","relID"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{l as i,m as p,n as c,o}from"./chunk-POX3PUJK.min.js";function T(t){return{type:"doc",content:[{type:"paragraph",content:t.length?[{type:"text",text:t}]:void 0}]}}function u(t){return t==null?t:t.startsWith("{")?JSON.parse(t):T(t)}function s(t){return t?.content?.map(n=>n?.content).flatMap(n=>n?.map(e=>e?.text)).join("")}function f(t){return r(i,t)}function h(t){return r(p,t)}function C(t){return r(c,t)}function A(t){return r(o,t)}function r(t,n){let e=t.exec(n);return e&&e[2].toLocaleLowerCase()}function E(t,n,e){if(!t.exec(e))return null;let a=n.exec(g(e));return a&&a[2].toLocaleLowerCase()}function _(t,n=o){return n.global||(n=new RegExp(n.source,`${n.flags}g`)),Array.from(t.matchAll(n)).map(e=>e[0])}function g(t){return s(u(t))}export{T as a,u as b,s as c,f as d,h as e,C as f,A as g,r as h,E as i,_ as j,g as k};
|
|
2
|
-
//# sourceMappingURL=chunk-LDNVHZO7.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/note3-utils-nodeps.ts"],"sourcesContent":["import {\n\tRE_ANY_TAG_WITHCONTEXT,\n\tRE_AT_TAG_WITHCONTEXT,\n\tRE_HASH_TAG_WITHCONTEXT,\n\tRE_PLUS_TAG_WITHCONTEXT,\n} from './note3-regex-constants'\n\nexport type TiptapContent = Record<string, any>\n\n// HACK This module exposes utilities without pulling in the entire app\n\nexport function plaintextStringToTiptap(value: string) {\n\treturn {\n\t\ttype: 'doc',\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'paragraph',\n\t\t\t\tcontent: !value.length\n\t\t\t\t\t? undefined\n\t\t\t\t\t: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\ttext: value,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t},\n\t\t],\n\t}\n}\nexport function parseBlockContentValue(value: string) {\n\tif (value === null || value === undefined) {\n\t\treturn value\n\t}\n\tif (!value.startsWith('{')) {\n\t\t// HACK too lazy to do migrations yet\n\t\treturn plaintextStringToTiptap(value)\n\t}\n\treturn JSON.parse(value)\n}\n\nexport function tiptapToPlaintext(tiptap: TiptapContent) {\n\t// HACK: works for now, but...\n\treturn tiptap?.content?.map(c => c?.content).flatMap(c => c?.map(c => c?.text)).join('') as string | null\n}\n\nexport function plainContentMatchHashTag(content: string) {\n\treturn plainContentMatchTagGeneric(RE_HASH_TAG_WITHCONTEXT, content)\n}\nexport function plainContentMatchPlusTag(content: string) {\n\treturn plainContentMatchTagGeneric(RE_PLUS_TAG_WITHCONTEXT, content)\n}\nexport function plainContentMatchAtTag(content: string) {\n\treturn plainContentMatchTagGeneric(RE_AT_TAG_WITHCONTEXT, content)\n}\nexport function plainContentMatchAnyTag(content: string) {\n\treturn plainContentMatchTagGeneric(RE_ANY_TAG_WITHCONTEXT, content)\n}\nexport function plainContentMatchTagGeneric(regex: RegExp, content: string) {\n\tconst match = regex.exec(content)\n\treturn match && match[2].toLocaleLowerCase()\n}\nexport function rawContentMatchTag(regexCheap: RegExp, regex: RegExp, vl) {\n\tconst cheapMatch = regexCheap.exec(vl) // (i) cheap match before parsing tiptap content\n\tif (!cheapMatch) return null\n\tconst match = regex.exec(contentVlToPlaintext(vl)) // HACK: use materialized view\n\treturn match && match[2].toLocaleLowerCase()\n}\n\nexport function getAllTagsInText(text: string, regex = RE_ANY_TAG_WITHCONTEXT) {\n\tif (!regex.global) regex = new RegExp(regex.source, `${regex.flags}g`)\n\treturn Array.from(text.matchAll(regex)).map(match => match[0])\n}\nexport function contentVlToPlaintext(content: string) {\n\treturn tiptapToPlaintext(parseBlockContentValue(content))\n}\n"],"mappings":"4DAWO,SAASA,EAAwBC,EAAe,CACtD,MAAO,CACN,KAAM,MACN,QAAS,CACR,CACC,KAAM,YACN,QAAUA,EAAM,OAEb,CACD,CACC,KAAM,OACN,KAAMA,CACP,CACD,EANE,MAOJ,CACD,CACD,CACD,CACO,SAASC,EAAuBD,EAAe,CACrD,OAAIA,GAAU,KACNA,EAEHA,EAAM,WAAW,GAAG,EAIlB,KAAK,MAAMA,CAAK,EAFfD,EAAwBC,CAAK,CAGtC,CAEO,SAASE,EAAkBC,EAAuB,CAExD,OAAOA,GAAQ,SAAS,IAAIC,GAAKA,GAAG,OAAO,EAAE,QAAQA,GAAKA,GAAG,IAAIA,GAAKA,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,CACxF,CAEO,SAASC,EAAyBC,EAAiB,CACzD,OAAOC,EAA4BC,EAAyBF,CAAO,CACpE,CACO,SAASG,EAAyBH,EAAiB,CACzD,OAAOC,EAA4BG,EAAyBJ,CAAO,CACpE,CACO,SAASK,EAAuBL,EAAiB,CACvD,OAAOC,EAA4BK,EAAuBN,CAAO,CAClE,CACO,SAASO,EAAwBP,EAAiB,CACxD,OAAOC,EAA4BO,EAAwBR,CAAO,CACnE,CACO,SAASC,EAA4BQ,EAAeT,EAAiB,CAC3E,IAAMU,EAAQD,EAAM,KAAKT,CAAO,EAChC,OAAOU,GAASA,EAAM,CAAC,EAAE,kBAAkB,CAC5C,CACO,SAASC,EAAmBC,EAAoBH,EAAeI,EAAI,CAEzE,GAAI,CADeD,EAAW,KAAKC,CAAE,EACpB,OAAO,KACxB,IAAMH,EAAQD,EAAM,KAAKK,EAAqBD,CAAE,CAAC,EACjD,OAAOH,GAASA,EAAM,CAAC,EAAE,kBAAkB,CAC5C,CAEO,SAASK,EAAiBC,EAAcP,EAAQD,EAAwB,CAC9E,OAAKC,EAAM,SAAQA,EAAQ,IAAI,OAAOA,EAAM,OAAQ,GAAGA,EAAM,KAAK,GAAG,GAC9D,MAAM,KAAKO,EAAK,SAASP,CAAK,CAAC,EAAE,IAAIC,GAASA,EAAM,CAAC,CAAC,CAC9D,CACO,SAASI,EAAqBd,EAAiB,CACrD,OAAOJ,EAAkBD,EAAuBK,CAAO,CAAC,CACzD","names":["plaintextStringToTiptap","value","parseBlockContentValue","tiptapToPlaintext","tiptap","c","plainContentMatchHashTag","content","plainContentMatchTagGeneric","RE_HASH_TAG_WITHCONTEXT","plainContentMatchPlusTag","RE_PLUS_TAG_WITHCONTEXT","plainContentMatchAtTag","RE_AT_TAG_WITHCONTEXT","plainContentMatchAnyTag","RE_ANY_TAG_WITHCONTEXT","regex","match","rawContentMatchTag","regexCheap","vl","contentVlToPlaintext","getAllTagsInText","text"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var g=Object.create;var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);var l=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=h(a,d))||e.enumerable});return b};var n=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:!0}):c,b));export{m as a,n as b};
|
|
2
|
-
//# sourceMappingURL=chunk-MXMMU6NF.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as h,b}from"./chunk-MXMMU6NF.min.js";var E=h(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});var x=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},A=typeof window<"u"&&typeof window.document<"u",B=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,j=(typeof self>"u"?"undefined":x(self))==="object"&&self.constructor&&self.constructor.name==="DedicatedWorkerGlobalScope",T=typeof window<"u"&&window.name==="nodejs"||typeof navigator<"u"&&(navigator.userAgent.includes("Node.js")||navigator.userAgent.includes("jsdom")),W=typeof Deno<"u"&&typeof Deno.version<"u"&&typeof Deno.version.deno<"u";d.isBrowser=A;d.isWebWorker=j;d.isNode=B;d.isJsDom=T;d.isDeno=W});var S=h((U,L)=>{"use strict";L.exports=function(t,e){e||(e={}),typeof e=="function"&&(e={cmp:e});var r=typeof e.cycles=="boolean"?e.cycles:!1,s=e.cmp&&(function(l){return function(i){return function(a,o){var u={key:a,value:i[a]},f={key:o,value:i[o]};return l(u,f)}}})(e.cmp),n=[];return(function l(i){if(i&&i.toJSON&&typeof i.toJSON=="function"&&(i=i.toJSON()),i!==void 0){if(typeof i=="number")return isFinite(i)?""+i:"null";if(typeof i!="object")return JSON.stringify(i);var a,o;if(Array.isArray(i)){for(o="[",a=0;a<i.length;a++)a&&(o+=","),o+=l(i[a])||"null";return o+"]"}if(i===null)return"null";if(n.indexOf(i)!==-1){if(r)return JSON.stringify("__cycle__");throw new TypeError("Converting circular structure to JSON")}var u=n.push(i)-1,f=Object.keys(i).sort(s&&s(i));for(o="",a=0;a<f.length;a++){var m=f[a],p=l(i[m]);p&&(o&&(o+=","),o+=JSON.stringify(m)+":"+p)}return n.splice(u,1),"{"+o+"}"}})(t)}});var g=b(E(),1),D=b(S(),1),F=!1,G=!1;g.isNode&&(process?.env?.LOGGER_TIME_PREFIX&&(F=process?.env?.LOGGER_TIME_PREFIX==="true"),process?.env?.LOGGER_PERF_PREFIX&&(G=process?.env?.LOGGER_PERF_PREFIX==="true"));var k={prefix:void 0,time:F,delta:G,dimDebugOnServer:!0,printOriginOnServer:!0,serverInspectOptions:{},customFormattersOnServer:!0,printStackLinesOnServer:!1,dim:!0},O=[],P=class{sinceFirst=0;sinceLast=0;time=!1;delta=!1;constructor(t,e,r,s){Object.assign(this,{sinceFirst:t,sinceLast:e,time:r,delta:s})}toString(){let t=this.sinceFirst*.001,e=t.toFixed(t<5?2:1),r=this.sinceLast<1e3?`${this.sinceLast.toFixed(0)}`.padStart(5," "):`${`${(this.sinceLast*.001).toFixed(this.sinceLast<1e4?1:0)}`.padStart(4," ")}s`;return`[${[this.time?e:null,this.delta?r:null].filter(s=>s!=null).join(",")}]`}},I=class{constructor(t,e){Object.assign(this,{style:t,string:e})}},y=!1,w=class c{static ERROR=2;static WARN=4;static INFO=6;static LOG=6;static DEBUG=8;static VERBOSE=10;static firstLog=0;static lastLog=0;static setup(e=c.INFO,r={}){r=Object.assign({},k,r),e>10&&console.debug("setup logger",{config:r});let s=this.wrapLog(console.debug,{...r,dim:r.dimDebugOnServer}),n=(...o)=>{typeof window<"u"&&window?.FORCE_DISABLE_LOGLEVEL&&s(...o)};n.isDisabled=!0,n.isEnabled=!1;let l=this.wrapLog(console.groupCollapsed,r),i=(o,u)=>{function f(...p){let R=p[p.length-1];return R===n?R():(l(...p.slice(0,-1)),(async()=>{try{let v=R();return v instanceof Promise?await v:v}finally{console.groupEnd()}})())}let m=Object.assign(u.bind({}),{isEnabled:o,isDisabled:!o,group:f,force:u});return o?m:Object.assign(n.bind({}),{isEnabled:o,isDisabled:!o,group:f,force:m})},a=i(e>=c.ERROR,this.wrapLog(console.error,r));return{ERROR:(...o)=>(a(...o),new Error(o.map(u=>typeof u=="string"?u:(0,D.default)(u)).join(" "))),WARN:i(e>=c.WARN,this.wrapLog(console.warn,r)),LOG:i(e>=c.INFO,this.wrapLog(console.log,r)),DEBUG:i(e>=c.DEBUG,this.wrapLog(console.log,{...r,dim:r.dimDebugOnServer})),VERBOSE:i(e>=c.VERBOSE,this.wrapLog(console.debug,{...r,dim:r.dimDebugOnServer}))}}static wrapLog(e,r){if(g.isNode)return e.bind(console);{let s=[];if(r.time||r.delta){let n=g.isBrowser&&navigator.userAgent.includes("Chrome")?["",c.timeStr(!!r.time,!!r.delta)]:[];s.push(...n)}return r.prefix&&(y?s.push(new I("dim",r.prefix)):s.push(r.prefix)),e.bind(console,...s)}}static timeStr(e,r,s=0){if(!performance.now)return;let n=performance.now();c.firstLog||(c.firstLog=n,c.lastLog=n);let l=new P(n-c.firstLog,n-c.lastLog,e,r);return c.lastLog=n,s?l.toString():l}static getOriginFromStack(e){let r=!1;for(let s of e.split(`
|
|
2
|
-
`)){let n=s.match(/^\s+at\s+(.*)/);if(n){if(r)return n[1].trim().replace(__dirname,"");r=!0}}}};g.isBrowser&&(window.devtoolsFormatters=window.devtoolsFormatters??[],window.devtoolsFormatters.push({header:t=>{if(O&&O.length){for(let e of O)if(e.match(t))return["span",{},e.format(t)]}return null},hasBody:()=>!0},{header:t=>{if(!(t instanceof P))return null;y||(y=!0);let e=w.timeStr(t.time,t.delta);return["span",{style:"font-weight: light; color: grey"},e?.toString()]},hasBody:()=>!1},{header:t=>t instanceof I?(y||(y=!0),["span",{style:"font-weight: light; color: grey; "},t.string]):null,hasBody:()=>!1}));var{WARN:M,LOG:z,DEBUG:q,VERBOSE:H,ERROR:N}=w.setup(w.DEBUG);function K(t){let e;return()=>e||(e=t())}async function Q(t){let e=t.filter(r=>!!r).map(r=>typeof r=="function"?r():r);if(!e.length)throw N("[racePromises] no promise passed",t);return new Promise(async(r,s)=>{let n=!1,l=await Promise.allSettled(e.map(async i=>{let a=await i;n=!0,r(a)}));n||s(new AggregateError(l.map(i=>i.reason)))})}async function Y(t){let e=[];for await(let r of t)e.push(r);return e}async function*Z(t){let e=t.stream().getReader();try{for(;;){let{done:r,value:s}=await e.read();if(r)break;yield s}}finally{e.releaseLock()}}function J(t,e,r,s=[]){let n=e(t);if(!n)return t;let l=r(n);if(s.includes(l))throw N("[recurseWithLoopProtection] loop detected",{current:t,next:n,trace:s});return J(n,e,r,[...s,l])}export{K as a,Q as b,Y as c,Z as d,J as e};
|
|
3
|
-
//# sourceMappingURL=chunk-PA6WBVCJ.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/.pnpm/browser-or-node@2.1.1/node_modules/browser-or-node/lib/index.js","../../../../node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js","../../../../node_modules/.pnpm/besonders-logger@1.0.2/node_modules/besonders-logger/src/lib/logger.ts","../src/helpers.ts"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nvar isNode = typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\n\nvar isWebWorker = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) === \"object\" && self.constructor && self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\nvar isJsDom = typeof window !== \"undefined\" && window.name === \"nodejs\" || typeof navigator !== \"undefined\" && (navigator.userAgent.includes(\"Node.js\") || navigator.userAgent.includes(\"jsdom\"));\n\nvar isDeno = typeof Deno !== \"undefined\" && typeof Deno.version !== \"undefined\" && typeof Deno.version.deno !== \"undefined\";\n\nexports.isBrowser = isBrowser;\nexports.isWebWorker = isWebWorker;\nexports.isNode = isNode;\nexports.isJsDom = isJsDom;\nexports.isDeno = isDeno;","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","import { isBrowser, isNode } from 'browser-or-node'\nimport stringify from 'fast-json-stable-stringify'\n\n////////////\n// CONFIG //\n////////////\n\n//(i) disabled by default bc. the detection logic has disappeared after the refactor.\n//TODO: Find it and check if it works\nlet TIME_PREFIX_ENABLED = false\nlet PERFORMANCE_PREFIX_ENABLED = false\nif (isNode) {\n // console.debug('isNode checking', { process })\n if (process?.env?.LOGGER_TIME_PREFIX) TIME_PREFIX_ENABLED = process?.env?.LOGGER_TIME_PREFIX === 'true'\n if (process?.env?.LOGGER_PERF_PREFIX) PERFORMANCE_PREFIX_ENABLED = process?.env?.LOGGER_PERF_PREFIX === 'true'\n}\nexport let LOGGER_DEFAULT_CONFIG = {\n prefix: undefined as string | undefined,\n time: TIME_PREFIX_ENABLED,\n delta: PERFORMANCE_PREFIX_ENABLED,\n dimDebugOnServer: true,\n printOriginOnServer: true,\n serverInspectOptions: {},\n customFormattersOnServer: true,\n // Depth of stacktrace to show on server\n // - integer saying how many lines\n // - false to disable, true for all\n printStackLinesOnServer: false as boolean | number,\n dim: true,\n}\n\nexport type Config = Partial<typeof LOGGER_DEFAULT_CONFIG>\nexport type ConsoleFx = (...data: any[]) => void\nexport const StringFormatters = [\n // Format to string (Client console - currently not on server)\n // {\n // match: obj => obj instanceof Model,\n // format: m => {\n // const { displayName } = m\n // return `${m.constructor.name}#${m.ID}${displayName ? `{${displayName}}` : ''}`\n // },\n // },\n] as unknown as {\n match: (obj: any) => boolean\n format: (m: any) => string\n}[]\n\n// let applyCustomFormatters;\n// applyCustomFormatters = (value, config) => {\n// for (const formatter of StringFormatters) {\n// if (formatter.match(value)) return formatter.format(value);\n// }\n// if (!_.isString(value)) {\n// return util.inspect(value, config.inspectOptionsOnServer);\n// }\n// return value;\n// };\n\n/// ////////////////\n// RUNTIME STUFF //\n/// ////////////////\n\nexport class LoggerTime {\n sinceFirst = 0\n sinceLast = 0\n time = false\n delta = false\n constructor(sinceFirst: number, sinceLast: number, time: boolean, delta: boolean) {\n Object.assign(this, { sinceFirst, sinceLast, time, delta })\n }\n\n toString() {\n const sinceFirstNum = (this.sinceFirst * 0.001)\n const sinceFirst = sinceFirstNum.toFixed(sinceFirstNum < 5 ? 2 : 1) /* .padStart(3, ' ') */\n const sinceLast\n = this.sinceLast < 1000 // when >= 1s, format as seconds\n ? `${this.sinceLast.toFixed(0)}`.padStart(5, ' ')\n : `${`${(this.sinceLast * 0.001).toFixed(this.sinceLast < 10000 ? 1 : 0)}`.padStart(4, ' ')}s`\n return `[${[this.time ? sinceFirst : null, this.delta ? sinceLast : null]\n .filter(t => t != null)\n .join(',')}]`\n }\n}\n\nexport class Style {\n constructor(style: string, string: string) {\n Object.assign(this, { style, string })\n }\n}\nlet formattersEnabled = false // for tracking if chrome formatters are enabled (don't change manually)\n\nexport class Logger {\n static ERROR = 2 as const\n static WARN = 4 as const\n static INFO = 6 as const // alias for LOG\n static LOG = 6 as const\n static DEBUG = 8 as const\n static VERBOSE = 10 as const\n\n static firstLog = 0\n static lastLog = 0\n\n /**\n * This is a clever way to log without the extra check on each log line.\n * Use it like this:\n * ```\n * const { WARN, LOG, DEBUG, VERBOSE } = Logger.setup(Logger.INFO); // eslint-disable-line no-unused-vars\n * LOG('message', data);\n * DEBUG(this.collectionName, '...')\n * if (!VERBOSE.isDisabled) {\n * const verboseStuff = generateVerboseStuff(); // computationally intensive\n * VERBOSE('Here it is:', verboseStuff)\n * }\n * ```\n *\n * @ param {number} level See {@link LVs}\n * @ param {object} config see LOGGER_DEFAULT_CONFIG\n * @ typedef {Function & {isDisabled: boolean, isEnabled: boolean, ...}} LogFunc\n * @ returns {{LOG: LogFunc, VERBOSE: LogFunc, DEBUG: LogFunc, WARN: LogFunc, ERROR: LogFunc}}\n */\n static setup(level: 2 | 4 | 6 | 8 | 10 = Logger.INFO, config: Config = {}) {\n config = Object.assign({}, LOGGER_DEFAULT_CONFIG, config) // defaults(config, LOGGER_DEFAULT_CONFIG) // fyi this is like the reverse of Object.assign\n if (level > 10) console.debug('setup logger', { config }) // manual overide to level:11 to show this trace\n\n const debugLogForStub = this.wrapLog(console.debug, { ...config, dim: config.dimDebugOnServer })\n const stub = (...args: any[]) => {\n // @ts-expect-error hack to enable DEBUG logging EVERYWHERE\n if (typeof window !== 'undefined' && window?.FORCE_DISABLE_LOGLEVEL)\n debugLogForStub(...args)\n } // For disabled log-levels, we just return a stub function\n stub.isDisabled = true // this makes it possible to check, e.g. `DEBUG.isDisabled`\n stub.isEnabled = false // depending on syntactic preference\n const groupCollapsed = this.wrapLog(console.groupCollapsed, config)\n\n const addExtraFxs = (enabled: boolean, func: (...T: any) => void) =>/* : ((...T) => void & {isDisabled: boolean}) */ {\n // warning - weird TS hacks approaching:\n function group<T extends Func>(\n ...args: [...any[], T]\n ): ReturnType<T> extends Promise<any> ? Promise<ReturnType<T>> : ReturnType<T> {\n const functionToWrap = args[args.length - 1] as T\n\n if (functionToWrap as Func === stub)\n return functionToWrap() as ReturnType<T>\n\n groupCollapsed(...args.slice(0, -1)) // except last\n\n const asyncWrapper = async () => {\n try {\n const result = functionToWrap()\n return result instanceof Promise ? await result : result\n } finally {\n console.groupEnd()\n }\n }\n\n return asyncWrapper() as ReturnType<T> // Cast to bypass the Promise type inference\n }\n\n const realFunc = Object.assign(\n func.bind({}), // clone function - https://stackoverflow.com/a/6772648\n {\n isEnabled: enabled,\n isDisabled: !enabled,\n group,\n force: func,\n },\n )\n if (enabled) {\n return realFunc\n } else {\n return Object.assign(\n stub.bind({}), // clone stub function - https://stackoverflow.com/a/6772648\n {\n isEnabled: enabled,\n isDisabled: !enabled,\n group,\n force: realFunc,\n },\n )\n }\n }\n\n const ERRFX = addExtraFxs(level >= Logger.ERROR, this.wrapLog(console.error, config))\n const ERROR = (...params: any[]) => {\n ERRFX(...params)\n // return so we can log & throw in one go\n return new Error(params.map(param => {\n return typeof param === 'string' ? param : stringify(param) // stringify is fast & safe with circular references\n }).join(' '))\n }\n\n // console.debug(\"Logger init:\", config)\n return {\n ERROR,\n WARN: addExtraFxs(level >= Logger.WARN, this.wrapLog(console.warn, config)),\n LOG: addExtraFxs(level >= Logger.INFO, this.wrapLog(console.log, config)),\n DEBUG: addExtraFxs(level >= Logger.DEBUG, this.wrapLog(console.log, { ...config, dim: config.dimDebugOnServer })), // not using console.debug as that requires dev tools verbose to be enabled\n VERBOSE: addExtraFxs(level >= Logger.VERBOSE, this.wrapLog(console.debug, { ...config, dim: config.dimDebugOnServer })),\n }\n }\n\n static wrapLog(logFunc: ConsoleFx, config: Config) {\n if (!isNode) {\n // ℹ In browser we can only do some of the fancy things, because we cannot call console.log ourselves,\n // as that would pollute the stacktrace\n\n // ℹ Would be nice to get formtted links in devtools, but <a> tags are not allowed:\n // const stack = new Error().stack;\n // const origin = Logger.getOriginFromStack(stack);\n // const originFilename = origin.split('\\\\').pop().split('/').pop(); // eslint-disable-line\n // if (origin) fixedArgs.push({ link: originFilename, href: `http://localhost:63342/api/file/${origin}` });\n\n // on the client, we need to return the original log function, as otherwise the origin of the log is set to here\n // But luckily we can bind fixed parameters on the function:\n const fixedArgs = []\n // if the custom formatters are enabled, and we want performance logging - we add an instance of P as a static prefix\n if (config.time || config.delta) {\n const isChrome = isBrowser && navigator.userAgent.includes('Chrome')\n\n const p = isChrome\n ? ['', Logger.timeStr(!!config.time, !!config.delta)] // this is a placeholder that gets replaced by the custom formatter\n : [] // [{ get perfNiceTry () { return Logger.timeStr(,,true) } }] // this (of course) shows the time when you click the getter\n fixedArgs.push(...p) // if we start with a non-string, all strings are rendered with quotes :/\n }\n if (config.prefix) {\n if (formattersEnabled)\n fixedArgs.push(new Style('dim', config.prefix))\n else fixedArgs.push(config.prefix)\n }\n // console.log('logger-log', { config, fixedArgs })\n return logFunc.bind(console, ...fixedArgs)\n } else {\n // ℹ in nodejs we print the stack trace origin ourselves, so we can do a lot more things\n // TODO: re-import removed code - https://gitlab.com/onezoomin/ztax/ztax/-/commit/f6f9bde617cd9ae93d1bc4bc49a4b5275e4cbff2#b1d1e091ca27ae560becf7ae1b27a4d53d39c061\n return logFunc.bind(console)\n }\n }\n\n // static log(msg, logPerformance = true) {\n // const p = this.perf();\n // return logPerformance ? `${p} ${msg}` : msg;\n // }\n\n static timeStr(time: boolean, delta: boolean, returnAsString = 0): LoggerTime | string | undefined {\n if (!performance.now)\n return undefined // TODO: server? p = { now: require('performance-now') };\n const now = performance.now()\n if (!Logger.firstLog) {\n Logger.firstLog = now\n Logger.lastLog = now\n }\n const p = new LoggerTime(now - Logger.firstLog, now - Logger.lastLog, time, delta)\n Logger.lastLog = now\n return returnAsString ? p.toString() : p\n }\n\n // (for nodejs) ~ https://stackoverflow.com/a/47296370/1633985\n static getOriginFromStack(stack: any): string | undefined {\n let skippedFirst = false // the first one is Logger.js\n for (const line of stack.split('\\n')) {\n const matches = line.match(/^\\s+at\\s+(.*)/)\n if (matches) {\n if (skippedFirst) {\n // first line - current function\n // second line - caller (what we are looking for)\n return (\n matches[1]\n .trim() // Removes spaces\n // .replace(/^module /, '') // Removes 'module ' at beginning\n // .replace(/^at /, '') // Removes 'at ' at beginning\n // .replace(/^ \\(/, '') // Removes parentheseses around file\n // .replace(/\\)$/, '') // -||-\n .replace(__dirname, '') // Removes script folder path (if exists)\n )\n }\n skippedFirst = true\n }\n }\n }\n}\n\nif (isBrowser) { // isBrowser is not true for web workers\n // CLIENT or Worker //\n\n // @ts-expect-error window hack\n window.devtoolsFormatters = window.devtoolsFormatters ?? []\n // noinspection JSUnusedGlobalSymbols\n // @ts-expect-error window hack\n window.devtoolsFormatters.push(\n {\n // Custom formatters\n header: (obj: any) => {\n if (StringFormatters && StringFormatters.length) {\n for (const formatter of StringFormatters) {\n if (formatter.match(obj))\n return ['span', {}, formatter.format(obj)]\n }\n }\n return null\n },\n hasBody: () => true,\n },\n {\n // Performance object //\n // This is a sneaky way to show performance info withouth any extra calls when logging:\n // LOG(`...`)\n // it would work without this if we would have some way to intercept the call:\n // L.INFO('...') - a getter on L that adds the current time as prefix\n // LOG('...')() - returns the log function with all argumends bound\n // But instead we are adding a custom formatter that replaced the placeholder object of class P with the performance info\n header: (obj: any) => {\n if (!(obj instanceof LoggerTime))\n return null\n if (!formattersEnabled)\n formattersEnabled = true\n const p = Logger.timeStr(obj.time, obj.delta)\n return [\n 'span',\n { style: 'font-weight: light; color: grey' },\n p?.toString(),\n // ['a', { href: 'vscodium://file/home/manu/dev/tamera/bookr/imports/lib/utils/Logger.js' }, 'WOW'],\n ]\n },\n hasBody: () => false,\n },\n {\n // Style object\n header: (obj: { string: any }) => {\n if (!(obj instanceof Style))\n return null\n if (!formattersEnabled)\n formattersEnabled = true\n return ['span', { style: 'font-weight: light; color: grey; '/* font-style: italic; */ }, obj.string]\n },\n hasBody: () => false,\n },\n )\n}\nelse if (isNode) {\n // SERVER //\n // node stuff removed as it breaks/bloats webworker build\n}\n\nexport function logriniTest(): string {\n return 'logrini'\n}\n\ntype Func<T = any> = () => T\n","import { Logger } from 'besonders-logger'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.DEBUG) // eslint-disable-line unused-imports/no-unused-vars\n\nexport function lazyVal<R>(func: () => R): () => R {\n\tlet val: R\n\treturn () => {\n\t\tif (val) return val\n\t\treturn val = func()\n\t}\n}\n\n/** Promise.any but also allows to pass functions to call, or falsy values to skip */\nexport async function racePromises<R>(promises: Array<Promise<R> | (() => Promise<R>) | null | undefined | false>): Promise<R> {\n\tconst filtered = promises\n\t\t.filter(f => !!f)\n\t\t.map(maybeFunc => typeof maybeFunc === 'function' ? maybeFunc() : maybeFunc) as Array<Promise<R>>\n\tif (!filtered.length) throw ERROR(`[racePromises] no promise passed`, promises)\n\n\t// return await Promise.any(filtered) - swallows error messages\n\treturn new Promise(async (resolve, reject) => {\n\t\tlet resolved = false\n\t\tconst results = await Promise.allSettled(filtered.map(async (promise) => {\n\t\t\tconst result = await promise\n\t\t\t// if (predicate(result)) return result\n\t\t\tresolved = true\n\t\t\tresolve(result)\n\t\t}))\n\n\t\tif (!resolved) {\n\t\t\treject(\n\t\t\t\tnew AggregateError(\n\t\t\t\t\tresults.map(r => (r as PromiseRejectedResult).reason /* anyways all are rejected */),\n\t\t\t\t\t// `[racePromises] all errored:`,\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t})\n}\n\nexport async function asyncIterableToArray<R>(iterable: AsyncIterable<R>): Promise<R[]> {\n\tconst result: R[] = []\n\tfor await (const i of iterable) result.push(i)\n\treturn result\n}\nexport async function* blobToAsyncIterable(blob: Blob) {\n\tconst reader = blob.stream().getReader()\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read()\n\t\t\tif (done) break\n\t\t\tyield value\n\t\t}\n\t} finally {\n\t\treader.releaseLock()\n\t}\n}\nexport function recurseWithLoopProtection<T, ID>(\n\tcurrent: T,\n\tgetNext: (c: T) => T,\n\tgetID: (c: T) => ID,\n\ttrace: ID[] = [],\n) {\n\tconst next = getNext(current)\n\tif (!next) return current\n\tconst id = getID(next)\n\tif (trace.includes(id)) {\n\t\tthrow ERROR('[recurseWithLoopProtection] loop detected', { current, next, trace })\n\t}\n\treturn recurseWithLoopProtection(next, getNext, getID, [...trace, id])\n}\n"],"mappings":"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","names":["require_lib","__commonJSMin","exports","_typeof","obj","isBrowser","isNode","isWebWorker","isJsDom","isDeno","require_fast_json_stable_stringify","__commonJSMin","exports","module","data","opts","cycles","cmp","f","node","b","aobj","bobj","seen","stringify","i","out","seenIndex","keys","key","value","import_browser_or_node","import_fast_json_stable_stringify","TIME_PREFIX_ENABLED","PERFORMANCE_PREFIX_ENABLED","isNode","LOGGER_DEFAULT_CONFIG","StringFormatters","LoggerTime","sinceFirst","sinceLast","time","delta","sinceFirstNum","t","Style","style","string","formattersEnabled","Logger","_Logger","level","config","debugLogForStub","stub","args","groupCollapsed","addExtraFxs","enabled","func","group","functionToWrap","result","realFunc","ERRFX","params","param","stringify","logFunc","fixedArgs","p","isBrowser","returnAsString","now","stack","skippedFirst","line","matches","obj","formatter","WARN","LOG","DEBUG","VERBOSE","ERROR","g","lazyVal","func","val","racePromises","promises","filtered","f","maybeFunc","resolve","reject","resolved","results","promise","result","r","asyncIterableToArray","iterable","i","blobToAsyncIterable","blob","reader","done","value","recurseWithLoopProtection","current","getNext","getID","trace","next","id"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var s={content:[{type:"paragraph"}],type:"doc"},c=2,T=new RegExp("[a-zA-Z0-9_:+/-]"),r=new RegExp("[a-zA-Z]"),e=new RegExp(`(?=${T.source}*${r.source})${T.source}{${c},}`),E=new RegExp(`#(${e.source})`),t=new RegExp(`\\+(${e.source})`),p=new RegExp(`@(${e.source})`),R=new RegExp(`([#+@])(${e.source})`),o=/(^|\s|\()/,_=/(\b|$)/,n=new RegExp(`${o.source}#(${e.source})${_.source}`),x=new RegExp(`${o.source}\\+(${e.source})${_.source}`),A=new RegExp(`${o.source}@(${e.source})${_.source}`),$=new RegExp(`${o.source}([#+@])(${e.source})${_.source}`);export{s as a,c as b,T as c,r as d,e,E as f,t as g,p as h,R as i,o as j,_ as k,n as l,x as m,A as n,$ as o};
|
|
2
|
-
//# sourceMappingURL=chunk-POX3PUJK.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/note3-regex-constants.ts"],"sourcesContent":["// Regex constants for tag matching in note3\n// Extracted to separate file to avoid heavy dependencies\n\n// HACK regexp lints are too complex for 10pm\n/* eslint-disable regexp/no-empty-capturing-group */\n/* eslint-disable regexp/prefer-w */\n/* eslint-disable regexp/use-ignore-case */\nexport const TIPTAP_EMPTY = { content: [{ type: 'paragraph' }], type: 'doc' }\nexport const TAG_MIN_LENGTH = 2 // HACK: for sanity of query performance // ? but are short queries really not needed?\nexport const RE_TAG_BODY_CHAR = new RegExp(`[a-zA-Z0-9_:+/-]`)\nexport const RE_TAG_BODY_REQUIRED_CHAR = new RegExp(`[a-zA-Z]`)\nexport const RE_TAG_BODY = new RegExp(\n\t`(?=${RE_TAG_BODY_CHAR.source}*${RE_TAG_BODY_REQUIRED_CHAR.source})` // Lookahead to ensure at least one letter char in the tag name\n\t\t+ `${RE_TAG_BODY_CHAR.source}{${TAG_MIN_LENGTH},}`,\n)\nexport const RE_HASH_TAG_ONLY = new RegExp(`#(${RE_TAG_BODY.source})`)\nexport const RE_PLUS_TAG_ONLY = new RegExp(`\\\\+(${RE_TAG_BODY.source})`)\nexport const RE_AT_TAG_ONLY = new RegExp(`@(${RE_TAG_BODY.source})`)\nexport const RE_ANY_TAG_ONLY = new RegExp(`([#+@])(${RE_TAG_BODY.source})`)\n// context-aware matching\n\nexport const RE_TAG_CONTEXT_PRE = /(^|\\s|\\()/\nexport const RE_TAG_CONTEXT_POST = /(\\b|$)/ // (i) \\b also matches if the tag continues with e.g. /\nexport const RE_HASH_TAG_WITHCONTEXT = new RegExp(`${RE_TAG_CONTEXT_PRE.source}#(${RE_TAG_BODY.source})${RE_TAG_CONTEXT_POST.source}`)\nexport const RE_PLUS_TAG_WITHCONTEXT = new RegExp(`${RE_TAG_CONTEXT_PRE.source}\\\\+(${RE_TAG_BODY.source})${RE_TAG_CONTEXT_POST.source}`)\nexport const RE_AT_TAG_WITHCONTEXT = new RegExp(`${RE_TAG_CONTEXT_PRE.source}@(${RE_TAG_BODY.source})${RE_TAG_CONTEXT_POST.source}`)\nexport const RE_ANY_TAG_WITHCONTEXT = new RegExp(`${RE_TAG_CONTEXT_PRE.source}([#+@])(${RE_TAG_BODY.source})${RE_TAG_CONTEXT_POST.source}`)\n"],"mappings":"AAOO,IAAMA,EAAe,CAAE,QAAS,CAAC,CAAE,KAAM,WAAY,CAAC,EAAG,KAAM,KAAM,EAC/DC,EAAiB,EACjBC,EAAmB,IAAI,OAAO,kBAAkB,EAChDC,EAA4B,IAAI,OAAO,UAAU,EACjDC,EAAc,IAAI,OAC9B,MAAMF,EAAiB,MAAM,IAAIC,EAA0B,MAAM,IAC3DD,EAAiB,MAAM,IAAID,CAAc,IAChD,EACaI,EAAmB,IAAI,OAAO,KAAKD,EAAY,MAAM,GAAG,EACxDE,EAAmB,IAAI,OAAO,OAAOF,EAAY,MAAM,GAAG,EAC1DG,EAAiB,IAAI,OAAO,KAAKH,EAAY,MAAM,GAAG,EACtDI,EAAkB,IAAI,OAAO,WAAWJ,EAAY,MAAM,GAAG,EAG7DK,EAAqB,YACrBC,EAAsB,SACtBC,EAA0B,IAAI,OAAO,GAAGF,EAAmB,MAAM,KAAKL,EAAY,MAAM,IAAIM,EAAoB,MAAM,EAAE,EACxHE,EAA0B,IAAI,OAAO,GAAGH,EAAmB,MAAM,OAAOL,EAAY,MAAM,IAAIM,EAAoB,MAAM,EAAE,EAC1HG,EAAwB,IAAI,OAAO,GAAGJ,EAAmB,MAAM,KAAKL,EAAY,MAAM,IAAIM,EAAoB,MAAM,EAAE,EACtHI,EAAyB,IAAI,OAAO,GAAGL,EAAmB,MAAM,WAAWL,EAAY,MAAM,IAAIM,EAAoB,MAAM,EAAE","names":["TIPTAP_EMPTY","TAG_MIN_LENGTH","RE_TAG_BODY_CHAR","RE_TAG_BODY_REQUIRED_CHAR","RE_TAG_BODY","RE_HASH_TAG_ONLY","RE_PLUS_TAG_ONLY","RE_AT_TAG_ONLY","RE_ANY_TAG_ONLY","RE_TAG_CONTEXT_PRE","RE_TAG_CONTEXT_POST","RE_HASH_TAG_WITHCONTEXT","RE_PLUS_TAG_WITHCONTEXT","RE_AT_TAG_WITHCONTEXT","RE_ANY_TAG_WITHCONTEXT"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{A as Z,B as C,a as M,b as _,c as q,d as E,e as J,f as A,g as H,h as T,i as B,j as W,k as j,l as u,m as F,n as $,o as k,p as h,q as V,r as f,s as Q,t as X,u as Y,w as G,y as x,z as w}from"./chunk-7XDDTUI3.min.js";var{WARN:ue,LOG:we,DEBUG:de,VERBOSE:U,ERROR:Oe}=W.setup(W.INFO),pe=f("queryDivergencesByPrev",function(e){de(`queryDivergencesByPrev<${e.nameAndSizeUntracked}>`),e.filters.includes("lastWriteWins")&&ue("queryDivergencesByPrev on thread lastWriteWins",e);let t=h(()=>{let s=new Map,i=new Set;U("all applogs:",e.applogs);for(let n of e.applogs){let a;n.pv&&(a=n.pv&&s.get(n.pv.toString()),i.delete(n.pv.toString())),U("traversing log",{log:n,prevLogs:a,leafs:Array.from(i)}),s.set(n.cid,a?[...a,n]:[n]),i.add(n.cid)}return Array.from(i).map(n=>{let a=new C(u({caller:"DivergenceLeaf",thread:e,pattern:`leaf: ${n}`}),s.get(n),e.filters,!0);return{log:a.latestLog,thread:a}})},{name:u({caller:"queryDivergencesByPrev",thread:e})});return U.isDisabled||A(()=>U("[queryDivergencesByPrev] result:",T(t))),t},{equals:M.structural});var ee=class{constructor(r,e,t=null){this.logsOfThisNode=r,this.variables=e,this.prevNode=t,B(this,{threadOfTrail:q})}get record(){return this.variables}get threadOfTrail(){return this.prevNode?x([this.logsOfThisNode,this.prevNode.threadOfTrail]):this.logsOfThisNode}get trailLogs(){return this.threadOfTrail.applogs}},P=class{constructor(r){this.nodes=r,B(this,{threadOfAllTrails:q,size:q,isEmpty:q})}get size(){return this.records.length}get isEmpty(){return this.records.length===0}get untrackedSize(){return E(()=>this.records.length)}get records(){return h(()=>this.nodes.map(({variables:r})=>r),{name:"QueryResult.records"})}get leafNodeThread(){return x(h(()=>this.nodes.map(({logsOfThisNode:r})=>r),{name:"QueryResult.leafNodeThread"}))}get leafNodeLogSet(){return h(()=>this.nodes.map(({logsOfThisNode:r})=>r.applogs),{name:"QueryResult.leafNodeLogSet"})}get leafNodeLogs(){return h(()=>this.nodes.flatMap(({logsOfThisNode:r})=>r.applogs),{name:"QueryResult.leafNodeLogs"})}get threadOfAllTrails(){return x(h(()=>this.nodes.map(r=>r.threadOfTrail),{name:"QueryResult.threadOfAllTrails"}))}get thread(){return this.threadOfAllTrails}get allApplogs(){return this.threadOfAllTrails.applogs}},{WARN:Te,LOG:I,DEBUG:N,VERBOSE:o,ERROR:O}=W.setup(W.INFO,{prefix:"[q]"}),L=null,ce=f("lastWriteWins",function(e,{inverseToOnlyReturnFirstLogs:t,tolerateAlreadyFiltered:s}={}){if(o(`lastWriteWins${t?".inversed":""} < ${e.nameAndSizeUntracked} > initializing`),e.filters.includes("lastWriteWins")){if(s)return N("[lastWriteWins] already filtered, but tolerateAlreadyFiltered=true, so returning"),e;throw O("thread already filtered lastWriteWins:",e.filters,{name:e.name})}let i,n=Z(e,function(l,y){let p=Q(l),c,v=[],m=p?null:[];p?(i=new Map,c=l.init):c=l.added;let b;for(let g=t?0:c.length-1;t?g<c.length:g>=0;t?g++:g--){let d=c[g],z=d.en+"|"+d.at;if(b&&(t?b>d.ts:b<d.ts))throw O("lastWriteWins.mapper logs not sorted:",b,t?">":"<",d.ts,{log:d,i:g,newLogs:c,inverseToOnlyReturnFirstLogs:t});b=d.ts;let S=i.get(z);(!S||(t?S.ts>d.ts:S.ts<d.ts))&&(S&&!p&&m.push(S),v.push(d),i.set(z,d))}return Y(v),o.isDisabled||o(`lastWriteWins${t?".inversed":""}<${e.nameAndSizeUntracked}> mapped event`,p?{...Object.fromEntries(Object.entries(l).map(([g,d])=>[g,d?.length])),toAdd:v.length,toRemove:m}:{...l,toAdd:v,toRemove:m}),p?{init:v}:{added:v,removed:m}},{name:`lastWriteWins${t?".inversed":""}`,extraFilterName:"lastWriteWins"});return o.isDisabled||A(()=>{o(`lastWriteWins<${e.nameAndSizeUntracked}> filtered down to`,n.applogs.length)}),n},{equals:$,argsDebugName:r=>u({caller:"lastWriteWins",thread:r})}),fe=f("withoutDeleted",function(e){if(o.isEnabled&&o(`withoutDeleted<${e.nameAndSizeUntracked}>`),e.filters.includes("withoutDeleted"))throw O("thread already filtered withoutDeleted:",e.filters,{name:e.name});let t=w(e,{at:["isDeleted","relation/isDeleted","block/isDeleted"],vl:!0},{name:"isDeleted"});o.isEnabled&&o(`withoutDeleted<${e.nameAndSizeUntracked}> deletionLogs:`,E(function(){return[...t.applogs]}));let s=u({caller:"allDeletedEntities",thread:e}),i=V(function(){return t.map(a=>a.en)},{name:s});return o.isEnabled&&A(()=>{o(`withoutDeleted<${e.nameAndSizeUntracked}> deleted:`,[...i])}),w(e,{"!en":i},{name:"withoutDeleted",extraFilterName:"withoutDeleted"})},{equals:$}),D=f("query",function r(e,t,s={},i={}){le();let n=K(e);N(`query<${n.nameAndSizeUntracked}>:`,t);let a=Array.isArray(t)?t:[t],l;if(a.length===1)l=null;else{let c=a.slice(0,-1);l=r(n,c,s,i)}let y=a[a.length-1],p=te(n,l,y,i);return o.isDisabled||A(()=>o("query result:",T(p))),p},{equals:k,argsDebugName:(r,e,t)=>u({caller:"query",thread:r,args:t?{pattern:e,startVars:t}:e})}),te=f("queryStep",function(e,t,s,i={}){if(N(`queryStep<${e.nameAndSizeUntracked}> with`,t?.untrackedSize??"all","nodes, pattern:",s),!Object.entries(s).length)throw new Error("Pattern is empty");function n(l){let[y,p]=G(s,l?.variables??{});o("[queryStep.doQuery] patternWithoutVars: ",y);let c=w(e,y),v=R(p),m=h(function(){let g=c.map(d=>({log:d,vars:v(d)}));return o.isEnabled&&o("[queryStep.doQuery] step node:",l?.variables," =>",g,"from:",E(()=>c.applogs)),g.map(({log:d,vars:z})=>{let S=Object.assign({},l?.variables,z);return new ee(X.fromArray([d],u({caller:"QueryNode",thread:c,pattern:`${j(S)}@${j(y)}`})),S,l)})},{name:u({caller:"doQuery.mapNodes",thread:c,pattern:s})});return o.isEnabled&&A(()=>o("[queryStep.doQuery] resultNodes:",[...m])),i.debug&&I("[queryStep] step result:",E(()=>m.map(({variables:b,logsOfThisNode:g})=>({variables:b,thread:g})))),m}let a=h(function(){return N(`[queryStep] Running with ${t?.nodes?.length} input nodes:`),t?[...t.nodes.flatMap(n)]:[...n(null)]},{name:u({caller:"queryStep",thread:e,pattern:s})});return o.isEnabled&&A(()=>o("[queryStep] observableResultNodes:",[...a])),new P(a)},{equals:k,argsDebugName:(r,e,t)=>u({caller:"queryStep",thread:r,pattern:t})}),ge=f("queryNot",function(e,t,s,i={}){let n=t.nodes;N(`queryNot<${e.nameAndSizeUntracked}> from: ${n.length} nodes`);let a=Array.isArray(s)?s:[s];for(let l of a){if(!Object.entries(s).length)throw new Error("Pattern is empty");n=n.filter(function({variables:p}){let[c,v]=G(l,p??{});o("[queryNot] patternWithoutVars: ",c);let m=w(e,c);return o("[queryNot] step node:",p," =>",m.size,"applogs"),o.isDisabled||o("[queryNot] step node:",p," => empty?",E(()=>m.applogs)),i.debug&&I("[queryNot] node result:",p,"=>",m.applogs),m.isEmpty})}return new P(n)},{equals:k,argsDebugName:(r,e,t)=>u({caller:"queryNot",thread:r,pattern:t})}),ye=f("filterAndMap",function(e,t,s){N(`filterAndMap<${e.nameAndSizeUntracked}>`,t);let i=w(e,t);o.isEnabled&&(o("[filterAndMap] filtered:",i.untrackedSize),A(()=>o("[filterAndMap] filtered:",i.applogs)));let n=u({thread:e,pattern:t,caller:"filterAndMap"}),a=h(()=>se(i,s),{name:n});return o.isDisabled||A(()=>o("[filterAndMap] mapped:",a)),a},{equals:M.structural,argsDebugName:(r,e)=>u({caller:"filterAndMap",thread:r,pattern:e})}),me=f("queryAndMap",function(e,t,s,i={}){let n=K(e);N(`queryAndMap<${n.nameAndSizeUntracked}>`,{patternOrPatterns:t,variables:i,map:s});let a=u({thread:n,caller:"queryAndMap"}),l=D(n,t);o("[queryAndMap] filtered count:",l.untrackedSize);let y=h(()=>ie(l,s),{name:a});return o.isDisabled||A(()=>o("[queryAndMap] result:",T(y))),y},{equals:M.structural,argsDebugName:(r,e)=>u({caller:"queryAndMap",thread:r,pattern:e})}),he=f("queryEntity",function(e,t,s,i){N(`queryEntity<${e.nameAndSizeUntracked}>`,s,t);let n=w(e,{en:s,at:ae(t,i)});return o("queryEntity applogs:",n.applogs),q(()=>n.isEmpty?null:Object.fromEntries(n.map(({at:a,vl:l})=>[a.slice(t.length+1),l])))},{equals:F,argsDebugName:(r,e,t)=>u({caller:"queryEntity",thread:r,args:{name:e,entityID:t}})}),ve=f("agentsOfThread",function(e){N(`agentsOfThread<${e.nameAndSizeUntracked}>`);let t=_.map(),s=J(n=>{for(let a of Q(n)?n.init:n.added){let l=t.get(a.ag)??0;t.set(a.ag,l+1)}for(let a of!Q(n)&&n.removed||[]){let l=t.get(a.ag);if(!l||l<1)throw O("[agentsOfThread] number is now negative",{log:a,event:n,mapped:t,prev:l});t.set(a.ag,l-1)}I(`agentsOfThread<${e.nameAndSizeUntracked}> processed event`,{event:n,mapped:t})});s({init:e.applogs});let i=e.subscribe(s);return H(t,i),t}),re=f("entityOverlap",function(e,t){return I(`entityOverlap<${e.nameAndSizeUntracked}, ${t.nameAndSizeUntracked}>`),q(()=>{let s=new Set(e.map(n=>n.en)),i=new Set(t.map(n=>n.en));return[...s].filter(n=>i.has(n))})});var Ae=f("entityOverlapCount",function(e,t){return q(()=>re(e,t).get().length)}),ne=f("querySingle",function(e,t,s={}){let i=D(e,t,s);return q(()=>{if(i.isEmpty)return null;if(i.size>1)throw O("[querySingle] got",i.size,"results:",i);let n=i.nodes[0].logsOfThisNode;if(n.size!=1)throw O("[querySingle] single result, but got",n.size,"logs:",n.applogs);return n.applogs[0]})},{equals:M.structural,argsDebugName:(r,e)=>u({caller:"querySingle",thread:r,pattern:e})}),be=f("querySingleAndMap",function(e,t,s,i={}){let n=ne(e,t,i);return q(()=>{let a=n.get();if(a)return typeof s=="string"?a[s]:R(s)(a)})},{equals:M.structural,argsDebugName:(r,e)=>u({caller:"querySingleAndMap",thread:r,pattern:e})}),se=function(e,t){return typeof t=="function"?e.map(t):typeof t=="string"?e.map(s=>s[t]):e.map(R(t))},ie=function(e,t){return typeof t=="function"?e.records.map(t):typeof t=="string"?e.nodes.map(s=>{if(!Object.hasOwn(s.record,t)){if(s.logsOfThisNode.size!==1)throw O(`not sure what to map (it's not a var and a result node log count of ${s.logsOfThisNode.size})`);return s.logsOfThisNode.firstLog[t]}return s.record[t]}):e.nodes.map(s=>R(t)(e))};function R(r){return e=>Object.entries(r).reduce((t,[s,i])=>(t[i]=e[s],t),{})}function ae(r,e){return e.map(t=>oe(r,t))}function oe(r,e){return`${r}/${e}`}function K(r,e){return Array.isArray(r)?C.fromArray(r,e||`threadFromArray[${r.length}]`,!0):r}function le(){if(L!=null&&performance.now()>=L)throw new qe(L)}var qe=class extends Error{constructor(r){super(r)}};function Ne(r,e,t,s){let i=function(a,l,y){if(y.includes(a))throw new Error(`[mapAndRecurseKids.loop] Circular reference detected: ${a}`);if(y.length>42)throw new Error("[mapAndRecurseKids.maxDepth] Maximum recursion depth (42) exceeded");let p=t({blockID:a,relID:l}),v=D(r,[{en:"?kidRelID",at:"relation/childOf",vl:a},{en:"?kidRelID",at:"relation/block",vl:"?kidID"}]).records.map(function({kidID:b,kidRelID:g}){return i(b,g,[...y,a])});return s(p,v)};return i(e,null,[])}function tt(r,e){let t=[];return Ne(r,e,({blockID:s,relID:i})=>{let n=D(r,[{en:s}]);if(t.push(...n.threadOfAllTrails.applogs),i){let a=D(r,[{en:i}]);t.push(...a.threadOfAllTrails.applogs)}},(s,i)=>{}),t}export{Ne as a,tt as b};
|
|
2
|
-
//# sourceMappingURL=chunk-WZPDIIA2.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../@wovin/core/src/query/divergences.ts","../../../@wovin/core/src/query/matchers.ts","../../../@wovin/core/src/query/types.ts","../../../@wovin/core/src/query/basic.ts","../src/applog-collection.ts"],"sourcesContent":["import { Logger } from 'besonders-logger'\nimport { autorun, comparer, toJS } from 'mobx'\nimport stringify from 'safe-stable-stringify'\nimport { Applog, CidString } from '../applog/datom-types'\nimport { computedFnDeepCompare, createDebugName, observableArrayMap } from '../mobx/mobx-utils'\nimport { Thread } from '../thread/basic'\nimport { ThreadInMemory } from '../thread/writeable'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO) // eslint-disable-line no-unused-vars\n\nexport interface DivergenceLeaf {\n\tlog: Applog\n\tthread: Thread\n}\n\nexport const queryDivergencesByPrev = computedFnDeepCompare('queryDivergencesByPrev', function queryConflictingByPrev(\n\tsourceThread: Thread,\n) {\n\tDEBUG(`queryDivergencesByPrev<${sourceThread.nameAndSizeUntracked}>`)\n\tif (sourceThread.filters.includes('lastWriteWins')) WARN(`queryDivergencesByPrev on thread lastWriteWins`, sourceThread)\n\n\tconst divergences = observableArrayMap(() => {\n\t\tconst logsForNode = new Map<CidString, Applog[]>()\n\t\tconst leafs = new Set<CidString>()\n\t\tVERBOSE('all applogs:', sourceThread.applogs)\n\t\tfor (const log of sourceThread.applogs) {\n\t\t\tlet prevLogs\n\t\t\tif (log.pv) {\n\t\t\t\tprevLogs = log.pv && logsForNode.get(log.pv.toString())\n\t\t\t\tleafs.delete(log.pv.toString())\n\t\t\t}\n\t\t\tVERBOSE('traversing log', { log, prevLogs, leafs: Array.from(leafs) })\n\t\t\tlogsForNode.set(log.cid, prevLogs ? [...prevLogs, log] : [log])\n\t\t\tleafs.add(log.cid)\n\t\t}\n\t\treturn Array.from(leafs).map(leafID => {\n\t\t\t// TODO use MappedThread?\n\t\t\tconst thread = new ThreadInMemory(\n\t\t\t\tcreateDebugName({\n\t\t\t\t\tcaller: 'DivergenceLeaf',\n\t\t\t\t\tthread: sourceThread,\n\t\t\t\t\tpattern: `leaf: ${leafID}`,\n\t\t\t\t}),\n\t\t\t\tlogsForNode.get(leafID),\n\t\t\t\tsourceThread.filters,\n\t\t\t\ttrue,\n\t\t\t\t// TODO: sourceThread,\n\t\t\t)\n\t\t\treturn ({ log: thread.latestLog, thread })\n\t\t})\n\t}, { name: createDebugName({ caller: 'queryDivergencesByPrev', thread: sourceThread }) })\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[queryDivergencesByPrev] result:`, toJS(divergences)))\n\treturn divergences\n}, { equals: comparer.structural })\n\n// export const queryDivergencesOfEnAtByPrev = computedFnDeepCompare('queryDivergencesOfEnAtByPrev', function queryDivergencesOfEnAtByPrev(\n// \tsourceThread: Thread,\n// ) {\n// \tDEBUG(`queryDivergencesOfEnAtByPrev<${sourceThread.nameAndSizeUntracked}>`)\n// \tif (sourceThread.filters.includes('lastWriteWins')) WARN(`queryDivergencesOfEnAtByPrevFon thread lastWriteWins`, sourceThread)\n\n// \tconst divergences = observableArrayMap(() => {\n// \t\tconst logsForNode = new Map<CidString, Applog[]>()\n// \t\tconst leafs = new Map<string, Set<CidString>>() // [en,at]\n// \t\tVERBOSE('all applogs:', sourceThread.applogs)\n// \t\tfor (const log of sourceThread.applogs) {\n// \t\t\tconst key = stringify([log.en, log.at])\n// \t\t\tif (!leafs.has(key)) leafs.set(key, new Set())\n// \t\t\tlet prevLogs\n// \t\t\tif (log.pv) {\n// \t\t\t\tprevLogs = log.pv && logsForNode.get(log.pv.toString())\n// \t\t\t\tleafs.get(key).delete(log.pv.toString())\n// \t\t\t}\n// \t\t\tVERBOSE('traversing log', { key, log, prevLogs, leafs: Array.from(leafs) })\n// \t\t\tlogsForNode.set(log.cid, prevLogs ? [...prevLogs, log] : [log])\n// \t\t\tleafs.get(key).add(log.cid)\n// \t\t}\n// \t\treturn Array.from(leafs.entries()).map(([_enAt, leafs]) => {\n// \t\t\t// TODO use MappedThread?\n// \t\t\tconst thread = new ThreadInMemory(\n// \t\t\t\tcreateDebugName({\n// \t\t\t\t\tcaller: 'DivergenceLeaf',\n// \t\t\t\t\tthread: sourceThread,\n// \t\t\t\t\tpattern: `leaf: ${leafID}`,\n// \t\t\t\t}),\n// \t\t\t\tlogsForNode.get(leafID),\n// \t\t\t\tsourceThread.filters,\n// \t\t\t\ttrue,\n// \t\t\t\t// TODO: sourceThread,\n// \t\t\t)\n// \t\t\treturn ({ log: thread.latestLog, thread })\n// \t\t})\n// \t}, { name: createDebugName({ caller: 'queryDivergencesOfEnAtByPrev', thread: sourceThread }) })\n// \tVERBOSE.isDisabled || autorun(() => VERBOSE(`[queryDivergencesOfEnAtByPrev] result:`, toJS(divergences)))\n// \treturn divergences\n// }, { equals: comparer.structural })\n","import { DatomPart } from '../applog/datom-types'\n\nexport function includes(str: string) {\n\treturn (vl: DatomPart) => vl?.includes?.(str)\n}\nexport function includedIn(arr: string[]) {\n\treturn (vl: DatomPart) => arr?.includes?.(vl)\n}\n","import { computed, makeObservable, untracked } from 'mobx'\nimport { joinThreads } from '../applog/applog-helpers'\nimport { SearchContext } from '../applog/datom-types'\nimport { observableArrayMap } from '../mobx/mobx-utils'\nimport type { Thread } from '../thread/basic'\nimport { ReadonlyObservableArray } from '../types/typescript-utils'\n\nexport class QueryNode {\n\tconstructor(\n\t\treadonly logsOfThisNode: Thread,\n\t\treadonly variables: SearchContext,\n\t\treadonly prevNode: QueryNode | null = null,\n\t) {\n\t\tmakeObservable(this, {\n\t\t\tthreadOfTrail: 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 threadOfTrail() {\n\t\tif (!this.prevNode) return this.logsOfThisNode\n\t\treturn joinThreads([\n\t\t\tthis.logsOfThisNode,\n\t\t\tthis.prevNode.threadOfTrail,\n\t\t])\n\t}\n\tget trailLogs() {\n\t\treturn this.threadOfTrail.applogs\n\t}\n}\n/**\n * The result of a query (-step)\n */\nexport class QueryResult {\n\tconstructor(\n\t\tpublic nodes: ReadonlyObservableArray<QueryNode>,\n\t) {\n\t\tmakeObservable(this, {\n\t\t\tthreadOfAllTrails: 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 observableArrayMap(() => this.nodes.map(({ variables }) => variables), { name: 'QueryResult.records' })\n\t}\n\tget leafNodeThread() {\n\t\treturn joinThreads(\n\t\t\tobservableArrayMap(() => this.nodes.map(({ logsOfThisNode: thread }) => thread), { name: 'QueryResult.leafNodeThread' }),\n\t\t)\n\t}\n\tget leafNodeLogSet() {\n\t\treturn observableArrayMap(() => this.nodes.map(({ logsOfThisNode: thread }) => thread.applogs), { name: 'QueryResult.leafNodeLogSet' })\n\t}\n\tget leafNodeLogs() {\n\t\treturn observableArrayMap(() => this.nodes.flatMap(({ logsOfThisNode: thread }) => thread.applogs), {\n\t\t\tname: 'QueryResult.leafNodeLogs',\n\t\t})\n\t}\n\t// get trailThreads() {\n\t// \treturn observableArrayMap(() => this.nodes.map(({ trailThread }) => trailThread))\n\t// }\n\tget threadOfAllTrails() {\n\t\treturn joinThreads(observableArrayMap(() => this.nodes.map(node => node.threadOfTrail), { name: 'QueryResult.threadOfAllTrails' }))\n\t}\n\tget thread() {\n\t\treturn this.threadOfAllTrails // alias\n\t}\n\tget allApplogs() {\n\t\treturn this.threadOfAllTrails.applogs // mostly for easy logging\n\t}\n}\n","import { AgentHash, Applog, ApplogValue, DatalogQueryPattern, EntityID, SearchContext, ValueOrMatcher } from '../applog/datom-types'\n\nimport { Logger } from 'besonders-logger'\nimport { action, autorun, comparer, computed, makeObservable, observable, onBecomeObserved, toJS, untracked } from 'mobx'\n\nimport { isEmpty } from 'lodash-es'\nimport stringify from 'safe-stable-stringify'\nimport { resolveOrRemoveVariables, sortApplogsByTs } from '../applog/applog-utils'\nimport {\n\tapplogThreadComparer,\n\tcomputedFnDeepCompare,\n\tcomputedStructuralComparer,\n\tcreateDebugName,\n\tobservableArrayMap,\n\tobservableSetMap,\n\tqueryNodesComparer,\n} from '../mobx/mobx-utils'\nimport { isInitEvent, StaticThread, Thread, ThreadEvent } from '../thread/basic'\nimport { rollingFilter, rollingMapper, ThreadOnlyCurrent } from '../thread/filters'\nimport { MappedThread } from '../thread/mapped'\nimport { ThreadInMemory } from '../thread/writeable'\nimport { QueryNode, QueryResult } from './types'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO, { prefix: '[q]' }) // eslint-disable-line no-unused-vars\n\nlet globalQueryTimeoutTime = null\n\n// util.inspect.defaultOptions.depth = 5;\n\n// export interface QueryExecutorArguments {\n// db: Thread\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\n/////////////\n// QUERIES //\n/////////////\n\n/**\n * Keep only the latest logs for each en&at (= last write wins)\n */\nexport const lastWriteWins = computedFnDeepCompare('lastWriteWins', function lastWriteWins(\n\tthread: Thread,\n\t{ inverseToOnlyReturnFirstLogs, tolerateAlreadyFiltered }: {\n\t\tinverseToOnlyReturnFirstLogs?: boolean\n\t\ttolerateAlreadyFiltered?: boolean\n\t} = {},\n): ThreadOnlyCurrent {\n\tVERBOSE(`lastWriteWins${inverseToOnlyReturnFirstLogs ? '.inversed' : ''} < ${thread.nameAndSizeUntracked} > initializing`)\n\t// if (thread.name.includes('lastWriteWins')) WARN(`thread already contains lastWriteWins:`, thread.name)\n\tif (thread.filters.includes('lastWriteWins')) {\n\t\tif (tolerateAlreadyFiltered) {\n\t\t\tDEBUG(`[lastWriteWins] already filtered, but tolerateAlreadyFiltered=true, so returning`)\n\t\t\treturn thread as ThreadOnlyCurrent\n\t\t}\n\t\tthrow ERROR(`thread already filtered lastWriteWins:`, thread.filters, { name: thread.name })\n\t}\n\n\tlet rollingMap: Map<string, Applog>\n\tconst mappedThread = rollingMapper(thread, function lastWriteWinsMapper(event, sourceThread) {\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 = log.en + '|' + log.at // stringify([log.en, log.at]) - less efficient\n\n\t\t\t// TODO: use isoDateStrCompare ?\n\t\t\tif (tsCheck && (inverseToOnlyReturnFirstLogs ? tsCheck > log.ts : tsCheck < log.ts)) {\n\t\t\t\tthrow ERROR(`lastWriteWins.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`lastWriteWins${inverseToOnlyReturnFirstLogs ? '.inversed' : ''}<${thread.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: `lastWriteWins${inverseToOnlyReturnFirstLogs ? '.inversed' : ''}`, extraFilterName: 'lastWriteWins' })\n\tVERBOSE.isDisabled || autorun(() => {\n\t\tVERBOSE(`lastWriteWins<${thread.nameAndSizeUntracked}> filtered down to`, mappedThread.applogs.length) // using applogs.length, as size might not change, but we still want a log\n\t})\n\treturn mappedThread as ThreadOnlyCurrent\n\t// const filtered = observableArrayMap(() => {\n\t// VERBOSE(`lastWriteWins thread deps:`, getDependencyTree(thread.applogs), thread)\n\t// thread.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(`[lastWriteWins] mapped:`, mapped.size)\n\t// return Array.from(mapped.values())\n\t// }, { name: obsArrMapName })\n\t// VERBOSE(`lastWriteWins deps of filteredArr:`, getDependencyTree(filtered))\n\t// return new MappedThread(thread, filtered, `${thread.name} | lastWriteWins`)\n}, { equals: applogThreadComparer, argsDebugName: (thread) => createDebugName({ caller: 'lastWriteWins', thread }) })\n\n/**\n * Remove all applogs for entities that have an applog: { at: `isDeleted`, val: true }\n * ! WARNING: If not based on lastWriteWins, it will not respect un-deletions yet (isDeleted: false)\n */\nexport const withoutDeleted = computedFnDeepCompare('withoutDeleted', function withoutDeleted(\n\tthread: Thread,\n) {\n\tif (VERBOSE.isEnabled) VERBOSE(`withoutDeleted<${thread.nameAndSizeUntracked}>`)\n\t// if (thread.name.includes('withoutDeleted')) WARN(`thread already contains withoutDeleted:`, withoutDeleted)\n\tif (thread.filters.includes('withoutDeleted')) {\n\t\tthrow ERROR(`thread already filtered withoutDeleted:`, thread.filters, { name: thread.name })\n\t}\n\n\tconst deletionLogs = rollingFilter(\n\t\tthread, // TODO: handle un-delection\n\t\t{ at: ['isDeleted', 'relation/isDeleted', 'block/isDeleted'], vl: true },\n\t\t{ name: 'isDeleted' },\n\t)\n\tVERBOSE.isEnabled &&\n\t\tVERBOSE(\n\t\t\t`withoutDeleted<${thread.nameAndSizeUntracked}> deletionLogs:`,\n\t\t\tuntracked(function expensiveAssUntrackedVerboseFx() {\n\t\t\t\treturn [...deletionLogs.applogs]\n\t\t\t}),\n\t\t)\n\tconst obsArrMapName = createDebugName({ caller: 'allDeletedEntities', thread })\n\tconst deleted = observableSetMap(function observableSetMapForDeleted() {\n\t\treturn deletionLogs.map(log => log.en)\n\t}, { name: obsArrMapName })\n\t// if (VERBOSE.isEnabled) VERBOSE(`withoutDeleted<${db.nameAndSize}> deleted:`, untracked(() => [...deleted]))\n\tif (VERBOSE.isEnabled) {\n\t\tautorun(() => {\n\t\t\tVERBOSE(`withoutDeleted<${thread.nameAndSizeUntracked}> deleted:`, [...deleted])\n\t\t})\n\t}\n\n\treturn rollingFilter(thread, { '!en': deleted }, { name: `withoutDeleted`, extraFilterName: 'withoutDeleted' })\n}, { equals: applogThreadComparer })\n\n// export const filterStatic = computedFnDeepCompare('filterStatic', function filterStatic(\n// thread: Thread,\n// pattern: DatalogQueryPattern,\n// opts: { name?: string } = {},\n// ) {\n// VERBOSE(`filterStatic<${thread.nameAndSizeUntracked}>:`, pattern)\n// if (!Object.entries(pattern).length) throw new Error(`Pattern is empty`)\n// //TODO: deprecaate in favor of rollingFilter ?\n// return new Thread(thread, thread.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// }), `${thread.name} | ${opts.name || `filterStatic{${stringify(pattern)}}`}`)\n// }, { equals: applogThreadComparer })\n\nexport const query = computedFnDeepCompare('query', function query(\n\tthreadOrLogs: Thread | Applog[],\n\tpatternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[],\n\tstartVariables: SearchContext = {},\n\topts: { debug?: boolean } = {},\n) {\n\tthrowOnTimeout()\n\tconst thread = threadFromMaybeArray(threadOrLogs)\n\tDEBUG(`query<${thread.nameAndSizeUntracked}>:`, patternOrPatterns)\n\tconst patterns = (Array.isArray(patternOrPatterns) ? patternOrPatterns : [patternOrPatterns]) as DatalogQueryPattern[]\n\n\tlet nodes: QueryResult | null\n\tif (patterns.length === 1) {\n\t\t// We are the first step, so start from scratch\n\t\tnodes = null\n\t} else {\n\t\t// Run the previous step(s) first (= recursion)\n\t\tconst pattersExceptLast = patterns.slice(0, -1)\n\t\t// recursively call this function to have partial queries cacheable\n\t\tnodes = query(thread, pattersExceptLast, startVariables, opts)\n\t}\n\tconst lastPattern = patterns[patterns.length - 1]\n\tconst stepResult = queryStep(thread, nodes, lastPattern, opts)\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`query result:`, toJS(stepResult)))\n\treturn stepResult\n}, {\n\tequals: queryNodesComparer,\n\targsDebugName: (thread, pattern, startVars) =>\n\t\tcreateDebugName({ caller: 'query', thread, args: startVars ? { pattern, startVars } : pattern }),\n})\n\nexport const queryStep = computedFnDeepCompare('queryStep', function queryStep(\n\tthread: Thread,\n\tnodeSet: QueryResult | null,\n\tpattern: DatalogQueryPattern,\n\t// variables: SearchContext = {},\n\topts: { debug?: boolean } = {},\n) {\n\tDEBUG(`queryStep<${thread.nameAndSizeUntracked}> with`, nodeSet?.untrackedSize ?? 'all', 'nodes, pattern:', pattern)\n\tif (!Object.entries(pattern).length) throw new Error(`Pattern is empty`)\n\n\tfunction doQuery(node: QueryNode | null) {\n\t\tconst [patternWithResolvedVars, variablesToFill] = resolveOrRemoveVariables(pattern, node?.variables ?? {})\n\t\tVERBOSE(`[queryStep.doQuery] patternWithoutVars: `, patternWithResolvedVars)\n\t\tconst applogsMatchingStatic = rollingFilter(thread, patternWithResolvedVars)\n\t\tconst varMapper = createObjMapper(variablesToFill)\n\t\tconst resultNodes = observableArrayMap(function queryStepDoStep() {\n\t\t\tconst newVarsAndTheirLog = applogsMatchingStatic.map(log => ({ log, vars: varMapper(log) }))\n\t\t\tif (VERBOSE.isEnabled) {\n\t\t\t\tVERBOSE(\n\t\t\t\t\t`[queryStep.doQuery] step node:`,\n\t\t\t\t\tnode?.variables,\n\t\t\t\t\t' =>',\n\t\t\t\t\tnewVarsAndTheirLog,\n\t\t\t\t\t'from:',\n\t\t\t\t\tuntracked(() => applogsMatchingStatic.applogs),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn newVarsAndTheirLog.map(({ log, vars }) => {\n\t\t\t\tconst nodeVars = Object.assign({}, node?.variables, vars)\n\t\t\t\treturn new QueryNode(\n\t\t\t\t\t// TODO: ? Make single result nodes reactive using MappedThread - only really relevant if a result had multiple logs (or different paths would lead to the same result?)\n\t\t\t\t\t// ThreadInMemory.fromArray(\n\t\t\t\t\tStaticThread.fromArray(\n\t\t\t\t\t\t[log],\n\t\t\t\t\t\tcreateDebugName({\n\t\t\t\t\t\t\tcaller: 'QueryNode',\n\t\t\t\t\t\t\tthread: applogsMatchingStatic,\n\t\t\t\t\t\t\tpattern: `${stringify(nodeVars)}@${stringify(patternWithResolvedVars)}`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t// true,\n\t\t\t\t\t),\n\t\t\t\t\tnodeVars,\n\t\t\t\t\tnode,\n\t\t\t\t)\n\t\t\t})\n\t\t}, { name: createDebugName({ caller: 'doQuery.mapNodes', thread: applogsMatchingStatic, pattern }) })\n\t\tif (VERBOSE.isEnabled) autorun(() => VERBOSE(`[queryStep.doQuery] resultNodes:`, [...resultNodes]))\n\t\tif (opts.debug) {\n\t\t\tLOG(\n\t\t\t\t`[queryStep] step result:`,\n\t\t\t\tuntracked(() =>\n\t\t\t\t\tresultNodes.map(({ variables, logsOfThisNode: thread }) => ({\n\t\t\t\t\t\tvariables,\n\t\t\t\t\t\tthread, // : /* util.inspect( */ thread.applogs, /* , { showHidden: false, depth: null }) */\n\t\t\t\t\t}))\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\treturn resultNodes\n\t}\n\tconst observableResultNodes = observableArrayMap(\n\t\tfunction queryStepGetResults() {\n\t\t\tDEBUG(`[queryStep] Running with ${nodeSet?.nodes?.length} input nodes:`)\n\t\t\tif (!nodeSet) {\n\t\t\t\t// first query step\n\t\t\t\treturn [...doQuery(null)] // HACK copy array bc otherwise the observableArrayMap doesn't seem to depend on the contents somehow\n\t\t\t} else {\n\t\t\t\t// subsequent query steps\n\t\t\t\treturn [...nodeSet.nodes.flatMap(doQuery)]\n\t\t\t}\n\t\t},\n\t\t{ name: createDebugName({ caller: 'queryStep', thread, pattern }) },\n\t)\n\n\tif (VERBOSE.isEnabled) autorun(() => VERBOSE(`[queryStep] observableResultNodes:`, [...observableResultNodes]))\n\treturn new QueryResult(observableResultNodes)\n}, { equals: queryNodesComparer, argsDebugName: (thread, _nodes, pattern) => createDebugName({ caller: 'queryStep', thread, pattern }) })\n\nexport const queryNot = computedFnDeepCompare('queryNot', function queryNot( // TODO: update old-style query\n\tthread: Thread,\n\tstartNodes: QueryResult,\n\tpatternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[],\n\topts: { debug?: boolean } = {},\n) {\n\tlet nodes = startNodes.nodes\n\tDEBUG(`queryNot<${thread.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(function innerNodeFilter({ /* applogs, */ variables }) {\n\t\t\tconst [patternWithResolvedVars, _variablesToFill] = resolveOrRemoveVariables(pattern, variables ?? {})\n\t\t\tVERBOSE(`[queryNot] patternWithoutVars: `, patternWithResolvedVars)\n\t\t\tconst newApplogs = rollingFilter(thread, 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 QueryResult(nodes)\n}, { equals: queryNodesComparer, argsDebugName: (thread, nodes, pattern) => createDebugName({ caller: 'queryNot', thread, pattern }) })\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('filterAndMap', function filterAndMap<R>(\n\tthread: Thread,\n\tpattern: DatalogQueryPattern,\n\tmapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string }>) | ((applog: Applog) => R),\n) {\n\tDEBUG(`filterAndMap<${thread.nameAndSizeUntracked}>`, pattern)\n\n\tconst filtered = rollingFilter(thread, pattern)\n\tif (VERBOSE.isEnabled) {\n\t\tVERBOSE(`[filterAndMap] filtered:`, filtered.untrackedSize)\n\t\tautorun(() => VERBOSE(`[filterAndMap] filtered:`, filtered.applogs))\n\t}\n\n\tconst name = createDebugName({ thread, pattern, caller: 'filterAndMap' })\n\tconst mapped = observableArrayMap<ApplogValue | any>(() => mapThreadWith(filtered, mapper), { name }) // TODO typing:? Record<string, ApplogValue> ?\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[filterAndMap] mapped:`, mapped))\n\treturn mapped\n}, { equals: comparer.structural, argsDebugName: (thread, pattern) => createDebugName({ caller: 'filterAndMap', thread, pattern }) })\n\nexport const queryAndMap = computedFnDeepCompare('queryAndMap', function queryAndMap<R>(\n\tthreadOrLogs: Thread | Applog[],\n\tpatternOrPatterns: Parameters<typeof query>[1],\n\tmapDef: string | (Partial<{ [key in keyof SearchContext]: string }>) | ((record: SearchContext) => R),\n\tvariables: SearchContext = {},\n) {\n\tconst thread = threadFromMaybeArray(threadOrLogs)\n\tDEBUG(`queryAndMap<${thread.nameAndSizeUntracked}>`, { patternOrPatterns, variables, map: mapDef })\n\tconst debugName = createDebugName({ thread, caller: 'queryAndMap' })\n\n\tconst queryResult = query(thread, patternOrPatterns)\n\tVERBOSE(`[queryAndMap] filtered count:`, queryResult.untrackedSize)\n\tconst mapped = observableArrayMap<ApplogValue | any>(\n\t\t() => mapQueryResultWith(queryResult, mapDef),\n\t\t{ name: debugName },\n\t)\n\tVERBOSE.isDisabled || autorun(() => VERBOSE(`[queryAndMap] result:`, toJS(mapped)))\n\treturn mapped\n}, { equals: comparer.structural, argsDebugName: (thread, pattern) => createDebugName({ caller: 'queryAndMap', thread, pattern }) })\n\nexport const queryEntity = computedFnDeepCompare('queryEntity', function queryEntity(\n\tthread: Thread,\n\tname: string,\n\tentityID: EntityID,\n\tattributes: readonly string[],\n) {\n\tDEBUG(`queryEntity<${thread.nameAndSizeUntracked}>`, entityID, name)\n\n\tconst filtered = rollingFilter(thread, { 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}, {\n\tequals: computedStructuralComparer,\n\targsDebugName: (thread, name, entityID) => createDebugName({ caller: 'queryEntity', thread, args: { name, entityID } }),\n})\n\nexport const agentsOfThread = computedFnDeepCompare('agentsOfThread', function agentsOfThread(\n\tthread: Thread,\n) {\n\tDEBUG(`agentsOfThread<${thread.nameAndSizeUntracked}>`)\n\n\tconst mapped = observable.map<string, number>()\n\tconst onEvent = action((event: ThreadEvent) => {\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(`[agentsOfThread] number is now negative`, { log, event, mapped, prev })\n\t\t\tmapped.set(log.ag, prev - 1)\n\t\t}\n\t\tLOG(`agentsOfThread<${thread.nameAndSizeUntracked}> processed event`, { event, mapped })\n\t})\n\n\tonEvent({ init: thread.applogs })\n\tconst unsubscribe = thread.subscribe(onEvent)\n\tonBecomeObserved(mapped, unsubscribe)\n\n\treturn mapped\n})\n\nexport const entityOverlap = computedFnDeepCompare('entityOverlap', function entityOverlapCount(\n\tthreadA: Thread,\n\tthreadB: Thread,\n) {\n\tLOG(`entityOverlap<${threadA.nameAndSizeUntracked}, ${threadB.nameAndSizeUntracked}>`)\n\n\treturn computed(() => {\n\t\tconst entitiesA = new Set(threadA.map(log => log.en))\n\t\tconst entitiesB = new Set(threadB.map(log => log.en))\n\t\treturn [...entitiesA].filter(en => entitiesB.has(en))\n\t})\n})\n\nexport const entityOverlapMap = function entityOverlapMap(\n\tthreadA: Thread,\n\tthreadB: Thread,\n\tthreadAName = 'incoming',\n\tthreadBName = 'current',\n) {\n\tconst useInferredVM = (en, thread: Thread) => en\n\tconst overlapping = entityOverlap(threadA, threadB).get()\n\tconst mapped = new Map()\n\toverlapping.forEach(eachEntityID => (\n\t\tmapped.set(eachEntityID, {\n\t\t\t[threadAName]: useInferredVM(eachEntityID, threadA),\n\t\t\t[threadBName]: useInferredVM(eachEntityID, threadB),\n\t\t})\n\t))\n}\n\nexport const entityOverlapCount = computedFnDeepCompare(\n\t'entityOverlapCount',\n\tfunction entityOverlapCount(threadA: Thread, threadB: Thread) {\n\t\treturn computed(() => entityOverlap(threadA, threadB).get().length)\n\t},\n)\nexport const querySingle = computedFnDeepCompare('querySingle', function querySingle(\n\tthreadOrLogs: Thread | Applog[],\n\tpatternOrPatterns: Parameters<typeof query>[1],\n\tvariables: SearchContext = {},\n) {\n\tconst result = query(threadOrLogs, patternOrPatterns, variables)\n\treturn computed(() => {\n\t\tif (result.isEmpty) return null\n\t\tif (result.size > 1) throw ERROR(`[querySingle] got`, result.size, `results:`, result)\n\t\tconst logsOfThisNode = result.nodes[0].logsOfThisNode\n\t\tif (logsOfThisNode.size != 1) throw ERROR(`[querySingle] single result, but got`, logsOfThisNode.size, `logs:`, logsOfThisNode.applogs)\n\t\treturn logsOfThisNode.applogs[0]\n\t})\n}, {\n\tequals: comparer.structural,\n\targsDebugName: (thread, pattern) => createDebugName({ caller: 'querySingle', thread, pattern }),\n})\n\nexport const querySingleAndMap = computedFnDeepCompare(\n\t'querySingleAndMap',\n\tfunction querySingleAndMap<MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string }>))>(\n\t\tthreadOrLogs: Thread | Applog[],\n\t\tpatternOrPatterns: Parameters<typeof query>[1],\n\t\tmapDef: MAP,\n\t\tvariables: SearchContext = {},\n\t) {\n\t\tconst resultBox = querySingle(threadOrLogs, patternOrPatterns, variables)\n\t\treturn computed<ApplogValue | { [key in keyof MAP]: ApplogValue } | null>(() => {\n\t\t\tconst log = resultBox.get()\n\t\t\tif (!log) return undefined\n\t\t\tif (typeof mapDef === 'string') {\n\t\t\t\treturn log[mapDef as string]\n\t\t\t} else {\n\t\t\t\treturn createObjMapper(mapDef)(log)\n\t\t\t}\n\t\t})\n\t},\n\t{\n\t\tequals: comparer.structural,\n\t\targsDebugName: (thread, pattern) => createDebugName({ caller: 'querySingleAndMap', thread, pattern }),\n\t},\n)\n/////////////\n// HELPERS //\n/////////////\n\nexport const mapThreadWith = function filterAndMapGetterFx<R>(\n\tthread: Thread,\n\tmapDef: (keyof Applog) | (Partial<{ [key in keyof Applog]: string }>) | ((applog: Applog) => R),\n) {\n\tif (typeof mapDef === 'function') {\n\t\treturn thread.map(mapDef)\n\t} else if (typeof mapDef === 'string') {\n\t\treturn thread.map(log => log[mapDef])\n\t} else {\n\t\treturn thread.map(createObjMapper(mapDef))\n\t}\n}\nexport const mapQueryResultWith = function filterAndMapGetterFx<R>(\n\tqueryResult: QueryResult,\n\tmapDef: string | (Partial<{ [key in keyof SearchContext]: string }>) | ((record: SearchContext) => R),\n) {\n\tif (typeof mapDef === 'function') {\n\t\treturn queryResult.records.map(mapDef)\n\t} else if (typeof mapDef === 'string') {\n\t\treturn queryResult.nodes.map((node) => {\n\t\t\tif (!Object.hasOwn(node.record, mapDef)) {\n\t\t\t\tif (node.logsOfThisNode.size !== 1) {\n\t\t\t\t\tthrow ERROR(`not sure what to map (it's not a var and a result node log count of ${node.logsOfThisNode.size})`)\n\t\t\t\t}\n\t\t\t\treturn node.logsOfThisNode.firstLog[mapDef]\n\t\t\t}\n\t\t\treturn node.record[mapDef]\n\t\t})\n\t} else {\n\t\treturn queryResult.nodes.map((node) => {\n\t\t\treturn createObjMapper(mapDef)(queryResult)\n\t\t})\n\t}\n}\n/**\n * Map Applog to custom named record, e.g.:\n * { en: 'movieID', vl: 'movieName' }\n * will map the applog to { movieID: .., movieName: .. }\n */\nexport function createObjMapper<FROM extends string, TO extends string>(applogFieldMap: Partial<{ [key in FROM]: TO }>) {\n\treturn (applog: { [key in FROM]: any }) => {\n\t\treturn Object.entries(applogFieldMap).reduce((acc, [key, value]) => {\n\t\t\tacc[value as TO] = applog[key]\n\t\t\treturn acc\n\t\t}, {} as Partial<{ [key in TO]: ApplogValue }>)\n\t}\n}\n\nexport function startsWith(str: string) {\n\treturn (value) => value.startsWith(str)\n}\n\nexport function prefixAttrs(prefix: string, attrs: readonly string[]) {\n\treturn attrs.map(at => prefixAt(prefix, at))\n}\nexport function prefixAt(prefix: string, attr: string) {\n\treturn `${prefix}/${attr}`\n}\nexport function threadFromMaybeArray(threadOrLogs: Thread | Applog[], name?: string) {\n\tif (!Array.isArray(threadOrLogs)) {\n\t\treturn threadOrLogs\n\t}\n\treturn ThreadInMemory.fromArray(threadOrLogs, name || `threadFromArray[${threadOrLogs.length}]`, true)\n}\nexport function withTimeout<R>(timeoutMilliseconds: number, func: () => R) {\n\tif (globalQueryTimeoutTime) throw ERROR(`Nested timeout not supported`)\n\tglobalQueryTimeoutTime = performance.now() + timeoutMilliseconds\n\tconst result = func()\n\n\tglobalQueryTimeoutTime = null\n\treturn result\n}\nexport function throwOnTimeout() {\n\tif (globalQueryTimeoutTime == null) return\n\tif (performance.now() >= globalQueryTimeoutTime) {\n\t\tthrow new QueryTimeoutError(globalQueryTimeoutTime)\n\t}\n}\nclass QueryTimeoutError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t}\n}\n","import type { Applog, EntityID } from '@wovin/core/applog'\nimport type { ThreadOnlyCurrentNoDeleted } from '@wovin/core/thread'\nimport { query } from '@wovin/core/query'\n\n/**\n * Generic recursive traversal utility for note tree structures.\n *\n * Traverses a note and all its descendants, applying a mapping function to each\n * node and combining results using a join function.\n *\n * @param thread - Pre-filtered thread (from `lastWriteWins(withoutDeleted(raw))`)\n * @param blockID - The root block ID to start traversal from\n * @param mapKid - Function to apply to each block/relation pair\n * @param joinResults - Function to combine parent result with children results\n * @returns The combined result of the traversal\n *\n * @throws Error if circular references are detected or depth exceeds 42 levels\n *\n * @internal Used by collectSubtreeApplogs; not typically used directly\n */\nexport function mapAndRecurseKids<R = void>(\n\tthread: ThreadOnlyCurrentNoDeleted,\n\tblockID: EntityID,\n\tmapKid: (kid: { relID: EntityID | null, blockID: EntityID }) => R,\n\tjoinResults: (blockResult: R, kidResults: R[]) => R,\n) {\n\tconst recurse = function recurseOuter(blockID: EntityID, relID: EntityID | null, trace: EntityID[]) {\n\t\t// Recursion checks\n\t\tif (trace.includes(blockID)) {\n\t\t\tthrow new Error(`[mapAndRecurseKids.loop] Circular reference detected: ${blockID}`)\n\t\t}\n\t\tif (trace.length > 42) {\n\t\t\tthrow new Error(`[mapAndRecurseKids.maxDepth] Maximum recursion depth (42) exceeded`)\n\t\t}\n\n\t\t// Process this block\n\t\tconst result = mapKid({ blockID, relID })\n\n\t\t// Process the children\n\t\tconst kidsQuery = query(thread, [\n\t\t\t{ en: '?kidRelID', at: 'relation/childOf', vl: blockID },\n\t\t\t{ en: '?kidRelID', at: 'relation/block', vl: '?kidID' },\n\t\t])\n\t\tconst kidResults = kidsQuery.records.map(function kidsQueryRecordsMapper({ kidID, kidRelID }) {\n\t\t\treturn recurse(kidID as EntityID, kidRelID as EntityID, [...trace, blockID])\n\t\t})\n\n\t\treturn joinResults(result, kidResults)\n\t}\n\treturn recurse(blockID, null, [])\n}\n\n/**\n * Collects all applogs for a note and its entire subtree (descendants).\n *\n * This is a non-reactive utility version for use in non-UI contexts (CLI, scripts, MCP server).\n * It returns a flat array of all applogs found during tree traversal.\n *\n * **Important**: The thread parameter MUST be pre-filtered using `lastWriteWins(withoutDeleted(thread))`\n * to ensure correct tree traversal. Unfiltered threads may:\n * - Include deleted blocks/relations (incorrect tree structure)\n * - Include multiple versions of the same applog (redundant)\n *\n * @param thread - Pre-filtered thread (must be result of `lastWriteWins(withoutDeleted(raw))`)\n * @param blockID - The root block ID to collect from\n * @returns Flat array of all applogs from the block and its descendants\n *\n * @example\n * ```typescript\n * import { collectSubtreeApplogs } from '@note3/utils'\n * import { lastWriteWins, withoutDeleted } from '@wovin/core'\n *\n * const filteredThread = withoutDeleted(lastWriteWins(rawThread))\n * const applogs = collectSubtreeApplogs(filteredThread, blockID)\n * console.log(`Collected ${applogs.length} applogs`)\n * ```\n */\nexport function collectSubtreeApplogs(\n\tthread: ThreadOnlyCurrentNoDeleted,\n\tblockID: EntityID,\n): Applog[] {\n\tconst collectedApplogs: Applog[] = []\n\n\tmapAndRecurseKids(thread, blockID, ({ blockID, relID }) => {\n\t\t// Collect ALL applogs for this block entity\n\t\tconst blockQuery = query(thread, [{ en: blockID }])\n\t\tcollectedApplogs.push(...blockQuery.threadOfAllTrails.applogs)\n\n\t\t// Collect ALL applogs for the relation entity (if present)\n\t\tif (relID) {\n\t\t\tconst relQuery = query(thread, [{ en: relID }])\n\t\t\tcollectedApplogs.push(...relQuery.threadOfAllTrails.applogs)\n\t\t}\n\n\t\treturn undefined\n\t}, (blockResult, kidResults) => {\n\t\treturn undefined\n\t})\n\n\treturn collectedApplogs\n}\n"],"mappings":"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","names":["WARN","LOG","DEBUG","VERBOSE","ERROR","g","queryDivergencesByPrev","computedFnDeepCompare","sourceThread","divergences","observableArrayMap","logsForNode","leafs","log","prevLogs","leafID","thread","ThreadInMemory","createDebugName","autorun","toJS","comparer","QueryNode","logsOfThisNode","variables","prevNode","makeObservable","computed","joinThreads","QueryResult","nodes","untracked","observableArrayMap","thread","node","WARN","LOG","DEBUG","VERBOSE","ERROR","g","globalQueryTimeoutTime","lastWriteWins","computedFnDeepCompare","inverseToOnlyReturnFirstLogs","tolerateAlreadyFiltered","rollingMap","mappedThread","rollingMapper","event","sourceThread","isInitial","isInitEvent","newLogs","toAdd","toRemove","tsCheck","i","log","key","existing","sortApplogsByTs","k","v","autorun","applogThreadComparer","createDebugName","withoutDeleted","deletionLogs","rollingFilter2","obsArrMapName","deleted","observableSetMap","query","threadOrLogs","patternOrPatterns","startVariables","opts","throwOnTimeout","threadFromMaybeArray","patterns","pattersExceptLast","lastPattern","stepResult","queryStep","toJS","queryNodesComparer","pattern","startVars","nodeSet","doQuery","patternWithResolvedVars","variablesToFill","resolveOrRemoveVariables","applogsMatchingStatic","varMapper","createObjMapper","resultNodes","newVarsAndTheirLog","vars","nodeVars","StaticThread","wrapper_default","observableResultNodes","_nodes","queryNot","startNodes","_variablesToFill","newApplogs","filterAndMap","mapper","filtered","name","mapped","mapThreadWith","comparer","queryAndMap","mapDef","debugName","queryResult","mapQueryResultWith","queryEntity","entityID","attributes","prefixAttrs","at","vl","computedStructuralComparer","agentsOfThread","observable","onEvent","action","prev","unsubscribe","onBecomeObserved","entityOverlap","threadA","threadB","entitiesA","entitiesB","en","entityOverlapCount","computedFnDeepCompare","threadA","threadB","computed","entityOverlap","querySingle","threadOrLogs","patternOrPatterns","variables","result","query","ERROR","logsOfThisNode","comparer","thread","pattern","createDebugName","querySingleAndMap","mapDef","resultBox","log","createObjMapper","mapThreadWith","mapQueryResultWith","queryResult","node","applogFieldMap","applog","acc","key","value","prefixAttrs","prefix","attrs","at","prefixAt","attr","threadFromMaybeArray","threadOrLogs","name","ThreadInMemory","throwOnTimeout","globalQueryTimeoutTime","QueryTimeoutError","message","mapAndRecurseKids","thread","blockID","mapKid","joinResults","recurse","relID","trace","result","kidResults","query","kidID","kidRelID","collectSubtreeApplogs","collectedApplogs","blockQuery","relQuery","blockResult"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as f}from"./chunk-KY36PVHK.min.js";import{b as r,c as s}from"./chunk-LDNVHZO7.min.js";function I(o,e){return!(e.en&&o.en!==e.en||e.at&&o.at!==e.at||e.vl!==void 0&&o.vl!==e.vl)}function y(o,e){return o.applogs.filter(t=>I(t,{at:"relation/childOf",vl:e})).map(t=>t.en)}function g(o,e){let n=new Set,t=new Set;for(let l of o.applogs)l.at==="relation/block"&&l.vl===e&&n.add(l.en);for(let l of n)for(let i of o.applogs)i.en===l&&i.at==="relation/childOf"&&i.vl!==null&&t.add(i.vl);return Array.from(t)}function c(o,e){let n={id:e};for(let t of o.applogs)if(t.en===e)switch(t.at){case"relation/block":n.block=t.vl;break;case"relation/childOf":n.childOf=t.vl;break;case"relation/after":n.after=t.vl;break;case"relation/isExpanded":n.isExpanded=t.vl;break;case"relation/isMirror":n.isMirror=t.vl;break;case"relation/isReply":n.isReply=t.vl;break;case"isDeleted":n.isDeleted=t.vl;break}return!n.block||n.childOf===void 0?null:n}function E(o,e){let t=o.applogs.filter(l=>l.at==="relation/childOf"&&l.vl===e).map(l=>l.en).map(l=>c(o,l)).filter(l=>l!==null);return f(t)}function b(o,e){return o.applogs.filter(t=>t.at==="relation/block"&&t.vl===e).map(t=>t.en).map(t=>c(o,t)).filter(t=>t!==null)}function u(o,e){let n=o.applogs.find(t=>t.en===e&&t.at==="block/content");return n?r(n.vl):null}function k(o,e){let n=u(o,e);return n?s(n):null}function v(o){let e=new Set;for(let i of o.applogs)i.at==="block/content"&&e.add(i.en);let n=new Set,t=new Map;for(let i of o.applogs)i.at==="relation/block"&&t.set(i.vl,i.en);for(let[i,p]of t)for(let a of o.applogs)if(a.en===p&&a.at==="relation/childOf"){a.vl!==null&&n.add(i);break}return Array.from(e).filter(i=>!n.has(i)).sort()}export{y as a,g as b,E as c,b as d,u as e,k as f,v as g};
|
|
2
|
-
//# sourceMappingURL=chunk-XL6QVLYO.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/queries.ts"],"sourcesContent":["import type { Applog, EntityID } from '@wovin/core/applog'\nimport type { Thread } from '@wovin/core/thread'\nimport type { RelationInfo } from './types'\nimport { parseBlockContentValue, tiptapToPlaintext, type TiptapContent } from './note3-utils-nodeps'\nimport { orderRelations } from './relation-ordering'\n\n/**\n * Helper to match applog against a pattern\n */\nfunction matchesPattern(applog: Applog, pattern: { en?: EntityID; at?: string; vl?: any }): boolean {\n\tif (pattern.en && applog.en !== pattern.en) return false\n\tif (pattern.at && applog.at !== pattern.at) return false\n\tif (pattern.vl !== undefined && applog.vl !== pattern.vl) return false\n\treturn true\n}\n\n/**\n * Get all child block IDs for a given parent block\n * @param thread - The thread to query\n * @param parentId - The parent block's entity ID\n * @returns Array of child block IDs (unordered - use getChildRelations for ordered)\n */\nexport function getChildIDs(thread: Thread, parentId: EntityID): EntityID[] {\n\tconst applogs = thread.applogs.filter(log =>\n\t\tmatchesPattern(log, { at: 'relation/childOf', vl: parentId })\n\t)\n\treturn applogs.map(log => log.en)\n}\n\n/**\n * Get all parent block IDs for a given block\n * @param thread - The thread to query\n * @param blockId - The block's entity ID\n * @returns Array of parent block IDs (usually just one, but can be multiple)\n */\nexport function getParentIDs(thread: Thread, blockId: EntityID): EntityID[] {\n\t// Find all relations where this block is the child\n\tconst relationIDs = new Set<EntityID>()\n\tconst parentIDs = new Set<EntityID>()\n\n\tfor (const log of thread.applogs) {\n\t\t// Find relations that reference this block\n\t\tif (log.at === 'relation/block' && log.vl === blockId) {\n\t\t\trelationIDs.add(log.en)\n\t\t}\n\t}\n\n\t// For each relation, find its parent\n\tfor (const relID of relationIDs) {\n\t\tfor (const log of thread.applogs) {\n\t\t\tif (log.en === relID && log.at === 'relation/childOf' && log.vl !== null) {\n\t\t\t\tparentIDs.add(log.vl as EntityID)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Array.from(parentIDs)\n}\n\n/**\n * Build RelationInfo object from applogs for a specific relation entity\n */\nfunction buildRelationInfo(thread: Thread, relationID: EntityID): RelationInfo | null {\n\tconst attrs: Partial<RelationInfo> = { id: relationID }\n\n\tfor (const log of thread.applogs) {\n\t\tif (log.en !== relationID) continue\n\n\t\tswitch (log.at) {\n\t\t\tcase 'relation/block':\n\t\t\t\tattrs.block = log.vl as EntityID\n\t\t\t\tbreak\n\t\t\tcase 'relation/childOf':\n\t\t\t\tattrs.childOf = log.vl as EntityID\n\t\t\t\tbreak\n\t\t\tcase 'relation/after':\n\t\t\t\tattrs.after = log.vl as EntityID | null\n\t\t\t\tbreak\n\t\t\tcase 'relation/isExpanded':\n\t\t\t\tattrs.isExpanded = log.vl as boolean\n\t\t\t\tbreak\n\t\t\tcase 'relation/isMirror':\n\t\t\t\tattrs.isMirror = log.vl as boolean\n\t\t\t\tbreak\n\t\t\tcase 'relation/isReply':\n\t\t\t\tattrs.isReply = log.vl as boolean\n\t\t\t\tbreak\n\t\t\tcase 'isDeleted':\n\t\t\t\tattrs.isDeleted = log.vl as boolean\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// Validate required fields\n\tif (!attrs.block || attrs.childOf === undefined) {\n\t\treturn null\n\t}\n\n\treturn attrs as RelationInfo\n}\n\n/**\n * Get ordered child relations for a given parent block\n * @param thread - The thread to query\n * @param parentId - The parent block's entity ID\n * @returns Ordered array of RelationInfo objects\n */\nexport function getChildRelations(thread: Thread, parentId: EntityID): RelationInfo[] {\n\t// Find all relation IDs for this parent\n\tconst relationIDs = thread.applogs\n\t\t.filter(log => log.at === 'relation/childOf' && log.vl === parentId)\n\t\t.map(log => log.en)\n\n\t// Build RelationInfo objects\n\tconst relations = relationIDs\n\t\t.map(relID => buildRelationInfo(thread, relID))\n\t\t.filter((rel): rel is RelationInfo => rel !== null)\n\n\t// Order them\n\treturn orderRelations(relations)\n}\n\n/**\n * Get parent relations (placements) for a given block\n * @param thread - The thread to query\n * @param blockId - The block's entity ID\n * @returns Array of RelationInfo objects (unordered)\n */\nexport function getParentRelations(thread: Thread, blockId: EntityID): RelationInfo[] {\n\t// Find all relation IDs where this block is referenced\n\tconst relationIDs = thread.applogs\n\t\t.filter(log => log.at === 'relation/block' && log.vl === blockId)\n\t\t.map(log => log.en)\n\n\t// Build RelationInfo objects\n\treturn relationIDs\n\t\t.map(relID => buildRelationInfo(thread, relID))\n\t\t.filter((rel): rel is RelationInfo => rel !== null)\n}\n\n/**\n * Get the content of a block as TiptapContent\n * @param thread - The thread to query\n * @param blockId - The block's entity ID\n * @returns TiptapContent object or null if not found\n */\nexport function getContent(thread: Thread, blockId: EntityID): TiptapContent | null {\n\tconst contentLog = thread.applogs.find(log =>\n\t\tlog.en === blockId && log.at === 'block/content'\n\t)\n\n\tif (!contentLog) return null\n\n\treturn parseBlockContentValue(contentLog.vl as string)\n}\n\n/**\n * Get the plain text content of a block\n * @param thread - The thread to query\n * @param blockId - The block's entity ID\n * @returns Plain text string or null if not found\n */\nexport function getContentText(thread: Thread, blockId: EntityID): string | null {\n\tconst content = getContent(thread, blockId)\n\tif (!content) return null\n\treturn tiptapToPlaintext(content)\n}\n\n/**\n * Get all root block IDs (blocks without parents)\n * @param thread - The thread to query\n * @returns Array of root block IDs, sorted by entity ID\n */\nexport function getRootIDs(thread: Thread): EntityID[] {\n\t// Find all blocks (entities with block/content attribute)\n\tconst allBlockIDs = new Set<EntityID>()\n\tfor (const log of thread.applogs) {\n\t\tif (log.at === 'block/content') {\n\t\t\tallBlockIDs.add(log.en)\n\t\t}\n\t}\n\n\t// Find all blocks that have parent relations\n\tconst blocksWithParents = new Set<EntityID>()\n\tconst relationsByBlock = new Map<EntityID, EntityID>() // block -> relation\n\n\tfor (const log of thread.applogs) {\n\t\tif (log.at === 'relation/block') {\n\t\t\trelationsByBlock.set(log.vl as EntityID, log.en)\n\t\t}\n\t}\n\n\t// Check which relations have non-null parents\n\tfor (const [blockID, relationID] of relationsByBlock) {\n\t\tfor (const log of thread.applogs) {\n\t\t\tif (log.en === relationID && log.at === 'relation/childOf') {\n\t\t\t\tif (log.vl !== null) {\n\t\t\t\t\tblocksWithParents.add(blockID)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Root blocks = all blocks - blocks with parents\n\tconst rootBlocks = Array.from(allBlockIDs).filter(id => !blocksWithParents.has(id))\n\n\t// Sort by entity ID for determinism\n\treturn rootBlocks.sort()\n}\n"],"mappings":"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","names":["matchesPattern","applog","pattern","getChildIDs","thread","parentId","log","getParentIDs","blockId","relationIDs","parentIDs","relID","buildRelationInfo","relationID","attrs","getChildRelations","relations","rel","orderRelations","getParentRelations","getContent","contentLog","parseBlockContentValue","getContentText","content","tiptapToPlaintext","getRootIDs","allBlockIDs","blocksWithParents","relationsByBlock","blockID","id"]}
|
package/dist/corejs.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import 'core-js/proposals/map-upsert-stage-2';
|
|
2
|
-
declare global {
|
|
3
|
-
interface Map<K, V> {
|
|
4
|
-
/**
|
|
5
|
-
* Insert or update a value in the map based on the presence of the key.
|
|
6
|
-
*
|
|
7
|
-
* @param key The key to insert or update.
|
|
8
|
-
* @param operations An object with `insert` and `update` methods.
|
|
9
|
-
* `insert` method is used when the key does not exist and receives the key and the map itself.
|
|
10
|
-
* `update` method is used when the key exists and receives the existing value, the key, and the map itself.
|
|
11
|
-
* @returns The new or updated value.
|
|
12
|
-
*/
|
|
13
|
-
emplace(key: K, operations: {
|
|
14
|
-
insert?: (key: K, map: Map<K, V>) => V;
|
|
15
|
-
update?: (existingValue: V, key: K, map: Map<K, V>) => V;
|
|
16
|
-
}): V;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=corejs.d.ts.map
|
package/dist/corejs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"corejs.d.ts","sourceRoot":"","sources":["../src/corejs.ts"],"names":[],"mappings":"AAAA,OAAO,sCAAsC,CAAA;AAE7C,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACjB;;;;;;;;WAQG;QACH,OAAO,CACN,GAAG,EAAE,CAAC,EACN,UAAU,EAAE;YACX,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YACtC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;SACxD,GACC,CAAC,CAAA;KACJ;CACD"}
|
package/dist/corejs.min.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b as hi}from"./chunk-MXMMU6NF.min.js";var c=a((G,Nr)=>{"use strict";var S=function(r){return r&&r.Math===Math&&r};Nr.exports=S(typeof globalThis=="object"&&globalThis)||S(typeof window=="object"&&window)||S(typeof self=="object"&&self)||S(typeof global=="object"&&global)||S(typeof G=="object"&&G)||(function(){return this})()||Function("return this")()});var y=a((Ru,_r)=>{"use strict";_r.exports=function(r){try{return!!r()}catch{return!0}}});var q=a((Cu,Br)=>{"use strict";var bi=y();Br.exports=!bi(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var A=a((Du,Lr)=>{"use strict";var di=y();Lr.exports=!di(function(){var r=(function(){}).bind();return typeof r!="function"||r.hasOwnProperty("prototype")})});var I=a((Nu,$r)=>{"use strict";var Oi=A(),P=Function.prototype.call;$r.exports=Oi?P.bind(P):function(){return P.apply(P,arguments)}});var Gr=a(Wr=>{"use strict";var Kr={}.propertyIsEnumerable,Vr=Object.getOwnPropertyDescriptor,mi=Vr&&!Kr.call({1:2},1);Wr.f=mi?function(e){var t=Vr(this,e);return!!t&&t.enumerable}:Kr});var U=a((Bu,Ar)=>{"use strict";Ar.exports=function(r,e){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:e}}});var v=a((Lu,Yr)=>{"use strict";var Ur=A(),zr=Function.prototype,z=zr.call,Si=Ur&&zr.bind.bind(z,z);Yr.exports=Ur?Si:function(r){return function(){return z.apply(r,arguments)}}});var Xr=a(($u,Hr)=>{"use strict";var kr=v(),xi=kr({}.toString),wi=kr("".slice);Hr.exports=function(r){return wi(xi(r),8,-1)}});var Zr=a((Ku,Jr)=>{"use strict";var Ei=v(),Pi=y(),Ii=Xr(),Y=Object,Ti=Ei("".split);Jr.exports=Pi(function(){return!Y("z").propertyIsEnumerable(0)})?function(r){return Ii(r)==="String"?Ti(r,""):Y(r)}:Y});var k=a((Vu,Qr)=>{"use strict";Qr.exports=function(r){return r==null}});var H=a((Wu,re)=>{"use strict";var ji=k(),Mi=TypeError;re.exports=function(r){if(ji(r))throw new Mi("Can't call method on "+r);return r}});var T=a((Gu,ee)=>{"use strict";var Fi=Zr(),Ri=H();ee.exports=function(r){return Fi(Ri(r))}});var l=a((Au,te)=>{"use strict";var X=typeof document=="object"&&document.all;te.exports=typeof X>"u"&&X!==void 0?function(r){return typeof r=="function"||r===X}:function(r){return typeof r=="function"}});var d=a((Uu,ie)=>{"use strict";var Ci=l();ie.exports=function(r){return typeof r=="object"?r!==null:Ci(r)}});var Z=a((zu,ae)=>{"use strict";var J=c(),Di=l(),Ni=function(r){return Di(r)?r:void 0};ae.exports=function(r,e){return arguments.length<2?Ni(J[r]):J[r]&&J[r][e]}});var ue=a((Yu,ne)=>{"use strict";var _i=v();ne.exports=_i({}.isPrototypeOf)});var ve=a((ku,ce)=>{"use strict";var Bi=c(),oe=Bi.navigator,se=oe&&oe.userAgent;ce.exports=se?String(se):""});var he=a((Hu,ge)=>{"use strict";var qe=c(),Q=ve(),le=qe.process,fe=qe.Deno,pe=le&&le.versions||fe&&fe.version,ye=pe&&pe.v8,f,j;ye&&(f=ye.split("."),j=f[0]>0&&f[0]<4?1:+(f[0]+f[1]));!j&&Q&&(f=Q.match(/Edge\/(\d+)/),(!f||f[1]>=74)&&(f=Q.match(/Chrome\/(\d+)/),f&&(j=+f[1])));ge.exports=j});var rr=a((Xu,de)=>{"use strict";var be=he(),Li=y(),$i=c(),Ki=$i.String;de.exports=!!Object.getOwnPropertySymbols&&!Li(function(){var r=Symbol("symbol detection");return!Ki(r)||!(Object(r)instanceof Symbol)||!Symbol.sham&&be&&be<41})});var er=a((Ju,Oe)=>{"use strict";var Vi=rr();Oe.exports=Vi&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var tr=a((Zu,me)=>{"use strict";var Wi=Z(),Gi=l(),Ai=ue(),Ui=er(),zi=Object;me.exports=Ui?function(r){return typeof r=="symbol"}:function(r){var e=Wi("Symbol");return Gi(e)&&Ai(e.prototype,zi(r))}});var xe=a((Qu,Se)=>{"use strict";var Yi=String;Se.exports=function(r){try{return Yi(r)}catch{return"Object"}}});var Ee=a((ro,we)=>{"use strict";var ki=l(),Hi=xe(),Xi=TypeError;we.exports=function(r){if(ki(r))return r;throw new Xi(Hi(r)+" is not a function")}});var Ie=a((eo,Pe)=>{"use strict";var Ji=Ee(),Zi=k();Pe.exports=function(r,e){var t=r[e];return Zi(t)?void 0:Ji(t)}});var je=a((to,Te)=>{"use strict";var ir=I(),ar=l(),nr=d(),Qi=TypeError;Te.exports=function(r,e){var t,i;if(e==="string"&&ar(t=r.toString)&&!nr(i=ir(t,r))||ar(t=r.valueOf)&&!nr(i=ir(t,r))||e!=="string"&&ar(t=r.toString)&&!nr(i=ir(t,r)))return i;throw new Qi("Can't convert object to primitive value")}});var Fe=a((io,Me)=>{"use strict";Me.exports=!1});var M=a((ao,Ce)=>{"use strict";var Re=c(),ra=Object.defineProperty;Ce.exports=function(r,e){try{ra(Re,r,{value:e,configurable:!0,writable:!0})}catch{Re[r]=e}return e}});var F=a((no,_e)=>{"use strict";var ea=Fe(),ta=c(),ia=M(),De="__core-js_shared__",Ne=_e.exports=ta[De]||ia(De,{});(Ne.versions||(Ne.versions=[])).push({version:"3.45.1",mode:ea?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.45.1/LICENSE",source:"https://github.com/zloirock/core-js"})});var ur=a((uo,Le)=>{"use strict";var Be=F();Le.exports=function(r,e){return Be[r]||(Be[r]=e||{})}});var Ke=a((oo,$e)=>{"use strict";var aa=H(),na=Object;$e.exports=function(r){return na(aa(r))}});var g=a((so,Ve)=>{"use strict";var ua=v(),oa=Ke(),sa=ua({}.hasOwnProperty);Ve.exports=Object.hasOwn||function(e,t){return sa(oa(e),t)}});var or=a((co,We)=>{"use strict";var ca=v(),va=0,la=Math.random(),fa=ca(1.1.toString);We.exports=function(r){return"Symbol("+(r===void 0?"":r)+")_"+fa(++va+la,36)}});var Ue=a((vo,Ae)=>{"use strict";var pa=c(),ya=ur(),Ge=g(),qa=or(),ga=rr(),ha=er(),O=pa.Symbol,sr=ya("wks"),ba=ha?O.for||O:O&&O.withoutSetter||qa;Ae.exports=function(r){return Ge(sr,r)||(sr[r]=ga&&Ge(O,r)?O[r]:ba("Symbol."+r)),sr[r]}});var He=a((lo,ke)=>{"use strict";var da=I(),ze=d(),Ye=tr(),Oa=Ie(),ma=je(),Sa=Ue(),xa=TypeError,wa=Sa("toPrimitive");ke.exports=function(r,e){if(!ze(r)||Ye(r))return r;var t=Oa(r,wa),i;if(t){if(e===void 0&&(e="default"),i=da(t,r,e),!ze(i)||Ye(i))return i;throw new xa("Can't convert object to primitive value")}return e===void 0&&(e="number"),ma(r,e)}});var cr=a((fo,Xe)=>{"use strict";var Ea=He(),Pa=tr();Xe.exports=function(r){var e=Ea(r,"string");return Pa(e)?e:e+""}});var Qe=a((po,Ze)=>{"use strict";var Ia=c(),Je=d(),vr=Ia.document,Ta=Je(vr)&&Je(vr.createElement);Ze.exports=function(r){return Ta?vr.createElement(r):{}}});var lr=a((yo,rt)=>{"use strict";var ja=q(),Ma=y(),Fa=Qe();rt.exports=!ja&&!Ma(function(){return Object.defineProperty(Fa("div"),"a",{get:function(){return 7}}).a!==7})});var fr=a(tt=>{"use strict";var Ra=q(),Ca=I(),Da=Gr(),Na=U(),_a=T(),Ba=cr(),La=g(),$a=lr(),et=Object.getOwnPropertyDescriptor;tt.f=Ra?et:function(e,t){if(e=_a(e),t=Ba(t),$a)try{return et(e,t)}catch{}if(La(e,t))return Na(!Ca(Da.f,e,t),e[t])}});var at=a((go,it)=>{"use strict";var Ka=q(),Va=y();it.exports=Ka&&Va(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var pr=a((ho,nt)=>{"use strict";var Wa=d(),Ga=String,Aa=TypeError;nt.exports=function(r){if(Wa(r))return r;throw new Aa(Ga(r)+" is not an object")}});var C=a(ot=>{"use strict";var Ua=q(),za=lr(),Ya=at(),R=pr(),ut=cr(),ka=TypeError,yr=Object.defineProperty,Ha=Object.getOwnPropertyDescriptor,qr="enumerable",gr="configurable",hr="writable";ot.f=Ua?Ya?function(e,t,i){if(R(e),t=ut(t),R(i),typeof e=="function"&&t==="prototype"&&"value"in i&&hr in i&&!i[hr]){var n=Ha(e,t);n&&n[hr]&&(e[t]=i.value,i={configurable:gr in i?i[gr]:n[gr],enumerable:qr in i?i[qr]:n[qr],writable:!1})}return yr(e,t,i)}:yr:function(e,t,i){if(R(e),t=ut(t),R(i),za)try{return yr(e,t,i)}catch{}if("get"in i||"set"in i)throw new ka("Accessors not supported");return"value"in i&&(e[t]=i.value),e}});var br=a((Oo,st)=>{"use strict";var Xa=q(),Ja=C(),Za=U();st.exports=Xa?function(r,e,t){return Ja.f(r,e,Za(1,t))}:function(r,e,t){return r[e]=t,r}});var lt=a((mo,vt)=>{"use strict";var dr=q(),Qa=g(),ct=Function.prototype,rn=dr&&Object.getOwnPropertyDescriptor,Or=Qa(ct,"name"),en=Or&&(function(){}).name==="something",tn=Or&&(!dr||dr&&rn(ct,"name").configurable);vt.exports={EXISTS:Or,PROPER:en,CONFIGURABLE:tn}});var pt=a((So,ft)=>{"use strict";var an=v(),nn=l(),mr=F(),un=an(Function.toString);nn(mr.inspectSource)||(mr.inspectSource=function(r){return un(r)});ft.exports=mr.inspectSource});var gt=a((xo,qt)=>{"use strict";var on=c(),sn=l(),yt=on.WeakMap;qt.exports=sn(yt)&&/native code/.test(String(yt))});var dt=a((wo,bt)=>{"use strict";var cn=ur(),vn=or(),ht=cn("keys");bt.exports=function(r){return ht[r]||(ht[r]=vn(r))}});var Sr=a((Eo,Ot)=>{"use strict";Ot.exports={}});var wt=a((Po,xt)=>{"use strict";var ln=gt(),St=c(),fn=d(),pn=br(),xr=g(),wr=F(),yn=dt(),qn=Sr(),mt="Object already initialized",Er=St.TypeError,gn=St.WeakMap,D,x,N,hn=function(r){return N(r)?x(r):D(r,{})},bn=function(r){return function(e){var t;if(!fn(e)||(t=x(e)).type!==r)throw new Er("Incompatible receiver, "+r+" required");return t}};ln||wr.state?(p=wr.state||(wr.state=new gn),p.get=p.get,p.has=p.has,p.set=p.set,D=function(r,e){if(p.has(r))throw new Er(mt);return e.facade=r,p.set(r,e),e},x=function(r){return p.get(r)||{}},N=function(r){return p.has(r)}):(b=yn("state"),qn[b]=!0,D=function(r,e){if(xr(r,b))throw new Er(mt);return e.facade=r,pn(r,b,e),e},x=function(r){return xr(r,b)?r[b]:{}},N=function(r){return xr(r,b)});var p,b;xt.exports={set:D,get:x,has:N,enforce:hn,getterFor:bn}});var Tt=a((Io,It)=>{"use strict";var Ir=v(),dn=y(),On=l(),_=g(),Pr=q(),mn=lt().CONFIGURABLE,Sn=pt(),Pt=wt(),xn=Pt.enforce,wn=Pt.get,Et=String,B=Object.defineProperty,En=Ir("".slice),Pn=Ir("".replace),In=Ir([].join),Tn=Pr&&!dn(function(){return B(function(){},"length",{value:8}).length!==8}),jn=String(String).split("String"),Mn=It.exports=function(r,e,t){En(Et(e),0,7)==="Symbol("&&(e="["+Pn(Et(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),t&&t.getter&&(e="get "+e),t&&t.setter&&(e="set "+e),(!_(r,"name")||mn&&r.name!==e)&&(Pr?B(r,"name",{value:e,configurable:!0}):r.name=e),Tn&&t&&_(t,"arity")&&r.length!==t.arity&&B(r,"length",{value:t.arity});try{t&&_(t,"constructor")&&t.constructor?Pr&&B(r,"prototype",{writable:!1}):r.prototype&&(r.prototype=void 0)}catch{}var i=xn(r);return _(i,"source")||(i.source=In(jn,typeof e=="string"?e:"")),r};Function.prototype.toString=Mn(function(){return On(this)&&wn(this).source||Sn(this)},"toString")});var Mt=a((To,jt)=>{"use strict";var Fn=l(),Rn=C(),Cn=Tt(),Dn=M();jt.exports=function(r,e,t,i){i||(i={});var n=i.enumerable,u=i.name!==void 0?i.name:e;if(Fn(t)&&Cn(t,u,i),i.global)n?r[e]=t:Dn(e,t);else{try{i.unsafe?r[e]&&(n=!0):delete r[e]}catch{}n?r[e]=t:Rn.f(r,e,{value:t,enumerable:!1,configurable:!i.nonConfigurable,writable:!i.nonWritable})}return r}});var Rt=a((jo,Ft)=>{"use strict";var Nn=Math.ceil,_n=Math.floor;Ft.exports=Math.trunc||function(e){var t=+e;return(t>0?_n:Nn)(t)}});var Tr=a((Mo,Ct)=>{"use strict";var Bn=Rt();Ct.exports=function(r){var e=+r;return e!==e||e===0?0:Bn(e)}});var Nt=a((Fo,Dt)=>{"use strict";var Ln=Tr(),$n=Math.max,Kn=Math.min;Dt.exports=function(r,e){var t=Ln(r);return t<0?$n(t+e,0):Kn(t,e)}});var Bt=a((Ro,_t)=>{"use strict";var Vn=Tr(),Wn=Math.min;_t.exports=function(r){var e=Vn(r);return e>0?Wn(e,9007199254740991):0}});var $t=a((Co,Lt)=>{"use strict";var Gn=Bt();Lt.exports=function(r){return Gn(r.length)}});var Wt=a((Do,Vt)=>{"use strict";var An=T(),Un=Nt(),zn=$t(),Kt=function(r){return function(e,t,i){var n=An(e),u=zn(n);if(u===0)return!r&&-1;var o=Un(i,u),s;if(r&&t!==t){for(;u>o;)if(s=n[o++],s!==s)return!0}else for(;u>o;o++)if((r||o in n)&&n[o]===t)return r||o||0;return!r&&-1}};Vt.exports={includes:Kt(!0),indexOf:Kt(!1)}});var Ut=a((No,At)=>{"use strict";var Yn=v(),jr=g(),kn=T(),Hn=Wt().indexOf,Xn=Sr(),Gt=Yn([].push);At.exports=function(r,e){var t=kn(r),i=0,n=[],u;for(u in t)!jr(Xn,u)&&jr(t,u)&&Gt(n,u);for(;e.length>i;)jr(t,u=e[i++])&&(~Hn(n,u)||Gt(n,u));return n}});var Yt=a((_o,zt)=>{"use strict";zt.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var Ht=a(kt=>{"use strict";var Jn=Ut(),Zn=Yt(),Qn=Zn.concat("length","prototype");kt.f=Object.getOwnPropertyNames||function(e){return Jn(e,Qn)}});var Jt=a(Xt=>{"use strict";Xt.f=Object.getOwnPropertySymbols});var Qt=a(($o,Zt)=>{"use strict";var ru=Z(),eu=v(),tu=Ht(),iu=Jt(),au=pr(),nu=eu([].concat);Zt.exports=ru("Reflect","ownKeys")||function(e){var t=tu.f(au(e)),i=iu.f;return i?nu(t,i(e)):t}});var ti=a((Ko,ei)=>{"use strict";var ri=g(),uu=Qt(),ou=fr(),su=C();ei.exports=function(r,e,t){for(var i=uu(e),n=su.f,u=ou.f,o=0;o<i.length;o++){var s=i[o];!ri(r,s)&&!(t&&ri(t,s))&&n(r,s,u(e,s))}}});var ai=a((Vo,ii)=>{"use strict";var cu=y(),vu=l(),lu=/#|\.prototype\./,w=function(r,e){var t=pu[fu(r)];return t===qu?!0:t===yu?!1:vu(e)?cu(e):!!e},fu=w.normalize=function(r){return String(r).replace(lu,".").toLowerCase()},pu=w.data={},yu=w.NATIVE="N",qu=w.POLYFILL="P";ii.exports=w});var Mr=a((Wo,ni)=>{"use strict";var L=c(),gu=fr().f,hu=br(),bu=Mt(),du=M(),Ou=ti(),mu=ai();ni.exports=function(r,e){var t=r.target,i=r.global,n=r.stat,u,o,s,h,m,W;if(i?o=L:n?o=L[t]||du(t,{}):o=L[t]&&L[t].prototype,o)for(s in e){if(m=e[s],r.dontCallGetSet?(W=gu(o,s),h=W&&W.value):h=o[s],u=mu(i?s:t+(n?".":"#")+s,r.forced),!u&&h!==void 0){if(typeof m==typeof h)continue;Ou(m,h)}(r.sham||h&&h.sham)&&hu(m,"sham",!0),bu(o,s,m,r)}}});var Fr=a((Go,ui)=>{"use strict";var $=v(),E=Map.prototype;ui.exports={Map,set:$(E.set),get:$(E.get),has:$(E.has),remove:$(E.delete),proto:E}});var si=a((Ao,oi)=>{"use strict";var Su=Fr().has;oi.exports=function(r){return Su(r),r}});var vi=a(()=>{"use strict";var xu=Mr(),wu=si(),Rr=Fr(),Eu=Rr.get,Pu=Rr.has,ci=Rr.set;xu({target:"Map",proto:!0,real:!0,forced:!0},{emplace:function(e,t){var i=wu(this),n,u;return Pu(i,e)?(n=Eu(i,e),"update"in t&&(n=t.update(n,e,i),ci(i,e,n)),n):(u=t.insert(e,i),ci(i,e,u),u)}})});var Cr=a((Yo,li)=>{"use strict";var K=v(),V=WeakMap.prototype;li.exports={WeakMap,set:K(V.set),get:K(V.get),has:K(V.has),remove:K(V.delete)}});var pi=a((ko,fi)=>{"use strict";var Iu=Cr().has;fi.exports=function(r){return Iu(r),r}});var qi=a(()=>{"use strict";var Tu=Mr(),ju=pi(),Dr=Cr(),Mu=Dr.get,Fu=Dr.has,yi=Dr.set;Tu({target:"WeakMap",proto:!0,real:!0,forced:!0},{emplace:function(e,t){var i=ju(this),n,u;return Fu(i,e)?(n=Mu(i,e),"update"in t&&(n=t.update(n,e,i),yi(i,e,n)),n):(u=t.insert(e,i),yi(i,e,u),u)}})});var gi=a(()=>{"use strict";vi();qi()});var Qo=hi(gi(),1);
|
|
2
|
-
//# sourceMappingURL=corejs.min.js.map
|