@h3ravel/config 0.5.1 → 1.0.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @h3ravel/config
2
2
 
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - b40caeb: feat: make service providers sortable and unique while only loading the core providers by default.
8
+ Service providers are no longer loaded by default, asides the ones provided by @h3ravel/core
9
+ Service provides are sorted by an optional order and priority property.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [b40caeb]
14
+ - @h3ravel/core@1.0.0
15
+ - @h3ravel/shared@0.6.0
16
+ - @h3ravel/support@0.6.0
17
+
18
+ ## 0.5.2
19
+
20
+ ### Patch Changes
21
+
22
+ - dynamically import dotenv
23
+
3
24
  ## 0.5.1
4
25
 
5
26
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -94,15 +94,13 @@ var EnvLoader = class {
94
94
 
95
95
  // src/Providers/ConfigServiceProvider.ts
96
96
  var import_core = require("@h3ravel/core");
97
- var import_dotenv = require("dotenv");
98
97
  var ConfigServiceProvider = class extends import_core.ServiceProvider {
99
98
  static {
100
99
  __name(this, "ConfigServiceProvider");
101
100
  }
101
+ static priority = 998;
102
+ // public static order = 'before:AppServiceProvider';
102
103
  async register() {
103
- (0, import_dotenv.config)({
104
- quiet: true
105
- });
106
104
  this.app.singleton("env", () => {
107
105
  return new EnvLoader(this.app).get;
108
106
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/ConfigRepository.ts","../src/EnvLoader.ts","../src/Providers/ConfigServiceProvider.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './ConfigRepository';\nexport * from './EnvLoader';\nexport * from './Helpers';\nexport * from './Providers/ConfigServiceProvider';\n","import { DotNestedKeys, DotNestedValue, safeDot, setNested } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\nimport path from 'node:path'\nimport { readdir } from 'node:fs/promises'\n\nexport class ConfigRepository {\n private loaded: boolean = false\n private configs: Record<string, Record<string, any>> = {}\n\n constructor(protected app: Application) { }\n\n // get<X extends Record<string, any>> (): X\n // get<X extends Record<string, any>, T extends Extract<keyof X, string>> (key: T): X[T]\n\n /**\n * Get the defined configurations\n */\n get<X extends Record<string, any>> (): X\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(this.configs, key) ?? def\n }\n\n /**\n * Modify the defined configurations\n */\n set<T extends string> (key: T, value: any): void {\n setNested(this.configs, key, value)\n }\n\n async load () {\n if (!this.loaded) {\n const configPath = this.app.getPath('config')\n\n const files = await readdir(configPath)\n\n for (let i = 0; i < files.length; i++) {\n const configModule = await import(path.join(configPath, files[i]))\n const name = files[i].replaceAll(/.ts|js/g, '')\n if (typeof configModule.default === 'function') {\n this.configs[name] = configModule.default(this.app)\n }\n }\n\n this.loaded = true\n }\n\n return this\n }\n}\n","import { DotNestedKeys, DotNestedValue, safeDot } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\n\nexport class EnvLoader {\n constructor(protected _app: Application) { }\n\n /**\n * Get the defined environment vars\n */\n get<X extends NodeJS.ProcessEnv> (): X\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(process.env, key) ?? def\n }\n}\n","import { Bindings, ServiceProvider } from '@h3ravel/core'\nimport { ConfigRepository, EnvLoader } from '..'\n\nimport { config as loadEnv } from 'dotenv'\n\n/**\n * Loads configuration and environment files.\n * \n * Load .env and merge with config files.\n * Bind ConfigRepository to the container.\n * \n * Auto-Registered\n */\nexport class ConfigServiceProvider extends ServiceProvider {\n async register () {\n\n loadEnv({ quiet: true })\n\n /**\n * Create singleton to load env\n */\n this.app.singleton('env', () => {\n return new EnvLoader(this.app).get\n })\n\n /**\n * Initialize the configuration through the repository\n */\n const repo = new ConfigRepository(this.app)\n await repo.load()\n\n /**\n * Create singleton to load configurations\n */\n this.app.singleton('config', () => {\n return {\n get: (key, def) => repo.get(key as any, def),\n set: repo.set\n } as Bindings['config']\n })\n\n this.app.make('http.app').use(e => {\n repo.set('app.url', e.url.origin)\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,qBAAkE;AAGlE,uBAAiB;AACjB,sBAAwB;AAEjB,IAAMA,mBAAN,MAAMA;EANb,OAMaA;;;;EACDC,SAAkB;EAClBC,UAA+C,CAAC;EAExD,YAAsBC,KAAkB;SAAlBA,MAAAA;EAAoB;EAU1CC,IAAgEC,KAASC,KAAgB;AACrF,eAAOC,wBAAQ,KAAKL,SAASG,GAAAA,KAAQC;EACzC;;;;EAKAE,IAAuBH,KAAQI,OAAkB;AAC7CC,kCAAU,KAAKR,SAASG,KAAKI,KAAAA;EACjC;EAEA,MAAME,OAAQ;AACV,QAAI,CAAC,KAAKV,QAAQ;AACd,YAAMW,aAAa,KAAKT,IAAIU,QAAQ,QAAA;AAEpC,YAAMC,QAAQ,UAAMC,yBAAQH,UAAAA;AAE5B,eAASI,IAAI,GAAGA,IAAIF,MAAMG,QAAQD,KAAK;AACnC,cAAME,eAAe,MAAM,OAAOC,iBAAAA,QAAKC,KAAKR,YAAYE,MAAME,CAAAA,CAAE;AAChE,cAAMK,OAAOP,MAAME,CAAAA,EAAGM,WAAW,WAAW,EAAA;AAC5C,YAAI,OAAOJ,aAAaK,YAAY,YAAY;AAC5C,eAAKrB,QAAQmB,IAAAA,IAAQH,aAAaK,QAAQ,KAAKpB,GAAG;QACtD;MACJ;AAEA,WAAKF,SAAS;IAClB;AAEA,WAAO;EACX;AACJ;;;AClDA,IAAAuB,kBAAuD;AAIhD,IAAMC,YAAN,MAAMA;EAJb,OAIaA;;;;EACT,YAAsBC,MAAmB;SAAnBA,OAAAA;EAAqB;EAO3CC,IAA8DC,KAASC,KAAgB;AACnF,eAAOC,yBAAQC,QAAQC,KAAKJ,GAAAA,KAAQC;EACxC;AACJ;;;ACfA,kBAA0C;AAG1C,oBAAkC;AAU3B,IAAMI,wBAAN,cAAoCC,4BAAAA;EAb3C,OAa2CA;;;EACvC,MAAMC,WAAY;AAEdC,sBAAAA,QAAQ;MAAEC,OAAO;IAAK,CAAA;AAKtB,SAAKC,IAAIC,UAAU,OAAO,MAAA;AACtB,aAAO,IAAIC,UAAU,KAAKF,GAAG,EAAEG;IACnC,CAAA;AAKA,UAAMC,OAAO,IAAIC,iBAAiB,KAAKL,GAAG;AAC1C,UAAMI,KAAKE,KAAI;AAKf,SAAKN,IAAIC,UAAU,UAAU,MAAA;AACzB,aAAO;QACHE,KAAK,CAACI,KAAKC,QAAQJ,KAAKD,IAAII,KAAYC,GAAAA;QACxCC,KAAKL,KAAKK;MACd;IACJ,CAAA;AAEA,SAAKT,IAAIU,KAAK,UAAA,EAAYC,IAAIC,CAAAA,MAAAA;AAC1BR,WAAKK,IAAI,WAAWG,EAAEC,IAAIC,MAAM;IACpC,CAAA;EACJ;AACJ;","names":["ConfigRepository","loaded","configs","app","get","key","def","safeDot","set","value","setNested","load","configPath","getPath","files","readdir","i","length","configModule","path","join","name","replaceAll","default","import_support","EnvLoader","_app","get","key","def","safeDot","process","env","ConfigServiceProvider","ServiceProvider","register","loadEnv","quiet","app","singleton","EnvLoader","get","repo","ConfigRepository","load","key","def","set","make","use","e","url","origin"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/ConfigRepository.ts","../src/EnvLoader.ts","../src/Providers/ConfigServiceProvider.ts"],"sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from './ConfigRepository';\nexport * from './EnvLoader';\nexport * from './Helpers';\nexport * from './Providers/ConfigServiceProvider';\n","import { DotNestedKeys, DotNestedValue, safeDot, setNested } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\nimport path from 'node:path'\nimport { readdir } from 'node:fs/promises'\n\nexport class ConfigRepository {\n private loaded: boolean = false\n private configs: Record<string, Record<string, any>> = {}\n\n constructor(protected app: Application) { }\n\n // get<X extends Record<string, any>> (): X\n // get<X extends Record<string, any>, T extends Extract<keyof X, string>> (key: T): X[T]\n\n /**\n * Get the defined configurations\n */\n get<X extends Record<string, any>> (): X\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(this.configs, key) ?? def\n }\n\n /**\n * Modify the defined configurations\n */\n set<T extends string> (key: T, value: any): void {\n setNested(this.configs, key, value)\n }\n\n async load () {\n if (!this.loaded) {\n const configPath = this.app.getPath('config')\n\n const files = await readdir(configPath)\n\n for (let i = 0; i < files.length; i++) {\n const configModule = await import(path.join(configPath, files[i]))\n const name = files[i].replaceAll(/.ts|js/g, '')\n if (typeof configModule.default === 'function') {\n this.configs[name] = configModule.default(this.app)\n }\n }\n\n this.loaded = true\n }\n\n return this\n }\n}\n","import { DotNestedKeys, DotNestedValue, safeDot } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\n\nexport class EnvLoader {\n constructor(protected _app: Application) { }\n\n /**\n * Get the defined environment vars\n */\n get<X extends NodeJS.ProcessEnv> (): X\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(process.env, key) ?? def\n }\n}\n","import { Bindings, ServiceProvider } from '@h3ravel/core'\nimport { ConfigRepository, EnvLoader } from '..'\n\n/**\n * Loads configuration and environment files.\n * \n * Load .env and merge with config files.\n * Bind ConfigRepository to the container.\n * \n * Auto-Registered\n */\nexport class ConfigServiceProvider extends ServiceProvider {\n public static priority = 998;\n // public static order = 'before:AppServiceProvider';\n\n async register () {\n /**\n * Create singleton to load env\n */\n this.app.singleton('env', () => {\n return new EnvLoader(this.app).get\n })\n\n /**\n * Initialize the configuration through the repository\n */\n const repo = new ConfigRepository(this.app)\n await repo.load()\n\n /**\n * Create singleton to load configurations\n */\n this.app.singleton('config', () => {\n return {\n get: (key, def) => repo.get(key as any, def),\n set: repo.set\n } as Bindings['config']\n })\n\n this.app.make('http.app').use(e => {\n repo.set('app.url', e.url.origin)\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,qBAAkE;AAGlE,uBAAiB;AACjB,sBAAwB;AAEjB,IAAMA,mBAAN,MAAMA;EANb,OAMaA;;;;EACDC,SAAkB;EAClBC,UAA+C,CAAC;EAExD,YAAsBC,KAAkB;SAAlBA,MAAAA;EAAoB;EAU1CC,IAAgEC,KAASC,KAAgB;AACrF,eAAOC,wBAAQ,KAAKL,SAASG,GAAAA,KAAQC;EACzC;;;;EAKAE,IAAuBH,KAAQI,OAAkB;AAC7CC,kCAAU,KAAKR,SAASG,KAAKI,KAAAA;EACjC;EAEA,MAAME,OAAQ;AACV,QAAI,CAAC,KAAKV,QAAQ;AACd,YAAMW,aAAa,KAAKT,IAAIU,QAAQ,QAAA;AAEpC,YAAMC,QAAQ,UAAMC,yBAAQH,UAAAA;AAE5B,eAASI,IAAI,GAAGA,IAAIF,MAAMG,QAAQD,KAAK;AACnC,cAAME,eAAe,MAAM,OAAOC,iBAAAA,QAAKC,KAAKR,YAAYE,MAAME,CAAAA,CAAE;AAChE,cAAMK,OAAOP,MAAME,CAAAA,EAAGM,WAAW,WAAW,EAAA;AAC5C,YAAI,OAAOJ,aAAaK,YAAY,YAAY;AAC5C,eAAKrB,QAAQmB,IAAAA,IAAQH,aAAaK,QAAQ,KAAKpB,GAAG;QACtD;MACJ;AAEA,WAAKF,SAAS;IAClB;AAEA,WAAO;EACX;AACJ;;;AClDA,IAAAuB,kBAAuD;AAIhD,IAAMC,YAAN,MAAMA;EAJb,OAIaA;;;;EACT,YAAsBC,MAAmB;SAAnBA,OAAAA;EAAqB;EAO3CC,IAA8DC,KAASC,KAAgB;AACnF,eAAOC,yBAAQC,QAAQC,KAAKJ,GAAAA,KAAQC;EACxC;AACJ;;;ACfA,kBAA0C;AAWnC,IAAMI,wBAAN,cAAoCC,4BAAAA;EAX3C,OAW2CA;;;EACvC,OAAcC,WAAW;;EAGzB,MAAMC,WAAY;AAId,SAAKC,IAAIC,UAAU,OAAO,MAAA;AACtB,aAAO,IAAIC,UAAU,KAAKF,GAAG,EAAEG;IACnC,CAAA;AAKA,UAAMC,OAAO,IAAIC,iBAAiB,KAAKL,GAAG;AAC1C,UAAMI,KAAKE,KAAI;AAKf,SAAKN,IAAIC,UAAU,UAAU,MAAA;AACzB,aAAO;QACHE,KAAK,CAACI,KAAKC,QAAQJ,KAAKD,IAAII,KAAYC,GAAAA;QACxCC,KAAKL,KAAKK;MACd;IACJ,CAAA;AAEA,SAAKT,IAAIU,KAAK,UAAA,EAAYC,IAAIC,CAAAA,MAAAA;AAC1BR,WAAKK,IAAI,WAAWG,EAAEC,IAAIC,MAAM;IACpC,CAAA;EACJ;AACJ;","names":["ConfigRepository","loaded","configs","app","get","key","def","safeDot","set","value","setNested","load","configPath","getPath","files","readdir","i","length","configModule","path","join","name","replaceAll","default","import_support","EnvLoader","_app","get","key","def","safeDot","process","env","ConfigServiceProvider","ServiceProvider","priority","register","app","singleton","EnvLoader","get","repo","ConfigRepository","load","key","def","set","make","use","e","url","origin"]}
package/dist/index.d.cts CHANGED
@@ -37,6 +37,7 @@ declare class EnvLoader {
37
37
  * Auto-Registered
38
38
  */
39
39
  declare class ConfigServiceProvider extends ServiceProvider {
40
+ static priority: number;
40
41
  register(): Promise<void>;
41
42
  }
42
43
 
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ declare class EnvLoader {
37
37
  * Auto-Registered
38
38
  */
39
39
  declare class ConfigServiceProvider extends ServiceProvider {
40
+ static priority: number;
40
41
  register(): Promise<void>;
41
42
  }
42
43
 
package/dist/index.js CHANGED
@@ -58,15 +58,13 @@ var EnvLoader = class {
58
58
 
59
59
  // src/Providers/ConfigServiceProvider.ts
60
60
  import { ServiceProvider } from "@h3ravel/core";
61
- import { config as loadEnv } from "dotenv";
62
61
  var ConfigServiceProvider = class extends ServiceProvider {
63
62
  static {
64
63
  __name(this, "ConfigServiceProvider");
65
64
  }
65
+ static priority = 998;
66
+ // public static order = 'before:AppServiceProvider';
66
67
  async register() {
67
- loadEnv({
68
- quiet: true
69
- });
70
68
  this.app.singleton("env", () => {
71
69
  return new EnvLoader(this.app).get;
72
70
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ConfigRepository.ts","../src/EnvLoader.ts","../src/Providers/ConfigServiceProvider.ts"],"sourcesContent":["import { DotNestedKeys, DotNestedValue, safeDot, setNested } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\nimport path from 'node:path'\nimport { readdir } from 'node:fs/promises'\n\nexport class ConfigRepository {\n private loaded: boolean = false\n private configs: Record<string, Record<string, any>> = {}\n\n constructor(protected app: Application) { }\n\n // get<X extends Record<string, any>> (): X\n // get<X extends Record<string, any>, T extends Extract<keyof X, string>> (key: T): X[T]\n\n /**\n * Get the defined configurations\n */\n get<X extends Record<string, any>> (): X\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(this.configs, key) ?? def\n }\n\n /**\n * Modify the defined configurations\n */\n set<T extends string> (key: T, value: any): void {\n setNested(this.configs, key, value)\n }\n\n async load () {\n if (!this.loaded) {\n const configPath = this.app.getPath('config')\n\n const files = await readdir(configPath)\n\n for (let i = 0; i < files.length; i++) {\n const configModule = await import(path.join(configPath, files[i]))\n const name = files[i].replaceAll(/.ts|js/g, '')\n if (typeof configModule.default === 'function') {\n this.configs[name] = configModule.default(this.app)\n }\n }\n\n this.loaded = true\n }\n\n return this\n }\n}\n","import { DotNestedKeys, DotNestedValue, safeDot } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\n\nexport class EnvLoader {\n constructor(protected _app: Application) { }\n\n /**\n * Get the defined environment vars\n */\n get<X extends NodeJS.ProcessEnv> (): X\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(process.env, key) ?? def\n }\n}\n","import { Bindings, ServiceProvider } from '@h3ravel/core'\nimport { ConfigRepository, EnvLoader } from '..'\n\nimport { config as loadEnv } from 'dotenv'\n\n/**\n * Loads configuration and environment files.\n * \n * Load .env and merge with config files.\n * Bind ConfigRepository to the container.\n * \n * Auto-Registered\n */\nexport class ConfigServiceProvider extends ServiceProvider {\n async register () {\n\n loadEnv({ quiet: true })\n\n /**\n * Create singleton to load env\n */\n this.app.singleton('env', () => {\n return new EnvLoader(this.app).get\n })\n\n /**\n * Initialize the configuration through the repository\n */\n const repo = new ConfigRepository(this.app)\n await repo.load()\n\n /**\n * Create singleton to load configurations\n */\n this.app.singleton('config', () => {\n return {\n get: (key, def) => repo.get(key as any, def),\n set: repo.set\n } as Bindings['config']\n })\n\n this.app.make('http.app').use(e => {\n repo.set('app.url', e.url.origin)\n })\n }\n}\n"],"mappings":";;;;AAAA,SAAwCA,SAASC,iBAAiB;AAGlE,OAAOC,UAAU;AACjB,SAASC,eAAe;AAEjB,IAAMC,mBAAN,MAAMA;EANb,OAMaA;;;;EACDC,SAAkB;EAClBC,UAA+C,CAAC;EAExD,YAAsBC,KAAkB;SAAlBA,MAAAA;EAAoB;EAU1CC,IAAgEC,KAASC,KAAgB;AACrF,WAAOC,QAAQ,KAAKL,SAASG,GAAAA,KAAQC;EACzC;;;;EAKAE,IAAuBH,KAAQI,OAAkB;AAC7CC,cAAU,KAAKR,SAASG,KAAKI,KAAAA;EACjC;EAEA,MAAME,OAAQ;AACV,QAAI,CAAC,KAAKV,QAAQ;AACd,YAAMW,aAAa,KAAKT,IAAIU,QAAQ,QAAA;AAEpC,YAAMC,QAAQ,MAAMC,QAAQH,UAAAA;AAE5B,eAASI,IAAI,GAAGA,IAAIF,MAAMG,QAAQD,KAAK;AACnC,cAAME,eAAe,MAAM,OAAOC,KAAKC,KAAKR,YAAYE,MAAME,CAAAA,CAAE;AAChE,cAAMK,OAAOP,MAAME,CAAAA,EAAGM,WAAW,WAAW,EAAA;AAC5C,YAAI,OAAOJ,aAAaK,YAAY,YAAY;AAC5C,eAAKrB,QAAQmB,IAAAA,IAAQH,aAAaK,QAAQ,KAAKpB,GAAG;QACtD;MACJ;AAEA,WAAKF,SAAS;IAClB;AAEA,WAAO;EACX;AACJ;;;AClDA,SAAwCuB,WAAAA,gBAAe;AAIhD,IAAMC,YAAN,MAAMA;EAJb,OAIaA;;;;EACT,YAAsBC,MAAmB;SAAnBA,OAAAA;EAAqB;EAO3CC,IAA8DC,KAASC,KAAgB;AACnF,WAAOC,SAAQC,QAAQC,KAAKJ,GAAAA,KAAQC;EACxC;AACJ;;;ACfA,SAAmBI,uBAAuB;AAG1C,SAASC,UAAUC,eAAe;AAU3B,IAAMC,wBAAN,cAAoCC,gBAAAA;EAb3C,OAa2CA;;;EACvC,MAAMC,WAAY;AAEdC,YAAQ;MAAEC,OAAO;IAAK,CAAA;AAKtB,SAAKC,IAAIC,UAAU,OAAO,MAAA;AACtB,aAAO,IAAIC,UAAU,KAAKF,GAAG,EAAEG;IACnC,CAAA;AAKA,UAAMC,OAAO,IAAIC,iBAAiB,KAAKL,GAAG;AAC1C,UAAMI,KAAKE,KAAI;AAKf,SAAKN,IAAIC,UAAU,UAAU,MAAA;AACzB,aAAO;QACHE,KAAK,CAACI,KAAKC,QAAQJ,KAAKD,IAAII,KAAYC,GAAAA;QACxCC,KAAKL,KAAKK;MACd;IACJ,CAAA;AAEA,SAAKT,IAAIU,KAAK,UAAA,EAAYC,IAAIC,CAAAA,MAAAA;AAC1BR,WAAKK,IAAI,WAAWG,EAAEC,IAAIC,MAAM;IACpC,CAAA;EACJ;AACJ;","names":["safeDot","setNested","path","readdir","ConfigRepository","loaded","configs","app","get","key","def","safeDot","set","value","setNested","load","configPath","getPath","files","readdir","i","length","configModule","path","join","name","replaceAll","default","safeDot","EnvLoader","_app","get","key","def","safeDot","process","env","ServiceProvider","config","loadEnv","ConfigServiceProvider","ServiceProvider","register","loadEnv","quiet","app","singleton","EnvLoader","get","repo","ConfigRepository","load","key","def","set","make","use","e","url","origin"]}
1
+ {"version":3,"sources":["../src/ConfigRepository.ts","../src/EnvLoader.ts","../src/Providers/ConfigServiceProvider.ts"],"sourcesContent":["import { DotNestedKeys, DotNestedValue, safeDot, setNested } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\nimport path from 'node:path'\nimport { readdir } from 'node:fs/promises'\n\nexport class ConfigRepository {\n private loaded: boolean = false\n private configs: Record<string, Record<string, any>> = {}\n\n constructor(protected app: Application) { }\n\n // get<X extends Record<string, any>> (): X\n // get<X extends Record<string, any>, T extends Extract<keyof X, string>> (key: T): X[T]\n\n /**\n * Get the defined configurations\n */\n get<X extends Record<string, any>> (): X\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends Record<string, any>, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(this.configs, key) ?? def\n }\n\n /**\n * Modify the defined configurations\n */\n set<T extends string> (key: T, value: any): void {\n setNested(this.configs, key, value)\n }\n\n async load () {\n if (!this.loaded) {\n const configPath = this.app.getPath('config')\n\n const files = await readdir(configPath)\n\n for (let i = 0; i < files.length; i++) {\n const configModule = await import(path.join(configPath, files[i]))\n const name = files[i].replaceAll(/.ts|js/g, '')\n if (typeof configModule.default === 'function') {\n this.configs[name] = configModule.default(this.app)\n }\n }\n\n this.loaded = true\n }\n\n return this\n }\n}\n","import { DotNestedKeys, DotNestedValue, safeDot } from '@h3ravel/support'\n\nimport { Application } from '@h3ravel/core'\n\nexport class EnvLoader {\n constructor(protected _app: Application) { }\n\n /**\n * Get the defined environment vars\n */\n get<X extends NodeJS.ProcessEnv> (): X\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key: K, def?: any): DotNestedValue<X, K>\n get<X extends NodeJS.ProcessEnv, K extends DotNestedKeys<X>> (key?: K, def?: any): any {\n return safeDot(process.env, key) ?? def\n }\n}\n","import { Bindings, ServiceProvider } from '@h3ravel/core'\nimport { ConfigRepository, EnvLoader } from '..'\n\n/**\n * Loads configuration and environment files.\n * \n * Load .env and merge with config files.\n * Bind ConfigRepository to the container.\n * \n * Auto-Registered\n */\nexport class ConfigServiceProvider extends ServiceProvider {\n public static priority = 998;\n // public static order = 'before:AppServiceProvider';\n\n async register () {\n /**\n * Create singleton to load env\n */\n this.app.singleton('env', () => {\n return new EnvLoader(this.app).get\n })\n\n /**\n * Initialize the configuration through the repository\n */\n const repo = new ConfigRepository(this.app)\n await repo.load()\n\n /**\n * Create singleton to load configurations\n */\n this.app.singleton('config', () => {\n return {\n get: (key, def) => repo.get(key as any, def),\n set: repo.set\n } as Bindings['config']\n })\n\n this.app.make('http.app').use(e => {\n repo.set('app.url', e.url.origin)\n })\n }\n}\n"],"mappings":";;;;AAAA,SAAwCA,SAASC,iBAAiB;AAGlE,OAAOC,UAAU;AACjB,SAASC,eAAe;AAEjB,IAAMC,mBAAN,MAAMA;EANb,OAMaA;;;;EACDC,SAAkB;EAClBC,UAA+C,CAAC;EAExD,YAAsBC,KAAkB;SAAlBA,MAAAA;EAAoB;EAU1CC,IAAgEC,KAASC,KAAgB;AACrF,WAAOC,QAAQ,KAAKL,SAASG,GAAAA,KAAQC;EACzC;;;;EAKAE,IAAuBH,KAAQI,OAAkB;AAC7CC,cAAU,KAAKR,SAASG,KAAKI,KAAAA;EACjC;EAEA,MAAME,OAAQ;AACV,QAAI,CAAC,KAAKV,QAAQ;AACd,YAAMW,aAAa,KAAKT,IAAIU,QAAQ,QAAA;AAEpC,YAAMC,QAAQ,MAAMC,QAAQH,UAAAA;AAE5B,eAASI,IAAI,GAAGA,IAAIF,MAAMG,QAAQD,KAAK;AACnC,cAAME,eAAe,MAAM,OAAOC,KAAKC,KAAKR,YAAYE,MAAME,CAAAA,CAAE;AAChE,cAAMK,OAAOP,MAAME,CAAAA,EAAGM,WAAW,WAAW,EAAA;AAC5C,YAAI,OAAOJ,aAAaK,YAAY,YAAY;AAC5C,eAAKrB,QAAQmB,IAAAA,IAAQH,aAAaK,QAAQ,KAAKpB,GAAG;QACtD;MACJ;AAEA,WAAKF,SAAS;IAClB;AAEA,WAAO;EACX;AACJ;;;AClDA,SAAwCuB,WAAAA,gBAAe;AAIhD,IAAMC,YAAN,MAAMA;EAJb,OAIaA;;;;EACT,YAAsBC,MAAmB;SAAnBA,OAAAA;EAAqB;EAO3CC,IAA8DC,KAASC,KAAgB;AACnF,WAAOC,SAAQC,QAAQC,KAAKJ,GAAAA,KAAQC;EACxC;AACJ;;;ACfA,SAAmBI,uBAAuB;AAWnC,IAAMC,wBAAN,cAAoCC,gBAAAA;EAX3C,OAW2CA;;;EACvC,OAAcC,WAAW;;EAGzB,MAAMC,WAAY;AAId,SAAKC,IAAIC,UAAU,OAAO,MAAA;AACtB,aAAO,IAAIC,UAAU,KAAKF,GAAG,EAAEG;IACnC,CAAA;AAKA,UAAMC,OAAO,IAAIC,iBAAiB,KAAKL,GAAG;AAC1C,UAAMI,KAAKE,KAAI;AAKf,SAAKN,IAAIC,UAAU,UAAU,MAAA;AACzB,aAAO;QACHE,KAAK,CAACI,KAAKC,QAAQJ,KAAKD,IAAII,KAAYC,GAAAA;QACxCC,KAAKL,KAAKK;MACd;IACJ,CAAA;AAEA,SAAKT,IAAIU,KAAK,UAAA,EAAYC,IAAIC,CAAAA,MAAAA;AAC1BR,WAAKK,IAAI,WAAWG,EAAEC,IAAIC,MAAM;IACpC,CAAA;EACJ;AACJ;","names":["safeDot","setNested","path","readdir","ConfigRepository","loaded","configs","app","get","key","def","safeDot","set","value","setNested","load","configPath","getPath","files","readdir","i","length","configModule","path","join","name","replaceAll","default","safeDot","EnvLoader","_app","get","key","def","safeDot","process","env","ServiceProvider","ConfigServiceProvider","ServiceProvider","priority","register","app","singleton","EnvLoader","get","repo","ConfigRepository","load","key","def","set","make","use","e","url","origin"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h3ravel/config",
3
- "version": "0.5.1",
3
+ "version": "1.0.0",
4
4
  "description": "Environment/config loading and management system for H3ravel.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -15,10 +15,9 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "dotenv": "^17.2.1",
19
- "@h3ravel/core": "0.5.0",
20
- "@h3ravel/shared": "0.5.0",
21
- "@h3ravel/support": "0.5.0"
18
+ "@h3ravel/core": "1.0.0",
19
+ "@h3ravel/support": "0.6.0",
20
+ "@h3ravel/shared": "0.6.0"
22
21
  },
23
22
  "devDependencies": {
24
23
  "typescript": "^5.4.0",
@@ -1,8 +1,6 @@
1
1
  import { Bindings, ServiceProvider } from '@h3ravel/core'
2
2
  import { ConfigRepository, EnvLoader } from '..'
3
3
 
4
- import { config as loadEnv } from 'dotenv'
5
-
6
4
  /**
7
5
  * Loads configuration and environment files.
8
6
  *
@@ -12,10 +10,10 @@ import { config as loadEnv } from 'dotenv'
12
10
  * Auto-Registered
13
11
  */
14
12
  export class ConfigServiceProvider extends ServiceProvider {
15
- async register () {
16
-
17
- loadEnv({ quiet: true })
13
+ public static priority = 998;
14
+ // public static order = 'before:AppServiceProvider';
18
15
 
16
+ async register () {
19
17
  /**
20
18
  * Create singleton to load env
21
19
  */