@xylabs/creatable 5.0.80 → 5.0.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,15 @@
1
1
  import type { BaseClassName } from '@xylabs/base';
2
+ /** The standard lifecycle statuses a creatable can transition through. */
2
3
  export type StandardCreatableStatus = 'creating' | 'created' | 'starting' | 'started' | 'stopping' | 'stopped' | 'error';
4
+ /** A creatable's status, optionally extended with additional custom status values. */
3
5
  export type CreatableStatus<TAdditionalStatus extends void | string = void> = StandardCreatableStatus | (TAdditionalStatus extends void ? StandardCreatableStatus : TAdditionalStatus);
6
+ /** Reports status changes for a creatable, supporting progress tracking and error reporting. */
4
7
  export interface CreatableStatusReporter<TAdditionalStatus extends void | string = void> {
8
+ /** Report a non-error status with a numeric progress value. */
5
9
  report(name: BaseClassName, status: Exclude<CreatableStatus<TAdditionalStatus>, 'error'>, progress: number): void;
10
+ /** Report an error status with the associated Error. */
6
11
  report(name: BaseClassName, status: Extract<CreatableStatus<TAdditionalStatus>, 'error'>, error: Error): void;
12
+ /** Report a status change without progress or error details. */
7
13
  report(name: BaseClassName, status: CreatableStatus<TAdditionalStatus>): void;
8
14
  }
9
15
  //# sourceMappingURL=CreatableStatusReporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatableStatusReporter.d.ts","sourceRoot":"","sources":["../../../src/model/CreatableStatusReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;AACxH,MAAM,MAAM,eAAe,CAAC,iBAAiB,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI,IACtE,uBAAuB,GAAG,CAAC,iBAAiB,SAAS,IAAI,GAAG,uBAAuB,GAAG,iBAAiB,CAAC,CAAA;AAE5G,MAAM,WAAW,uBAAuB,CAAC,iBAAiB,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI;IACrF,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACjH,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IAC7G,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;CAC9E"}
1
+ {"version":3,"file":"CreatableStatusReporter.d.ts","sourceRoot":"","sources":["../../../src/model/CreatableStatusReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,0EAA0E;AAC1E,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;AAExH,sFAAsF;AACtF,MAAM,MAAM,eAAe,CAAC,iBAAiB,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI,IACtE,uBAAuB,GAAG,CAAC,iBAAiB,SAAS,IAAI,GAAG,uBAAuB,GAAG,iBAAiB,CAAC,CAAA;AAE5G,gGAAgG;AAChG,MAAM,WAAW,uBAAuB,CAAC,iBAAiB,SAAS,IAAI,GAAG,MAAM,GAAG,IAAI;IACrF,+DAA+D;IAC/D,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACjH,wDAAwD;IACxD,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IAC7G,gEAAgE;IAChE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAA;CAC9E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/creatable",
3
- "version": "5.0.80",
3
+ "version": "5.0.82",
4
4
  "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -22,35 +22,32 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "types": "./dist/neutral/index.d.ts",
25
- "source": "./src/index.ts",
26
25
  "default": "./dist/neutral/index.mjs"
27
26
  },
28
27
  "./package.json": "./package.json"
29
28
  },
30
29
  "module": "./dist/neutral/index.mjs",
31
- "source": "./src/index.ts",
32
30
  "types": "./dist/neutral/index.d.ts",
33
31
  "files": [
34
32
  "dist",
35
- "src",
36
33
  "!**/*.bench.*",
37
34
  "!**/*.spec.*",
38
35
  "!**/*.test.*"
39
36
  ],
40
37
  "dependencies": {
41
- "@xylabs/assert": "~5.0.80",
42
- "@xylabs/base": "~5.0.80",
43
- "@xylabs/events": "~5.0.80",
44
- "@xylabs/logger": "~5.0.80",
45
- "@xylabs/promise": "~5.0.80",
46
- "@xylabs/telemetry": "~5.0.80",
47
- "@xylabs/typeof": "~5.0.80",
38
+ "@xylabs/assert": "~5.0.82",
39
+ "@xylabs/base": "~5.0.82",
40
+ "@xylabs/events": "~5.0.82",
41
+ "@xylabs/logger": "~5.0.82",
42
+ "@xylabs/promise": "~5.0.82",
43
+ "@xylabs/telemetry": "~5.0.82",
44
+ "@xylabs/typeof": "~5.0.82",
48
45
  "async-mutex": "~0.5.0"
49
46
  },
50
47
  "devDependencies": {
51
- "@xylabs/ts-scripts-yarn3": "~7.3.2",
52
- "@xylabs/tsconfig": "~7.3.2",
53
- "tslib": "~2.8.1",
48
+ "@xylabs/ts-scripts-yarn3": "~7.4.11",
49
+ "@xylabs/tsconfig": "~7.4.11",
50
+ "tslib": "^2.8.1",
54
51
  "typescript": "~5.9.3",
55
52
  "vitest": "~4.0.18"
56
53
  },
@@ -1,269 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import type { EventData } from '@xylabs/events'
3
- import { BaseEmitter } from '@xylabs/events'
4
- import { type Logger } from '@xylabs/logger'
5
- import type { Promisable } from '@xylabs/promise'
6
- import {
7
- SpanConfig, spanRoot, spanRootAsync,
8
- } from '@xylabs/telemetry'
9
- import {
10
- isError, isNumber, isString,
11
- isUndefined,
12
- } from '@xylabs/typeof'
13
- import { Mutex } from 'async-mutex'
14
-
15
- import {
16
- type Creatable, creatable, CreatableFactory,
17
- } from './Creatable.ts'
18
- import { Factory } from './Factory.ts'
19
- import { getFunctionName, getRootFunction } from './lib/index.ts'
20
- import type {
21
- CreatableInstance, CreatableName, CreatableParams,
22
- CreatableStatus,
23
- Labels,
24
- RequiredCreatableParams,
25
- } from './model/index.ts'
26
-
27
- const AbstractCreatableConstructorKey = Symbol.for('AbstractCreatableConstructor')
28
- const CREATABLE_NOT_STARTED = 'Creatable not Started' as const
29
-
30
- @creatable()
31
- export class AbstractCreatable<TParams extends CreatableParams = CreatableParams,
32
- TEventData extends EventData = EventData> extends BaseEmitter<Partial<TParams & RequiredCreatableParams>, TEventData> {
33
- defaultLogger?: Logger
34
-
35
- protected _startPromise: Promisable<boolean> | undefined
36
- private _status: CreatableStatus | null = null
37
- private _statusMutex = new Mutex()
38
- private _validatedParams?: TParams & RequiredCreatableParams
39
-
40
- constructor(key: unknown, params: Partial<TParams & RequiredCreatableParams>) {
41
- assertEx(key === AbstractCreatableConstructorKey, () => 'AbstractCreatable should not be instantiated directly, use the static create method instead')
42
- super(params)
43
- }
44
-
45
- get name(): CreatableName {
46
- return this.params.name as CreatableName
47
- }
48
-
49
- override get params(): TParams & RequiredCreatableParams {
50
- this._validatedParams = this._validatedParams ?? this.paramsValidator(super.params)
51
- return this._validatedParams
52
- }
53
-
54
- get startable() {
55
- return this.status === 'created' || this.status === 'stopped'
56
- }
57
-
58
- get status(): CreatableStatus | null {
59
- return this._status
60
- }
61
-
62
- get statusReporter() {
63
- return this.params.statusReporter
64
- }
65
-
66
- static async create<T extends CreatableInstance>(
67
- this: Creatable<T>,
68
- inParams: Partial<T['params']> = {},
69
- ): Promise<T> {
70
- const params = await this.paramsHandler(inParams)
71
- const name: CreatableName = params.name ?? this.name as CreatableName
72
- try {
73
- const instance = new this(AbstractCreatableConstructorKey, params)
74
- instance.setStatus('creating')
75
- const initializedInstance = await this.createHandler(instance)
76
- await instance.createHandler()
77
- instance.setStatus('created')
78
- return initializedInstance
79
- } catch (ex) {
80
- params.statusReporter?.report(name, 'error', isError(ex) ? ex : new Error(`Error creating: ${name}`))
81
- params.logger?.error(`Error creating creatable [${name}]: ${(isError(ex) ? `${ex.message} ${ex.stack}` : ex)}`)
82
- throw isError(ex) ? ex : new Error(`Error creating: ${name}`)
83
- }
84
- }
85
-
86
- static createHandler<T extends CreatableInstance>(
87
- this: Creatable<T>,
88
- instance: T,
89
- ): Promisable<T> {
90
- return instance
91
- }
92
-
93
- static paramsHandler<T extends CreatableInstance>(
94
- this: Creatable<T>,
95
- params: Partial<T['params']> = {},
96
- ): Promisable<T['params']> {
97
- return { ...params }
98
- }
99
-
100
- createHandler(): Promisable<void> {
101
- assertEx(this._status === 'creating', () => `createHandler can not be called [status = ${this.status}]`)
102
- }
103
-
104
- paramsValidator(params: Partial<TParams & RequiredCreatableParams>): TParams & RequiredCreatableParams {
105
- return { ...params, name: params.name } as TParams & RequiredCreatableParams
106
- }
107
-
108
- span<T>(name: string, fn: () => T): T {
109
- return spanRoot(name, fn, this.tracer)
110
- }
111
-
112
- async spanAsync<T>(name: string, fn: () => Promise<T>, config: SpanConfig = {}): Promise<T> {
113
- return await spanRootAsync(name, fn, {
114
- ...config, tracer: config.tracer ?? this.tracer, logger: config.logger ?? this.defaultLogger,
115
- })
116
- }
117
-
118
- async start(): Promise<boolean> {
119
- this._noOverride('start')
120
- if (this.status === 'started') {
121
- return true
122
- }
123
- return await this._statusMutex.runExclusive(async () => {
124
- try {
125
- // check again in case it changed
126
- if (this.status === 'started') {
127
- return true
128
- }
129
- assertEx(this.startable, () => `Creatable [${this.name}] is not startable in status [${this.status}]`)
130
- this.setStatus('starting')
131
- await this.startHandler()
132
- this.setStatus('started')
133
- return true
134
- } catch (ex) {
135
- this.setStatus('error', isError(ex) ? ex : new Error(`Error starting: ${ex}`))
136
- this.logger?.error(`Error starting creatable [${this.name}]: ${(isError(ex) ? `${ex.message} ${ex.stack}` : ex)}`)
137
- return false
138
- }
139
- })
140
- }
141
-
142
- started(notStartedAction: 'error' | 'throw' | 'warn' | 'log' | 'none' = 'log'): boolean {
143
- if (isString(this.status) && this.status === 'started') {
144
- return true
145
- } else {
146
- const message = () => `${CREATABLE_NOT_STARTED} [${this.name}] current state: ${this.status}`
147
- switch (notStartedAction) {
148
- case 'error': {
149
- throw new Error(message())
150
- }
151
- case 'throw': {
152
- throw new Error(message())
153
- }
154
- case 'warn': {
155
- this.logger?.warn(message())
156
- break
157
- }
158
- case 'log': {
159
- this.logger?.log(message())
160
- break
161
- }
162
- case 'none': {
163
- break
164
- }
165
- default: {
166
- throw new Error(`Unknown notStartedAction: ${notStartedAction}`)
167
- }
168
- }
169
- return false
170
- }
171
- }
172
-
173
- async startedAsync(notStartedAction: 'error' | 'throw' | 'warn' | 'log' | 'none' = 'log', tryStart = true): Promise<boolean> {
174
- if (isString(this.status) && this.status === 'started') {
175
- return true
176
- } else if (this.status === 'created' || this.status === 'stopped' || this.status === 'starting') {
177
- // using promise as mutex
178
- this._startPromise = this._startPromise ?? (async () => {
179
- if (tryStart) {
180
- try {
181
- return await this.start()
182
- } finally {
183
- this._startPromise = undefined
184
- }
185
- }
186
- return this.started(notStartedAction)
187
- })()
188
- } else {
189
- const message = `${CREATABLE_NOT_STARTED} [${this.name}] current state: ${this.status}`
190
- throw new Error(message)
191
- }
192
-
193
- if (isUndefined(this._startPromise)) {
194
- throw new Error(`Failed to create start promise: ${this.status}`)
195
- }
196
- return await this._startPromise
197
- }
198
-
199
- async stop(): Promise<boolean> {
200
- this._noOverride('stop')
201
- if (this.status === 'stopped') {
202
- return true
203
- }
204
- return await this._statusMutex.runExclusive(async () => {
205
- try {
206
- // check again in case it changed
207
- if (this.status === 'stopped') {
208
- return true
209
- }
210
- assertEx(this.status === 'started', () => `Creatable [${this.name}] is not stoppable in status [${this.status}]`)
211
- this.setStatus('stopping')
212
- await this.stopHandler()
213
- this.setStatus('stopped')
214
- return true
215
- } catch (ex) {
216
- this.setStatus('error', isError(ex) ? ex : new Error(`Error stopping: ${ex}`))
217
- return false
218
- }
219
- })
220
- }
221
-
222
- protected _noOverride(functionName = getFunctionName(3)) {
223
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
224
- const thisFunc = (this as any)[functionName]
225
-
226
- const rootFunc = getRootFunction(this, functionName)
227
- assertEx(thisFunc === rootFunc, () => `Override not allowed for [${functionName}] - override ${functionName}Handler instead`)
228
- }
229
-
230
- protected setStatus(value: Exclude<CreatableStatus, 'error'>, progress?: number): void
231
- protected setStatus(value: Extract<CreatableStatus, 'error'>, error?: Error): void
232
- protected setStatus(value: CreatableStatus, progressOrError?: number | Error): void {
233
- this._status = value
234
- if (value !== null) {
235
- if (value === 'error') {
236
- if (isError(progressOrError)) {
237
- this.statusReporter?.report(this.name, value, progressOrError)
238
- return
239
- }
240
- } else {
241
- if (isNumber(progressOrError)) {
242
- this.statusReporter?.report(this.name, value, progressOrError)
243
- return
244
- }
245
- }
246
- this.statusReporter?.report(this.name, value)
247
- }
248
- }
249
-
250
- protected startHandler(): Promisable<void> {
251
- // when overriding this, throw an error on failure
252
- }
253
-
254
- protected stopHandler(): Promisable<void> {
255
- // when overriding this, throw an error on failure
256
- }
257
- }
258
-
259
- @creatable()
260
- export class AbstractCreatableWithFactory<TParams extends CreatableParams = CreatableParams,
261
- TEventData extends EventData = EventData> extends AbstractCreatable<TParams, TEventData> {
262
- static factory<T extends CreatableInstance>(
263
- this: Creatable<T>,
264
- params?: Partial<T['params']>,
265
- labels?: Labels,
266
- ): CreatableFactory<T> {
267
- return Factory.withParams<T>(this, params, labels)
268
- }
269
- }
package/src/Creatable.ts DELETED
@@ -1,69 +0,0 @@
1
- import type { Logger } from '@xylabs/logger'
2
- import type { Promisable } from '@xylabs/promise'
3
-
4
- import type { AbstractCreatable } from './AbstractCreatable.ts'
5
- import type {
6
- CreatableInstance, CreatableParams, Labels,
7
- RequiredCreatableParams,
8
- } from './model/index.ts'
9
-
10
- export interface CreatableFactory<T extends CreatableInstance = CreatableInstance>
11
- extends Omit<Creatable<T>, 'create' | 'createHandler' | 'paramsHandler' | 'defaultLogger' | 'factory'> {
12
-
13
- create(
14
- this: CreatableFactory<T>,
15
- params?: Partial<T['params']>): Promise<T>
16
- }
17
-
18
- export interface Creatable<T extends CreatableInstance = CreatableInstance> {
19
-
20
- defaultLogger?: Logger
21
-
22
- new(key: unknown, params: Partial<CreatableParams>): T & AbstractCreatable<T['params']>
23
-
24
- create<T extends CreatableInstance>(
25
- this: Creatable<T>,
26
- params?: Partial<T['params']>): Promise<T>
27
-
28
- createHandler<T extends CreatableInstance>(
29
- this: Creatable<T>,
30
- instance: T
31
- ): Promisable<T>
32
-
33
- paramsHandler<T extends CreatableInstance>(
34
- this: Creatable<T>, params?: Partial<T['params']>): Promisable<T['params'] & RequiredCreatableParams>
35
- }
36
-
37
- export interface CreatableWithFactory<T extends CreatableInstance = CreatableInstance> extends Creatable<T> {
38
- factory<T extends CreatableInstance>(
39
- this: Creatable<T>,
40
- params?: Partial<T['params']>,
41
- labels?: Labels): CreatableFactory<T>
42
- }
43
-
44
- /**
45
- * Class annotation to be used to decorate Modules which support
46
- * an asynchronous creation pattern
47
- * @returns The decorated Module requiring it implement the members
48
- * of the CreatableModule as statics properties/methods
49
- */
50
- export function creatable<T extends CreatableInstance>() {
51
- return <U extends Creatable<T>>(constructor: U) => {
52
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
53
- constructor
54
- }
55
- }
56
-
57
- /**
58
- * Class annotation to be used to decorate Modules which support
59
- * an asynchronous creation factory pattern
60
- * @returns The decorated Module requiring it implement the members
61
- * of the CreatableModule as statics properties/methods
62
- */
63
-
64
- export function creatableFactory() {
65
- return <U extends CreatableFactory>(constructor: U) => {
66
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
67
- constructor
68
- }
69
- }
package/src/Factory.ts DELETED
@@ -1,38 +0,0 @@
1
- import { type Creatable, type CreatableFactory } from './Creatable.ts'
2
- import type {
3
- CreatableInstance, Labels, WithOptionalLabels,
4
- } from './model/index.ts'
5
-
6
- export class Factory<T extends CreatableInstance = CreatableInstance> implements CreatableFactory<T> {
7
- creatable: Creatable<T>
8
-
9
- defaultParams?: Partial<T['params']>
10
-
11
- labels?: Labels
12
-
13
- constructor(
14
- creatable: Creatable<T>,
15
- params?: Partial<T['params']>,
16
- labels: Labels = {},
17
- ) {
18
- this.creatable = creatable
19
- this.defaultParams = params
20
- this.labels = Object.assign({}, (creatable as WithOptionalLabels).labels ?? {}, labels ?? {})
21
- }
22
-
23
- static withParams<T extends CreatableInstance>(
24
- creatableModule: Creatable<T>,
25
- params?: Partial<T['params']>,
26
- labels: Labels = {},
27
- ) {
28
- return new Factory<T>(creatableModule, params, labels)
29
- }
30
-
31
- create(params?: Partial<T['params']>): Promise<T> {
32
- const mergedParams: T['params'] = {
33
- ...this.defaultParams,
34
- ...params,
35
- } as T['params']
36
- return this.creatable.create<T>(mergedParams)
37
- }
38
- }
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './AbstractCreatable.ts'
2
- export * from './Creatable.ts'
3
- export * from './Factory.ts'
4
- export * from './model/index.ts'
@@ -1,18 +0,0 @@
1
- import { isNumber } from '@xylabs/typeof'
2
-
3
- export function getFunctionName(depth = 2) {
4
- const error = new Error('Stack')
5
- let newIndex: number | undefined
6
- const stackParts = error.stack?.split('\n')[depth]?.split(' ')
7
- const funcName
8
- = stackParts?.find((item, index) => {
9
- if (item.length > 0 && item !== 'at') {
10
- // check if constructor
11
- if (item === 'new') {
12
- newIndex = index
13
- }
14
- return true
15
- }
16
- }) ?? '<unknown>'
17
- return isNumber(newIndex) ? `${funcName} ${stackParts?.[newIndex + 1]}` : funcName
18
- }
@@ -1,8 +0,0 @@
1
- export function getRootFunction(obj: unknown, funcName: string) {
2
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
- let anyObj = obj as any
4
- while (anyObj.__proto__?.[funcName]) {
5
- anyObj = anyObj.__proto__
6
- }
7
- return anyObj[funcName]
8
- }
package/src/lib/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './getFunctionName.ts'
2
- export * from './getRootFunction.ts'
@@ -1,12 +0,0 @@
1
- import type { EventData, EventEmitter } from '@xylabs/events'
2
-
3
- import type { CreatableName, CreatableParams } from './CreatableParams.ts'
4
-
5
- export interface CreatableInstance<TParams extends CreatableParams = CreatableParams,
6
- TEventData extends EventData = EventData> extends EventEmitter<TEventData> {
7
- eventData: TEventData
8
- name: CreatableName
9
- params: TParams
10
- start: () => Promise<boolean>
11
- stop: () => Promise<boolean>
12
- }
@@ -1,13 +0,0 @@
1
- import type { BaseClassName } from '@xylabs/base'
2
- import type { BaseEmitterParams } from '@xylabs/events'
3
-
4
- import type { CreatableStatus, CreatableStatusReporter } from './CreatableStatusReporter.ts'
5
-
6
- export type CreatableName = Exclude<string, 'creatable-name-reserved-32546239486'> & BaseClassName
7
-
8
- export interface RequiredCreatableParams<TAdditionalStatus extends CreatableStatus | void = void> extends BaseEmitterParams {
9
- name?: CreatableName
10
- statusReporter?: CreatableStatusReporter<TAdditionalStatus>
11
- }
12
-
13
- export interface CreatableParams extends RequiredCreatableParams, BaseEmitterParams {}
@@ -1,11 +0,0 @@
1
- import type { BaseClassName } from '@xylabs/base'
2
-
3
- export type StandardCreatableStatus = 'creating' | 'created' | 'starting' | 'started' | 'stopping' | 'stopped' | 'error'
4
- export type CreatableStatus<TAdditionalStatus extends void | string = void>
5
- = StandardCreatableStatus | (TAdditionalStatus extends void ? StandardCreatableStatus : TAdditionalStatus)
6
-
7
- export interface CreatableStatusReporter<TAdditionalStatus extends void | string = void> {
8
- report(name: BaseClassName, status: Exclude<CreatableStatus<TAdditionalStatus>, 'error'>, progress: number): void
9
- report(name: BaseClassName, status: Extract<CreatableStatus<TAdditionalStatus>, 'error'>, error: Error): void
10
- report(name: BaseClassName, status: CreatableStatus<TAdditionalStatus>): void
11
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Object used to represent labels identifying a resource.
3
- */
4
- export interface Labels {
5
- [key: string]: string | undefined
6
- }
7
-
8
- /**
9
- * Interface for objects that have labels.
10
- */
11
- export interface WithLabels<T extends Labels = Labels> {
12
- labels: T
13
- }
14
-
15
- /**
16
- * Interface for objects that have labels.
17
- */
18
- export interface WithOptionalLabels<T extends Labels = Labels> {
19
- labels?: T
20
- }
21
-
22
- /**
23
- * Returns true if the source object has all the labels from the required set
24
- * @param source Source object to check against
25
- * @param required Set of labels to check for in source
26
- * @returns True of the source object has all the labels from the required set
27
- */
28
- export const hasAllLabels = (source?: Labels, required?: Labels): boolean => {
29
- if (!required) return true
30
- return Object.entries(required).every(([key, value]) => {
31
- return source?.hasOwnProperty(key as keyof typeof source) && source?.[key as keyof typeof source] === value
32
- })
33
- }
@@ -1,4 +0,0 @@
1
- export * from './CreatableInstance.ts'
2
- export * from './CreatableParams.ts'
3
- export * from './CreatableStatusReporter.ts'
4
- export * from './Labels.ts'