Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions events.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@ describe('event proxy', () => {
it('expands to simple events', async () => {
const { events, handler } = makeEventProxy('TestComponent')
const element = document.createElement('button')
const click = events.click
const click = events.click as ObservableEvent<MouseEvent>
const sub = handler.applyEvent(click, element, 'click')
const clickPromise = firstValueFrom(
events.click as ObservableEvent<MouseEvent>,
)
const clickPromise = firstValueFrom(click)
element.click()
const mouseev = await clickPromise
equal(mouseev.type, 'click')
Expand Down
2 changes: 1 addition & 1 deletion jsr.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "@worldmaker/butterfloat",
"version": "1.6.4",
"version": "1.6.5",
"exports": "./index.ts"
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "butterfloat",
"version": "1.6.4",
"version": "1.6.5",
"description": "Knockout-inspired view engine for RxJS with TSX",
"homepage": "https://worldmaker.net/butterfloat/",
"repository": "github:WorldMaker/butterfloat",
Expand Down
19 changes: 10 additions & 9 deletions stamp.test.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { JSDOM } from 'jsdom'
import { deepEqual, equal, match, ok } from 'node:assert/strict'
import { describe, it } from 'node:test'
Expand Down Expand Up @@ -90,7 +91,7 @@ describe('stamp', () => {
nodeBinds,
)

match(elementSelectors[0][0], /^h1#example/)
match(elementSelectors[0]?.[0] ?? '', /^h1#example/)
})

it('selects bindings for a top-level element', () => {
Expand Down Expand Up @@ -124,15 +125,15 @@ describe('stamp', () => {
equal(elementBinds.length, expectedElementBinds.length)

for (let i = 0; i < expectedNodeBinds.length; i++) {
const [nodeBind, bindDesc] = nodeBinds[i]
const [expectedNodeBind, expectedBindDesc] = expectedNodeBinds[i]
const [nodeBind, bindDesc] = nodeBinds[i]!
const [expectedNodeBind, expectedBindDesc] = expectedNodeBinds[i]!
deepEqual(nodeBind, expectedNodeBind)
equal(bindDesc, expectedBindDesc)
}

for (let i = 0; i < expectedElementBinds.length; i++) {
const [elementBind, bindDesc] = elementBinds[i]
const [expectedElementBind, expectedBindDesc] = expectedElementBinds[i]
const [elementBind, bindDesc] = elementBinds[i]!
const [expectedElementBind, expectedBindDesc] = expectedElementBinds[i]!
deepEqual(elementBind, expectedElementBind)
equal(bindDesc, expectedBindDesc)
}
Expand All @@ -152,16 +153,16 @@ function bindsEqual(
equal(nodeSelectors.length, nodeBinds.length)

for (let i = 0; i < elementSelectors.length; i++) {
const [selector, selDesc] = elementSelectors[i]
const [element, bindDesc] = elementBinds[i]
const [selector, selDesc] = elementSelectors[i]!
const [element, bindDesc] = elementBinds[i]!
const selElement = stamp.content.querySelector(selector)
deepEqual(selElement, element)
equal(selDesc, bindDesc)
}

for (let i = 0; i < nodeSelectors.length; i++) {
const [selector, selDesc] = nodeSelectors[i]
const [comment, bindDesc] = nodeBinds[i]
const [selector, selDesc] = nodeSelectors[i]!
const [comment, bindDesc] = nodeBinds[i]!
const selElement = stamp.content.querySelector(selector)
const selElementComment = selElement?.childNodes[0] as CharacterData
equal(selElementComment.data, (comment as CharacterData).data)
Expand Down
2 changes: 1 addition & 1 deletion static-dom.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ describe('static-dom', () => {
const div = container as HTMLDivElement
notStrictEqual(div, null)
equal(div.tagName, 'DIV')
equal(elementBinds[0][0], div)
equal(elementBinds[0]?.[0], div)
equal(div.hasChildNodes(), true)

div.remove()
Expand Down
7 changes: 5 additions & 2 deletions static-dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ export function buildElement(
}
let element: Element
if (description.element.includes(':')) {
const [nsAbbrev, elementName] = description.element.split(':')
const [nsAbbrev, elementName] = description.element.split(':') as [
string,
string,
]
let ns = context?.namespaceMap[nsAbbrev]
if (!ns) {
for (const [key, value] of Object.entries(description.attributes)) {
Expand Down Expand Up @@ -66,7 +69,7 @@ export function buildElement(
},
}
} else if (key.includes(':')) {
const [nsAbbrev, attributeName] = key.split(':')
const [nsAbbrev, attributeName] = key.split(':') as [string, string]
const ns = context?.namespaceMap?.[nsAbbrev]
if (!ns) {
throw new Error(`Unknown namespace for '${key}' attribute`)
Expand Down
4 changes: 3 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
"jsxFactory": "jsx",
"jsxFragmentFactory": "Fragment",
"strict": true,
"forceConsistentCasingInFileNames": true
"forceConsistentCasingInFileNames": true,
// additional strictness
"noUncheckedIndexedAccess": true
},
"exclude": ["docs/**"],
"include": ["**/*.ts", "**/*.tsx", "docs/**/*.test.ts", "docs/**/*.test.tsx"]
Expand Down