feat: first release
This commit is contained in:
34
.github/workflows/publish.yml
vendored
Normal file
34
.github/workflows/publish.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Publish
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "deno.json"
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Deno
|
||||
uses: maximousblk/setup-deno@v2 # Installs latest version
|
||||
|
||||
- run: deno task test
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Publish package
|
||||
run: npx jsr publish
|
||||
20
.github/workflows/test.yml
vendored
Normal file
20
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Deno
|
||||
uses: maximousblk/setup-deno@v2 # Installs latest version
|
||||
|
||||
- run: deno task test
|
||||
13
.vscode/settings.json
vendored
Normal file
13
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"deno.enable": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "denoland.vscode-deno",
|
||||
"emeraldwalk.runonsave": {
|
||||
"commands": [
|
||||
{
|
||||
"match": "\\.ts$",
|
||||
"cmd": "deno lint ${file} --fix"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
8
README.md
Normal file
8
README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/1998130/229430454-ca0f2811-d874-4314-b13d-c558de8eec7e.svg" />
|
||||
</p>
|
||||
|
||||
# Event Emitter
|
||||
|
||||
Introduces a `subscribe` extension on the latest popular [eventemitter3](https://github.com/primus/eventemitter3)
|
||||
solution.
|
||||
26
deno.json
Normal file
26
deno.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "@valkyr/event-emitter",
|
||||
"version": "1.0.0",
|
||||
"exports": "./event-emitter.ts",
|
||||
"imports": {
|
||||
"eventemitter3": "npm:eventemitter3@5.0.1"
|
||||
},
|
||||
"exclude": [
|
||||
".vscode"
|
||||
],
|
||||
"lint": {
|
||||
"rules": {
|
||||
"exclude": [
|
||||
"no-explicit-any",
|
||||
"require-await"
|
||||
]
|
||||
}
|
||||
},
|
||||
"fmt": {
|
||||
"lineWidth": 120
|
||||
},
|
||||
"tasks": {
|
||||
"test": "deno test --allow-all --unstable-ffi",
|
||||
"lint": "deno lint --fix"
|
||||
}
|
||||
}
|
||||
20
deno.lock
generated
Normal file
20
deno.lock
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": "3",
|
||||
"packages": {
|
||||
"specifiers": {
|
||||
"npm:eventemitter3@5.0.1": "npm:eventemitter3@5.0.1"
|
||||
},
|
||||
"npm": {
|
||||
"eventemitter3@5.0.1": {
|
||||
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
|
||||
"dependencies": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"remote": {},
|
||||
"workspace": {
|
||||
"dependencies": [
|
||||
"npm:eventemitter3@5.0.1"
|
||||
]
|
||||
}
|
||||
}
|
||||
39
event-emitter.ts
Normal file
39
event-emitter.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { EventEmitter as BaseEventEmitter } from "eventemitter3";
|
||||
|
||||
export class EventEmitter<EventTypes extends ValidEventTypes = string | symbol> extends BaseEventEmitter<EventTypes> {
|
||||
subscribe<T extends EventNames<EventTypes>>(
|
||||
event: T,
|
||||
fn: EventListener<EventTypes, T>,
|
||||
destroy?: () => void,
|
||||
): {
|
||||
unsubscribe: () => void;
|
||||
} {
|
||||
this.addListener(event, fn);
|
||||
return {
|
||||
unsubscribe: () => {
|
||||
this.removeListener(event, fn);
|
||||
if (destroy) {
|
||||
destroy();
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------------
|
||||
| Types
|
||||
|--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
type EventListener<T extends ValidEventTypes, K extends EventNames<T>> = T extends string | symbol
|
||||
? (...args: any[]) => void
|
||||
: (...args: ArgumentMap<Exclude<T, string | symbol>>[Extract<K, keyof T>]) => void;
|
||||
|
||||
type EventNames<T extends ValidEventTypes> = T extends string | symbol ? T : keyof T;
|
||||
|
||||
type ValidEventTypes = string | symbol | Record<string, unknown>;
|
||||
|
||||
type ArgumentMap<T extends Record<string, unknown>> = {
|
||||
[K in keyof T]: T[K] extends (...args: any[]) => void ? Parameters<T[K]> : T[K] extends any[] ? T[K] : any[];
|
||||
};
|
||||
Reference in New Issue
Block a user