@decaf-ts/utils
Version:
module management utils for decaf-ts
94 lines • 10.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Environment = void 0;
const text_1 = require("./text.cjs");
const web_1 = require("./web.cjs");
const typed_object_accumulator_1 = require("typed-object-accumulator");
/**
* @class Environment
* @extends {ObjectAccumulator<T>}
* @template T
* @description A class representing an environment with accumulation capabilities.
* @summary Manages environment-related data and provides methods for accumulation and key retrieval.
* @param {T} [initialData] - The initial data to populate the environment with.
*/
class Environment extends typed_object_accumulator_1.ObjectAccumulator {
/**
* @static
* @protected
* @description A factory function for creating Environment instances.
* @summary Defines how new instances of the Environment class should be created.
* @return {Environment<any>} A new instance of the Environment class.
*/
static { this.factory = () => new Environment(); }
constructor() {
super();
}
fromEnv(k) {
let env;
if ((0, web_1.isBrowser)()) {
env = globalThis["ENV"];
}
else {
env = globalThis.process.env;
k = (0, text_1.toENVFormat)(k);
}
return env[k];
}
expand(value) {
Object.entries(value).forEach(([k, v]) => {
Object.defineProperty(this, k, {
get: () => {
const fromEnv = this.fromEnv(k);
return typeof fromEnv === "undefined" ? v : fromEnv;
},
set: (val) => {
v = val;
},
configurable: true,
enumerable: true,
});
});
}
/**
* @protected
* @static
* @description Retrieves or creates the singleton instance of the Environment class.
* @summary Ensures only one instance of the Environment class exists.
* @template E
* @param {...unknown[]} args - Arguments to pass to the factory function if a new instance is created.
* @return {E} The singleton instance of the Environment class.
*/
static instance(...args) {
Environment._instance = !Environment._instance
? Environment.factory(...args)
: Environment._instance;
return Environment._instance;
}
/**
* @static
* @description Accumulates the given value into the environment.
* @summary Adds new properties to the environment from the provided object.
* @template V
* @param {V} value - The object to accumulate into the environment.
* @return {V} The updated environment instance.
*/
static accumulate(value) {
const instance = Environment.instance();
return instance.accumulate(value);
}
/**
* @static
* @description Retrieves the keys of the environment, optionally converting them to ENV format.
* @summary Gets all keys in the environment, with an option to format them for environment variables.
* @param {boolean} [toEnv=true] - Whether to convert the keys to ENV format.
* @return {string[]} An array of keys from the environment.
*/
static keys(toEnv = true) {
return Environment.instance()
.keys()
.map((k) => (toEnv ? (0, text_1.toENVFormat)(k) : k));
}
}
exports.Environment = Environment;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXFDO0FBRXJDLG1DQUFrQztBQUNsQyx1RUFBNkQ7QUFFN0Q7Ozs7Ozs7R0FPRztBQUNILE1BQWEsV0FBOEIsU0FBUSw0Q0FBb0I7SUFDckU7Ozs7OztPQU1HO2FBQ2MsWUFBTyxHQUN0QixHQUFxQixFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQVU1QztRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVTLE9BQU8sQ0FBQyxDQUFTO1FBQ3pCLElBQUksR0FBNEIsQ0FBQztRQUNqQyxJQUFJLElBQUEsZUFBUyxHQUFFLEVBQUUsQ0FBQztZQUNoQixHQUFHLEdBQUksVUFBK0QsQ0FDcEUsS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM3QixDQUFDLEdBQUcsSUFBQSxrQkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRWtCLE1BQU0sQ0FBbUIsS0FBUTtRQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUM3QixHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLE9BQU8sT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDdEQsQ0FBQztnQkFDRCxHQUFHLEVBQUUsQ0FBQyxHQUFlLEVBQUUsRUFBRTtvQkFDdkIsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDVixDQUFDO2dCQUNELFlBQVksRUFBRSxJQUFJO2dCQUNsQixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLE1BQU0sQ0FBQyxRQUFRLENBQTZCLEdBQUcsSUFBZTtRQUN0RSxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFDNUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDMUIsT0FBTyxXQUFXLENBQUMsU0FBYyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUFRO1FBSVIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFpQixJQUFJO1FBQy9CLE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRTthQUMxQixJQUFJLEVBQUU7YUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFBLGtCQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7QUFoR0gsa0NBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9FTlZGb3JtYXQgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudEZhY3RvcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vd2ViXCI7XG5pbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcblxuLyoqXG4gKiBAY2xhc3MgRW52aXJvbm1lbnRcbiAqIEBleHRlbmRzIHtPYmplY3RBY2N1bXVsYXRvcjxUPn1cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyByZXByZXNlbnRpbmcgYW4gZW52aXJvbm1lbnQgd2l0aCBhY2N1bXVsYXRpb24gY2FwYWJpbGl0aWVzLlxuICogQHN1bW1hcnkgTWFuYWdlcyBlbnZpcm9ubWVudC1yZWxhdGVkIGRhdGEgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY3VtdWxhdGlvbiBhbmQga2V5IHJldHJpZXZhbC5cbiAqIEBwYXJhbSB7VH0gW2luaXRpYWxEYXRhXSAtIFRoZSBpbml0aWFsIGRhdGEgdG8gcG9wdWxhdGUgdGhlIGVudmlyb25tZW50IHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudDxUIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9iamVjdEFjY3VtdWxhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudDxhbnk+fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZhY3Rvcnk6IEVudmlyb25tZW50RmFjdG9yeTxhbnksIGFueT4gPVxuICAgICgpOiBFbnZpcm9ubWVudDxhbnk+ID0+IG5ldyBFbnZpcm9ubWVudCgpO1xuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHR5cGUge0Vudmlyb25tZW50PGFueT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEVudmlyb25tZW50PGFueT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9IChnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgeyBFTlY6IFJlY29yZDxzdHJpbmcsIGFueT4gfSlbXG4gICAgICAgIFwiRU5WXCJcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiBlbnZba107XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGZyb21FbnYgPT09IFwidW5kZWZpbmVkXCIgPyB2IDogZnJvbUVudjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHN1bW1hcnkgRW5zdXJlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MgZXhpc3RzLlxuICAgKiBAdGVtcGxhdGUgRVxuICAgKiBAcGFyYW0gey4uLnVua25vd25bXX0gYXJncyAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGlmIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0V9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBpbnN0YW5jZTxFIGV4dGVuZHMgRW52aXJvbm1lbnQ8YW55Pj4oLi4uYXJnczogdW5rbm93bltdKTogRSB7XG4gICAgRW52aXJvbm1lbnQuX2luc3RhbmNlID0gIUVudmlyb25tZW50Ll9pbnN0YW5jZVxuICAgICAgPyBFbnZpcm9ubWVudC5mYWN0b3J5KC4uLmFyZ3MpXG4gICAgICA6IEVudmlyb25tZW50Ll9pbnN0YW5jZTtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBlbnZpcm9ubWVudCBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBWXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge1Z9IFRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogdHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmXG4gICAgViAmXG4gICAgT2JqZWN0QWNjdW11bGF0b3I8dHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmIFY+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEVudmlyb25tZW50Lmluc3RhbmNlKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cbiJdfQ==