@effect/platform 0.68.0 → 0.68.2

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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.layerFileTreeAdd = exports.layerFileTree = exports.fromFileTree = void 0;
6
+ exports.layerFileTreeAdd = exports.layerFileTree = exports.layerDotEnvAdd = exports.layerDotEnv = exports.fromFileTree = exports.fromDotEnv = void 0;
7
7
  var Arr = _interopRequireWildcard(require("effect/Array"));
8
8
  var Cause = _interopRequireWildcard(require("effect/Cause"));
9
9
  var ConfigError = _interopRequireWildcard(require("effect/ConfigError"));
@@ -17,6 +17,7 @@ var HashSet = _interopRequireWildcard(require("effect/HashSet"));
17
17
  var Layer = _interopRequireWildcard(require("effect/Layer"));
18
18
  var _Error = require("./Error.js");
19
19
  var FileSystem = _interopRequireWildcard(require("./FileSystem.js"));
20
+ var internal = _interopRequireWildcard(require("./internal/platformConfigProvider.js"));
20
21
  var Path = _interopRequireWildcard(require("./Path.js"));
21
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -65,5 +66,27 @@ const layerFileTreeAdd = options => fromFileTree(options).pipe(Effect.map(provid
65
66
  */
66
67
  exports.layerFileTreeAdd = layerFileTreeAdd;
67
68
  const layerFileTree = options => fromFileTree(options).pipe(Effect.map(Layer.setConfigProvider), Layer.unwrapEffect);
69
+ /**
70
+ * Create a dotenv ConfigProvider.
71
+ *
72
+ * @category constructors
73
+ * @since 1.0.0
74
+ */
68
75
  exports.layerFileTree = layerFileTree;
76
+ const fromDotEnv = exports.fromDotEnv = internal.fromDotEnv;
77
+ /**
78
+ * Add the dotenv ConfigProvider to the environment, as a fallback to the current ConfigProvider.
79
+ * If the file is not found, a debug log is produced and empty layer is returned.
80
+ *
81
+ * @since 1.0.0
82
+ * @category layers
83
+ */
84
+ const layerDotEnvAdd = exports.layerDotEnvAdd = internal.layerDotEnvAdd;
85
+ /**
86
+ * Add the dotenv ConfigProvider to the environment, replacing the current ConfigProvider.
87
+ *
88
+ * @since 1.0.0
89
+ * @category layers
90
+ */
91
+ const layerDotEnv = exports.layerDotEnv = internal.layerDotEnv;
69
92
  //# sourceMappingURL=PlatformConfigProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformConfigProvider.js","names":["Arr","_interopRequireWildcard","require","Cause","ConfigError","ConfigProvider","PathPatch","Context","DefaultServices","Effect","Either","HashSet","Layer","_Error","FileSystem","Path","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","fromFileTree","options","Do","pipe","bind","map","fs","path","rootDirectory","parseConfig","primitive","value","parse","trim","of","readConfig","filePath","flatMap","readFileString","resolveEnumerableDirs","segments","length","join","resolveFilePath","pathSegments","sourceError","error","SourceUnavailable","message","fail","pathNotFoundError","MissingData","handlePlatformError","_tag","reason","fromFlat","makeFlat","load","config","catchIf","isPlatformError","enumerateChildren","forEach","dir","readDirectory","files","fromIterable","flat","patch","empty","exports","layerFileTreeAdd","provider","fiberRefLocallyScopedWith","currentServices","services","current","add","orElse","unwrapEffect","layerFileTree","setConfigProvider"],"sources":["../../src/PlatformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PlatformConfigProvider.js","names":["Arr","_interopRequireWildcard","require","Cause","ConfigError","ConfigProvider","PathPatch","Context","DefaultServices","Effect","Either","HashSet","Layer","_Error","FileSystem","internal","Path","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","fromFileTree","options","Do","pipe","bind","map","fs","path","rootDirectory","parseConfig","primitive","value","parse","trim","of","readConfig","filePath","flatMap","readFileString","resolveEnumerableDirs","segments","length","join","resolveFilePath","pathSegments","sourceError","error","SourceUnavailable","message","fail","pathNotFoundError","MissingData","handlePlatformError","_tag","reason","fromFlat","makeFlat","load","config","catchIf","isPlatformError","enumerateChildren","forEach","dir","readDirectory","files","fromIterable","flat","patch","empty","exports","layerFileTreeAdd","provider","fiberRefLocallyScopedWith","currentServices","services","current","add","orElse","unwrapEffect","layerFileTree","setConfigProvider","fromDotEnv","layerDotEnvAdd","layerDotEnv"],"sources":["../../src/PlatformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.layerDotEnvAdd = exports.layerDotEnv = exports.fromDotEnv = void 0;
7
+ var FileSystem = _interopRequireWildcard(require("@effect/platform/FileSystem"));
8
+ var ConfigProvider = _interopRequireWildcard(require("effect/ConfigProvider"));
9
+ var Context = _interopRequireWildcard(require("effect/Context"));
10
+ var DefaultServices = _interopRequireWildcard(require("effect/DefaultServices"));
11
+ var Effect = _interopRequireWildcard(require("effect/Effect"));
12
+ var FiberRef = _interopRequireWildcard(require("effect/FiberRef"));
13
+ var Layer = _interopRequireWildcard(require("effect/Layer"));
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ /**
17
+ * dot env ConfigProvider
18
+ *
19
+ * Based on
20
+ * - https://github.com/motdotla/dotenv
21
+ * - https://github.com/motdotla/dotenv-expand
22
+ */
23
+ /** @internal */
24
+ const fromDotEnv = path => Effect.gen(function* (_) {
25
+ const fs = yield* FileSystem.FileSystem;
26
+ const content = yield* fs.readFileString(path);
27
+ const obj = parseDotEnv(content);
28
+ return ConfigProvider.fromJson(obj);
29
+ });
30
+ /** @internal */
31
+ exports.fromDotEnv = fromDotEnv;
32
+ const layerDotEnv = path => fromDotEnv(path).pipe(Effect.map(Layer.setConfigProvider), Layer.unwrapEffect);
33
+ /** @internal */
34
+ exports.layerDotEnv = layerDotEnv;
35
+ const layerDotEnvAdd = path => Effect.gen(function* (_) {
36
+ const dotEnvConfigProvider = yield* Effect.orElseSucceed(fromDotEnv(path), () => null);
37
+ if (dotEnvConfigProvider === null) {
38
+ yield* Effect.logDebug(`File '${path}' not found, skipping dotenv ConfigProvider.`);
39
+ return Layer.empty;
40
+ }
41
+ const currentConfigProvider = yield* FiberRef.get(DefaultServices.currentServices).pipe(Effect.map(services => Context.get(services, ConfigProvider.ConfigProvider)));
42
+ const configProvider = ConfigProvider.orElse(currentConfigProvider, () => dotEnvConfigProvider);
43
+ return Layer.setConfigProvider(configProvider);
44
+ }).pipe(Layer.unwrapEffect);
45
+ /** @internal */
46
+ exports.layerDotEnvAdd = layerDotEnvAdd;
47
+ const DOT_ENV_LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
48
+ /** @internal */
49
+ const parseDotEnv = lines => {
50
+ const obj = {};
51
+ // Convert line breaks to same format
52
+ lines = lines.replace(/\r\n?/gm, "\n");
53
+ let match;
54
+ while ((match = DOT_ENV_LINE.exec(lines)) != null) {
55
+ const key = match[1];
56
+ // Default undefined or null to empty string
57
+ let value = match[2] || "";
58
+ // Remove whitespace
59
+ value = value.trim();
60
+ // Check if double quoted
61
+ const maybeQuote = value[0];
62
+ // Remove surrounding quotes
63
+ value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
64
+ // Expand newlines if double quoted
65
+ if (maybeQuote === "\"") {
66
+ value = value.replace(/\\n/g, "\n");
67
+ value = value.replace(/\\r/g, "\r");
68
+ }
69
+ // Add to object
70
+ obj[key] = value;
71
+ }
72
+ return expand(obj);
73
+ };
74
+ /** @internal */
75
+ const expand = parsed => {
76
+ const newParsed = {};
77
+ for (const configKey in parsed) {
78
+ // resolve escape sequences
79
+ newParsed[configKey] = interpolate(parsed[configKey], parsed).replace(/\\\$/g, "$");
80
+ }
81
+ return newParsed;
82
+ };
83
+ /** @internal */
84
+ const interpolate = (envValue, parsed) => {
85
+ // find the last unescaped dollar sign in the
86
+ // value so that we can evaluate it
87
+ const lastUnescapedDollarSignIndex = searchLast(envValue, /(?!(?<=\\))\$/g);
88
+ // If we couldn't match any unescaped dollar sign
89
+ // let's return the string as is
90
+ if (lastUnescapedDollarSignIndex === -1) return envValue;
91
+ // This is the right-most group of variables in the string
92
+ const rightMostGroup = envValue.slice(lastUnescapedDollarSignIndex);
93
+ /**
94
+ * This finds the inner most variable/group divided
95
+ * by variable name and default value (if present)
96
+ * (
97
+ * (?!(?<=\\))\$ // only match dollar signs that are not escaped
98
+ * {? // optional opening curly brace
99
+ * ([\w]+) // match the variable name
100
+ * (?::-([^}\\]*))? // match an optional default value
101
+ * }? // optional closing curly brace
102
+ * )
103
+ */
104
+ const matchGroup = /((?!(?<=\\))\${?([\w]+)(?::-([^}\\]*))?}?)/;
105
+ const match = rightMostGroup.match(matchGroup);
106
+ if (match !== null) {
107
+ const [_, group, variableName, defaultValue] = match;
108
+ return interpolate(envValue.replace(group, defaultValue || parsed[variableName] || ""), parsed);
109
+ }
110
+ return envValue;
111
+ };
112
+ /** @internal */
113
+ const searchLast = (str, rgx) => {
114
+ const matches = Array.from(str.matchAll(rgx));
115
+ return matches.length > 0 ? matches.slice(-1)[0].index : -1;
116
+ };
117
+ //# sourceMappingURL=platformConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformConfigProvider.js","names":["FileSystem","_interopRequireWildcard","require","ConfigProvider","Context","DefaultServices","Effect","FiberRef","Layer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","fromDotEnv","path","gen","_","fs","content","readFileString","obj","parseDotEnv","fromJson","exports","layerDotEnv","pipe","map","setConfigProvider","unwrapEffect","layerDotEnvAdd","dotEnvConfigProvider","orElseSucceed","logDebug","empty","currentConfigProvider","currentServices","services","configProvider","orElse","DOT_ENV_LINE","lines","replace","match","exec","key","value","trim","maybeQuote","expand","parsed","newParsed","configKey","interpolate","envValue","lastUnescapedDollarSignIndex","searchLast","rightMostGroup","slice","matchGroup","group","variableName","defaultValue","str","rgx","matches","Array","from","matchAll","length","index"],"sources":["../../../src/internal/platformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import * as ConfigProvider from "effect/ConfigProvider";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Layer from "effect/Layer";
4
+ import { type PlatformError } from "./Error.js";
4
5
  import * as FileSystem from "./FileSystem.js";
5
6
  import * as Path from "./Path.js";
6
7
  /**
@@ -28,4 +29,26 @@ export declare const layerFileTreeAdd: (options?: {
28
29
  export declare const layerFileTree: (options?: {
29
30
  readonly rootDirectory?: string;
30
31
  }) => Layer.Layer<never, never, Path.Path | FileSystem.FileSystem>;
32
+ /**
33
+ * Create a dotenv ConfigProvider.
34
+ *
35
+ * @category constructors
36
+ * @since 1.0.0
37
+ */
38
+ export declare const fromDotEnv: (paths: string) => Effect.Effect<ConfigProvider.ConfigProvider, PlatformError, FileSystem.FileSystem>;
39
+ /**
40
+ * Add the dotenv ConfigProvider to the environment, as a fallback to the current ConfigProvider.
41
+ * If the file is not found, a debug log is produced and empty layer is returned.
42
+ *
43
+ * @since 1.0.0
44
+ * @category layers
45
+ */
46
+ export declare const layerDotEnvAdd: (path: string) => Layer.Layer<never, never, FileSystem.FileSystem>;
47
+ /**
48
+ * Add the dotenv ConfigProvider to the environment, replacing the current ConfigProvider.
49
+ *
50
+ * @since 1.0.0
51
+ * @category layers
52
+ */
53
+ export declare const layerDotEnv: (path: string) => Layer.Layer<never, PlatformError, FileSystem.FileSystem>;
31
54
  //# sourceMappingURL=PlatformConfigProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformConfigProvider.d.ts","sourceRoot":"","sources":["../../src/PlatformConfigProvider.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,YAAY,aAAc;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAsDtF,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAc;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAS5D,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,aAAc;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAI5D,CAAA"}
1
+ {"version":3,"file":"PlatformConfigProvider.d.ts","sourceRoot":"","sources":["../../src/PlatformConfigProvider.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,YAAY,aAAc;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAsDtF,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAc;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAS5D,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,aAAc;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAI5D,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,CACvB,KAAK,EAAE,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC,UAAU,CAAuB,CAAA;AAE7G;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CACrE,CAAA;AAEzB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,UAAU,CAC7E,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=platformConfigProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformConfigProvider.d.ts","sourceRoot":"","sources":["../../../src/internal/platformConfigProvider.ts"],"names":[],"mappings":""}
@@ -14,6 +14,7 @@ import * as HashSet from "effect/HashSet";
14
14
  import * as Layer from "effect/Layer";
15
15
  import { isPlatformError } from "./Error.js";
16
16
  import * as FileSystem from "./FileSystem.js";
17
+ import * as internal from "./internal/platformConfigProvider.js";
17
18
  import * as Path from "./Path.js";
18
19
  /**
19
20
  * @since 1.0.0
@@ -54,4 +55,26 @@ export const layerFileTreeAdd = options => fromFileTree(options).pipe(Effect.map
54
55
  * @category layers
55
56
  */
56
57
  export const layerFileTree = options => fromFileTree(options).pipe(Effect.map(Layer.setConfigProvider), Layer.unwrapEffect);
58
+ /**
59
+ * Create a dotenv ConfigProvider.
60
+ *
61
+ * @category constructors
62
+ * @since 1.0.0
63
+ */
64
+ export const fromDotEnv = internal.fromDotEnv;
65
+ /**
66
+ * Add the dotenv ConfigProvider to the environment, as a fallback to the current ConfigProvider.
67
+ * If the file is not found, a debug log is produced and empty layer is returned.
68
+ *
69
+ * @since 1.0.0
70
+ * @category layers
71
+ */
72
+ export const layerDotEnvAdd = internal.layerDotEnvAdd;
73
+ /**
74
+ * Add the dotenv ConfigProvider to the environment, replacing the current ConfigProvider.
75
+ *
76
+ * @since 1.0.0
77
+ * @category layers
78
+ */
79
+ export const layerDotEnv = internal.layerDotEnv;
57
80
  //# sourceMappingURL=PlatformConfigProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformConfigProvider.js","names":["Arr","Cause","ConfigError","ConfigProvider","PathPatch","Context","DefaultServices","Effect","Either","HashSet","Layer","isPlatformError","FileSystem","Path","fromFileTree","options","Do","pipe","bind","map","fs","path","rootDirectory","parseConfig","primitive","value","parse","trim","of","readConfig","filePath","flatMap","readFileString","resolveEnumerableDirs","segments","length","join","resolveFilePath","pathSegments","sourceError","error","SourceUnavailable","message","fail","pathNotFoundError","MissingData","handlePlatformError","_tag","reason","fromFlat","makeFlat","load","config","catchIf","enumerateChildren","forEach","dir","readDirectory","files","fromIterable","flat","patch","empty","layerFileTreeAdd","provider","fiberRefLocallyScopedWith","currentServices","services","current","get","add","orElse","unwrapEffect","layerFileTree","setConfigProvider"],"sources":["../../src/PlatformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PlatformConfigProvider.js","names":["Arr","Cause","ConfigError","ConfigProvider","PathPatch","Context","DefaultServices","Effect","Either","HashSet","Layer","isPlatformError","FileSystem","internal","Path","fromFileTree","options","Do","pipe","bind","map","fs","path","rootDirectory","parseConfig","primitive","value","parse","trim","of","readConfig","filePath","flatMap","readFileString","resolveEnumerableDirs","segments","length","join","resolveFilePath","pathSegments","sourceError","error","SourceUnavailable","message","fail","pathNotFoundError","MissingData","handlePlatformError","_tag","reason","fromFlat","makeFlat","load","config","catchIf","enumerateChildren","forEach","dir","readDirectory","files","fromIterable","flat","patch","empty","layerFileTreeAdd","provider","fiberRefLocallyScopedWith","currentServices","services","current","get","add","orElse","unwrapEffect","layerFileTree","setConfigProvider","fromDotEnv","layerDotEnvAdd","layerDotEnv"],"sources":["../../src/PlatformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,106 @@
1
+ import * as FileSystem from "@effect/platform/FileSystem";
2
+ import * as ConfigProvider from "effect/ConfigProvider";
3
+ import * as Context from "effect/Context";
4
+ import * as DefaultServices from "effect/DefaultServices";
5
+ import * as Effect from "effect/Effect";
6
+ import * as FiberRef from "effect/FiberRef";
7
+ import * as Layer from "effect/Layer";
8
+ /**
9
+ * dot env ConfigProvider
10
+ *
11
+ * Based on
12
+ * - https://github.com/motdotla/dotenv
13
+ * - https://github.com/motdotla/dotenv-expand
14
+ */
15
+ /** @internal */
16
+ export const fromDotEnv = path => Effect.gen(function* (_) {
17
+ const fs = yield* FileSystem.FileSystem;
18
+ const content = yield* fs.readFileString(path);
19
+ const obj = parseDotEnv(content);
20
+ return ConfigProvider.fromJson(obj);
21
+ });
22
+ /** @internal */
23
+ export const layerDotEnv = path => fromDotEnv(path).pipe(Effect.map(Layer.setConfigProvider), Layer.unwrapEffect);
24
+ /** @internal */
25
+ export const layerDotEnvAdd = path => Effect.gen(function* (_) {
26
+ const dotEnvConfigProvider = yield* Effect.orElseSucceed(fromDotEnv(path), () => null);
27
+ if (dotEnvConfigProvider === null) {
28
+ yield* Effect.logDebug(`File '${path}' not found, skipping dotenv ConfigProvider.`);
29
+ return Layer.empty;
30
+ }
31
+ const currentConfigProvider = yield* FiberRef.get(DefaultServices.currentServices).pipe(Effect.map(services => Context.get(services, ConfigProvider.ConfigProvider)));
32
+ const configProvider = ConfigProvider.orElse(currentConfigProvider, () => dotEnvConfigProvider);
33
+ return Layer.setConfigProvider(configProvider);
34
+ }).pipe(Layer.unwrapEffect);
35
+ /** @internal */
36
+ const DOT_ENV_LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
37
+ /** @internal */
38
+ const parseDotEnv = lines => {
39
+ const obj = {};
40
+ // Convert line breaks to same format
41
+ lines = lines.replace(/\r\n?/gm, "\n");
42
+ let match;
43
+ while ((match = DOT_ENV_LINE.exec(lines)) != null) {
44
+ const key = match[1];
45
+ // Default undefined or null to empty string
46
+ let value = match[2] || "";
47
+ // Remove whitespace
48
+ value = value.trim();
49
+ // Check if double quoted
50
+ const maybeQuote = value[0];
51
+ // Remove surrounding quotes
52
+ value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
53
+ // Expand newlines if double quoted
54
+ if (maybeQuote === "\"") {
55
+ value = value.replace(/\\n/g, "\n");
56
+ value = value.replace(/\\r/g, "\r");
57
+ }
58
+ // Add to object
59
+ obj[key] = value;
60
+ }
61
+ return expand(obj);
62
+ };
63
+ /** @internal */
64
+ const expand = parsed => {
65
+ const newParsed = {};
66
+ for (const configKey in parsed) {
67
+ // resolve escape sequences
68
+ newParsed[configKey] = interpolate(parsed[configKey], parsed).replace(/\\\$/g, "$");
69
+ }
70
+ return newParsed;
71
+ };
72
+ /** @internal */
73
+ const interpolate = (envValue, parsed) => {
74
+ // find the last unescaped dollar sign in the
75
+ // value so that we can evaluate it
76
+ const lastUnescapedDollarSignIndex = searchLast(envValue, /(?!(?<=\\))\$/g);
77
+ // If we couldn't match any unescaped dollar sign
78
+ // let's return the string as is
79
+ if (lastUnescapedDollarSignIndex === -1) return envValue;
80
+ // This is the right-most group of variables in the string
81
+ const rightMostGroup = envValue.slice(lastUnescapedDollarSignIndex);
82
+ /**
83
+ * This finds the inner most variable/group divided
84
+ * by variable name and default value (if present)
85
+ * (
86
+ * (?!(?<=\\))\$ // only match dollar signs that are not escaped
87
+ * {? // optional opening curly brace
88
+ * ([\w]+) // match the variable name
89
+ * (?::-([^}\\]*))? // match an optional default value
90
+ * }? // optional closing curly brace
91
+ * )
92
+ */
93
+ const matchGroup = /((?!(?<=\\))\${?([\w]+)(?::-([^}\\]*))?}?)/;
94
+ const match = rightMostGroup.match(matchGroup);
95
+ if (match !== null) {
96
+ const [_, group, variableName, defaultValue] = match;
97
+ return interpolate(envValue.replace(group, defaultValue || parsed[variableName] || ""), parsed);
98
+ }
99
+ return envValue;
100
+ };
101
+ /** @internal */
102
+ const searchLast = (str, rgx) => {
103
+ const matches = Array.from(str.matchAll(rgx));
104
+ return matches.length > 0 ? matches.slice(-1)[0].index : -1;
105
+ };
106
+ //# sourceMappingURL=platformConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformConfigProvider.js","names":["FileSystem","ConfigProvider","Context","DefaultServices","Effect","FiberRef","Layer","fromDotEnv","path","gen","_","fs","content","readFileString","obj","parseDotEnv","fromJson","layerDotEnv","pipe","map","setConfigProvider","unwrapEffect","layerDotEnvAdd","dotEnvConfigProvider","orElseSucceed","logDebug","empty","currentConfigProvider","get","currentServices","services","configProvider","orElse","DOT_ENV_LINE","lines","replace","match","exec","key","value","trim","maybeQuote","expand","parsed","newParsed","configKey","interpolate","envValue","lastUnescapedDollarSignIndex","searchLast","rightMostGroup","slice","matchGroup","group","variableName","defaultValue","str","rgx","matches","Array","from","matchAll","length","index"],"sources":["../../../src/internal/platformConfigProvider.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform",
3
- "version": "0.68.0",
3
+ "version": "0.68.2",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  "multipasta": "^0.2.5"
15
15
  },
16
16
  "peerDependencies": {
17
- "@effect/schema": "^0.75.2",
17
+ "@effect/schema": "^0.75.3",
18
18
  "effect": "^3.9.1"
19
19
  },
20
20
  "publishConfig": {
@@ -15,6 +15,7 @@ import * as HashSet from "effect/HashSet"
15
15
  import * as Layer from "effect/Layer"
16
16
  import { isPlatformError, type PlatformError } from "./Error.js"
17
17
  import * as FileSystem from "./FileSystem.js"
18
+ import * as internal from "./internal/platformConfigProvider.js"
18
19
  import * as Path from "./Path.js"
19
20
 
20
21
  /**
@@ -111,3 +112,32 @@ export const layerFileTree = (options?: {
111
112
  Effect.map(Layer.setConfigProvider),
112
113
  Layer.unwrapEffect
113
114
  )
115
+
116
+ /**
117
+ * Create a dotenv ConfigProvider.
118
+ *
119
+ * @category constructors
120
+ * @since 1.0.0
121
+ */
122
+ export const fromDotEnv: (
123
+ paths: string
124
+ ) => Effect.Effect<ConfigProvider.ConfigProvider, PlatformError, FileSystem.FileSystem> = internal.fromDotEnv
125
+
126
+ /**
127
+ * Add the dotenv ConfigProvider to the environment, as a fallback to the current ConfigProvider.
128
+ * If the file is not found, a debug log is produced and empty layer is returned.
129
+ *
130
+ * @since 1.0.0
131
+ * @category layers
132
+ */
133
+ export const layerDotEnvAdd: (path: string) => Layer.Layer<never, never, FileSystem.FileSystem> =
134
+ internal.layerDotEnvAdd
135
+
136
+ /**
137
+ * Add the dotenv ConfigProvider to the environment, replacing the current ConfigProvider.
138
+ *
139
+ * @since 1.0.0
140
+ * @category layers
141
+ */
142
+ export const layerDotEnv: (path: string) => Layer.Layer<never, PlatformError, FileSystem.FileSystem> =
143
+ internal.layerDotEnv
@@ -0,0 +1,148 @@
1
+ import type { PlatformError } from "@effect/platform/Error"
2
+ import * as FileSystem from "@effect/platform/FileSystem"
3
+ import * as ConfigProvider from "effect/ConfigProvider"
4
+ import * as Context from "effect/Context"
5
+ import * as DefaultServices from "effect/DefaultServices"
6
+ import * as Effect from "effect/Effect"
7
+ import * as FiberRef from "effect/FiberRef"
8
+ import * as Layer from "effect/Layer"
9
+
10
+ /**
11
+ * dot env ConfigProvider
12
+ *
13
+ * Based on
14
+ * - https://github.com/motdotla/dotenv
15
+ * - https://github.com/motdotla/dotenv-expand
16
+ */
17
+
18
+ /** @internal */
19
+ export const fromDotEnv = (
20
+ path: string
21
+ ): Effect.Effect<ConfigProvider.ConfigProvider, PlatformError, FileSystem.FileSystem> =>
22
+ Effect.gen(function*(_) {
23
+ const fs = yield* FileSystem.FileSystem
24
+ const content = yield* fs.readFileString(path)
25
+ const obj = parseDotEnv(content)
26
+ return ConfigProvider.fromJson(obj)
27
+ })
28
+
29
+ /** @internal */
30
+ export const layerDotEnv = (path: string): Layer.Layer<never, PlatformError, FileSystem.FileSystem> =>
31
+ fromDotEnv(path).pipe(
32
+ Effect.map(Layer.setConfigProvider),
33
+ Layer.unwrapEffect
34
+ )
35
+
36
+ /** @internal */
37
+ export const layerDotEnvAdd = (path: string): Layer.Layer<never, never, FileSystem.FileSystem> =>
38
+ Effect.gen(function*(_) {
39
+ const dotEnvConfigProvider = yield* Effect.orElseSucceed(fromDotEnv(path), () => null)
40
+
41
+ if (dotEnvConfigProvider === null) {
42
+ yield* Effect.logDebug(`File '${path}' not found, skipping dotenv ConfigProvider.`)
43
+ return Layer.empty
44
+ }
45
+
46
+ const currentConfigProvider = yield* FiberRef.get(DefaultServices.currentServices).pipe(
47
+ Effect.map((services) => Context.get(services, ConfigProvider.ConfigProvider))
48
+ )
49
+ const configProvider = ConfigProvider.orElse(currentConfigProvider, () => dotEnvConfigProvider)
50
+ return Layer.setConfigProvider(configProvider)
51
+ }).pipe(Layer.unwrapEffect)
52
+
53
+ /** @internal */
54
+ const DOT_ENV_LINE =
55
+ /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg
56
+
57
+ /** @internal */
58
+ const parseDotEnv = (lines: string): Record<string, string> => {
59
+ const obj: Record<string, string> = {}
60
+
61
+ // Convert line breaks to same format
62
+ lines = lines.replace(/\r\n?/gm, "\n")
63
+
64
+ let match: RegExpExecArray | null
65
+ while ((match = DOT_ENV_LINE.exec(lines)) != null) {
66
+ const key = match[1]
67
+
68
+ // Default undefined or null to empty string
69
+ let value = match[2] || ""
70
+
71
+ // Remove whitespace
72
+ value = value.trim()
73
+
74
+ // Check if double quoted
75
+ const maybeQuote = value[0]
76
+
77
+ // Remove surrounding quotes
78
+ value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2")
79
+
80
+ // Expand newlines if double quoted
81
+ if (maybeQuote === "\"") {
82
+ value = value.replace(/\\n/g, "\n")
83
+ value = value.replace(/\\r/g, "\r")
84
+ }
85
+
86
+ // Add to object
87
+ obj[key] = value
88
+ }
89
+
90
+ return expand(obj)
91
+ }
92
+
93
+ /** @internal */
94
+ const expand = (parsed: Record<string, string>) => {
95
+ const newParsed: Record<string, string> = {}
96
+
97
+ for (const configKey in parsed) {
98
+ // resolve escape sequences
99
+ newParsed[configKey] = interpolate(parsed[configKey], parsed).replace(/\\\$/g, "$")
100
+ }
101
+
102
+ return newParsed
103
+ }
104
+
105
+ /** @internal */
106
+ const interpolate = (envValue: string, parsed: Record<string, string>) => {
107
+ // find the last unescaped dollar sign in the
108
+ // value so that we can evaluate it
109
+ const lastUnescapedDollarSignIndex = searchLast(envValue, /(?!(?<=\\))\$/g)
110
+
111
+ // If we couldn't match any unescaped dollar sign
112
+ // let's return the string as is
113
+ if (lastUnescapedDollarSignIndex === -1) return envValue
114
+
115
+ // This is the right-most group of variables in the string
116
+ const rightMostGroup = envValue.slice(lastUnescapedDollarSignIndex)
117
+
118
+ /**
119
+ * This finds the inner most variable/group divided
120
+ * by variable name and default value (if present)
121
+ * (
122
+ * (?!(?<=\\))\$ // only match dollar signs that are not escaped
123
+ * {? // optional opening curly brace
124
+ * ([\w]+) // match the variable name
125
+ * (?::-([^}\\]*))? // match an optional default value
126
+ * }? // optional closing curly brace
127
+ * )
128
+ */
129
+ const matchGroup = /((?!(?<=\\))\${?([\w]+)(?::-([^}\\]*))?}?)/
130
+ const match = rightMostGroup.match(matchGroup)
131
+
132
+ if (match !== null) {
133
+ const [_, group, variableName, defaultValue] = match
134
+
135
+ return interpolate(
136
+ envValue.replace(group, defaultValue || parsed[variableName] || ""),
137
+ parsed
138
+ )
139
+ }
140
+
141
+ return envValue
142
+ }
143
+
144
+ /** @internal */
145
+ const searchLast = (str: string, rgx: RegExp) => {
146
+ const matches = Array.from(str.matchAll(rgx))
147
+ return matches.length > 0 ? matches.slice(-1)[0].index : -1
148
+ }