@xylabs/creatable


Base functionality used throughout XY Labs TypeScript/JavaScript libraries
Reference
@xylabs/creatable
Classes
Interfaces
Type Aliases
Functions
classes
AbstractCreatable
@xylabs/creatable
Extends
BaseEmitter<Partial<TParams>, TEventData>
Extended by
Type Parameters
TParams
TParams extends CreatableParams = CreatableParams
TEventData
TEventData extends EventData = EventData
Constructors
Constructor
new AbstractCreatable<TParams, TEventData>(key, params): AbstractCreatable<TParams, TEventData>;
Parameters
key
unknown
params
Partial<TParams>
Returns
AbstractCreatable<TParams, TEventData>
Overrides
BaseEmitter<Partial<TParams>, TEventData>.constructor
Properties
defaultLogger?
static optional defaultLogger: Logger;
Inherited from
BaseEmitter.defaultLogger
globalInstances
readonly static globalInstances: Record<BaseClassName, WeakRef<Base>[]>;
Inherited from
BaseEmitter.globalInstances
globalInstancesCountHistory
readonly static globalInstancesCountHistory: Record<BaseClassName, number[]>;
Inherited from
BaseEmitter.globalInstancesCountHistory
uniqueName
readonly static uniqueName: string;
Inherited from
BaseEmitter.uniqueName
defaultLogger?
optional defaultLogger: Logger;
eventData
eventData: TEventData;
Inherited from
BaseEmitter.eventData
Accessors
historyInterval
Get Signature
get static historyInterval(): number;
Returns
number
Set Signature
set static historyInterval(value): void;
Parameters
value
number
Returns
void
Inherited from
BaseEmitter.historyInterval
historyTime
Get Signature
get static historyTime(): number;
Returns
number
Set Signature
set static historyTime(value): void;
Parameters
value
number
Returns
void
Inherited from
BaseEmitter.historyTime
maxGcFrequency
Get Signature
get static maxGcFrequency(): number;
Returns
number
Set Signature
set static maxGcFrequency(value): void;
Parameters
value
number
Returns
void
Inherited from
BaseEmitter.maxGcFrequency
maxHistoryDepth
Get Signature
get static maxHistoryDepth(): number;
Returns
number
Inherited from
BaseEmitter.maxHistoryDepth
logger
Get Signature
get logger(): undefined | Logger;
Returns
undefined | Logger
Inherited from
BaseEmitter.logger
meter
Get Signature
get meter(): undefined | Meter;
Returns
undefined | Meter
Inherited from
BaseEmitter.meter
tracer
Get Signature
get tracer(): undefined | Tracer;
Returns
undefined | Tracer
Inherited from
BaseEmitter.tracer
name
Get Signature
get name(): string;
Returns
string
params
Get Signature
get params(): TParams;
Returns
TParams
Overrides
BaseEmitter.params
statusReporter
Get Signature
get statusReporter():
| undefined
| CreatableStatusReporter<void>;
Returns
| undefined
| CreatableStatusReporter<void>
Methods
gc()
Call Signature
static gc(force?): void;
Parameters
force?
boolean
Returns
void
Inherited from
BaseEmitter.gc
Call Signature
static gc(className): void;
Parameters
className
string
Returns
void
Inherited from
BaseEmitter.gc
instanceCount()
static instanceCount(className): number;
Parameters
className
string
Returns
number
Inherited from
BaseEmitter.instanceCount
instanceCounts()
static instanceCounts(): Record<BaseClassName, number>;
Returns
Record<BaseClassName, number>
Inherited from
BaseEmitter.instanceCounts
startHistory()
static startHistory(): void;
Returns
void
Inherited from
BaseEmitter.startHistory
stopHistory()
static stopHistory(): void;
Returns
void
Inherited from
BaseEmitter.stopHistory
create()
static create<T>(this, inParams): Promise<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
inParams
Partial<T["params"]> = {}
Returns
Promise<T>
createHandler()
static createHandler<T>(this, instance): Promisable<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
instance
T
Returns
Promisable<T>
paramsHandler()
static paramsHandler<T>(this, params): Promisable<T["params"]>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params
Partial<T["params"]> = {}
Returns
Promisable<T["params"]>
createHandler()
createHandler(): Promisable<void>;
Returns
Promisable<void>
paramsValidator()
paramsValidator(params): TParams;
Parameters
params
Partial<TParams>
Returns
TParams
start()
start(): Promise<boolean>;
Returns
Promise<boolean>
stop()
stop(): Promise<boolean>;
Returns
Promise<boolean>
_noOverride()
protected _noOverride(functionName): void;
Parameters
functionName
string = ...
Returns
void
startHandler()
protected startHandler(): Promisable<void>;
Returns
Promisable<void>
stopHandler()
protected stopHandler(): Promisable<void>;
Returns
Promisable<void>
clearListeners()
clearListeners(eventNames): this;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
this
Inherited from
BaseEmitter.clearListeners
emit()
emit<TEventName, TEventArgs>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol = keyof TEventData
TEventArgs
TEventArgs extends EventArgs = TEventData[TEventName]
Parameters
eventName
TEventName
eventArgs
TEventArgs
Returns
Promise<void>
Inherited from
BaseEmitter.emit
emitSerial()
emitSerial<TEventName, TEventArgs>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol = keyof TEventData
TEventArgs
TEventArgs extends EventArgs = TEventData[TEventName]
Parameters
eventName
TEventName
eventArgs
TEventArgs
Returns
Promise<void>
Inherited from
BaseEmitter.emitSerial
listenerCount()
listenerCount(eventNames): number;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
number
Inherited from
BaseEmitter.listenerCount
off()
off<TEventName>(eventNames, listener): void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
void
Inherited from
BaseEmitter.off
offAny()
offAny(listener): void;
Parameters
listener
EventAnyListener
Returns
void
Inherited from
BaseEmitter.offAny
on()
on<TEventName>(eventNames, listener): () => void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
(): void;
Returns
void
Inherited from
BaseEmitter.on
onAny()
onAny(listener): () => void;
Parameters
listener
EventAnyListener
Returns
(): void;
Returns
void
Inherited from
BaseEmitter.onAny
once()
once<TEventName>(eventName, listener): () => void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventName
TEventName
listener
EventListener<TEventData[TEventName]>
Returns
(): void;
Returns
void
Inherited from
BaseEmitter.once
AbstractCreatableWithFactory
@xylabs/creatable
Extends
Type Parameters
TParams
TParams extends CreatableParams = CreatableParams
TEventData
TEventData extends EventData = EventData
Constructors
Constructor
new AbstractCreatableWithFactory<TParams, TEventData>(key, params): AbstractCreatableWithFactory<TParams, TEventData>;
Parameters
key
unknown
params
Partial<TParams>
Returns
AbstractCreatableWithFactory<TParams, TEventData>
Inherited from
AbstractCreatable.constructor
Properties
defaultLogger?
static optional defaultLogger: Logger;
Inherited from
AbstractCreatable.defaultLogger
globalInstances
readonly static globalInstances: Record<BaseClassName, WeakRef<Base>[]>;
Inherited from
AbstractCreatable.globalInstances
globalInstancesCountHistory
readonly static globalInstancesCountHistory: Record<BaseClassName, number[]>;
Inherited from
AbstractCreatable.globalInstancesCountHistory
uniqueName
readonly static uniqueName: string;
Inherited from
AbstractCreatable.uniqueName
defaultLogger?
optional defaultLogger: Logger;
Inherited from
AbstractCreatable.defaultLogger
eventData
eventData: TEventData;
Inherited from
AbstractCreatable.eventData
Accessors
historyInterval
Get Signature
get static historyInterval(): number;
Returns
number
Set Signature
set static historyInterval(value): void;
Parameters
value
number
Returns
void
Inherited from
AbstractCreatable.historyInterval
historyTime
Get Signature
get static historyTime(): number;
Returns
number
Set Signature
set static historyTime(value): void;
Parameters
value
number
Returns
void
Inherited from
AbstractCreatable.historyTime
maxGcFrequency
Get Signature
get static maxGcFrequency(): number;
Returns
number
Set Signature
set static maxGcFrequency(value): void;
Parameters
value
number
Returns
void
Inherited from
AbstractCreatable.maxGcFrequency
maxHistoryDepth
Get Signature
get static maxHistoryDepth(): number;
Returns
number
Inherited from
AbstractCreatable.maxHistoryDepth
logger
Get Signature
get logger(): undefined | Logger;
Returns
undefined | Logger
Inherited from
AbstractCreatable.logger
meter
Get Signature
get meter(): undefined | Meter;
Returns
undefined | Meter
Inherited from
AbstractCreatable.meter
tracer
Get Signature
get tracer(): undefined | Tracer;
Returns
undefined | Tracer
Inherited from
AbstractCreatable.tracer
name
Get Signature
get name(): string;
Returns
string
Inherited from
AbstractCreatable.name
params
Get Signature
get params(): TParams;
Returns
TParams
Inherited from
AbstractCreatable.params
statusReporter
Get Signature
get statusReporter():
| undefined
| CreatableStatusReporter<void>;
Returns
| undefined
| CreatableStatusReporter<void>
Inherited from
AbstractCreatable.statusReporter
Methods
gc()
Call Signature
static gc(force?): void;
Parameters
force?
boolean
Returns
void
Inherited from
AbstractCreatable.gc
Call Signature
static gc(className): void;
Parameters
className
string
Returns
void
Inherited from
AbstractCreatable.gc
instanceCount()
static instanceCount(className): number;
Parameters
className
string
Returns
number
Inherited from
AbstractCreatable.instanceCount
instanceCounts()
static instanceCounts(): Record<BaseClassName, number>;
Returns
Record<BaseClassName, number>
Inherited from
AbstractCreatable.instanceCounts
startHistory()
static startHistory(): void;
Returns
void
Inherited from
AbstractCreatable.startHistory
stopHistory()
static stopHistory(): void;
Returns
void
Inherited from
AbstractCreatable.stopHistory
create()
static create<T>(this, inParams): Promise<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
inParams
Partial<T["params"]> = {}
Returns
Promise<T>
Inherited from
AbstractCreatable.create
createHandler()
static createHandler<T>(this, instance): Promisable<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
instance
T
Returns
Promisable<T>
Inherited from
AbstractCreatable.createHandler
paramsHandler()
static paramsHandler<T>(this, params): Promisable<T["params"]>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params
Partial<T["params"]> = {}
Returns
Promisable<T["params"]>
Inherited from
AbstractCreatable.paramsHandler
createHandler()
createHandler(): Promisable<void>;
Returns
Promisable<void>
Inherited from
AbstractCreatable.createHandler
paramsValidator()
paramsValidator(params): TParams;
Parameters
params
Partial<TParams>
Returns
TParams
Inherited from
AbstractCreatable.paramsValidator
start()
start(): Promise<boolean>;
Returns
Promise<boolean>
Inherited from
AbstractCreatable.start
stop()
stop(): Promise<boolean>;
Returns
Promise<boolean>
Inherited from
AbstractCreatable.stop
_noOverride()
protected _noOverride(functionName): void;
Parameters
functionName
string = ...
Returns
void
Inherited from
AbstractCreatable._noOverride
startHandler()
protected startHandler(): Promisable<void>;
Returns
Promisable<void>
Inherited from
AbstractCreatable.startHandler
stopHandler()
protected stopHandler(): Promisable<void>;
Returns
Promisable<void>
Inherited from
AbstractCreatable.stopHandler
factory()
static factory<T>(
this,
params?,
labels?): CreatableFactory<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
labels?
Labels
Returns
CreatableFactory<T>
clearListeners()
clearListeners(eventNames): this;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
this
Inherited from
AbstractCreatable.clearListeners
emit()
emit<TEventName, TEventArgs>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol = keyof TEventData
TEventArgs
TEventArgs extends EventArgs = TEventData[TEventName]
Parameters
eventName
TEventName
eventArgs
TEventArgs
Returns
Promise<void>
Inherited from
AbstractCreatable.emit
emitSerial()
emitSerial<TEventName, TEventArgs>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol = keyof TEventData
TEventArgs
TEventArgs extends EventArgs = TEventData[TEventName]
Parameters
eventName
TEventName
eventArgs
TEventArgs
Returns
Promise<void>
Inherited from
AbstractCreatable.emitSerial
listenerCount()
listenerCount(eventNames): number;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
number
Inherited from
AbstractCreatable.listenerCount
off()
off<TEventName>(eventNames, listener): void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
void
Inherited from
AbstractCreatable.off
offAny()
offAny(listener): void;
Parameters
listener
EventAnyListener
Returns
void
Inherited from
AbstractCreatable.offAny
on()
on<TEventName>(eventNames, listener): () => void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
(): void;
Returns
void
Inherited from
AbstractCreatable.on
onAny()
onAny(listener): () => void;
Parameters
listener
EventAnyListener
Returns
(): void;
Returns
void
Inherited from
AbstractCreatable.onAny
once()
once<TEventName>(eventName, listener): () => void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventName
TEventName
listener
EventListener<TEventData[TEventName]>
Returns
(): void;
Returns
void
Inherited from
AbstractCreatable.once
Factory
@xylabs/creatable
Type Parameters
T
T extends CreatableInstance = CreatableInstance
Implements
Constructors
Constructor
new Factory<T>(
creatable,
params?,
labels?): Factory<T>;
Parameters
creatable
Creatable<T>
params?
Partial<T["params"]>
labels?
Labels = {}
Returns
Factory<T>
Properties
creatable
creatable: Creatable<T>;
defaultParams?
optional defaultParams: Partial<T["params"]>;
labels?
optional labels: Labels;
Methods
withParams()
static withParams<T>(
creatableModule,
params?,
labels?): Factory<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
creatableModule
Creatable<T>
params?
Partial<T["params"]>
labels?
Labels = {}
Returns
Factory<T>
create()
create(params?): Promise<T>;
Parameters
params?
Partial<T["params"]>
Returns
Promise<T>
Implementation of
CreatableFactory.create
functions
creatable
@xylabs/creatable
function creatable<T>(): <U>(constructor) => void;
Class annotation to be used to decorate Modules which support
an asynchronous creation pattern
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Returns
The decorated Module requiring it implement the members
of the CreatableModule as statics properties/methods
<U>(constructor): void;
Type Parameters
U
U extends Creatable<T>
Parameters
constructor
U
Returns
void
creatableFactory
@xylabs/creatable
function creatableFactory(): <U>(constructor) => void;
Class annotation to be used to decorate Modules which support
an asynchronous creation factory pattern
Returns
The decorated Module requiring it implement the members
of the CreatableModule as statics properties/methods
<U>(constructor): void;
Type Parameters
U
U extends CreatableFactory<CreatableInstance<CreatableParams, EventData>>
Parameters
constructor
U
Returns
void
hasAllLabels
@xylabs/creatable
function hasAllLabels(source?, required?): boolean;
Returns true if the source object has all the labels from the required set
Parameters
source?
Labels
Source object to check against
required?
Labels
Set of labels to check for in source
Returns
boolean
True of the source object has all the labels from the required set
interfaces
Creatable
@xylabs/creatable
Extended by
Type Parameters
T
T extends CreatableInstance = CreatableInstance
Constructors
Constructor
new Creatable(key, params): T & AbstractCreatable<T["params"], EventData>;
Parameters
key
unknown
params
Partial<CreatableParams>
Returns
T & AbstractCreatable<T["params"], EventData>
Properties
defaultLogger?
optional defaultLogger: Logger;
Methods
create()
create<T>(this, params?): Promise<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
Returns
Promise<T>
createHandler()
createHandler<T>(this, instance): Promisable<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
instance
T
Returns
Promisable<T>
paramsHandler()
paramsHandler<T>(this, params?): Promisable<T["params"]>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
Returns
Promisable<T["params"]>
CreatableFactory
@xylabs/creatable
Extends
Omit<Creatable<T>,
| "create"
| "createHandler"
| "paramsHandler"
| "defaultLogger"
| "factory">
Type Parameters
T
T extends CreatableInstance = CreatableInstance
Methods
create()
create(this, params?): Promise<T>;
Parameters
this
CreatableFactory<T>
params?
Partial<T["params"]>
Returns
Promise<T>
CreatableInstance
@xylabs/creatable
Extends
Type Parameters
TParams
TParams extends CreatableParams = CreatableParams
TEventData
TEventData extends EventData = EventData
Properties
eventData
eventData: TEventData;
Overrides
EventEmitter.eventData
name
name: string;
params
params: TParams;
Methods
clearListeners()
clearListeners(eventNames): void;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
void
Inherited from
EventEmitter.clearListeners
emit()
emit<TEventName>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventName
TEventName
eventArgs
TEventData[TEventName]
Returns
Promise<void>
Inherited from
EventEmitter.emit
emitSerial()
emitSerial<TEventName>(eventName, eventArgs): Promise<void>;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventName
TEventName
eventArgs
TEventData[TEventName]
Returns
Promise<void>
Inherited from
EventEmitter.emitSerial
listenerCount()
listenerCount(eventNames): number;
Parameters
eventNames
keyof TEventData | keyof TEventData[]
Returns
number
Inherited from
EventEmitter.listenerCount
off()
off<TEventName>(eventNames, listener): void;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
void
Inherited from
EventEmitter.off
offAny()
offAny(listener): void;
Parameters
listener
Promise<void> | EventAnyListener
Returns
void
Inherited from
EventEmitter.offAny
on()
on<TEventName>(eventNames, listener): EventUnsubscribeFunction;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventNames
TEventName | TEventName[]
listener
EventListener<TEventData[TEventName]>
Returns
EventUnsubscribeFunction
Inherited from
EventEmitter.on
onAny()
onAny(listener): EventUnsubscribeFunction;
Parameters
listener
EventAnyListener
Returns
EventUnsubscribeFunction
Inherited from
EventEmitter.onAny
once()
once<TEventName>(eventName, listener): EventUnsubscribeFunction;
Type Parameters
TEventName
TEventName extends string | number | symbol
Parameters
eventName
TEventName
listener
EventListener<TEventData[TEventName]>
Returns
EventUnsubscribeFunction
Inherited from
EventEmitter.once
CreatableParams
@xylabs/creatable
Extends
Properties
logger?
optional logger: Logger;
Inherited from
BaseEmitterParams.logger
meterProvider?
optional meterProvider: MeterProvider;
Inherited from
BaseEmitterParams.meterProvider
traceProvider?
optional traceProvider: TracerProvider;
Inherited from
BaseEmitterParams.traceProvider
name?
optional name: string;
statusReporter?
optional statusReporter: CreatableStatusReporter<void>;
CreatableStatusReporter
@xylabs/creatable
Type Parameters
T
T extends void | string = void
Methods
report()
Call Signature
report(
name,
status,
progress?): void;
Parameters
name
string
status
Exclude<T extends void ? CreatableStatus : T | CreatableStatus, "error">
progress?
number
Returns
void
Call Signature
report(
name,
status,
error?): void;
Parameters
name
string
status
Extract<T extends void ? CreatableStatus : T | CreatableStatus, "error">
error?
Error
Returns
void
CreatableWithFactory
@xylabs/creatable
Extends
Type Parameters
T
T extends CreatableInstance = CreatableInstance
Constructors
Constructor
new CreatableWithFactory(key, params): T & AbstractCreatable<T["params"], EventData>;
Parameters
key
unknown
params
Partial<CreatableParams>
Returns
T & AbstractCreatable<T["params"], EventData>
Inherited from
Creatable.constructor
Properties
defaultLogger?
optional defaultLogger: Logger;
Inherited from
Creatable.defaultLogger
Methods
create()
create<T>(this, params?): Promise<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
Returns
Promise<T>
Inherited from
Creatable.create
createHandler()
createHandler<T>(this, instance): Promisable<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
instance
T
Returns
Promisable<T>
Inherited from
Creatable.createHandler
paramsHandler()
paramsHandler<T>(this, params?): Promisable<T["params"]>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
Returns
Promisable<T["params"]>
Inherited from
Creatable.paramsHandler
factory()
factory<T>(
this,
params?,
labels?): CreatableFactory<T>;
Type Parameters
T
T extends CreatableInstance<CreatableParams, EventData>
Parameters
this
Creatable<T>
params?
Partial<T["params"]>
labels?
Labels
Returns
CreatableFactory<T>
Labels
@xylabs/creatable
Object used to represent labels identifying a resource.
Indexable
[key: string]: undefined | string
WithLabels
@xylabs/creatable
Interface for objects that have labels.
Type Parameters
T
T extends Labels = Labels
Properties
labels
labels: T;
WithOptionalLabels
@xylabs/creatable
Interface for objects that have labels.
Type Parameters
T
T extends Labels = Labels
Properties
labels?
optional labels: T;
type-aliases
CreatableName
@xylabs/creatable
type CreatableName = Exclude<string, "creatable-name-reserved-32546239486"> & BaseClassName;
CreatableStatus
@xylabs/creatable
type CreatableStatus =
| "creating"
| "created"
| "starting"
| "started"
| "stopping"
| "stopped"
| "error";
Part of sdk-js
Maintainers
License
See the LICENSE file for license details
Credits
Made with 🔥 and ❄️ by XYLabs