Skip to content
Open
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
5 changes: 1 addition & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]

### Changed
- Fix `noImplicitAny` TypeScript errors in `x-template.js` (#357).
- Fix `noImplicitAny` TypeScript errors in `x-parser.js` (#357).
- Re-enable strict type errors for `strictNullChecks`,
`useUnknownInCatchVariables`, and `strictFunctionTypes` (#357).
- Make codebase work with TypeScript’s new `strict: true` default (#357).
- Bump devDependencies (eslint 10, typescript 6, eslint-plugin-jsdoc 62, etc.).

## [2.0.2] - 2026-03-10
Expand Down
2 changes: 0 additions & 2 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,5 @@
"declarationMap": true,
"noEmitOnError": true,
"module": "NodeNext", // Approximates browser target.
// TODO: #357: Fix implicit any types.
"noImplicitAny": false

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was the main goal. I want to take on the TS defaults. We now explicitly call things any — which I think is a lesser evil and something we can decide to fix in the future (or not).

}
}
217 changes: 206 additions & 11 deletions types/x-element.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,50 +127,245 @@ export default class XElement extends HTMLElement {
* @returns {templateCallback}
*/
static template(html: (strings: TemplateStringsArray, ...values: unknown[]) => unknown): (properties: object, host: HTMLElement) => any;
/**
* Called once per class — kicked off from "static get observedAttributes".
* @param {any} constructor
*/
static #analyzeConstructor(constructor: any): void;
/**
* Called during constructor analysis.
* @param {any} constructor
* @param {any} properties
* @param {any} entries
*/
static #validateProperties(constructor: any, properties: any, entries: any): void;
static #validateProperty(constructor: any, key: any, property: any): void;
static #validatePropertyAttribute(constructor: any, key: any, property: any, attribute: any): void;
static #propertyIsCyclic(property: any, inputMap: any, seen?: Set<any>): true | undefined;
/**
* @param {any} constructor
* @param {string} key
* @param {any} property
*/
static #validateProperty(constructor: any, key: string, property: any): void;
/**
* @param {any} constructor
* @param {string} key
* @param {any} property
* @param {string} attribute
*/
static #validatePropertyAttribute(constructor: any, key: string, property: any, attribute: string): void;
/**
* Determines if computed property inputs form a cycle.
* @param {any} property
* @param {any} inputMap
* @param {Set<any>} [seen]
* @returns {boolean | undefined}
*/
static #propertyIsCyclic(property: any, inputMap: any, seen?: Set<any>): boolean | undefined;
/**
* @param {any} constructor
* @param {any} listeners
* @param {any} entries
*/
static #validateListeners(constructor: any, listeners: any, entries: any): void;
static #mutateProperty(constructor: any, propertyMap: any, key: any, property: any): void;
/**
* Called once per-property during constructor analysis.
* @param {any} constructor
* @param {any} propertyMap
* @param {string} key
* @param {any} property
*/
static #mutateProperty(constructor: any, propertyMap: any, key: string, property: any): void;
/**
* Wrapper to improve ergonomics of coalescing nullish, initial value.
* @param {any} constructor
* @param {any} property
*/
static #addPropertyInitial(constructor: any, property: any): void;
/**
* Wrapper to improve ergonomics of coalescing nullish, default value.
* @param {any} constructor
* @param {any} property
*/
static #addPropertyDefault(constructor: any, property: any): void;
/**
* Wrapper to improve ergonomics of syncing attributes back to properties.
* @param {any} constructor
* @param {any} property
*/
static #addPropertySync(constructor: any, property: any): void;
/**
* Wrapper to centralize logic needed to perform reflection.
* @param {any} constructor
* @param {any} property
*/
static #addPropertyReflect(constructor: any, property: any): void;
/**
* Wrapper to prevent repeated compute callbacks.
* @param {any} constructor
* @param {any} property
*/
static #addPropertyCompute(constructor: any, property: any): void;
/**
* Wrapper to provide last value to observe callbacks.
* @param {any} constructor
* @param {any} property
*/
static #addPropertyObserve(constructor: any, property: any): void;
/**
* Called once per-host during construction.
* @param {any} host
*/
static #constructHost(host: any): void;
/**
* Called during host construction.
* @param {any} host
* @param {any} property
* @param {any} hostInfo
*/
static #defineProperty(host: any, property: any, hostInfo: any): void;
/**
* Called during host construction.
* @param {any} host
* @returns {any}
*/
static #createInternal(host: any): any;
/**
* Only available in template callback. Provides getter for all properties.
* Called during host construction.
* @param {any} host
* @returns {any}
*/
static #createProperties(host: any): any;
/**
* Called once per-host from initial "connectedCallback".
* @param {any} host
*/
static #connectHost(host: any): void;
/** @param {any} host */
static #disconnectHost(host: any): void;
/**
* @param {any} host
* @returns {boolean}
*/
static #initializeHost(host: any): boolean;
/**
* Prevent shadowing from properties added to element instance pre-upgrade.
* @param {any} host
*/
static #upgradeOwnProperties(host: any): void;
/**
* Called during host initialization.
* @param {any} host
* @param {any} property
* @param {any} hostInfo
* @returns {{ value: any, found: boolean }}
*/
static #getPreUpgradePropertyValue(host: any, property: any, hostInfo: any): {
value: any;
found: boolean;
};
static #addListener(host: any, element: any, type: any, callback: any, options: any): void;
/**
* @param {any} host
* @param {any} element
* @param {any} type
* @param {any} callback
* @param {any} [options]
*/
static #addListener(host: any, element: any, type: any, callback: any, options?: any): void;
/** @param {any} host */
static #addListeners(host: any): void;
static #removeListener(host: any, element: any, type: any, callback: any, options: any): void;
/**
* @param {any} host
* @param {any} element
* @param {any} type
* @param {any} callback
* @param {any} [options]
*/
static #removeListener(host: any, element: any, type: any, callback: any, options?: any): void;
/** @param {any} host */
static #removeListeners(host: any): void;
/**
* @param {any} host
* @param {any} listener
* @returns {any}
*/
static #getListener(host: any, listener: any): any;
/** @param {any} host */
static #updateHost(host: any): void;
/**
* Used to improve error messaging by appending DOM path information.
* @param {any} host
* @returns {string}
*/
static #toPathString(host: any): string;
/**
* @param {any} host
* @param {any} property
*/
static #invalidateProperty(host: any, property: any): void;
/**
* @param {any} host
* @param {any} property
* @returns {any}
*/
static #getPropertyValue(host: any, property: any): any;
/**
* @param {any} host
* @param {any} property
*/
static #validatePropertyMutable(host: any, property: any): void;
/**
* @param {any} host
* @param {any} property
* @param {any} value
*/
static #validatePropertyValue(host: any, property: any, value: any): void;
/**
* @param {any} host
* @param {any} property
* @param {any} value
*/
static #setPropertyValue(host: any, property: any, value: any): void;
static #serializeProperty(host: any, property: any, value: any): any;
/**
* @param {any} host
* @param {any} property
* @param {any} value
* @returns {string | undefined}
*/
static #serializeProperty(host: any, property: any, value: any): string | undefined;
/**
* @param {any} host
* @param {any} property
* @param {any} value
* @returns {any}
*/
static #deserializeProperty(host: any, property: any, value: any): any;
/**
* Public properties which are serializable or typeless have attributes.
* @param {any} property
* @returns {boolean}
*/
static #propertyHasAttribute(property: any): boolean;
static #getTypeName(value: any): string;
static #notNullish(value: any): boolean;
static #typeIsWrong(type: any, value: any): boolean;
static #camelToKebab(camel: any): any;
/**
* @param {unknown} value
* @returns {string}
*/
static #getTypeName(value: unknown): string;
/**
* @param {unknown} value
* @returns {boolean}
*/
static #notNullish(value: unknown): boolean;
/**
* @param {any} type
* @param {unknown} value
* @returns {boolean}
*/
static #typeIsWrong(type: any, value: unknown): boolean;
/**
* @param {string} camel
* @returns {string | undefined}
*/
static #camelToKebab(camel: string): string | undefined;
static #constructors: WeakMap<WeakKey, any>;
static #hosts: WeakMap<WeakKey, any>;
static #propertyKeys: Set<string>;
Expand Down
2 changes: 1 addition & 1 deletion types/x-element.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading