@decohere/config 0.0.1-dev.126 → 0.0.1-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE DELETED
@@ -1,15 +0,0 @@
1
- ISC License
2
-
3
- Copyright (c) 2025-2026 Typesmiths
4
-
5
- Permission to use, copy, modify, and/or distribute this software for any
6
- purpose with or without fee is hereby granted, provided that the above
7
- copyright notice and this permission notice appear in all copies.
8
-
9
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md DELETED
@@ -1,40 +0,0 @@
1
- # Config
2
-
3
- Application configuration for Decohere: data sources that feed the configuration service, starting with YAML files read from the environment.
4
-
5
- ## YAML files
6
-
7
- `YamlDataSource` reads two files from `CONFIG_DIR` (default `config`):
8
-
9
- 1. `config.yaml`: production, and the base for every environment.
10
- 2. `config.<NODE_ENV>.yaml`, if it exists, such as `config.dev.yaml`. An unset `NODE_ENV` means `production`, so a missing variable never loads development settings.
11
-
12
- ### How the files merge
13
-
14
- The environment file only states what it changes:
15
-
16
- - **Objects** merge key by key.
17
- - **Lists of named entries** merge by `name`. Every entry is a mapping with a string `name`, as in `database.dataSources`. An entry with a name the base already has merges into that entry, and a new name is added at the end. The base keeps its order. A file that repeats a name in such a list is rejected, because the merge couldn't tell the entries apart.
18
- - **Any other list**, and a scalar, replaces the earlier value. An empty list (`[]`) clears it.
19
-
20
- ```yaml
21
- # config.yaml
22
- database:
23
- dataSources:
24
- - name: api
25
- host: ${API_DB_HOST}
26
- password: ${API_DB_PASSWORD}
27
- synchronize: false
28
-
29
- # config.dev.yaml: only what development changes
30
- database:
31
- dataSources:
32
- - name: api
33
- synchronize: true
34
- ```
35
-
36
- ### Placeholders
37
-
38
- `${NAME}` reads an environment variable, and `${NAME:default}` gives it a default. Placeholders are resolved **after** the merge. That way an environment file can replace a production `${VAR}` without the variable being set. Placeholders still unset after the merge fail together, and the error names every variable and where it was used. A variable set to the text `null` means no value.
39
-
40
- Secrets come only from the process environment ([ADR 0002](../../docs/adr/0002-secrets-from-the-environment.md)). Nothing here reads a `.env` file; a CLI loads one only with an explicit `--env-file`.
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ConfigurationDataSource", {
6
- enumerable: true,
7
- get: function() {
8
- return ConfigurationDataSource;
9
- }
10
- });
11
- class ConfigurationDataSource {
12
- }
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "BuilderExtensions", {
6
- enumerable: true,
7
- get: function() {
8
- return BuilderExtensions;
9
- }
10
- });
11
- const _http = require("@decohere/http");
12
- const _configuration = require("@decohere/core/configuration");
13
- const _extensibility = require("@decohere/core/extensibility");
14
- const _configurationservice = require("./configuration.service.js");
15
- const _const = require("./const.js");
16
- function _ts_decorate(decorators, target, key, desc) {
17
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
19
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
- return c > 3 && r && Object.defineProperty(target, key, r), r;
21
- }
22
- function _ts_metadata(k, v) {
23
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24
- }
25
- class BuilderExtensions {
26
- static withConfiguration(builder, ...dataSourceArgs) {
27
- const dataSources = dataSourceArgs ?? [];
28
- builder.withServices((builder)=>{
29
- builder.registerSingleton(_configuration.ConfigurationServiceToken, _configurationservice.ConfigurationService);
30
- for (const dataSource of dataSources){
31
- builder.registerSingleton(_const.ConfigurationDataSourceKey, dataSource);
32
- }
33
- });
34
- return builder;
35
- }
36
- }
37
- _ts_decorate([
38
- (0, _extensibility.extension)(_http.Builder),
39
- _ts_metadata("design:type", Function),
40
- _ts_metadata("design:paramtypes", [
41
- typeof _http.Builder === "undefined" ? Object : _http.Builder,
42
- Array
43
- ]),
44
- _ts_metadata("design:returntype", void 0)
45
- ], BuilderExtensions, "withConfiguration", null);
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ConfigurationService", {
6
- enumerable: true,
7
- get: function() {
8
- return ConfigurationService;
9
- }
10
- });
11
- const _decorators = require("@decohere/crucible/decorators");
12
- const _caching = require("@decohere/core/caching");
13
- const _system = require("@decohere/core/system");
14
- const _const = require("./const.js");
15
- const _errors = require("./errors.js");
16
- function _ts_decorate(decorators, target, key, desc) {
17
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
19
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
- return c > 3 && r && Object.defineProperty(target, key, r), r;
21
- }
22
- function _ts_metadata(k, v) {
23
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24
- }
25
- function _ts_param(paramIndex, decorator) {
26
- return function(target, key) {
27
- decorator(target, key, paramIndex);
28
- };
29
- }
30
- class ConfigurationService {
31
- data = {};
32
- dataSources = [];
33
- isInitialized = false;
34
- constructor(dataSources = []){
35
- this.dataSources = dataSources;
36
- }
37
- async initialize() {
38
- if (this.isInitialized) {
39
- return;
40
- }
41
- const records = await Promise.all(this.dataSources.map(async (d)=>await d.getData()));
42
- this.validateDataSources(records);
43
- const entries = records.flatMap((r)=>Object.entries(r));
44
- this.data = Object.fromEntries(entries);
45
- this.isInitialized = true;
46
- }
47
- async get(typeOrString) {
48
- await this.ensureInitialized();
49
- const obj = typeof typeOrString === "string" ? this.getStringKey(typeOrString) : this.getConstructable(typeOrString);
50
- return obj;
51
- }
52
- async ensureInitialized() {
53
- if (this.isInitialized) return;
54
- await this.initialize();
55
- }
56
- validateDataSources(records) {
57
- const keys = records.flatMap((record)=>Object.keys(record));
58
- const uniqueKeys = new Set(keys);
59
- if (uniqueKeys.size < keys.length) {
60
- throw new _errors.ConfigurationError(`Cannot have duplicate data source names. The data sources are: ${keys.join(",")}`);
61
- }
62
- }
63
- getConstructable(type) {
64
- const key = (0, _system.lowerCamelCase)(type?.name.replace(/configuration|config/i, ""));
65
- const data = this.data[key];
66
- const configObject = new type();
67
- Object.assign(configObject, data);
68
- return configObject;
69
- }
70
- getStringKey(key) {
71
- const data = this.data[key];
72
- return data;
73
- }
74
- }
75
- _ts_decorate([
76
- (0, _caching.memoize)(),
77
- _ts_metadata("design:type", Function),
78
- _ts_metadata("design:paramtypes", [
79
- typeof Constructable === "undefined" ? Object : Constructable
80
- ]),
81
- _ts_metadata("design:returntype", typeof T === "undefined" ? Object : T)
82
- ], ConfigurationService.prototype, "getConstructable", null);
83
- _ts_decorate([
84
- (0, _caching.cache)(),
85
- _ts_metadata("design:type", Function),
86
- _ts_metadata("design:paramtypes", [
87
- String
88
- ]),
89
- _ts_metadata("design:returntype", typeof T === "undefined" ? Object : T)
90
- ], ConfigurationService.prototype, "getStringKey", null);
91
- ConfigurationService = _ts_decorate([
92
- (0, _decorators.injectable)(),
93
- _ts_param(0, (0, _decorators.inject)(_const.ConfigurationDataSourceKey)),
94
- _ts_metadata("design:type", Function),
95
- _ts_metadata("design:paramtypes", [
96
- Array
97
- ])
98
- ], ConfigurationService);
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get ConfigurationDataSourceKey () {
13
- return ConfigurationDataSourceKey;
14
- },
15
- get DEFAULT_CONFIG_DIR () {
16
- return DEFAULT_CONFIG_DIR;
17
- }
18
- });
19
- const ConfigurationDataSourceKey = Symbol("ConfigurationDataSourceKey");
20
- const DEFAULT_CONFIG_DIR = "config";
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ConfigurationError", {
6
- enumerable: true,
7
- get: function() {
8
- return ConfigurationError;
9
- }
10
- });
11
- class ConfigurationError extends Error {
12
- }
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./configuration.extensions.js"), exports);
6
- _export_star(require("./configuration.service.js"), exports);
7
- _export_star(require("./configuration-data-source.js"), exports);
8
- _export_star(require("./const.js"), exports);
9
- _export_star(require("./yaml-data-source.js"), exports);
10
- function _export_star(from, to) {
11
- Object.keys(from).forEach(function(k) {
12
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
13
- Object.defineProperty(to, k, {
14
- enumerable: true,
15
- get: function() {
16
- return from[k];
17
- }
18
- });
19
- }
20
- });
21
- return from;
22
- }
@@ -1,185 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get YamlDataSource () {
13
- return YamlDataSource;
14
- },
15
- get resolveConfigEnv () {
16
- return resolveConfigEnv;
17
- },
18
- get resolveYamlConfig () {
19
- return resolveYamlConfig;
20
- }
21
- });
22
- const _io = require("@decohere/core/io");
23
- const _yaml = require("yaml");
24
- const _configurationdatasource = require("./configuration-data-source.js");
25
- const _const = require("./const.js");
26
- const _errors = require("./errors.js");
27
- const CONFIG_FILE_NAME = "config";
28
- /** Unset NODE_ENV must not silently load config.dev.yaml (TypeORM synchronize, etc.). */ const DEFAULT_ENV = "production";
29
- const FILE_EXT = "yaml";
30
- function resolveConfigEnv(nodeEnv) {
31
- const env = nodeEnv ?? process.env.NODE_ENV;
32
- if (env == null || env.trim() === "") {
33
- return DEFAULT_ENV;
34
- }
35
- return env;
36
- }
37
- /** `${NAME}` or `${NAME:default}`. The default may be empty, and runs up to the first `}`. */ const PLACEHOLDER = /\$\{(\w+)(?::([^}]*))?\}/g;
38
- function isTree(value) {
39
- return value != null && typeof value === "object" && !Array.isArray(value);
40
- }
41
- /** A non-empty list whose every entry is a mapping with a string `name`, such as `dataSources`. */ function isNamedList(value) {
42
- return Array.isArray(value) && value.length > 0 && value.every((item)=>isTree(item) && typeof item.name === "string");
43
- }
44
- /** Entries with the same name merge in place; new names are added at the end. */ function mergeNamedLists(base, override) {
45
- const merged = [
46
- ...base
47
- ];
48
- for (const entry of override){
49
- const index = merged.findIndex((item)=>item.name === entry.name);
50
- if (index === -1) {
51
- merged.push(entry);
52
- } else {
53
- merged[index] = merge(merged[index], entry);
54
- }
55
- }
56
- return merged;
57
- }
58
- /**
59
- * Objects merge key by key, and so do lists of named entries (matched by `name`), so an
60
- * environment file only states what it changes. Any other list, and a scalar, in the later file
61
- * replaces the earlier value.
62
- */ function merge(base, override) {
63
- const merged = {
64
- ...base
65
- };
66
- for (const [key, value] of Object.entries(override)){
67
- const existing = merged[key];
68
- if (isTree(existing) && isTree(value)) {
69
- merged[key] = merge(existing, value);
70
- } else if (isNamedList(existing) && isNamedList(value)) {
71
- merged[key] = mergeNamedLists(existing, value);
72
- } else {
73
- merged[key] = value;
74
- }
75
- }
76
- return merged;
77
- }
78
- /** A named list that repeats a name can't be merged by name, so say which file and where. */ function assertUniqueNames(value, source, path) {
79
- if (isNamedList(value)) {
80
- const seen = new Set();
81
- for (const item of value){
82
- if (seen.has(item.name)) {
83
- throw new _errors.ConfigurationError(`Config file ${source}: ${path} lists the name "${String(item.name)}" more than once`);
84
- }
85
- seen.add(item.name);
86
- }
87
- }
88
- if (Array.isArray(value)) {
89
- value.forEach((item, index)=>assertUniqueNames(item, source, `${path}[${index}]`));
90
- } else if (isTree(value)) {
91
- for (const [key, item] of Object.entries(value)){
92
- assertUniqueNames(item, source, path === "" ? key : `${path}.${key}`);
93
- }
94
- }
95
- }
96
- function resolveString(value, path, missing) {
97
- let hasPlaceholder = false;
98
- const resolved = value.replace(PLACEHOLDER, (_match, name, fallback)=>{
99
- hasPlaceholder = true;
100
- const fromEnv = process.env[name];
101
- if (fromEnv !== undefined) {
102
- return fromEnv;
103
- }
104
- if (fallback !== undefined) {
105
- return fallback;
106
- }
107
- missing.push({
108
- name,
109
- path
110
- });
111
- return "";
112
- });
113
- // A variable set to the text "null" means no value.
114
- return hasPlaceholder && resolved === "null" ? null : resolved;
115
- }
116
- function resolveValue(value, path, missing) {
117
- if (typeof value === "string") {
118
- return resolveString(value, path, missing);
119
- }
120
- if (Array.isArray(value)) {
121
- return value.map((item, index)=>resolveValue(item, `${path}[${index}]`, missing));
122
- }
123
- if (isTree(value)) {
124
- const resolved = {};
125
- for (const [key, item] of Object.entries(value)){
126
- resolved[key] = resolveValue(item, path === "" ? key : `${path}.${key}`, missing);
127
- }
128
- return resolved;
129
- }
130
- return value;
131
- }
132
- function parseSource({ name, text }) {
133
- let parsed;
134
- try {
135
- parsed = (0, _yaml.parse)(text);
136
- } catch (error) {
137
- const reason = error instanceof Error ? error.message : String(error);
138
- throw new _errors.ConfigurationError(`Cannot parse config file ${name}: ${reason}`);
139
- }
140
- if (parsed == null) {
141
- return undefined;
142
- }
143
- if (!isTree(parsed)) {
144
- throw new _errors.ConfigurationError(`Config file ${name} must contain a mapping at the top level`);
145
- }
146
- assertUniqueNames(parsed, name, "");
147
- return parsed;
148
- }
149
- function resolveYamlConfig(sources) {
150
- let merged = {};
151
- for (const source of sources){
152
- const tree = parseSource(source);
153
- if (tree !== undefined) {
154
- merged = merge(merged, tree);
155
- }
156
- }
157
- const missing = [];
158
- const resolved = resolveValue(merged, "", missing);
159
- if (missing.length > 0) {
160
- const lines = missing.map(({ name, path })=>` - ${name} (used at ${path})`);
161
- throw new _errors.ConfigurationError(`Config references ${missing.length} environment variable(s) that are not set:\n${lines.join("\n")}\n` + "Set them, give the value a default with ${NAME:default}, or replace it in the environment's config file.");
162
- }
163
- return resolved;
164
- }
165
- class YamlDataSource extends _configurationdatasource.ConfigurationDataSource {
166
- name = YamlDataSource.name;
167
- async getData() {
168
- const configDir = process.env.CONFIG_DIR ?? _const.DEFAULT_CONFIG_DIR;
169
- const env = resolveConfigEnv();
170
- const candidates = [
171
- `${configDir}/${CONFIG_FILE_NAME}.${FILE_EXT}`,
172
- `${configDir}/${CONFIG_FILE_NAME}.${env}.${FILE_EXT}`
173
- ];
174
- const sources = [];
175
- for (const filePath of candidates){
176
- if (await _io.io.fileExists(filePath)) {
177
- sources.push({
178
- name: filePath,
179
- text: await _io.io.readFile(filePath)
180
- });
181
- }
182
- }
183
- return resolveYamlConfig(sources);
184
- }
185
- }
@@ -1,2 +0,0 @@
1
- export class ConfigurationDataSource {
2
- }
@@ -1,35 +0,0 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- }
7
- function _ts_metadata(k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- }
10
- import { Builder } from "@decohere/http";
11
- import { ConfigurationServiceToken } from "@decohere/core/configuration";
12
- import { extension } from "@decohere/core/extensibility";
13
- import { ConfigurationService } from "./configuration.service.js";
14
- import { ConfigurationDataSourceKey } from "./const.js";
15
- export class BuilderExtensions {
16
- static withConfiguration(builder, ...dataSourceArgs) {
17
- const dataSources = dataSourceArgs ?? [];
18
- builder.withServices((builder)=>{
19
- builder.registerSingleton(ConfigurationServiceToken, ConfigurationService);
20
- for (const dataSource of dataSources){
21
- builder.registerSingleton(ConfigurationDataSourceKey, dataSource);
22
- }
23
- });
24
- return builder;
25
- }
26
- }
27
- _ts_decorate([
28
- extension(Builder),
29
- _ts_metadata("design:type", Function),
30
- _ts_metadata("design:paramtypes", [
31
- typeof Builder === "undefined" ? Object : Builder,
32
- Array
33
- ]),
34
- _ts_metadata("design:returntype", void 0)
35
- ], BuilderExtensions, "withConfiguration", null);
@@ -1,88 +0,0 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- }
7
- function _ts_metadata(k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- }
10
- function _ts_param(paramIndex, decorator) {
11
- return function(target, key) {
12
- decorator(target, key, paramIndex);
13
- };
14
- }
15
- import { inject, injectable } from "@decohere/crucible/decorators";
16
- import { cache, memoize } from "@decohere/core/caching";
17
- import { lowerCamelCase } from "@decohere/core/system";
18
- import { ConfigurationDataSourceKey } from "./const.js";
19
- import { ConfigurationError } from "./errors.js";
20
- export class ConfigurationService {
21
- data = {};
22
- dataSources = [];
23
- isInitialized = false;
24
- constructor(dataSources = []){
25
- this.dataSources = dataSources;
26
- }
27
- async initialize() {
28
- if (this.isInitialized) {
29
- return;
30
- }
31
- const records = await Promise.all(this.dataSources.map(async (d)=>await d.getData()));
32
- this.validateDataSources(records);
33
- const entries = records.flatMap((r)=>Object.entries(r));
34
- this.data = Object.fromEntries(entries);
35
- this.isInitialized = true;
36
- }
37
- async get(typeOrString) {
38
- await this.ensureInitialized();
39
- const obj = typeof typeOrString === "string" ? this.getStringKey(typeOrString) : this.getConstructable(typeOrString);
40
- return obj;
41
- }
42
- async ensureInitialized() {
43
- if (this.isInitialized) return;
44
- await this.initialize();
45
- }
46
- validateDataSources(records) {
47
- const keys = records.flatMap((record)=>Object.keys(record));
48
- const uniqueKeys = new Set(keys);
49
- if (uniqueKeys.size < keys.length) {
50
- throw new ConfigurationError(`Cannot have duplicate data source names. The data sources are: ${keys.join(",")}`);
51
- }
52
- }
53
- getConstructable(type) {
54
- const key = lowerCamelCase(type?.name.replace(/configuration|config/i, ""));
55
- const data = this.data[key];
56
- const configObject = new type();
57
- Object.assign(configObject, data);
58
- return configObject;
59
- }
60
- getStringKey(key) {
61
- const data = this.data[key];
62
- return data;
63
- }
64
- }
65
- _ts_decorate([
66
- memoize(),
67
- _ts_metadata("design:type", Function),
68
- _ts_metadata("design:paramtypes", [
69
- typeof Constructable === "undefined" ? Object : Constructable
70
- ]),
71
- _ts_metadata("design:returntype", typeof T === "undefined" ? Object : T)
72
- ], ConfigurationService.prototype, "getConstructable", null);
73
- _ts_decorate([
74
- cache(),
75
- _ts_metadata("design:type", Function),
76
- _ts_metadata("design:paramtypes", [
77
- String
78
- ]),
79
- _ts_metadata("design:returntype", typeof T === "undefined" ? Object : T)
80
- ], ConfigurationService.prototype, "getStringKey", null);
81
- ConfigurationService = _ts_decorate([
82
- injectable(),
83
- _ts_param(0, inject(ConfigurationDataSourceKey)),
84
- _ts_metadata("design:type", Function),
85
- _ts_metadata("design:paramtypes", [
86
- Array
87
- ])
88
- ], ConfigurationService);
package/es6/src/errors.js DELETED
@@ -1,2 +0,0 @@
1
- export class ConfigurationError extends Error {
2
- }