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