Skip to content

Commit 9d39628

Browse files
committed
refa: adjust exports
1 parent c21bb22 commit 9d39628

File tree

6 files changed

+29
-43
lines changed

6 files changed

+29
-43
lines changed

packages/cordis/src/worker/daemon.ts

+11-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface Config {
88

99
export const name = 'daemon'
1010

11-
export function apply(ctx: Context, config: Config = {}) {
11+
export function* apply(ctx: Context, config: Config = {}) {
1212
function handleSignal(signal: NodeJS.Signals) {
1313
// prevent restarting when child process is exiting
1414
if (config.autoRestart) {
@@ -18,15 +18,16 @@ export function apply(ctx: Context, config: Config = {}) {
1818
ctx.parallel('exit', signal).finally(() => process.exit())
1919
}
2020

21-
ctx.effect(function* () {
22-
process.on('SIGINT', handleSignal)
23-
yield () => process.off('SIGINT', handleSignal)
24-
process.on('SIGTERM', handleSignal)
25-
yield () => process.off('SIGTERM', handleSignal)
26-
}, 'process.on(signal)')
21+
process.on('SIGINT', handleSignal)
22+
yield () => process.off('SIGINT', handleSignal)
23+
process.on('SIGTERM', handleSignal)
24+
yield () => process.off('SIGTERM', handleSignal)
2725

2826
process.send!({ type: 'start', body: config })
29-
config.heartbeatInterval && setInterval(() => {
30-
process.send!({ type: 'heartbeat' })
31-
}, config.heartbeatInterval)
27+
if (config.heartbeatInterval) {
28+
const timer = setInterval(() => {
29+
process.send!({ type: 'heartbeat' })
30+
}, config.heartbeatInterval)
31+
yield () => clearInterval(timer)
32+
}
3233
}

packages/core/src/context.ts

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import { Dict } from 'cosmokit'
2-
import EventsService from './events'
3-
import ReflectService from './reflect'
4-
import Registry from './registry'
2+
import { EventsService } from './events'
3+
import { ReflectService } from './reflect'
4+
import { RegistryService } from './registry'
55
import { getTraceable, symbols } from './utils'
66
import { Fiber } from './fiber'
77

8-
export { EventsService, ReflectService, Registry }
9-
108
export namespace Context {
119
export interface Item<C extends Context> {
1210
name: string
@@ -46,7 +44,7 @@ export interface Context {
4644
root: this
4745
events: EventsService
4846
reflect: ReflectService
49-
registry: Registry<this>
47+
registry: RegistryService<this>
5048
}
5149

5250
export class Context {
@@ -79,7 +77,7 @@ export class Context {
7977
self.root = self
8078
self.fiber = new Fiber(self, {}, Object.create(null), null, () => [])
8179
self.reflect = new ReflectService(self)
82-
self.registry = new Registry(self)
80+
self.registry = new RegistryService(self)
8381
self.events = new EventsService(self)
8482
// ignore internal effects
8583
self.fiber._disposables.clear()

packages/core/src/events.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export interface Hook extends EventOptions {
4444
callback: (...args: any[]) => any
4545
}
4646

47-
class EventsService {
47+
export class EventsService {
4848
_hooks: Record<keyof any, Hook[]> = {}
4949

5050
constructor(private ctx: Context) {
@@ -217,8 +217,6 @@ class EventsService {
217217
}
218218
}
219219

220-
export default EventsService
221-
222220
export interface Events<in C extends Context = Context> {
223221
'internal/plugin'(fiber: Fiber<C>): void
224222
'internal/status'(fiber: Fiber<C>, oldValue: FiberState): void

packages/core/src/fiber.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@ import { Inject, Plugin, resolveConfig } from './registry.js'
44
import { buildOuterStack, composeError, DisposableList, getTraceable, isConstructor, isObject, symbols } from './utils.js'
55

66
declare module './context' {
7-
export interface Context {
7+
export interface Context extends Pick<Fiber, 'effect'> {
88
fiber: Fiber<this>
9-
effect(execute: () => SyncEffect, label?: string): Disposable<void | Promise<void>>
10-
effect(execute: () => AsyncEffect, label?: string): AsyncDisposable<Promise<void>>
11-
effect(execute: () => Effect, label?: string): AsyncDisposable<void | Promise<void>>
129
}
1310
}
1411

@@ -217,6 +214,8 @@ export class Fiber<out C extends Context = Context> {
217214
}, runner.getOuterStack)
218215
}
219216

217+
effect(execute: () => SyncEffect, label?: string): Disposable<Promise<void>>
218+
effect(execute: () => Effect, label?: string): AsyncDisposable<Promise<void>>
220219
effect(execute: () => Effect, label = 'anonymous'): any {
221220
this.assertActive()
222221

@@ -392,6 +391,7 @@ export class Fiber<out C extends Context = Context> {
392391
await this.inertia
393392
}
394393
if (this._error) throw this._error
394+
return this
395395
}
396396

397397
async restart() {

packages/core/src/reflect.ts

+1-8
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@ declare module './context' {
1717
}
1818
}
1919

20-
class ReflectService {
21-
static resolveInject(ctx: Context, name: string) {
22-
const internal = ctx[symbols.internal][name]
23-
return [name, internal] as const
24-
}
25-
20+
export class ReflectService {
2621
static checkInject(ctx: Context, name: string, error: Error, key?: symbol) {
2722
ctx = ctx[symbols.shadow] ?? ctx
2823
// Case 1: built-in services and special properties
@@ -229,5 +224,3 @@ class ReflectService {
229224
})
230225
}
231226
}
232-
233-
export default ReflectService

packages/core/src/registry.ts

+7-11
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ declare module './context' {
116116
}
117117
}
118118

119-
class Registry<out C extends Context = Context> {
119+
export class RegistryService<out C extends Context = Context> {
120120
private _counter = 0
121121
private _internal = new Map<Function, Plugin.Runtime<C>>()
122122
protected context: Context
@@ -188,7 +188,7 @@ class Registry<out C extends Context = Context> {
188188
return this.plugin({ inject, apply: callback, name: callback.name })
189189
}
190190

191-
plugin(plugin: Plugin<C>, config?: any, getOuterStack = buildOuterStack()): Fiber<C> & PromiseLike<Fiber<C>> {
191+
plugin(plugin: Plugin<C>, config?: any, getOuterStack = buildOuterStack()) {
192192
// check if it's a valid plugin
193193
const callback = this.resolve(plugin)
194194
if (!callback) throw new Error('invalid plugin, expect function or object with an "apply" method, received ' + typeof plugin)
@@ -202,15 +202,11 @@ class Registry<out C extends Context = Context> {
202202
this._internal.set(callback, runtime)
203203
}
204204

205-
const fiber = new Fiber(this.ctx, config, Inject.resolve(plugin.inject), runtime, getOuterStack) as Fiber<C> & PromiseLike<Fiber<C>>
206-
fiber.then = (onFulfilled, onRejected) => {
207-
return fiber.await()
208-
.finally(() => fiber.then = undefined!)
209-
.then(() => fiber)
210-
.then(onFulfilled, onRejected)
205+
const fiber = new Fiber(this.ctx, config, Inject.resolve(plugin.inject), runtime, getOuterStack)
206+
const wrapped = Object.create(fiber) as Fiber<C> & PromiseLike<Fiber<C>>
207+
wrapped.then = (onFulfilled, onRejected) => {
208+
return fiber.await().then(onFulfilled, onRejected)
211209
}
212-
return fiber
210+
return wrapped
213211
}
214212
}
215-
216-
export default Registry

0 commit comments

Comments
 (0)