Skip to content

Commit

Permalink
Merge branch 'release/release/0.11.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
holtwick committed Jul 31, 2023
2 parents c01d54e + ec7feea commit f4635b0
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 68 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ deepMerge({ a: { b: 1 } }, { c: 3, a: { d: 4 } }) // {a:{b:1, d:4}, c:4}

```ts
function disposableTimer() {
const timout = setTimeout(() => console.log('hello world'), 1000)
const timeout = setTimeout(() => console.log('hello world'), 1000)
return () => clearTimeout(timeout)
}

Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "zeed",
"type": "module",
"version": "0.11.3",
"version": "0.11.4",
"description": "🌱 Simple foundation library",
"author": {
"name": "Dirk Holtwick",
Expand Down Expand Up @@ -68,14 +68,14 @@
"devDependencies": {
"@antfu/eslint-config": "^0.39.8",
"@antfu/ni": "^0.21.5",
"@types/node": "^20.4.4",
"c8": "^8.0.0",
"@types/node": "^20.4.5",
"c8": "^8.0.1",
"cross-fetch": "^4.0.0",
"esbuild": "^0.18.15",
"eslint": "^8.45.0",
"esbuild": "^0.18.17",
"eslint": "^8.46.0",
"tsup": "^7.1.0",
"typescript": "^5.1.6",
"vite": "^4.4.6",
"vite": "^4.4.7",
"vitest": "^0.33.0"
}
}
67 changes: 7 additions & 60 deletions src/common/dispose-defer.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,10 @@
import type { Disposer, DisposerFunction } from './dispose-types'
import { isString } from './data'
import { arrayFilterInPlace } from './data/array'
import { isPromise } from './exec/promise'
import { DefaultLogger } from './log'
import type { LoggerInterface } from './log-base'

// https://blog.hediet.de/post/the_disposable_pattern_in_typescript

// todo adopt for `using` https://www.totaltypescript.com/typescript-5-2-new-keyword-using

export type DisposerFunction = () => any | Promise<any>

export type Disposer =
| DisposerFunction
| {
dispose?: DisposerFunction | Promise<unknown>
cleanup?: DisposerFunction | Promise<unknown> // deprecated, but used often in my old code
}

export interface Disposable {
dispose: UseDispose
}
import { useEventListener, useInterval, useTimeout } from './dispose-utils'

/** Different kinds of implementations have grown, this should unify them */
function callDisposer(disposable: Disposer): Promise<void> | void {
Expand Down Expand Up @@ -124,6 +109,11 @@ export function useDispose(config?: string | UseDisposeConfig | LoggerInterface)
isDisposed() {
return tracked.length <= 0
},

// Utils
timeout: (fn: DisposerFunction, timeout = 0) => track(useTimeout(fn, timeout)),
interval: (fn: DisposerFunction, interval = 0) => track(useInterval(fn, interval)),
on: (emitter: any, eventName: string, fn: (ev?: any) => void, ...args: any[]) => track(useEventListener(emitter, eventName, fn, ...args)),
})
}

Expand Down Expand Up @@ -187,46 +177,3 @@ export function useDefer(
}

export type UseDefer = ReturnType<typeof useDefer>

export function useTimeout(
fn: DisposerFunction,
timeout = 0,
): DisposerFunction {
let timeoutHandle: any = setTimeout(fn, timeout)
return () => {
if (timeoutHandle) {
clearTimeout(timeoutHandle)
timeoutHandle = undefined
}
}
}

export function useInterval(fn: DisposerFunction, interval: number): DisposerFunction {
let intervalHandle: any = setInterval(fn, interval)
return () => {
if (intervalHandle) {
clearInterval(intervalHandle)
intervalHandle = undefined
}
}
}

export function useEventListener(
emitter: any,
eventName: string,
fn: (ev?: any) => void,
...args: any[]
): DisposerFunction {
if (emitter == null)
return () => { }
if (emitter.on)
emitter.on(eventName, fn, ...args)
else if (emitter.addEventListener)
emitter.addEventListener(eventName, fn, ...args)
return () => {
if (emitter.off)
emitter.off(eventName, fn, ...args)
else if (emitter.removeEventListener)
emitter.removeEventListener(eventName, fn, ...args)
}
}
16 changes: 16 additions & 0 deletions src/common/dispose-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { UseDispose } from './dispose-defer'

// https://blog.hediet.de/post/the_disposable_pattern_in_typescript
// todo adopt for `using` https://www.totaltypescript.com/typescript-5-2-new-keyword-using

export type DisposerFunction = () => any | Promise<any>

export type Disposer = DisposerFunction |
{
dispose?: DisposerFunction | Promise<unknown>
cleanup?: DisposerFunction | Promise<unknown> // deprecated, but used often in my old code
}

export interface Disposable {
dispose: UseDispose
}
44 changes: 44 additions & 0 deletions src/common/dispose-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import type { DisposerFunction } from './dispose-types'

export function useTimeout(
fn: DisposerFunction,
timeout = 0,
): DisposerFunction {
let timeoutHandle: any = setTimeout(fn, timeout)
return () => {
if (timeoutHandle) {
clearTimeout(timeoutHandle)
timeoutHandle = undefined
}
}
}

export function useInterval(fn: DisposerFunction, interval: number): DisposerFunction {
let intervalHandle: any = setInterval(fn, interval)
return () => {
if (intervalHandle) {
clearInterval(intervalHandle)
intervalHandle = undefined
}
}
}

export function useEventListener(
emitter: any,
eventName: string,
fn: (ev?: any) => void,
...args: any[]
): DisposerFunction {
if (emitter == null)
return () => { }
if (emitter.on)
emitter.on(eventName, fn, ...args)
else if (emitter.addEventListener)
emitter.addEventListener(eventName, fn, ...args)
return () => {
if (emitter.off)
emitter.off(eventName, fn, ...args)
else if (emitter.removeEventListener)
emitter.removeEventListener(eventName, fn, ...args)
}
}
2 changes: 2 additions & 0 deletions src/common/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ export * from './crypto'
export * from './csv'
export * from './data'
export * from './dispose-defer'
export * from './dispose-types'
export * from './dispose-utils'
export * from './exec'
export * from './global'
export * from './localhost'
Expand Down
2 changes: 1 addition & 1 deletion src/common/msg/emitter.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.

import { getSecureRandomIfPossible } from '../data/math'
import type { Disposable, DisposerFunction } from '../dispose-defer'
import type { Disposable, DisposerFunction } from '../dispose-types'
import { useDispose } from '../dispose-defer'
import { getGlobalContext } from '../global'
import { promisify } from '../exec/promise'
Expand Down

0 comments on commit f4635b0

Please sign in to comment.