Base functionality used throughout XY Labs TypeScript/JavaScript libraries
npm install @xylabs/creatable[![logo][]](https://xylabs.com)
[![main-build][]][main-build-link]
[![npm-badge][]][npm-link]
[![npm-downloads-badge][]][npm-link]
[![jsdelivr-badge][]][jsdelivr-link]
[![npm-license-badge][]](LICENSE)
[![codacy-badge][]][codacy-link]
[![codeclimate-badge][]][codeclimate-link]
[![snyk-badge][]][snyk-link]
[![socket-badge][]][socket-link]
Base functionality used throughout XY Labs TypeScript/JavaScript libraries
@xylabs/creatable
*
- AbstractCreatable
- AbstractCreatableWithFactory
- Factory
- CreatableFactory
- Creatable
- CreatableWithFactory
- CreatableInstance
- CreatableParams
- CreatableStatusReporter
- Labels
- WithLabels
- WithOptionalLabels
- CreatableName
- CreatableStatus
- creatable
- creatableFactory
- hasAllLabels
*
- BaseEmitter\<Partial\<TParams\>, TEventData\>
- AbstractCreatableWithFactory
TParams extends CreatableParams = CreatableParams
TEventData extends EventData = EventData
``ts`
new AbstractCreatable
#### key
unknown
#### params
Partial\<TParams\>
AbstractCreatable\<TParams, TEventData\>
`ts`
BaseEmitter
`ts`
static optional defaultLogger: Logger;
`ts`
BaseEmitter.defaultLogger
*
`ts`
readonly static globalInstances: Record
`ts`
BaseEmitter.globalInstances
*
`ts`
readonly static globalInstancesCountHistory: Record
`ts`
BaseEmitter.globalInstancesCountHistory
*
`ts`
readonly static uniqueName: string;
`ts`
BaseEmitter.uniqueName
*
`ts`
optional defaultLogger: Logger;
*
`ts`
eventData: TEventData;
`ts`
BaseEmitter.eventData
`ts`
get static historyInterval(): number;
#### Returns
number
`ts`
set static historyInterval(value): void;
#### Parameters
##### value
number
#### Returns
void
`ts`
BaseEmitter.historyInterval
*
`ts`
get static historyTime(): number;
#### Returns
number
`ts`
set static historyTime(value): void;
#### Parameters
##### value
number
#### Returns
void
`ts`
BaseEmitter.historyTime
*
`ts`
get static maxGcFrequency(): number;
#### Returns
number
`ts`
set static maxGcFrequency(value): void;
#### Parameters
##### value
number
#### Returns
void
`ts`
BaseEmitter.maxGcFrequency
*
`ts`
get static maxHistoryDepth(): number;
#### Returns
number
`ts`
BaseEmitter.maxHistoryDepth
*
`ts`
get logger(): undefined | Logger;
#### Returns
undefined \| Logger
`ts`
BaseEmitter.logger
*
`ts`
get meter(): undefined | Meter;
#### Returns
undefined \| Meter
`ts`
BaseEmitter.meter
*
`ts`
get tracer(): undefined | Tracer;
#### Returns
undefined \| Tracer
`ts`
BaseEmitter.tracer
*
`ts`
get name(): string;
#### Returns
string
*
`ts`
get params(): TParams;
#### Returns
TParams
`ts`
BaseEmitter.params
*
`ts`
get statusReporter():
| undefined
| CreatableStatusReporter
#### Returns
\| undefinedCreatableStatusReporter
\| \<void\>
`ts`
static gc(force?): void;
#### Parameters
##### force?
boolean
#### Returns
void
#### Inherited from
`ts`
BaseEmitter.gc
`ts`
static gc(className): void;
#### Parameters
##### className
string
#### Returns
void
#### Inherited from
`ts`
BaseEmitter.gc
*
`ts`
static instanceCount(className): number;
#### className
string
number
`ts`
BaseEmitter.instanceCount
*
`ts`
static instanceCounts(): Record
Record\<BaseClassName, number\>
`ts`
BaseEmitter.instanceCounts
*
`ts`
static startHistory(): void;
void
`ts`
BaseEmitter.startHistory
*
`ts`
static stopHistory(): void;
void
`ts`
BaseEmitter.stopHistory
*
`ts`
static create
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### inParams
Partial\<T\["params"\]\> = {}
Promise\<T\>
*
`ts`
static createHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### instance
T
Promisable\<T\>
*
`ts`
static paramsHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params
Partial\<T\["params"\]\> = {}
Promisable\<T\["params"\]\>
*
`ts`
createHandler(): Promisable
Promisable\<void\>
*
`ts`
paramsValidator(params): TParams;
#### params
Partial\<TParams\>
TParams
*
`ts`
start(): Promise
Promise\<boolean\>
*
`ts`
stop(): Promise
Promise\<boolean\>
*
`ts`
protected _noOverride(functionName): void;
#### functionName
string = ...
void
*
`ts`
protected startHandler(): Promisable
Promisable\<void\>
*
`ts`
protected stopHandler(): Promisable
Promisable\<void\>
*
`ts`
clearListeners(eventNames): this;
#### eventNames
keyof TEventData | keyof TEventData[]
this
`ts`
BaseEmitter.clearListeners
*
`ts`
emit
#### TEventName
TEventName extends string \| number \| symbol = keyof TEventData
#### TEventArgs
TEventArgs extends EventArgs = TEventData\[TEventName\]
#### eventName
TEventName
#### eventArgs
TEventArgs
Promise\<void\>
`ts`
BaseEmitter.emit
*
`ts`
emitSerial
#### TEventName
TEventName extends string \| number \| symbol = keyof TEventData
#### TEventArgs
TEventArgs extends EventArgs = TEventData\[TEventName\]
#### eventName
TEventName
#### eventArgs
TEventArgs
Promise\<void\>
`ts`
BaseEmitter.emitSerial
*
`ts`
listenerCount(eventNames): number;
#### eventNames
keyof TEventData | keyof TEventData[]
number
`ts`
BaseEmitter.listenerCount
*
`ts`
off
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
void
`ts`
BaseEmitter.off
*
`ts`
offAny(listener): void;
#### listener
EventAnyListener
void
`ts`
BaseEmitter.offAny
*
`ts`
on
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
`ts`
(): void;
#### Returns
void
`ts`
BaseEmitter.on
*
`ts`
onAny(listener): () => void;
#### listener
EventAnyListener
`ts`
(): void;
#### Returns
void
`ts`
BaseEmitter.onAny
*
`ts`
once
#### TEventName
TEventName extends string \| number \| symbol
#### eventName
TEventName
#### listener
EventListener\<TEventData\[TEventName\]\>
`ts`
(): void;
#### Returns
void
`ts`
BaseEmitter.once
### AbstractCreatableWithFactory
*
- AbstractCreatable\<TParams, TEventData\>
TParams extends CreatableParams = CreatableParams
TEventData extends EventData = EventData
`ts`
new AbstractCreatableWithFactory
#### key
unknown
#### params
Partial\<TParams\>
AbstractCreatableWithFactory\<TParams, TEventData\>
`ts`
static optional defaultLogger: Logger;
AbstractCreatable.defaultLogger
*
`ts`
readonly static globalInstances: Record
AbstractCreatable.globalInstances
*
`ts`
readonly static globalInstancesCountHistory: Record
AbstractCreatable.globalInstancesCountHistory
*
`ts`
readonly static uniqueName: string;
*
`ts`
optional defaultLogger: Logger;
AbstractCreatable.defaultLogger
*
`ts`
eventData: TEventData;
`ts`
get static historyInterval(): number;
#### Returns
number
`ts`
set static historyInterval(value): void;
#### Parameters
##### value
number
#### Returns
void
AbstractCreatable.historyInterval
*
`ts`
get static historyTime(): number;
#### Returns
number
`ts`
set static historyTime(value): void;
#### Parameters
##### value
number
#### Returns
void
*
`ts`
get static maxGcFrequency(): number;
#### Returns
number
`ts`
set static maxGcFrequency(value): void;
#### Parameters
##### value
number
#### Returns
void
AbstractCreatable.maxGcFrequency
*
`ts`
get static maxHistoryDepth(): number;
#### Returns
number
AbstractCreatable.maxHistoryDepth
*
`ts`
get logger(): undefined | Logger;
#### Returns
undefined \| Logger
*
`ts`
get meter(): undefined | Meter;
#### Returns
undefined \| Meter
*
`ts`
get tracer(): undefined | Tracer;
#### Returns
undefined \| Tracer
*
`ts`
get name(): string;
#### Returns
string
*
`ts`
get params(): TParams;
#### Returns
TParams
*
`ts`
get statusReporter():
| undefined
| CreatableStatusReporter
#### Returns
\| undefinedCreatableStatusReporter
\| \<void\>
AbstractCreatable.statusReporter
`ts`
static gc(force?): void;
#### Parameters
##### force?
boolean
#### Returns
void
#### Inherited from
`ts`
static gc(className): void;
#### Parameters
##### className
string
#### Returns
void
#### Inherited from
*
`ts`
static instanceCount(className): number;
#### className
string
number
AbstractCreatable.instanceCount
*
`ts`
static instanceCounts(): Record
Record\<BaseClassName, number\>
AbstractCreatable.instanceCounts
*
`ts`
static startHistory(): void;
void
AbstractCreatable.startHistory
*
`ts`
static stopHistory(): void;
void
*
`ts`
static create
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### inParams
Partial\<T\["params"\]\> = {}
Promise\<T\>
*
`ts`
static createHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### instance
T
Promisable\<T\>
AbstractCreatable.createHandler
*
`ts`
static paramsHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params
Partial\<T\["params"\]\> = {}
Promisable\<T\["params"\]\>
AbstractCreatable.paramsHandler
*
`ts`
createHandler(): Promisable
Promisable\<void\>
AbstractCreatable.createHandler
*
`ts`
paramsValidator(params): TParams;
#### params
Partial\<TParams\>
TParams
AbstractCreatable.paramsValidator
*
`ts`
start(): Promise
Promise\<boolean\>
*
`ts`
stop(): Promise
Promise\<boolean\>
*
`ts`
protected _noOverride(functionName): void;
#### functionName
string = ...
void
*
`ts`
protected startHandler(): Promisable
Promisable\<void\>
AbstractCreatable.startHandler
*
`ts`
protected stopHandler(): Promisable
Promisable\<void\>
*
`ts`
static factory
this,
params?,
labels?): CreatableFactory
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
#### labels?
CreatableFactory\<T\>
*
`ts`
clearListeners(eventNames): this;
#### eventNames
keyof TEventData | keyof TEventData[]
this
AbstractCreatable.clearListeners
*
`ts`
emit
#### TEventName
TEventName extends string \| number \| symbol = keyof TEventData
#### TEventArgs
TEventArgs extends EventArgs = TEventData\[TEventName\]
#### eventName
TEventName
#### eventArgs
TEventArgs
Promise\<void\>
*
`ts`
emitSerial
#### TEventName
TEventName extends string \| number \| symbol = keyof TEventData
#### TEventArgs
TEventArgs extends EventArgs = TEventData\[TEventName\]
#### eventName
TEventName
#### eventArgs
TEventArgs
Promise\<void\>
*
`ts`
listenerCount(eventNames): number;
#### eventNames
keyof TEventData | keyof TEventData[]
number
AbstractCreatable.listenerCount
*
`ts`
off
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
void
*
`ts`
offAny(listener): void;
#### listener
EventAnyListener
void
*
`ts`
on
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
`ts`
(): void;
#### Returns
void
*
`ts`
onAny(listener): () => void;
#### listener
EventAnyListener
`ts`
(): void;
#### Returns
void
*
`ts`
once
#### TEventName
TEventName extends string \| number \| symbol
#### eventName
TEventName
#### listener
EventListener\<TEventData\[TEventName\]\>
`ts`
(): void;
#### Returns
void
*
T extends CreatableInstance = CreatableInstance
- CreatableFactory\<T\>
`ts`
new Factory
creatable,
params?,
labels?): Factory
#### creatable
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
#### labels?
Labels = {}
Factory\<T\>
`ts`
creatable: Creatable
*
`ts`
optional defaultParams: Partial
*
`ts`
optional labels: Labels;
`ts`
static withParams
creatableModule,
params?,
labels?): Factory
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### creatableModule
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
#### labels?
Labels = {}
Factory\<T\>
*
`ts`
create(params?): Promise
#### params?
Partial\<T\["params"\]\>
Promise\<T\>
*
`ts`
function creatable
Class annotation to be used to decorate Modules which support
an asynchronous creation pattern
T extends CreatableInstance\<CreatableParams, EventData\>
The decorated Module requiring it implement the members
of the CreatableModule as statics properties/methods
`ts`
(constructor): void;
U
void
*
`ts`
function creatableFactory(): (constructor) => void;
Class annotation to be used to decorate Modules which support
an asynchronous creation factory pattern
The decorated Module requiring it implement the members
of the CreatableModule as statics properties/methods
`ts`
(constructor): void;
U extends CreatableFactory\<CreatableInstance\<CreatableParams, EventData\>\>
U
void
*
`ts`
function hasAllLabels(source?, required?): boolean;
Returns true if the source object has all the labels from the required set
Source object to check against
Set of labels to check for in source
boolean
True of the source object has all the labels from the required set
*
T extends CreatableInstance = CreatableInstance
`ts`
new Creatable(key, params): T & AbstractCreatable
#### key
unknown
#### params
T & AbstractCreatable\<T\["params"\], EventData\>
`ts`
optional defaultLogger: Logger;
`ts`
create
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
Promise\<T\>
*
`ts`
createHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### instance
T
Promisable\<T\>
*
`ts`
paramsHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
Promisable\<T\["params"\]\>
*
- Omit\<Creatable\<T\>, "create"
\| "createHandler"
\| "paramsHandler"
\| "defaultLogger"
\| "factory"
\| \>
T extends CreatableInstance = CreatableInstance
`ts`
create(this, params?): Promise
#### this
CreatableFactory\<T\>
#### params?
Partial\<T\["params"\]\>
Promise\<T\>
*
- EventEmitter\<TEventData\>
TParams extends CreatableParams = CreatableParams
TEventData extends EventData = EventData
`ts`
eventData: TEventData;
`ts`
EventEmitter.eventData
*
`ts`
name: string;
*
`ts`
params: TParams;
`ts`
clearListeners(eventNames): void;
#### eventNames
keyof TEventData | keyof TEventData[]
void
`ts`
EventEmitter.clearListeners
*
`ts`
emit
#### TEventName
TEventName extends string \| number \| symbol
#### eventName
TEventName
#### eventArgs
TEventData\[TEventName\]
Promise\<void\>
`ts`
EventEmitter.emit
*
`ts`
emitSerial
#### TEventName
TEventName extends string \| number \| symbol
#### eventName
TEventName
#### eventArgs
TEventData\[TEventName\]
Promise\<void\>
`ts`
EventEmitter.emitSerial
*
`ts`
listenerCount(eventNames): number;
#### eventNames
keyof TEventData | keyof TEventData[]
number
`ts`
EventEmitter.listenerCount
*
`ts`
off
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
void
`ts`
EventEmitter.off
*
`ts`
offAny(listener): void;
#### listener
Promise\<void\> | EventAnyListener
void
`ts`
EventEmitter.offAny
*
`ts`
on
#### TEventName
TEventName extends string \| number \| symbol
#### eventNames
TEventName | TEventName[]
#### listener
EventListener\<TEventData\[TEventName\]\>
EventUnsubscribeFunction
`ts`
EventEmitter.on
*
`ts`
onAny(listener): EventUnsubscribeFunction;
#### listener
EventAnyListener
EventUnsubscribeFunction
`ts`
EventEmitter.onAny
*
`ts`
once
#### TEventName
TEventName extends string \| number \| symbol
#### eventName
TEventName
#### listener
EventListener\<TEventData\[TEventName\]\>
EventUnsubscribeFunction
`ts`
EventEmitter.once
*
- BaseEmitterParams
`ts`
optional logger: Logger;
`ts`
BaseEmitterParams.logger
*
`ts`
optional meterProvider: MeterProvider;
`ts`
BaseEmitterParams.meterProvider
*
`ts`
optional traceProvider: TracerProvider;
`ts`
BaseEmitterParams.traceProvider
*
`ts`
optional name: string;
*
`ts`
optional statusReporter: CreatableStatusReporter
*
T extends void \| string = void
`ts`
report(
name,
status,
progress?): void;
#### Parameters
##### name
string
##### status
Exclude\<T extends void ? CreatableStatus : T \| CreatableStatus, "error"\>
##### progress?
number
#### Returns
void
`ts`
report(
name,
status,
error?): void;
#### Parameters
##### name
string
##### status
Extract\<T extends void ? CreatableStatus : T \| CreatableStatus, "error"\>
##### error?
Error
#### Returns
void
*
- Creatable\<T\>
T extends CreatableInstance = CreatableInstance
`ts`
new CreatableWithFactory(key, params): T & AbstractCreatable
#### key
unknown
#### params
T & AbstractCreatable\<T\["params"\], EventData\>
`ts`
optional defaultLogger: Logger;
`ts`
create
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
Promise\<T\>
*
`ts`
createHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### instance
T
Promisable\<T\>
*
`ts`
paramsHandler
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
Promisable\<T\["params"\]\>
*
`ts`
factory
this,
params?,
labels?): CreatableFactory
#### T
T extends CreatableInstance\<CreatableParams, EventData\>
#### this
Creatable\<T\>
#### params?
Partial\<T\["params"\]\>
#### labels?
CreatableFactory\<T\>
*
Object used to represent labels identifying a resource.
`ts`
[key: string]: undefined | string
*
Interface for objects that have labels.
`ts`
labels: T;
*
Interface for objects that have labels.
`ts`
optional labels: T;
*
`ts`
type CreatableName = Exclude
*
`ts``
type CreatableStatus =
| "creating"
| "created"
| "starting"
| "started"
| "stopping"
| "stopped"
| "error";
Part of sdk-js
- Arie Trouw (arietrouw.com)
- Matt Jones
- Joel Carter
- Jordan Trouw
> See the LICENSE file for license details
[logo]: https://cdn.xy.company/img/brand/XYPersistentCompany_Logo_Icon_Colored.svg
[main-build]: https://github.com/xylabs/sdk-js/actions/workflows/build.yml/badge.svg
[main-build-link]: https://github.com/xylabs/sdk-js/actions/workflows/build.yml
[npm-badge]: https://img.shields.io/npm/v/@xylabs/creatable.svg
[npm-link]: https://www.npmjs.com/package/@xylabs/creatable
[codacy-badge]: https://app.codacy.com/project/badge/Grade/c8e15e14f37741c18cfb47ac7245c698
[codacy-link]: https://www.codacy.com/gh/xylabs/sdk-js/dashboard?utm_source=github.com&utm_medium=referral&utm_content=xylabs/sdk-js&utm_campaign=Badge_Grade
[codeclimate-badge]: https://api.codeclimate.com/v1/badges/c5eb068f806f0b047ea7/maintainability
[codeclimate-link]: https://codeclimate.com/github/xylabs/sdk-js/maintainability
[snyk-badge]: https://snyk.io/test/github/xylabs/sdk-js/badge.svg?targetFile=package.json
[snyk-link]: https://snyk.io/test/github/xylabs/sdk-js?targetFile=package.json
[npm-downloads-badge]: https://img.shields.io/npm/dw/@xylabs/creatable
[npm-license-badge]: https://img.shields.io/npm/l/@xylabs/creatable
[jsdelivr-badge]: https://data.jsdelivr.com/v1/package/npm/@xylabs/creatable/badge
[jsdelivr-link]: https://www.jsdelivr.com/package/npm/@xylabs/creatable
[socket-badge]: https://socket.dev/api/badge/npm/package/@xylabs/creatable
[socket-link]: https://socket.dev/npm/package/@xylabs/creatable