diff --git a/package-lock.json b/package-lock.json index b38bde8..9b3d863 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "preact-custom-element", - "version": "4.4.0", + "version": "4.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "preact-custom-element", - "version": "4.4.0", + "version": "4.5.1", "license": "MIT", "devDependencies": { "@open-wc/testing": "^4.0.0", @@ -19,7 +19,8 @@ "nano-staged": "^0.8.0", "preact": "^10.27.1", "prettier": "^2.1.1", - "simple-git-hooks": "^2.13.1" + "simple-git-hooks": "^2.13.1", + "typescript": "^5.9.2" }, "peerDependencies": { "preact": ">= 10.25.0 || >=11.0.0-0" @@ -11909,11 +11910,11 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, - "peer": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 8e3135d..2b96d25 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "prepare": "npx simple-git-hooks", "build": "microbundle -f cjs,es,umd --no-generateTypes", "lint": "eslint src/*.{js,jsx}", - "test": "wtr src/*.test.{js,jsx}", + "test": "npm run test:types & npm run test:browser", + "test:browser": "wtr test/*.test.{js,jsx}", + "test:types": "tsc -p test/", "prettier": "prettier **/*.{js,jsx} --write", "prepublishOnly": "npm run build && npm run lint && npm run test" }, @@ -22,6 +24,7 @@ "version": "16.8" } }, + "ignorePatterns": ["*.ts", "*.tsx"], "rules": { "brace-style": "off", "jest/expect-expect": "off", @@ -75,7 +78,8 @@ "nano-staged": "^0.8.0", "preact": "^10.27.1", "prettier": "^2.1.1", - "simple-git-hooks": "^2.13.1" + "simple-git-hooks": "^2.13.1", + "typescript": "^5.9.2" }, "simple-git-hooks": { "pre-commit": "npx nano-staged" diff --git a/src/index.test.jsx b/test/index.test.jsx similarity index 99% rename from src/index.test.jsx rename to test/index.test.jsx index fbbe185..4fce9fe 100644 --- a/src/index.test.jsx +++ b/test/index.test.jsx @@ -2,7 +2,7 @@ import { assert } from '@open-wc/testing'; import { h, createContext, Component, Fragment } from 'preact'; import { useContext } from 'preact/hooks'; import { act } from 'preact/test-utils'; -import registerElement from './index'; +import registerElement from '../src/index'; /** @param {string} name */ function createTestElement(name) { diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000..840cf0e --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "noEmit": true, + "skipLibCheck": true, + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + }, + "include": ["./types.test.tsx"], +} diff --git a/test/types.test.tsx b/test/types.test.tsx new file mode 100644 index 0000000..775e47e --- /dev/null +++ b/test/types.test.tsx @@ -0,0 +1,21 @@ +import { h } from 'preact'; +import registerElement from '../src/index'; + +interface AppProps { + name: string; +} + +function App(props: AppProps) { + return

Hello {props.name}!

; +} + +registerElement(App, 'my-app', ['name']); + +// @ts-expect-error `bar` is not a valid prop, so it should not be an observed attribute +registerElement(App, 'my-app', ['name', 'bar']); + +registerElement(App, 'my-app-shadow', ['name'], { + shadow: false, + // @ts-expect-error should not set shadow DOM mode when `shadow` is false + mode: 'open', +});