From 1e5ac700ae1977bb6d1d499ea6f8f0006f075eec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:07:19 +0000 Subject: [PATCH 1/3] Bump @shgysk8zer0/rollup-import from 2.0.2 to 2.0.3 Bumps [@shgysk8zer0/rollup-import](https://github.com/shgysk8zer0/rollup-import) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/shgysk8zer0/rollup-import/releases) - [Changelog](https://github.com/shgysk8zer0/rollup-import/blob/master/CHANGELOG.md) - [Commits](https://github.com/shgysk8zer0/rollup-import/compare/v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: "@shgysk8zer0/rollup-import" dependency-version: 2.0.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 901b348..4e519b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -832,9 +832,9 @@ } }, "node_modules/@shgysk8zer0/rollup-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@shgysk8zer0/rollup-import/-/rollup-import-2.0.2.tgz", - "integrity": "sha512-MLC9jHLZ2an2pID10nwRelzI1kX0xJZxiMY2k9wwz7Asl+1h0rs6WtyN4wCRKERdlEI0I2D8JjKQq+GiG211fw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@shgysk8zer0/rollup-import/-/rollup-import-2.0.3.tgz", + "integrity": "sha512-WDcbYcSo+LgOU2duR8J6OZCpXP3eLtI4+SQI4Y4+d/8JJdOHqCtHeZ8NUjz9/2j1PDFphOFPid7kLbFJ5/VMTQ==", "dev": true, "funding": [ { @@ -848,9 +848,9 @@ ], "license": "MIT", "dependencies": { - "@shgysk8zer0/consts": "^1.0.7", - "@shgysk8zer0/npm-utils": "^1.1.2", - "magic-string": "^0.30.0" + "@shgysk8zer0/consts": "^1.0.8", + "@shgysk8zer0/npm-utils": "^1.1.4", + "magic-string": "^0.30.21" }, "engines": { "node": ">=18.0.0" @@ -912,7 +912,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1222,7 +1221,6 @@ "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", @@ -2111,7 +2109,6 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, From 314551d7b2ac849305bf02da3e811865b2d895c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:07:29 +0000 Subject: [PATCH 2/3] Bump eslint from 10.0.2 to 10.0.3 Bumps [eslint](https://github.com/eslint/eslint) from 10.0.2 to 10.0.3. - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v10.0.2...v10.0.3) --- updated-dependencies: - dependency-name: eslint dependency-version: 10.0.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 55 ++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 901b348..09dc257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -138,15 +138,15 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.2.tgz", - "integrity": "sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==", + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", + "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^3.0.2", + "@eslint/object-schema": "^3.0.3", "debug": "^4.3.1", - "minimatch": "^10.2.1" + "minimatch": "^10.2.4" }, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" @@ -166,9 +166,9 @@ } }, "node_modules/@eslint/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", - "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", + "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -200,9 +200,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", - "integrity": "sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", + "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -210,13 +210,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz", - "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.0", + "@eslint/core": "^1.1.1", "levn": "^0.4.1" }, "engines": { @@ -912,7 +912,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1217,19 +1216,18 @@ } }, "node_modules/eslint": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.2.tgz", - "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.3.tgz", + "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.2", + "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.2", - "@eslint/core": "^1.1.0", - "@eslint/plugin-kit": "^0.6.0", + "@eslint/core": "^1.1.1", + "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -1238,7 +1236,7 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.1", + "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.1.1", "esquery": "^1.7.0", @@ -1251,7 +1249,7 @@ "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.1", + "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -1274,9 +1272,9 @@ } }, "node_modules/eslint-scope": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.1.tgz", - "integrity": "sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2111,7 +2109,6 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, From 932fa61af64884c278b69121a0913c860b8d221b Mon Sep 17 00:00:00 2001 From: Chris Zuber Date: Thu, 12 Mar 2026 16:49:15 -0700 Subject: [PATCH 3/3] Add support for objects with a `handleEvent` property to be callbacks --- CHANGELOG.md | 5 +++++ callbacks.js | 14 ++++++++++---- events.js | 2 +- package-lock.json | 13 ++++++++----- package.json | 8 ++++---- test/index.js | 15 ++++++++++----- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75f5e18..e7dd774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v2.0.2] - 2026-03-11 + +### Added +- Add support for objects with a `handleEvent` property to be callbacks + ## [v2.0.1] - 2026-03-06 ### Changed diff --git a/callbacks.js b/callbacks.js index 8059cfe..5fb4232 100644 --- a/callbacks.js +++ b/callbacks.js @@ -44,6 +44,8 @@ export const FUNCS = { prevent: 'aegis:ui:prevent', revokeObjectURL: 'aegis:ui:revokeObjectURL', cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame', + clearInterval: 'aegis:clearInterval', + clearTimeout: 'aegis:clearTimeout', requestFullscreen: 'aegis:ui:requestFullscreen', toggleFullscreen: 'aegis:ui:toggleFullsceen', exitFullsceen: 'aegis:ui:exitFullscreen', @@ -232,7 +234,7 @@ export const clearRegistry = () => registry.clear(); * @param {Function} callback Callback function to register * @param {object} [config] * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering. - * @returns {string} The automatically generated key/name of the registered callback + * @returns {CallbackRegistryKey} The automatically generated key/name of the registered callback */ export const createCallback = (callback, { stack } = {}) => registerCallback('aegis:callback:' + crypto.randomUUID(), callback, { stack }); @@ -259,14 +261,16 @@ export function callCallback(name, ...args) { * @param {Function} callback The callback value to register * @param {object} config * @param {DisposableStack|AsyncDisposableStack} [config.stack] Optional `DisposableStack` to handle disposal and unregistering. - * @returns {string} The registered name/key + * @returns {CallbackRegistryKey} The registered name/key */ export function registerCallback(name, callback, { stack } = {}) { if (typeof name === 'string') { return registerCallback(new CallbackRegistryKey(name), callback, { stack }); - }else if (! (name instanceof CallbackRegistryKey)) { + } else if (! (name instanceof CallbackRegistryKey)) { throw new TypeError('Callback name must be a disposable string/CallbackRegistryKey.'); - } if (! (callback instanceof Function)) { + } else if (typeof callback === 'object' && typeof callback.handleEvent === 'function') { + return registerCallback(name, callback.handleEvent.bind(callback), { stack }); + } else if (! (typeof callback === 'function' || typeof callback?.handleEvent === 'function')) { throw new TypeError('Callback must be a function.'); } else if (! _isRegistrationOpen) { throw new TypeError('Cannot register new callbacks because registry is closed.'); @@ -340,3 +344,5 @@ export function on(event, callback, { capture = false, passive = false, once = f return parts.map(([prop, val]) => `${prop}="${val}"`).join(' '); } } + +globalThis.registry = registry; diff --git a/events.js b/events.js index 58e5bff..a192616 100644 --- a/events.js +++ b/events.js @@ -212,9 +212,9 @@ const eventAttrs = new Signal.State([ onError, ]); -const selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(', ')); const attrToProp = attr => `on${attr[EVENT_PREFIX_LENGTH].toUpperCase()}${attr.substring(EVENT_PREFIX_LENGTH + 1)}`; +const selector = new Signal.Computed(() => eventAttrs.get().map(attr => `[${CSS.escape(attr)}]`).join(',')); export const eventToProp = event => EVENT_PREFIX + event; diff --git a/package-lock.json b/package-lock.json index fc8d7b5..73197ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aegisjsproject/callback-registry", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@aegisjsproject/callback-registry", - "version": "2.0.1", + "version": "2.0.2", "funding": [ { "type": "librepay", @@ -23,10 +23,10 @@ }, "devDependencies": { "@rollup/plugin-terser": "^1.0.0", - "@shgysk8zer0/eslint-config": "^1.0.5", + "@shgysk8zer0/eslint-config": "^1.0.7", "@shgysk8zer0/polyfills": "^0.6.2", - "@shgysk8zer0/rollup-import": "^2.0.2", - "eslint": "^10.0.2", + "@shgysk8zer0/rollup-import": "^2.0.3", + "eslint": "^10.0.3", "http-server": "^14.1.1", "rollup": "^4.59.0" }, @@ -912,6 +912,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1221,6 +1222,7 @@ "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", @@ -2109,6 +2111,7 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, diff --git a/package.json b/package.json index 4a6ada6..2ac071a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aegisjsproject/callback-registry", - "version": "2.0.1", + "version": "2.0.2", "description": " A callback registry for AegisJSProject", "keywords": [ "aegis", @@ -78,10 +78,10 @@ "homepage": "https://github.com/AegisJSProject/callback-registry#readme", "devDependencies": { "@rollup/plugin-terser": "^1.0.0", - "@shgysk8zer0/eslint-config": "^1.0.5", + "@shgysk8zer0/eslint-config": "^1.0.7", "@shgysk8zer0/polyfills": "^0.6.2", - "@shgysk8zer0/rollup-import": "^2.0.2", - "eslint": "^10.0.2", + "@shgysk8zer0/rollup-import": "^2.0.3", + "eslint": "^10.0.3", "http-server": "^14.1.1", "rollup": "^4.59.0" }, diff --git a/test/index.js b/test/index.js index 14c1815..2478e03 100644 --- a/test/index.js +++ b/test/index.js @@ -1,5 +1,5 @@ -import { onClick, onClose, onCommand, observeEvents, onLoad, onError, registerSignal, signal as signalAttr, controller as controllerAttr, registerController, onDblclick } from '@aegisjsproject/callback-registry/events.js'; -import { createCallback, FUNCS, on, toggleFullsceen, requestFullscreen } from '@aegisjsproject/callback-registry/callbacks.js'; +import { onClick, onClose, onCommand, observeEvents, onLoad, onError, registerSignal, signal as signalAttr, controller as controllerAttr, registerController, onDblclick } from '/events.js'; +import { createCallback, registerCallback, FUNCS, on, toggleFullsceen, requestFullscreen, getCallback } from '/callbacks.js'; const controller = new AbortController(); const signal = registerSignal(controller.signal); @@ -41,9 +41,13 @@ const getSvg = () => new Blob([` `], { type: 'image/svg+xml' }); +const callback = registerCallback('handle:event', { handleEvent: event => console.log('handleEvent', event) }); +console.log(callback); +setTimeout(() => console.log({ handleEvent: getCallback(callback) }), 5000); + /* eslint-disable indent */ document.body.append(html` -