@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
JavaScript
/**
* @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