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.

125 lines 3.46 kB
/** * @module Utilities */ import { resolveOneOrMoreStr, resolveOneOrMore, UnexpectedError, } from "../../../utilities/_module-exports.js"; /** * @internal */ export class Key { prefixArr; key; identifierDelimeter; keyDelimeter; /** * * @internal */ constructor(settings) { const { prefixArr, key, identifierDelimeter, keyDelimeter } = settings; this.prefixArr = prefixArr; this.key = key; this.identifierDelimeter = identifierDelimeter; this.keyDelimeter = keyDelimeter; } get original() { return this.key; } get resolved() { return resolveOneOrMoreStr(this.key); } get namespaced() { return resolveOneOrMoreStr([ ...this.prefixArr, resolveOneOrMoreStr(this.key, this.keyDelimeter), ], this.identifierDelimeter); } } /** * @internal */ class InternalNamespace { _rootPrefix; identifierDelimeter; keyDelimeter; rootIdentifier; constructor(_rootPrefix, settings = {}) { this._rootPrefix = _rootPrefix; const { identifierDelimeter = ":", keyDelimeter = "/", rootIdentifier = "_rt", } = settings; this.rootIdentifier = rootIdentifier; this.identifierDelimeter = identifierDelimeter; this.keyDelimeter = keyDelimeter; this.validate(this._rootPrefix); } get original() { return this._rootPrefix; } get resolved() { return resolveOneOrMoreStr(this._rootPrefix); } validate(key) { const resolvedKey = resolveOneOrMoreStr(key); if (resolvedKey.includes(this.rootIdentifier)) { throw new UnexpectedError(`Resolved key "${resolvedKey}" cannot not include "${this.rootIdentifier}"`); } } getKeyPrefixArray() { return [ resolveOneOrMoreStr(this._rootPrefix, this.keyDelimeter), this.rootIdentifier, ]; } get namespaced() { return resolveOneOrMoreStr(this.getKeyPrefixArray(), this.identifierDelimeter); } create(key) { this.validate(key); return new Key({ key, keyDelimeter: this.keyDelimeter, identifierDelimeter: this.identifierDelimeter, prefixArr: this.getKeyPrefixArray(), }); } } /** * The `Namespace` class adds prefixes/suffixes to keys to avoid conflicts and group related items. * * IMPORT_PATH: `"@daiso-tech/core/utilities"` * @group Namespace */ export class Namespace { root; settings; constructor(root, settings = {}) { this.root = root; this.settings = settings; } setIdentifierDelimeter(delimeter) { return new Namespace(this.root, { ...this.settings, identifierDelimeter: delimeter, }); } setKeyDelimeter(delimeter) { return new Namespace(this.root, { ...this.settings, keyDelimeter: delimeter, }); } setRootIdentifier(identifier) { return new Namespace(this.root, { ...this.settings, rootIdentifier: identifier, }); } appendRoot(str) { return new Namespace([...resolveOneOrMore(this.root), ...resolveOneOrMore(str)], this.settings); } /** * @internal */ _getInternal() { return new InternalNamespace(this.root, this.settings); } } //# sourceMappingURL=namespace.js.map