@torpor/view 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @torpor/view
2
2
 
3
+ ## 0.4.2
4
+
5
+ ### Patch Changes
6
+
7
+ - d1bc0cc: Fix: ensure that dev context is always in scope
8
+
9
+ ## 0.4.1
10
+
11
+ ### Patch Changes
12
+
13
+ - d5bfa0c: Fix: ensure that context is in scope
14
+
3
15
  ## 0.4.0
4
16
 
5
17
  ### Minor Changes
package/dist/dev.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_devContext = require('./devContext-nomc0xCl.cjs');
1
+ const require_devContext = require('./devContext-B3yskfhA.cjs');
2
2
 
3
3
  //#region src/dev/popDevBoundary.ts
4
4
  function popDevBoundary() {
@@ -113,7 +113,6 @@ function setDevMode() {
113
113
  }
114
114
  };
115
115
  require_devContext.devContext_default.onRegionPushed = (region, toParent) => {
116
- console.log("pushed region", toParent, region);
117
116
  oldDepths.push(require_devContext.devContext_default.depth);
118
117
  if (toParent) {
119
118
  const name = region.name || "Anon Region";
package/dist/dev.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.cjs","names":["devContext","devContext","oldDepths: number[]","nextRegion: Region | null"],"sources":["../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":["import devContext from \"./devContext\";\n\nexport default function popDevBoundary(): void {\n\tdevContext.depth--;\n}\n","import devContext from \"../dev/devContext\";\nimport DevBoundary from \"./types/DevBoundary\";\n\nexport default function pushDevBoundary(\n\ttype: \"component\" | \"region\" | \"run\" | \"watch\" | \"control\" | \"branch\",\n\tname: string,\n): DevBoundary {\n\tconst newBoundary = {\n\t\ttype,\n\t\tid: crypto.randomUUID(),\n\t\tname,\n\t\tdepth: devContext.depth,\n\t};\n\n\tif (devContext.index === -1) {\n\t\tdevContext.boundaries.push(newBoundary);\n\t} else {\n\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\tdevContext.index++;\n\t}\n\n\tdevContext.depth++;\n\n\treturn newBoundary;\n}\n","import type Effect from \"../types/Effect\";\nimport type ProxyData from \"../types/ProxyData\";\nimport type Region from \"../types/Region\";\nimport devContext from \"./devContext\";\nimport type DevBoundary from \"./types/DevBoundary\";\n\nexport default function setDevMode(): void {\n\tdevContext.enabled = true;\n\n\t// Format devContext for passing to DevTools by stripping out nodes etc\n\tdevContext.format = () => {\n\t\treturn {\n\t\t\tboundaries: devContext.boundaries.map((b) => ({\n\t\t\t\ttype: b.type,\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name,\n\t\t\t\tdepth: b.depth,\n\t\t\t\t//details: b.details,\n\t\t\t})),\n\t\t};\n\t};\n\n\tdevContext.getDetails = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary) {\n\t\t\tswitch (boundary.type) {\n\t\t\t\tcase \"run\": {\n\t\t\t\t\treturn String(boundary.target.run);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn \"I'm a \" + boundary.type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"??\";\n\t};\n\n\tdevContext.unmark = () => {\n\t\tconst el = document.getElementById(\"t_dev_mark\");\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t};\n\n\tdevContext.mark = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary && boundary.target?.startNode && boundary.target?.endNode) {\n\t\t\tlet el = document.getElementById(\"t_dev_mark\");\n\t\t\tif (!el) {\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.id = \"t_dev_mark\";\n\t\t\t\tel.style.position = \"absolute\";\n\t\t\t\tdocument.body.append(el);\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStartBefore(boundary.target.startNode);\n\t\t\trange.setEndAfter(boundary.target.endNode);\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tel.style.display = \"block\";\n\t\t\tel.style.left = rect.left + \"px\";\n\t\t\tel.style.top = rect.top + \"px\";\n\t\t\tel.style.height = rect.height + \"px\";\n\t\t\tel.style.width = rect.width + \"px\";\n\t\t\t//el.style.border = \"2px solid limegreen\";\n\t\t\tel.style.borderRadius = \"2px\";\n\t\t\tel.style.boxShadow = \"rgba(50, 205, 50, 0.5) 0px 0px 0px 3px\";\n\t\t\tel.style.pointerEvents = \"none\";\n\t\t}\n\t};\n\n\t// TODO: make this more robust\n\tlet oldDepths: number[] = [];\n\n\tdevContext.onWatch = (proxy: ProxyData) => {\n\t\tlet keys = Object.keys(proxy.target);\n\t\tif (keys.length > 5) {\n\t\t\tkeys = [...keys.slice(0, 5), \"…\"];\n\t\t}\n\t\tlet name = keys.length > 0 ? `{ ${keys.join(\", \")} }` : \"{}\";\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"watch\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: proxy,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRun = (effect: Effect) => {\n\t\tlet name = effect.name;\n\t\tif (name === undefined) {\n\t\t\tconst details = String(effect.run);\n\t\t\tif (details.startsWith(\"function \")) {\n\t\t\t\tname = details.substring(9);\n\t\t\t\tname = name.substring(0, name.indexOf(\"(\"));\n\t\t\t}\n\t\t}\n\t\tif (name === undefined) {\n\t\t\tname = \"runAnon\";\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"run\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: effect,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRegionPushed = (region: Region, toParent: boolean) => {\n\t\tconsole.log(\"pushed region\", toParent, region);\n\t\toldDepths.push(devContext.depth);\n\t\tif (toParent) {\n\t\t\t// It's a new region; bump the depth etc\n\t\t\tconst name = region.name || \"Anon Region\";\n\t\t\tconst id = crypto.randomUUID();\n\t\t\tconst newBoundary = {\n\t\t\t\ttype: \"region\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tdepth: devContext.depth,\n\t\t\t\ttarget: region,\n\t\t\t} satisfies DevBoundary;\n\t\t\tif (devContext.index === -1) {\n\t\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t\t} else {\n\t\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\t\tdevContext.index++;\n\t\t\t}\n\t\t\t//pushDevBoundary(\"region\", name);\n\t\t\tregion.name = `${name} [${id}]`;\n\n\t\t\tdevContext.depth++;\n\n\t\t\tsendMessage({ name: \"REFRESH\" });\n\t\t} else if (region.name) {\n\t\t\tdevContext.index = -1;\n\n\t\t\t// It's an old region; get and set its depth and position for adding children\n\t\t\tconst match = region.name.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tlet id = match[1];\n\t\t\t\tlet index = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tconst parentDepth = devContext.boundaries[index].depth;\n\t\t\t\t\tdevContext.depth = parentDepth + 1;\n\t\t\t\t\t// The index needs to be after the last child of the parent\n\t\t\t\t\tdevContext.index = index + 1;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tdevContext.index < devContext.boundaries.length &&\n\t\t\t\t\t\tdevContext.boundaries[devContext.index].depth > parentDepth\n\t\t\t\t\t) {\n\t\t\t\t\t\tdevContext.index++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tdevContext.onRegionPopped = () => {\n\t\t//popDevBoundary();\n\t\tdevContext.depth = oldDepths.pop() ?? 0;\n\t};\n\n\tdevContext.onRegionCleared = (region: Region) => {\n\t\tlet nextRegion: Region | null = region;\n\t\twhile (true) {\n\t\t\tlet match = nextRegion.name!.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tconst id = match[1];\n\t\t\t\tlet i = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlet depth = devContext.boundaries[i].depth;\n\t\t\t\t\tlet start = i;\n\t\t\t\t\tlet end = devContext.boundaries.length;\n\t\t\t\t\tfor (i++; i < devContext.boundaries.length; i++) {\n\t\t\t\t\t\tif (devContext.boundaries[i].depth <= depth) {\n\t\t\t\t\t\t\tend = i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdevContext.boundaries.splice(start, end - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnextRegion = nextRegion.nextRegion;\n\t\t\tif (nextRegion === null || nextRegion.depth <= region.depth) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tsendMessage({ name: \"REFRESH\" });\n\t};\n\n\t// Messages\n\n\tdevContext.signalSet = (proxy: ProxyData, key: PropertyKey) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === proxy);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Signal set\", id: boundary.id, key: String(key) });\n\t\t}\n\t};\n\n\tdevContext.effectRun = (effect: Effect) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === effect);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Effect run\", id: boundary.id });\n\t\t}\n\t};\n\n\tfunction sendMessage(message: { name: string } & Record<string, string>) {\n\t\twindow.postMessage(\n\t\t\t{\n\t\t\t\tsource: \"t_dev_tools\",\n\t\t\t\tmessage: JSON.stringify(message),\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dev.cjs","names":["devContext","devContext","oldDepths: number[]","nextRegion: Region | null"],"sources":["../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":["import devContext from \"./devContext\";\n\nexport default function popDevBoundary(): void {\n\tdevContext.depth--;\n}\n","import devContext from \"../dev/devContext\";\nimport DevBoundary from \"./types/DevBoundary\";\n\nexport default function pushDevBoundary(\n\ttype: \"component\" | \"region\" | \"run\" | \"watch\" | \"control\" | \"branch\",\n\tname: string,\n): DevBoundary {\n\tconst newBoundary = {\n\t\ttype,\n\t\tid: crypto.randomUUID(),\n\t\tname,\n\t\tdepth: devContext.depth,\n\t};\n\n\tif (devContext.index === -1) {\n\t\tdevContext.boundaries.push(newBoundary);\n\t} else {\n\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\tdevContext.index++;\n\t}\n\n\tdevContext.depth++;\n\n\treturn newBoundary;\n}\n","import type Effect from \"../types/Effect\";\nimport type ProxyData from \"../types/ProxyData\";\nimport type Region from \"../types/Region\";\nimport devContext from \"./devContext\";\nimport type DevBoundary from \"./types/DevBoundary\";\n\nexport default function setDevMode(): void {\n\tdevContext.enabled = true;\n\n\t// Format devContext for passing to DevTools by stripping out nodes etc\n\tdevContext.format = () => {\n\t\treturn {\n\t\t\tboundaries: devContext.boundaries.map((b) => ({\n\t\t\t\ttype: b.type,\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name,\n\t\t\t\tdepth: b.depth,\n\t\t\t\t//details: b.details,\n\t\t\t})),\n\t\t};\n\t};\n\n\tdevContext.getDetails = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary) {\n\t\t\tswitch (boundary.type) {\n\t\t\t\tcase \"run\": {\n\t\t\t\t\treturn String(boundary.target.run);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn \"I'm a \" + boundary.type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"??\";\n\t};\n\n\tdevContext.unmark = () => {\n\t\tconst el = document.getElementById(\"t_dev_mark\");\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t};\n\n\tdevContext.mark = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary && boundary.target?.startNode && boundary.target?.endNode) {\n\t\t\tlet el = document.getElementById(\"t_dev_mark\");\n\t\t\tif (!el) {\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.id = \"t_dev_mark\";\n\t\t\t\tel.style.position = \"absolute\";\n\t\t\t\tdocument.body.append(el);\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStartBefore(boundary.target.startNode);\n\t\t\trange.setEndAfter(boundary.target.endNode);\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tel.style.display = \"block\";\n\t\t\tel.style.left = rect.left + \"px\";\n\t\t\tel.style.top = rect.top + \"px\";\n\t\t\tel.style.height = rect.height + \"px\";\n\t\t\tel.style.width = rect.width + \"px\";\n\t\t\t//el.style.border = \"2px solid limegreen\";\n\t\t\tel.style.borderRadius = \"2px\";\n\t\t\tel.style.boxShadow = \"rgba(50, 205, 50, 0.5) 0px 0px 0px 3px\";\n\t\t\tel.style.pointerEvents = \"none\";\n\t\t}\n\t};\n\n\t// TODO: make this more robust\n\tlet oldDepths: number[] = [];\n\n\tdevContext.onWatch = (proxy: ProxyData) => {\n\t\tlet keys = Object.keys(proxy.target);\n\t\tif (keys.length > 5) {\n\t\t\tkeys = [...keys.slice(0, 5), \"…\"];\n\t\t}\n\t\tlet name = keys.length > 0 ? `{ ${keys.join(\", \")} }` : \"{}\";\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"watch\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: proxy,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRun = (effect: Effect) => {\n\t\tlet name = effect.name;\n\t\tif (name === undefined) {\n\t\t\tconst details = String(effect.run);\n\t\t\tif (details.startsWith(\"function \")) {\n\t\t\t\tname = details.substring(9);\n\t\t\t\tname = name.substring(0, name.indexOf(\"(\"));\n\t\t\t}\n\t\t}\n\t\tif (name === undefined) {\n\t\t\tname = \"runAnon\";\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"run\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: effect,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRegionPushed = (region: Region, toParent: boolean) => {\n\t\toldDepths.push(devContext.depth);\n\t\tif (toParent) {\n\t\t\t// It's a new region; bump the depth etc\n\t\t\tconst name = region.name || \"Anon Region\";\n\t\t\tconst id = crypto.randomUUID();\n\t\t\tconst newBoundary = {\n\t\t\t\ttype: \"region\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tdepth: devContext.depth,\n\t\t\t\ttarget: region,\n\t\t\t} satisfies DevBoundary;\n\t\t\tif (devContext.index === -1) {\n\t\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t\t} else {\n\t\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\t\tdevContext.index++;\n\t\t\t}\n\t\t\t//pushDevBoundary(\"region\", name);\n\t\t\tregion.name = `${name} [${id}]`;\n\n\t\t\tdevContext.depth++;\n\n\t\t\tsendMessage({ name: \"REFRESH\" });\n\t\t} else if (region.name) {\n\t\t\tdevContext.index = -1;\n\n\t\t\t// It's an old region; get and set its depth and position for adding children\n\t\t\tconst match = region.name.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tlet id = match[1];\n\t\t\t\tlet index = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tconst parentDepth = devContext.boundaries[index].depth;\n\t\t\t\t\tdevContext.depth = parentDepth + 1;\n\t\t\t\t\t// The index needs to be after the last child of the parent\n\t\t\t\t\tdevContext.index = index + 1;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tdevContext.index < devContext.boundaries.length &&\n\t\t\t\t\t\tdevContext.boundaries[devContext.index].depth > parentDepth\n\t\t\t\t\t) {\n\t\t\t\t\t\tdevContext.index++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tdevContext.onRegionPopped = () => {\n\t\t//popDevBoundary();\n\t\tdevContext.depth = oldDepths.pop() ?? 0;\n\t};\n\n\tdevContext.onRegionCleared = (region: Region) => {\n\t\tlet nextRegion: Region | null = region;\n\t\twhile (true) {\n\t\t\tlet match = nextRegion.name!.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tconst id = match[1];\n\t\t\t\tlet i = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlet depth = devContext.boundaries[i].depth;\n\t\t\t\t\tlet start = i;\n\t\t\t\t\tlet end = devContext.boundaries.length;\n\t\t\t\t\tfor (i++; i < devContext.boundaries.length; i++) {\n\t\t\t\t\t\tif (devContext.boundaries[i].depth <= depth) {\n\t\t\t\t\t\t\tend = i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdevContext.boundaries.splice(start, end - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnextRegion = nextRegion.nextRegion;\n\t\t\tif (nextRegion === null || nextRegion.depth <= region.depth) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tsendMessage({ name: \"REFRESH\" });\n\t};\n\n\t// Messages\n\n\tdevContext.signalSet = (proxy: ProxyData, key: PropertyKey) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === proxy);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Signal set\", id: boundary.id, key: String(key) });\n\t\t}\n\t};\n\n\tdevContext.effectRun = (effect: Effect) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === effect);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Effect run\", id: boundary.id });\n\t\t}\n\t};\n\n\tfunction sendMessage(message: { name: string } & Record<string, string>) {\n\t\twindow.postMessage(\n\t\t\t{\n\t\t\t\tsource: \"t_dev_tools\",\n\t\t\t\tmessage: JSON.stringify(message),\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.cts","names":["devContext: DevContext"],"sources":["../src/types/ProxyData.ts","../src/dev/types/DevBoundary.ts","../src/dev/types/DevContext.ts","../src/dev/devContext.ts","../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":[],"mappings":";;;;UAIyB,SAAA;UAChB,OAAO;EAJa,OAGJ,EAAA,OAAA;EACT,OAAA,EAAA,OAAA;EAAP,OAAA,EAGC,GAHD,CAGK,WAHL,EAGkB,WAHlB,GAGgC,QAHhC,CAAA;;;;UCLgB,WAAA;;;;EDCI,KAGJ,EAAA,MAAA;EACT,MAAA,CAAA,EAAA,GAAA;;;;AADS,UECA,UAAA,CFDA;EACT,OAAA,EAAA,OAAA;EAAP,KAAA,EAAA,MAAA;EAGK,KAAA,EAAA,MAAA;EAAa,UAAA,EECd,WFDc,EAAA;EAAc,MAAA,EAAA,GAAA,GAAA,GAAA;EAA/B,UAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EAAA,MAAA,EAAA,GAAA,GAAA,IAAA;;mBESQ;kBACD;gBDlBQ,EAAA,CAAA,MAAA,ECmBC,MDnBD,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;4BCqBE;qBAEP,gBAAgB;EApBP,SAEJ,EAAA,CAAA,MAAA,EAmBJ,MAnBI,EAAA,GAAA,IAAA;;;;cCDnBA,YAAY;;;iBCFM,cAAA,CAAA;;;iBCCA,eAAA,uFAGrB;;;iBCAqB,UAAA,CAAA"}
1
+ {"version":3,"file":"dev.d.cts","names":["devContext: DevContext"],"sources":["../src/types/ProxyData.ts","../src/dev/types/DevBoundary.ts","../src/dev/types/DevContext.ts","../src/dev/devContext.ts","../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":[],"mappings":";;;;UAIyB,SAAA;UAChB,OAAO;EAJa,OAGJ,EAAA,OAAA;EACT,OAAA,EAAA,OAAA;EAAP,OAAA,EAGC,GAHD,CAGK,WAHL,EAGkB,WAHlB,GAGgC,QAHhC,CAAA;;;;UCLgB,WAAA;;;;EDCI,KAGJ,EAAA,MAAA;EACT,MAAA,CAAA,EAAA,GAAA;;;;AADS,UECA,UAAA,CFDA;EACT,OAAA,EAAA,OAAA;EAAP,KAAA,EAAA,MAAA;EAGK,KAAA,EAAA,MAAA;EAAa,UAAA,EECd,WFDc,EAAA;EAAc,MAAA,EAAA,GAAA,GAAA,GAAA;EAA/B,UAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EAAA,MAAA,EAAA,GAAA,GAAA,IAAA;;mBESQ;kBACD;gBDlBQ,EAAA,CAAA,MAAA,ECmBC,MDnBD,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;4BCqBE;qBAEP,gBAAgB;EApBP,SAEJ,EAAA,CAAA,MAAA,EAmBJ,MAnBI,EAAA,GAAA,IAAA;;;;cCCnBA,YAAY;;;iBCJM,cAAA,CAAA;;;iBCCA,eAAA,uFAGrB;;;iBCAqB,UAAA,CAAA"}
package/dist/dev.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","names":["devContext: DevContext"],"sources":["../src/types/ProxyData.ts","../src/dev/types/DevBoundary.ts","../src/dev/types/DevContext.ts","../src/dev/devContext.ts","../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":[],"mappings":";;;;UAIyB,SAAA;UAChB,OAAO;EAJa,OAGJ,EAAA,OAAA;EACT,OAAA,EAAA,OAAA;EAAP,OAAA,EAGC,GAHD,CAGK,WAHL,EAGkB,WAHlB,GAGgC,QAHhC,CAAA;;;;UCLgB,WAAA;;;;EDCI,KAGJ,EAAA,MAAA;EACT,MAAA,CAAA,EAAA,GAAA;;;;AADS,UECA,UAAA,CFDA;EACT,OAAA,EAAA,OAAA;EAAP,KAAA,EAAA,MAAA;EAGK,KAAA,EAAA,MAAA;EAAa,UAAA,EECd,WFDc,EAAA;EAAc,MAAA,EAAA,GAAA,GAAA,GAAA;EAA/B,UAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EAAA,MAAA,EAAA,GAAA,GAAA,IAAA;;mBESQ;kBACD;gBDlBQ,EAAA,CAAA,MAAA,ECmBC,MDnBD,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;4BCqBE;qBAEP,gBAAgB;EApBP,SAEJ,EAAA,CAAA,MAAA,EAmBJ,MAnBI,EAAA,GAAA,IAAA;;;;cCDnBA,YAAY;;;iBCFM,cAAA,CAAA;;;iBCCA,eAAA,uFAGrB;;;iBCAqB,UAAA,CAAA"}
1
+ {"version":3,"file":"dev.d.ts","names":["devContext: DevContext"],"sources":["../src/types/ProxyData.ts","../src/dev/types/DevBoundary.ts","../src/dev/types/DevContext.ts","../src/dev/devContext.ts","../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":[],"mappings":";;;;UAIyB,SAAA;UAChB,OAAO;EAJa,OAGJ,EAAA,OAAA;EACT,OAAA,EAAA,OAAA;EAAP,OAAA,EAGC,GAHD,CAGK,WAHL,EAGkB,WAHlB,GAGgC,QAHhC,CAAA;;;;UCLgB,WAAA;;;;EDCI,KAGJ,EAAA,MAAA;EACT,MAAA,CAAA,EAAA,GAAA;;;;AADS,UECA,UAAA,CFDA;EACT,OAAA,EAAA,OAAA;EAAP,KAAA,EAAA,MAAA;EAGK,KAAA,EAAA,MAAA;EAAa,UAAA,EECd,WFDc,EAAA;EAAc,MAAA,EAAA,GAAA,GAAA,GAAA;EAA/B,UAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EAAA,MAAA,EAAA,GAAA,GAAA,IAAA;;mBESQ;kBACD;gBDlBQ,EAAA,CAAA,MAAA,ECmBC,MDnBD,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;4BCqBE;qBAEP,gBAAgB;EApBP,SAEJ,EAAA,CAAA,MAAA,EAmBJ,MAnBI,EAAA,GAAA,IAAA;;;;cCCnBA,YAAY;;;iBCJM,cAAA,CAAA;;;iBCCA,eAAA,uFAGrB;;;iBCAqB,UAAA,CAAA"}
package/dist/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as devContext_default } from "./devContext-CM-9Rx7k.js";
1
+ import { t as devContext_default } from "./devContext-CevrTlUO.js";
2
2
 
3
3
  //#region src/dev/popDevBoundary.ts
4
4
  function popDevBoundary() {
@@ -113,7 +113,6 @@ function setDevMode() {
113
113
  }
114
114
  };
115
115
  devContext_default.onRegionPushed = (region, toParent) => {
116
- console.log("pushed region", toParent, region);
117
116
  oldDepths.push(devContext_default.depth);
118
117
  if (toParent) {
119
118
  const name = region.name || "Anon Region";
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","names":["devContext","devContext","oldDepths: number[]","nextRegion: Region | null"],"sources":["../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":["import devContext from \"./devContext\";\n\nexport default function popDevBoundary(): void {\n\tdevContext.depth--;\n}\n","import devContext from \"../dev/devContext\";\nimport DevBoundary from \"./types/DevBoundary\";\n\nexport default function pushDevBoundary(\n\ttype: \"component\" | \"region\" | \"run\" | \"watch\" | \"control\" | \"branch\",\n\tname: string,\n): DevBoundary {\n\tconst newBoundary = {\n\t\ttype,\n\t\tid: crypto.randomUUID(),\n\t\tname,\n\t\tdepth: devContext.depth,\n\t};\n\n\tif (devContext.index === -1) {\n\t\tdevContext.boundaries.push(newBoundary);\n\t} else {\n\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\tdevContext.index++;\n\t}\n\n\tdevContext.depth++;\n\n\treturn newBoundary;\n}\n","import type Effect from \"../types/Effect\";\nimport type ProxyData from \"../types/ProxyData\";\nimport type Region from \"../types/Region\";\nimport devContext from \"./devContext\";\nimport type DevBoundary from \"./types/DevBoundary\";\n\nexport default function setDevMode(): void {\n\tdevContext.enabled = true;\n\n\t// Format devContext for passing to DevTools by stripping out nodes etc\n\tdevContext.format = () => {\n\t\treturn {\n\t\t\tboundaries: devContext.boundaries.map((b) => ({\n\t\t\t\ttype: b.type,\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name,\n\t\t\t\tdepth: b.depth,\n\t\t\t\t//details: b.details,\n\t\t\t})),\n\t\t};\n\t};\n\n\tdevContext.getDetails = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary) {\n\t\t\tswitch (boundary.type) {\n\t\t\t\tcase \"run\": {\n\t\t\t\t\treturn String(boundary.target.run);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn \"I'm a \" + boundary.type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"??\";\n\t};\n\n\tdevContext.unmark = () => {\n\t\tconst el = document.getElementById(\"t_dev_mark\");\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t};\n\n\tdevContext.mark = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary && boundary.target?.startNode && boundary.target?.endNode) {\n\t\t\tlet el = document.getElementById(\"t_dev_mark\");\n\t\t\tif (!el) {\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.id = \"t_dev_mark\";\n\t\t\t\tel.style.position = \"absolute\";\n\t\t\t\tdocument.body.append(el);\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStartBefore(boundary.target.startNode);\n\t\t\trange.setEndAfter(boundary.target.endNode);\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tel.style.display = \"block\";\n\t\t\tel.style.left = rect.left + \"px\";\n\t\t\tel.style.top = rect.top + \"px\";\n\t\t\tel.style.height = rect.height + \"px\";\n\t\t\tel.style.width = rect.width + \"px\";\n\t\t\t//el.style.border = \"2px solid limegreen\";\n\t\t\tel.style.borderRadius = \"2px\";\n\t\t\tel.style.boxShadow = \"rgba(50, 205, 50, 0.5) 0px 0px 0px 3px\";\n\t\t\tel.style.pointerEvents = \"none\";\n\t\t}\n\t};\n\n\t// TODO: make this more robust\n\tlet oldDepths: number[] = [];\n\n\tdevContext.onWatch = (proxy: ProxyData) => {\n\t\tlet keys = Object.keys(proxy.target);\n\t\tif (keys.length > 5) {\n\t\t\tkeys = [...keys.slice(0, 5), \"…\"];\n\t\t}\n\t\tlet name = keys.length > 0 ? `{ ${keys.join(\", \")} }` : \"{}\";\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"watch\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: proxy,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRun = (effect: Effect) => {\n\t\tlet name = effect.name;\n\t\tif (name === undefined) {\n\t\t\tconst details = String(effect.run);\n\t\t\tif (details.startsWith(\"function \")) {\n\t\t\t\tname = details.substring(9);\n\t\t\t\tname = name.substring(0, name.indexOf(\"(\"));\n\t\t\t}\n\t\t}\n\t\tif (name === undefined) {\n\t\t\tname = \"runAnon\";\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"run\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: effect,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRegionPushed = (region: Region, toParent: boolean) => {\n\t\tconsole.log(\"pushed region\", toParent, region);\n\t\toldDepths.push(devContext.depth);\n\t\tif (toParent) {\n\t\t\t// It's a new region; bump the depth etc\n\t\t\tconst name = region.name || \"Anon Region\";\n\t\t\tconst id = crypto.randomUUID();\n\t\t\tconst newBoundary = {\n\t\t\t\ttype: \"region\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tdepth: devContext.depth,\n\t\t\t\ttarget: region,\n\t\t\t} satisfies DevBoundary;\n\t\t\tif (devContext.index === -1) {\n\t\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t\t} else {\n\t\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\t\tdevContext.index++;\n\t\t\t}\n\t\t\t//pushDevBoundary(\"region\", name);\n\t\t\tregion.name = `${name} [${id}]`;\n\n\t\t\tdevContext.depth++;\n\n\t\t\tsendMessage({ name: \"REFRESH\" });\n\t\t} else if (region.name) {\n\t\t\tdevContext.index = -1;\n\n\t\t\t// It's an old region; get and set its depth and position for adding children\n\t\t\tconst match = region.name.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tlet id = match[1];\n\t\t\t\tlet index = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tconst parentDepth = devContext.boundaries[index].depth;\n\t\t\t\t\tdevContext.depth = parentDepth + 1;\n\t\t\t\t\t// The index needs to be after the last child of the parent\n\t\t\t\t\tdevContext.index = index + 1;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tdevContext.index < devContext.boundaries.length &&\n\t\t\t\t\t\tdevContext.boundaries[devContext.index].depth > parentDepth\n\t\t\t\t\t) {\n\t\t\t\t\t\tdevContext.index++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tdevContext.onRegionPopped = () => {\n\t\t//popDevBoundary();\n\t\tdevContext.depth = oldDepths.pop() ?? 0;\n\t};\n\n\tdevContext.onRegionCleared = (region: Region) => {\n\t\tlet nextRegion: Region | null = region;\n\t\twhile (true) {\n\t\t\tlet match = nextRegion.name!.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tconst id = match[1];\n\t\t\t\tlet i = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlet depth = devContext.boundaries[i].depth;\n\t\t\t\t\tlet start = i;\n\t\t\t\t\tlet end = devContext.boundaries.length;\n\t\t\t\t\tfor (i++; i < devContext.boundaries.length; i++) {\n\t\t\t\t\t\tif (devContext.boundaries[i].depth <= depth) {\n\t\t\t\t\t\t\tend = i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdevContext.boundaries.splice(start, end - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnextRegion = nextRegion.nextRegion;\n\t\t\tif (nextRegion === null || nextRegion.depth <= region.depth) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tsendMessage({ name: \"REFRESH\" });\n\t};\n\n\t// Messages\n\n\tdevContext.signalSet = (proxy: ProxyData, key: PropertyKey) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === proxy);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Signal set\", id: boundary.id, key: String(key) });\n\t\t}\n\t};\n\n\tdevContext.effectRun = (effect: Effect) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === effect);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Effect run\", id: boundary.id });\n\t\t}\n\t};\n\n\tfunction sendMessage(message: { name: string } & Record<string, string>) {\n\t\twindow.postMessage(\n\t\t\t{\n\t\t\t\tsource: \"t_dev_tools\",\n\t\t\t\tmessage: JSON.stringify(message),\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","names":["devContext","devContext","oldDepths: number[]","nextRegion: Region | null"],"sources":["../src/dev/popDevBoundary.ts","../src/dev/pushDevBoundary.ts","../src/dev/setDevMode.ts"],"sourcesContent":["import devContext from \"./devContext\";\n\nexport default function popDevBoundary(): void {\n\tdevContext.depth--;\n}\n","import devContext from \"../dev/devContext\";\nimport DevBoundary from \"./types/DevBoundary\";\n\nexport default function pushDevBoundary(\n\ttype: \"component\" | \"region\" | \"run\" | \"watch\" | \"control\" | \"branch\",\n\tname: string,\n): DevBoundary {\n\tconst newBoundary = {\n\t\ttype,\n\t\tid: crypto.randomUUID(),\n\t\tname,\n\t\tdepth: devContext.depth,\n\t};\n\n\tif (devContext.index === -1) {\n\t\tdevContext.boundaries.push(newBoundary);\n\t} else {\n\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\tdevContext.index++;\n\t}\n\n\tdevContext.depth++;\n\n\treturn newBoundary;\n}\n","import type Effect from \"../types/Effect\";\nimport type ProxyData from \"../types/ProxyData\";\nimport type Region from \"../types/Region\";\nimport devContext from \"./devContext\";\nimport type DevBoundary from \"./types/DevBoundary\";\n\nexport default function setDevMode(): void {\n\tdevContext.enabled = true;\n\n\t// Format devContext for passing to DevTools by stripping out nodes etc\n\tdevContext.format = () => {\n\t\treturn {\n\t\t\tboundaries: devContext.boundaries.map((b) => ({\n\t\t\t\ttype: b.type,\n\t\t\t\tid: b.id,\n\t\t\t\tname: b.name,\n\t\t\t\tdepth: b.depth,\n\t\t\t\t//details: b.details,\n\t\t\t})),\n\t\t};\n\t};\n\n\tdevContext.getDetails = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary) {\n\t\t\tswitch (boundary.type) {\n\t\t\t\tcase \"run\": {\n\t\t\t\t\treturn String(boundary.target.run);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// TODO:\n\t\t\t\t\treturn \"I'm a \" + boundary.type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"??\";\n\t};\n\n\tdevContext.unmark = () => {\n\t\tconst el = document.getElementById(\"t_dev_mark\");\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t};\n\n\tdevContext.mark = (id: string) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.id === id);\n\t\tif (boundary && boundary.target?.startNode && boundary.target?.endNode) {\n\t\t\tlet el = document.getElementById(\"t_dev_mark\");\n\t\t\tif (!el) {\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.id = \"t_dev_mark\";\n\t\t\t\tel.style.position = \"absolute\";\n\t\t\t\tdocument.body.append(el);\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStartBefore(boundary.target.startNode);\n\t\t\trange.setEndAfter(boundary.target.endNode);\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tel.style.display = \"block\";\n\t\t\tel.style.left = rect.left + \"px\";\n\t\t\tel.style.top = rect.top + \"px\";\n\t\t\tel.style.height = rect.height + \"px\";\n\t\t\tel.style.width = rect.width + \"px\";\n\t\t\t//el.style.border = \"2px solid limegreen\";\n\t\t\tel.style.borderRadius = \"2px\";\n\t\t\tel.style.boxShadow = \"rgba(50, 205, 50, 0.5) 0px 0px 0px 3px\";\n\t\t\tel.style.pointerEvents = \"none\";\n\t\t}\n\t};\n\n\t// TODO: make this more robust\n\tlet oldDepths: number[] = [];\n\n\tdevContext.onWatch = (proxy: ProxyData) => {\n\t\tlet keys = Object.keys(proxy.target);\n\t\tif (keys.length > 5) {\n\t\t\tkeys = [...keys.slice(0, 5), \"…\"];\n\t\t}\n\t\tlet name = keys.length > 0 ? `{ ${keys.join(\", \")} }` : \"{}\";\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"watch\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: proxy,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRun = (effect: Effect) => {\n\t\tlet name = effect.name;\n\t\tif (name === undefined) {\n\t\t\tconst details = String(effect.run);\n\t\t\tif (details.startsWith(\"function \")) {\n\t\t\t\tname = details.substring(9);\n\t\t\t\tname = name.substring(0, name.indexOf(\"(\"));\n\t\t\t}\n\t\t}\n\t\tif (name === undefined) {\n\t\t\tname = \"runAnon\";\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst newBoundary = {\n\t\t\ttype: \"run\",\n\t\t\tid,\n\t\t\tname,\n\t\t\tdepth: devContext.depth,\n\t\t\ttarget: effect,\n\t\t} satisfies DevBoundary;\n\t\tif (devContext.index === -1) {\n\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t} else {\n\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\tdevContext.index++;\n\t\t}\n\t};\n\n\tdevContext.onRegionPushed = (region: Region, toParent: boolean) => {\n\t\toldDepths.push(devContext.depth);\n\t\tif (toParent) {\n\t\t\t// It's a new region; bump the depth etc\n\t\t\tconst name = region.name || \"Anon Region\";\n\t\t\tconst id = crypto.randomUUID();\n\t\t\tconst newBoundary = {\n\t\t\t\ttype: \"region\",\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tdepth: devContext.depth,\n\t\t\t\ttarget: region,\n\t\t\t} satisfies DevBoundary;\n\t\t\tif (devContext.index === -1) {\n\t\t\t\tdevContext.boundaries.push(newBoundary);\n\t\t\t} else {\n\t\t\t\tdevContext.boundaries.splice(devContext.index, 0, newBoundary);\n\t\t\t\tdevContext.index++;\n\t\t\t}\n\t\t\t//pushDevBoundary(\"region\", name);\n\t\t\tregion.name = `${name} [${id}]`;\n\n\t\t\tdevContext.depth++;\n\n\t\t\tsendMessage({ name: \"REFRESH\" });\n\t\t} else if (region.name) {\n\t\t\tdevContext.index = -1;\n\n\t\t\t// It's an old region; get and set its depth and position for adding children\n\t\t\tconst match = region.name.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tlet id = match[1];\n\t\t\t\tlet index = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tconst parentDepth = devContext.boundaries[index].depth;\n\t\t\t\t\tdevContext.depth = parentDepth + 1;\n\t\t\t\t\t// The index needs to be after the last child of the parent\n\t\t\t\t\tdevContext.index = index + 1;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tdevContext.index < devContext.boundaries.length &&\n\t\t\t\t\t\tdevContext.boundaries[devContext.index].depth > parentDepth\n\t\t\t\t\t) {\n\t\t\t\t\t\tdevContext.index++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tdevContext.onRegionPopped = () => {\n\t\t//popDevBoundary();\n\t\tdevContext.depth = oldDepths.pop() ?? 0;\n\t};\n\n\tdevContext.onRegionCleared = (region: Region) => {\n\t\tlet nextRegion: Region | null = region;\n\t\twhile (true) {\n\t\t\tlet match = nextRegion.name!.match(/.+?\\[(.+?)\\]/);\n\t\t\tif (match !== null && match.length > 0) {\n\t\t\t\tconst id = match[1];\n\t\t\t\tlet i = devContext.boundaries.findIndex((b) => b.id === id);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tlet depth = devContext.boundaries[i].depth;\n\t\t\t\t\tlet start = i;\n\t\t\t\t\tlet end = devContext.boundaries.length;\n\t\t\t\t\tfor (i++; i < devContext.boundaries.length; i++) {\n\t\t\t\t\t\tif (devContext.boundaries[i].depth <= depth) {\n\t\t\t\t\t\t\tend = i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdevContext.boundaries.splice(start, end - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnextRegion = nextRegion.nextRegion;\n\t\t\tif (nextRegion === null || nextRegion.depth <= region.depth) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tsendMessage({ name: \"REFRESH\" });\n\t};\n\n\t// Messages\n\n\tdevContext.signalSet = (proxy: ProxyData, key: PropertyKey) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === proxy);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Signal set\", id: boundary.id, key: String(key) });\n\t\t}\n\t};\n\n\tdevContext.effectRun = (effect: Effect) => {\n\t\tconst boundary = devContext.boundaries.find((b) => b.target === effect);\n\t\tif (boundary !== undefined) {\n\t\t\tsendMessage({ name: \"Effect run\", id: boundary.id });\n\t\t}\n\t};\n\n\tfunction sendMessage(message: { name: string } & Record<string, string>) {\n\t\twindow.postMessage(\n\t\t\t{\n\t\t\t\tsource: \"t_dev_tools\",\n\t\t\t\tmessage: JSON.stringify(message),\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}\n}\n"],"mappings":";;;AAEA,SAAwB,iBAAuB;AAC9C,oBAAW;;;;;ACAZ,SAAwB,gBACvB,MACA,MACc;CACd,MAAM,cAAc;EACnB;EACA,IAAI,OAAO,YAAY;EACvB;EACA,OAAOA,mBAAW;EAClB;AAED,KAAIA,mBAAW,UAAU,GACxB,oBAAW,WAAW,KAAK,YAAY;MACjC;AACN,qBAAW,WAAW,OAAOA,mBAAW,OAAO,GAAG,YAAY;AAC9D,qBAAW;;AAGZ,oBAAW;AAEX,QAAO;;;;;ACjBR,SAAwB,aAAmB;AAC1C,oBAAW,UAAU;AAGrB,oBAAW,eAAe;AACzB,SAAO,EACN,YAAYC,mBAAW,WAAW,KAAK,OAAO;GAC7C,MAAM,EAAE;GACR,IAAI,EAAE;GACN,MAAM,EAAE;GACR,OAAO,EAAE;GAET,EAAE,EACH;;AAGF,oBAAW,cAAc,OAAe;EACvC,MAAM,WAAWA,mBAAW,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG;AAC/D,MAAI,SACH,SAAQ,SAAS,MAAjB;GACC,KAAK,MACJ,QAAO,OAAO,SAAS,OAAO,IAAI;GAEnC,QAEC,QAAO,WAAW,SAAS;;AAI9B,SAAO;;AAGR,oBAAW,eAAe;EACzB,MAAM,KAAK,SAAS,eAAe,aAAa;AAChD,MAAI,GACH,IAAG,MAAM,UAAU;;AAIrB,oBAAW,QAAQ,OAAe;EACjC,MAAM,WAAWA,mBAAW,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG;AAC/D,MAAI,YAAY,SAAS,QAAQ,aAAa,SAAS,QAAQ,SAAS;GACvE,IAAI,KAAK,SAAS,eAAe,aAAa;AAC9C,OAAI,CAAC,IAAI;AACR,SAAK,SAAS,cAAc,MAAM;AAClC,OAAG,KAAK;AACR,OAAG,MAAM,WAAW;AACpB,aAAS,KAAK,OAAO,GAAG;;GAGzB,MAAM,QAAQ,SAAS,aAAa;AACpC,SAAM,eAAe,SAAS,OAAO,UAAU;AAC/C,SAAM,YAAY,SAAS,OAAO,QAAQ;GAC1C,MAAM,OAAO,MAAM,uBAAuB;AAE1C,MAAG,MAAM,UAAU;AACnB,MAAG,MAAM,OAAO,KAAK,OAAO;AAC5B,MAAG,MAAM,MAAM,KAAK,MAAM;AAC1B,MAAG,MAAM,SAAS,KAAK,SAAS;AAChC,MAAG,MAAM,QAAQ,KAAK,QAAQ;AAE9B,MAAG,MAAM,eAAe;AACxB,MAAG,MAAM,YAAY;AACrB,MAAG,MAAM,gBAAgB;;;CAK3B,IAAIC,YAAsB,EAAE;AAE5B,oBAAW,WAAW,UAAqB;EAC1C,IAAI,OAAO,OAAO,KAAK,MAAM,OAAO;AACpC,MAAI,KAAK,SAAS,EACjB,QAAO,CAAC,GAAG,KAAK,MAAM,GAAG,EAAE,EAAE,IAAI;EAElC,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM;EAExD,MAAM,cAAc;GACnB,MAAM;GACN,IAHU,OAAO,YAAY;GAI7B;GACA,OAAOD,mBAAW;GAClB,QAAQ;GACR;AACD,MAAIA,mBAAW,UAAU,GACxB,oBAAW,WAAW,KAAK,YAAY;OACjC;AACN,sBAAW,WAAW,OAAOA,mBAAW,OAAO,GAAG,YAAY;AAC9D,sBAAW;;;AAIb,oBAAW,SAAS,WAAmB;EACtC,IAAI,OAAO,OAAO;AAClB,MAAI,SAAS,QAAW;GACvB,MAAM,UAAU,OAAO,OAAO,IAAI;AAClC,OAAI,QAAQ,WAAW,YAAY,EAAE;AACpC,WAAO,QAAQ,UAAU,EAAE;AAC3B,WAAO,KAAK,UAAU,GAAG,KAAK,QAAQ,IAAI,CAAC;;;AAG7C,MAAI,SAAS,OACZ,QAAO;EAGR,MAAM,cAAc;GACnB,MAAM;GACN,IAHU,OAAO,YAAY;GAI7B;GACA,OAAOA,mBAAW;GAClB,QAAQ;GACR;AACD,MAAIA,mBAAW,UAAU,GACxB,oBAAW,WAAW,KAAK,YAAY;OACjC;AACN,sBAAW,WAAW,OAAOA,mBAAW,OAAO,GAAG,YAAY;AAC9D,sBAAW;;;AAIb,oBAAW,kBAAkB,QAAgB,aAAsB;AAClE,YAAU,KAAKA,mBAAW,MAAM;AAChC,MAAI,UAAU;GAEb,MAAM,OAAO,OAAO,QAAQ;GAC5B,MAAM,KAAK,OAAO,YAAY;GAC9B,MAAM,cAAc;IACnB,MAAM;IACN;IACA;IACA,OAAOA,mBAAW;IAClB,QAAQ;IACR;AACD,OAAIA,mBAAW,UAAU,GACxB,oBAAW,WAAW,KAAK,YAAY;QACjC;AACN,uBAAW,WAAW,OAAOA,mBAAW,OAAO,GAAG,YAAY;AAC9D,uBAAW;;AAGZ,UAAO,OAAO,GAAG,KAAK,IAAI,GAAG;AAE7B,sBAAW;AAEX,eAAY,EAAE,MAAM,WAAW,CAAC;aACtB,OAAO,MAAM;AACvB,sBAAW,QAAQ;GAGnB,MAAM,QAAQ,OAAO,KAAK,MAAM,eAAe;AAC/C,OAAI,UAAU,QAAQ,MAAM,SAAS,GAAG;IACvC,IAAI,KAAK,MAAM;IACf,IAAI,QAAQA,mBAAW,WAAW,WAAW,MAAM,EAAE,OAAO,GAAG;AAC/D,QAAI,UAAU,IAAI;KACjB,MAAM,cAAcA,mBAAW,WAAW,OAAO;AACjD,wBAAW,QAAQ,cAAc;AAEjC,wBAAW,QAAQ,QAAQ;AAC3B,YACCA,mBAAW,QAAQA,mBAAW,WAAW,UACzCA,mBAAW,WAAWA,mBAAW,OAAO,QAAQ,YAEhD,oBAAW;;;;;AAOhB,oBAAW,uBAAuB;AAEjC,qBAAW,QAAQ,UAAU,KAAK,IAAI;;AAGvC,oBAAW,mBAAmB,WAAmB;EAChD,IAAIE,aAA4B;AAChC,SAAO,MAAM;GACZ,IAAI,QAAQ,WAAW,KAAM,MAAM,eAAe;AAClD,OAAI,UAAU,QAAQ,MAAM,SAAS,GAAG;IACvC,MAAM,KAAK,MAAM;IACjB,IAAI,IAAIF,mBAAW,WAAW,WAAW,MAAM,EAAE,OAAO,GAAG;AAC3D,QAAI,MAAM,IAAI;KACb,IAAI,QAAQA,mBAAW,WAAW,GAAG;KACrC,IAAI,QAAQ;KACZ,IAAI,MAAMA,mBAAW,WAAW;AAChC,UAAK,KAAK,IAAIA,mBAAW,WAAW,QAAQ,IAC3C,KAAIA,mBAAW,WAAW,GAAG,SAAS,OAAO;AAC5C,YAAM;AACN;;AAGF,wBAAW,WAAW,OAAO,OAAO,MAAM,MAAM;;;AAGlD,gBAAa,WAAW;AACxB,OAAI,eAAe,QAAQ,WAAW,SAAS,OAAO,MACrD;;AAIF,cAAY,EAAE,MAAM,WAAW,CAAC;;AAKjC,oBAAW,aAAa,OAAkB,QAAqB;EAC9D,MAAM,WAAWA,mBAAW,WAAW,MAAM,MAAM,EAAE,WAAW,MAAM;AACtE,MAAI,aAAa,OAChB,aAAY;GAAE,MAAM;GAAc,IAAI,SAAS;GAAI,KAAK,OAAO,IAAI;GAAE,CAAC;;AAIxE,oBAAW,aAAa,WAAmB;EAC1C,MAAM,WAAWA,mBAAW,WAAW,MAAM,MAAM,EAAE,WAAW,OAAO;AACvE,MAAI,aAAa,OAChB,aAAY;GAAE,MAAM;GAAc,IAAI,SAAS;GAAI,CAAC;;CAItD,SAAS,YAAY,SAAoD;AACxE,SAAO,YACN;GACC,QAAQ;GACR,SAAS,KAAK,UAAU,QAAQ;GAChC,EACD,IACA"}
@@ -1,7 +1,8 @@
1
1
 
2
2
  //#region src/dev/devContext.ts
3
+ const DEV_CONTEXT_SYMBOL = Symbol.for("t_dev_context");
3
4
  const noop = () => {};
4
- const devContext = {
5
+ const devContext = globalThis[DEV_CONTEXT_SYMBOL] ??= {
5
6
  enabled: false,
6
7
  depth: 0,
7
8
  index: -1,
@@ -18,7 +19,6 @@ const devContext = {
18
19
  signalSet: noop,
19
20
  effectRun: noop
20
21
  };
21
- globalThis.T_DEV_CTX = devContext;
22
22
  var devContext_default = devContext;
23
23
 
24
24
  //#endregion
@@ -28,4 +28,4 @@ Object.defineProperty(exports, 'devContext_default', {
28
28
  return devContext_default;
29
29
  }
30
30
  });
31
- //# sourceMappingURL=devContext-nomc0xCl.cjs.map
31
+ //# sourceMappingURL=devContext-B3yskfhA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devContext-B3yskfhA.cjs","names":["DEV_CONTEXT_SYMBOL: unique symbol","devContext: DevContext"],"sources":["../src/dev/devContext.ts"],"sourcesContent":["import type DevContext from \"./types/DevContext\";\n\nconst DEV_CONTEXT_SYMBOL: unique symbol = Symbol.for(\"t_dev_context\");\n\nconst noop = () => {};\n\nconst devContext: DevContext =\n\t// @ts-ignore\n\t(globalThis[DEV_CONTEXT_SYMBOL] ??= {\n\t\tenabled: false,\n\t\tdepth: 0,\n\t\tindex: -1,\n\t\tboundaries: [],\n\n\t\tformat: () => \"\",\n\t\tgetDetails: () => \"\",\n\t\tunmark: noop,\n\t\tmark: noop,\n\n\t\t// Hooks\n\t\tonWatch: noop,\n\t\tonRun: noop,\n\t\tonRegionPushed: noop,\n\t\tonRegionPopped: noop,\n\t\tonRegionCleared: noop,\n\n\t\tsignalSet: noop,\n\t\teffectRun: noop,\n\t} satisfies DevContext);\n\nexport default devContext;\n"],"mappings":";;AAEA,MAAMA,qBAAoC,OAAO,IAAI,gBAAgB;AAErE,MAAM,aAAa;AAEnB,MAAMC,aAEJ,WAAW,wBAAwB;CACnC,SAAS;CACT,OAAO;CACP,OAAO;CACP,YAAY,EAAE;CAEd,cAAc;CACd,kBAAkB;CAClB,QAAQ;CACR,MAAM;CAGN,SAAS;CACT,OAAO;CACP,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CAEjB,WAAW;CACX,WAAW;CACX;AAEF,yBAAe"}
@@ -1,6 +1,7 @@
1
1
  //#region src/dev/devContext.ts
2
+ const DEV_CONTEXT_SYMBOL = Symbol.for("t_dev_context");
2
3
  const noop = () => {};
3
- const devContext = {
4
+ const devContext = globalThis[DEV_CONTEXT_SYMBOL] ??= {
4
5
  enabled: false,
5
6
  depth: 0,
6
7
  index: -1,
@@ -17,9 +18,8 @@ const devContext = {
17
18
  signalSet: noop,
18
19
  effectRun: noop
19
20
  };
20
- globalThis.T_DEV_CTX = devContext;
21
21
  var devContext_default = devContext;
22
22
 
23
23
  //#endregion
24
24
  export { devContext_default as t };
25
- //# sourceMappingURL=devContext-CM-9Rx7k.js.map
25
+ //# sourceMappingURL=devContext-CevrTlUO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devContext-CevrTlUO.js","names":["DEV_CONTEXT_SYMBOL: unique symbol","devContext: DevContext"],"sources":["../src/dev/devContext.ts"],"sourcesContent":["import type DevContext from \"./types/DevContext\";\n\nconst DEV_CONTEXT_SYMBOL: unique symbol = Symbol.for(\"t_dev_context\");\n\nconst noop = () => {};\n\nconst devContext: DevContext =\n\t// @ts-ignore\n\t(globalThis[DEV_CONTEXT_SYMBOL] ??= {\n\t\tenabled: false,\n\t\tdepth: 0,\n\t\tindex: -1,\n\t\tboundaries: [],\n\n\t\tformat: () => \"\",\n\t\tgetDetails: () => \"\",\n\t\tunmark: noop,\n\t\tmark: noop,\n\n\t\t// Hooks\n\t\tonWatch: noop,\n\t\tonRun: noop,\n\t\tonRegionPushed: noop,\n\t\tonRegionPopped: noop,\n\t\tonRegionCleared: noop,\n\n\t\tsignalSet: noop,\n\t\teffectRun: noop,\n\t} satisfies DevContext);\n\nexport default devContext;\n"],"mappings":";AAEA,MAAMA,qBAAoC,OAAO,IAAI,gBAAgB;AAErE,MAAM,aAAa;AAEnB,MAAMC,aAEJ,WAAW,wBAAwB;CACnC,SAAS;CACT,OAAO;CACP,OAAO;CACP,YAAY,EAAE;CAEd,cAAc;CACd,kBAAkB;CAClB,QAAQ;CACR,MAAM;CAGN,SAAS;CACT,OAAO;CACP,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CAEjB,WAAW;CACX,WAAW;CACX;AAEF,yBAAe"}
package/dist/index.cjs CHANGED
@@ -1,8 +1,9 @@
1
- const require_devContext = require('./devContext-nomc0xCl.cjs');
1
+ const require_devContext = require('./devContext-B3yskfhA.cjs');
2
2
  const require_formatText = require('./formatText-Ck04q8_X.cjs');
3
3
 
4
4
  //#region src/render/context.ts
5
- const context = {
5
+ const CONTEXT_SYMBOL = Symbol.for("t_context");
6
+ const context = globalThis[CONTEXT_SYMBOL] ??= {
6
7
  activeTarget: null,
7
8
  previousEffect: null,
8
9
  extent: 0,