UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

117 lines 3.07 kB
/** * @module Namespace */ import { resolveOneOrMoreStr, resolveOneOrMore, UnexpectedError, } from "../utilities/_module.js"; /** * * IMPORT_PATH: `"@daiso-tech/core/namespace"` */ export class Key { prefixArr; key; delimeter; /** * * @internal */ constructor(settings) { const { prefixArr, key, delimeter } = settings; this.prefixArr = prefixArr; this.key = key; this.delimeter = delimeter; } get() { return this.key; } toString() { return resolveOneOrMoreStr([...this.prefixArr, this.key], this.delimeter); } } /** * The `Namespace` class adds prefixes/suffixes to keys to avoid conflicts and group related items. * * IMPORT_PATH: `"@daiso-tech/core/namespace"` * * @example * ```ts * import { Namespace } from "@daiso-tech/core/namspace"; * * const namespace = new Namespace("@my-namespace"); * * // Logs "@my-namespace:_rt" * console.log(namespace.toString()); * * const key = namespace.create("my-key"); * * // Logs "my-key" * console.log(key.get()) * * // Logs "@my-namespace:_rt:my-key" * console.log(key.toString()) * * // You can extend the root * const newNamespace = namespace.appendRoot("sub"); * * // Logs "@my-namespace:sub:_rt" * console.log(newNamespace.toString()); * * ``` */ export class Namespace { root; delimeter; rootIdentifier; constructor(root, settings = {}) { this.root = root; const { delimeter = ":", rootIdentifier = "_rt" } = settings; this.delimeter = delimeter; this.rootIdentifier = rootIdentifier; } setDelimeter(delimeter) { return new Namespace(this.root, { rootIdentifier: this.rootIdentifier, delimeter, }); } setRootIdentifier(identifier) { return new Namespace(this.root, { rootIdentifier: identifier, delimeter: this.delimeter, }); } appendRoot(str) { return new Namespace([...resolveOneOrMore(this.root), ...resolveOneOrMore(str)], { rootIdentifier: this.rootIdentifier, delimeter: this.delimeter, }); } prependRoot(str) { return new Namespace([...resolveOneOrMore(str), ...resolveOneOrMore(this.root)], { rootIdentifier: this.rootIdentifier, delimeter: this.delimeter, }); } validate(key) { if (key.includes(this.rootIdentifier)) { throw new UnexpectedError(`Key "${key}" cannot not include "${this.rootIdentifier}"`); } } getKeyPrefixArray() { return [ resolveOneOrMoreStr(this.root, this.delimeter), this.rootIdentifier, ]; } toString() { return resolveOneOrMoreStr(this.getKeyPrefixArray(), this.delimeter); } create(key) { this.validate(key); return new Key({ key, delimeter: this.delimeter, prefixArr: this.getKeyPrefixArray(), }); } } //# sourceMappingURL=namespace.js.map