@c9up/ream 0.1.25 → 0.1.27
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/README.md +65 -0
- package/dist/ConfigLoader.d.ts +46 -5
- package/dist/ConfigLoader.d.ts.map +1 -1
- package/dist/ConfigLoader.js +60 -9
- package/dist/ConfigLoader.js.map +1 -1
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +46 -6
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts +115 -7
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +254 -40
- package/dist/Ignitor.js.map +1 -1
- package/dist/console/BaseCommand.d.ts +217 -0
- package/dist/console/BaseCommand.d.ts.map +1 -0
- package/dist/console/BaseCommand.js +340 -0
- package/dist/console/BaseCommand.js.map +1 -0
- package/dist/console/Console.d.ts +86 -0
- package/dist/console/Console.d.ts.map +1 -0
- package/dist/console/Console.js +134 -0
- package/dist/console/Console.js.map +1 -0
- package/dist/console/ExceptionHandler.d.ts +28 -0
- package/dist/console/ExceptionHandler.d.ts.map +1 -0
- package/dist/console/ExceptionHandler.js +76 -0
- package/dist/console/ExceptionHandler.js.map +1 -0
- package/dist/console/HelpCommand.d.ts +16 -0
- package/dist/console/HelpCommand.d.ts.map +1 -0
- package/dist/console/HelpCommand.js +40 -0
- package/dist/console/HelpCommand.js.map +1 -0
- package/dist/console/IndexGenerator.d.ts +24 -0
- package/dist/console/IndexGenerator.d.ts.map +1 -0
- package/dist/console/IndexGenerator.js +65 -0
- package/dist/console/IndexGenerator.js.map +1 -0
- package/dist/console/Kernel.d.ts +298 -0
- package/dist/console/Kernel.d.ts.map +1 -0
- package/dist/console/Kernel.js +1120 -0
- package/dist/console/Kernel.js.map +1 -0
- package/dist/console/ListCommand.d.ts +18 -0
- package/dist/console/ListCommand.d.ts.map +1 -0
- package/dist/console/ListCommand.js +60 -0
- package/dist/console/ListCommand.js.map +1 -0
- package/dist/console/assertions.d.ts +20 -0
- package/dist/console/assertions.d.ts.map +1 -0
- package/dist/console/assertions.js +84 -0
- package/dist/console/assertions.js.map +1 -0
- package/dist/console/cliui.d.ts +248 -0
- package/dist/console/cliui.d.ts.map +1 -0
- package/dist/console/cliui.js +587 -0
- package/dist/console/cliui.js.map +1 -0
- package/dist/console/decorators.d.ts +90 -0
- package/dist/console/decorators.d.ts.map +1 -0
- package/dist/console/decorators.js +142 -0
- package/dist/console/decorators.js.map +1 -0
- package/dist/console/index.d.ts +32 -0
- package/dist/console/index.d.ts.map +1 -0
- package/dist/console/index.js +24 -0
- package/dist/console/index.js.map +1 -0
- package/dist/console/loaders.d.ts +52 -0
- package/dist/console/loaders.d.ts.map +1 -0
- package/dist/console/loaders.js +131 -0
- package/dist/console/loaders.js.map +1 -0
- package/dist/console/parser.d.ts +86 -0
- package/dist/console/parser.d.ts.map +1 -0
- package/dist/console/parser.js +440 -0
- package/dist/console/parser.js.map +1 -0
- package/dist/console/prompts.d.ts +124 -0
- package/dist/console/prompts.d.ts.map +1 -0
- package/dist/console/prompts.js +356 -0
- package/dist/console/prompts.js.map +1 -0
- package/dist/console/tracing.d.ts +17 -0
- package/dist/console/tracing.d.ts.map +1 -0
- package/dist/console/tracing.js +11 -0
- package/dist/console/tracing.js.map +1 -0
- package/dist/console/types.d.ts +255 -0
- package/dist/console/types.d.ts.map +1 -0
- package/dist/console/types.js +25 -0
- package/dist/console/types.js.map +1 -0
- package/dist/console/ui.d.ts +20 -0
- package/dist/console/ui.d.ts.map +1 -0
- package/dist/console/ui.js +31 -0
- package/dist/console/ui.js.map +1 -0
- package/dist/console/utils.d.ts +27 -0
- package/dist/console/utils.d.ts.map +1 -0
- package/dist/console/utils.js +56 -0
- package/dist/console/utils.js.map +1 -0
- package/dist/container/Container.d.ts +23 -3
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +177 -70
- package/dist/container/Container.js.map +1 -1
- package/dist/container/types.d.ts +14 -2
- package/dist/container/types.d.ts.map +1 -1
- package/dist/decorators/Service.d.ts +7 -0
- package/dist/decorators/Service.d.ts.map +1 -1
- package/dist/decorators/Service.js +23 -3
- package/dist/decorators/Service.js.map +1 -1
- package/dist/env/Env.d.ts +29 -4
- package/dist/env/Env.d.ts.map +1 -1
- package/dist/env/Env.js +27 -4
- package/dist/env/Env.js.map +1 -1
- package/dist/env/Secret.d.ts +11 -0
- package/dist/env/Secret.d.ts.map +1 -0
- package/dist/env/Secret.js +36 -0
- package/dist/env/Secret.js.map +1 -0
- package/dist/env/interpolate.d.ts +26 -0
- package/dist/env/interpolate.d.ts.map +1 -0
- package/dist/env/interpolate.js +48 -0
- package/dist/env/interpolate.js.map +1 -0
- package/dist/env/loadEnvFiles.d.ts.map +1 -1
- package/dist/env/loadEnvFiles.js +14 -4
- package/dist/env/loadEnvFiles.js.map +1 -1
- package/dist/env/schema.d.ts +23 -6
- package/dist/env/schema.d.ts.map +1 -1
- package/dist/env/schema.js +67 -33
- package/dist/env/schema.js.map +1 -1
- package/dist/errors/ReamError.d.ts +25 -0
- package/dist/errors/ReamError.d.ts.map +1 -1
- package/dist/errors/ReamError.js +5 -0
- package/dist/errors/ReamError.js.map +1 -1
- package/dist/errors/prettyPrintError.d.ts +9 -0
- package/dist/errors/prettyPrintError.d.ts.map +1 -0
- package/dist/errors/prettyPrintError.js +22 -0
- package/dist/errors/prettyPrintError.js.map +1 -0
- package/dist/events/Emitter.d.ts +1 -1
- package/dist/events/Emitter.d.ts.map +1 -1
- package/dist/events/Emitter.js +1 -1
- package/dist/events/Emitter.js.map +1 -1
- package/dist/events/EventsProvider.d.ts +2 -2
- package/dist/events/EventsProvider.d.ts.map +1 -1
- package/dist/events/EventsProvider.js +3 -3
- package/dist/events/EventsProvider.js.map +1 -1
- package/dist/graphql/GraphQLEngine.d.ts +1 -1
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +2 -2
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
- package/dist/graphql/GraphQLProvider.js +7 -3
- package/dist/graphql/GraphQLProvider.js.map +1 -1
- package/dist/http/Exception.d.ts +63 -1
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +185 -48
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/HttpContext.d.ts +53 -7
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +56 -15
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +4 -1
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +141 -10
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +244 -34
- package/dist/http/Request.js.map +1 -1
- package/dist/http/Response.d.ts +176 -9
- package/dist/http/Response.d.ts.map +1 -1
- package/dist/http/Response.js +404 -16
- package/dist/http/Response.js.map +1 -1
- package/dist/index.d.ts +19 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.d.ts +29 -8
- package/dist/middleware/Pipeline.d.ts.map +1 -1
- package/dist/middleware/Pipeline.js +40 -2
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/openapi/OpenApiProvider.js +4 -4
- package/dist/openapi/OpenApiProvider.js.map +1 -1
- package/dist/router/Router.d.ts +223 -31
- package/dist/router/Router.d.ts.map +1 -1
- package/dist/router/Router.js +520 -102
- package/dist/router/Router.js.map +1 -1
- package/dist/rpc/RpcProvider.d.ts +1 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +7 -3
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/rpc/RpcRouter.d.ts +2 -2
- package/dist/rpc/RpcRouter.d.ts.map +1 -1
- package/dist/rpc/RpcRouter.js +17 -5
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -1
- package/dist/scheduler/ScheduleProvider.js +7 -15
- package/dist/scheduler/ScheduleProvider.js.map +1 -1
- package/dist/server/Server.d.ts +17 -4
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +41 -7
- package/dist/server/Server.js.map +1 -1
- package/dist/services/app.d.ts +1 -1
- package/dist/services/app.js +1 -1
- package/dist/services/console.d.ts +21 -0
- package/dist/services/console.d.ts.map +1 -0
- package/dist/services/console.js +35 -0
- package/dist/services/console.js.map +1 -0
- package/dist/session/SessionMiddleware.js +3 -3
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/storage/StaticProvider.js +1 -1
- package/dist/storage/StaticProvider.js.map +1 -1
- package/dist/testing/ApiResponse.d.ts +218 -0
- package/dist/testing/ApiResponse.d.ts.map +1 -0
- package/dist/testing/ApiResponse.js +576 -0
- package/dist/testing/ApiResponse.js.map +1 -0
- package/dist/testing/RequestBuilder.d.ts +155 -35
- package/dist/testing/RequestBuilder.d.ts.map +1 -1
- package/dist/testing/RequestBuilder.js +455 -109
- package/dist/testing/RequestBuilder.js.map +1 -1
- package/dist/testing/TestClient.d.ts +53 -37
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +84 -52
- package/dist/testing/TestClient.js.map +1 -1
- package/dist/utils/Macroable.d.ts +30 -0
- package/dist/utils/Macroable.d.ts.map +1 -0
- package/dist/utils/Macroable.js +43 -0
- package/dist/utils/Macroable.js.map +1 -0
- package/dist/utils/inflect.d.ts +17 -0
- package/dist/utils/inflect.d.ts.map +1 -0
- package/dist/utils/inflect.js +32 -0
- package/dist/utils/inflect.js.map +1 -0
- package/dist/utils/objectPath.d.ts +57 -0
- package/dist/utils/objectPath.d.ts.map +1 -0
- package/dist/utils/objectPath.js +141 -0
- package/dist/utils/objectPath.js.map +1 -0
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.linux-arm64-gnu.node +0 -0
- package/events.linux-x64-gnu.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +20 -2
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.linux-arm64-gnu.node +0 -0
- package/scheduler.linux-x64-gnu.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/src/ConfigLoader.ts +72 -9
- package/src/HttpKernel.ts +53 -15
- package/src/Ignitor.ts +364 -45
- package/src/console/BaseCommand.ts +467 -0
- package/src/console/Console.ts +174 -0
- package/src/console/ExceptionHandler.ts +91 -0
- package/src/console/HelpCommand.ts +37 -0
- package/src/console/IndexGenerator.ts +79 -0
- package/src/console/Kernel.ts +1382 -0
- package/src/console/ListCommand.ts +55 -0
- package/src/console/assertions.ts +114 -0
- package/src/console/cliui.ts +756 -0
- package/src/console/decorators.ts +199 -0
- package/src/console/index.ts +67 -0
- package/src/console/loaders.ts +145 -0
- package/src/console/parser.ts +598 -0
- package/src/console/prompts.ts +548 -0
- package/src/console/tracing.ts +22 -0
- package/src/console/types.ts +280 -0
- package/src/console/ui.ts +37 -0
- package/src/console/utils.ts +69 -0
- package/src/container/Container.ts +198 -72
- package/src/container/types.ts +15 -2
- package/src/decorators/Service.ts +28 -3
- package/src/env/Env.ts +49 -5
- package/src/env/Secret.ts +41 -0
- package/src/env/interpolate.ts +54 -0
- package/src/env/loadEnvFiles.ts +12 -4
- package/src/env/schema.ts +109 -35
- package/src/errors/ReamError.ts +31 -0
- package/src/errors/prettyPrintError.ts +20 -0
- package/src/events/Emitter.ts +2 -2
- package/src/events/EventsProvider.ts +5 -5
- package/src/graphql/GraphQLEngine.ts +4 -4
- package/src/graphql/GraphQLProvider.ts +7 -3
- package/src/http/Exception.ts +214 -37
- package/src/http/HttpContext.ts +87 -18
- package/src/http/RedirectBuilder.ts +4 -1
- package/src/http/Request.ts +264 -34
- package/src/http/Response.ts +478 -27
- package/src/index.ts +41 -6
- package/src/middleware/Pipeline.ts +77 -6
- package/src/openapi/OpenApiProvider.ts +4 -4
- package/src/router/Router.ts +631 -113
- package/src/rpc/RpcProvider.ts +6 -2
- package/src/rpc/RpcRouter.ts +22 -7
- package/src/scheduler/ScheduleProvider.ts +7 -15
- package/src/server/Server.ts +49 -10
- package/src/services/app.ts +1 -1
- package/src/services/console.ts +42 -0
- package/src/session/SessionMiddleware.ts +4 -4
- package/src/storage/StaticProvider.ts +1 -1
- package/src/testing/ApiResponse.ts +691 -0
- package/src/testing/RequestBuilder.ts +577 -137
- package/src/testing/TestClient.ts +110 -77
- package/src/utils/Macroable.ts +54 -0
- package/src/utils/inflect.ts +29 -0
- package/src/utils/objectPath.ts +142 -0
- package/dist/console/CommandRunner.d.ts +0 -18
- package/dist/console/CommandRunner.d.ts.map +0 -1
- package/dist/console/CommandRunner.js +0 -65
- package/dist/console/CommandRunner.js.map +0 -1
- package/dist/decorators/Lazy.d.ts +0 -19
- package/dist/decorators/Lazy.d.ts.map +0 -1
- package/dist/decorators/Lazy.js +0 -53
- package/dist/decorators/Lazy.js.map +0 -1
- package/src/console/CommandRunner.ts +0 -82
- package/src/decorators/Lazy.ts +0 -57
package/dist/env/Env.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { defineIdentifier, defineIdentifierIfMissing, removeIdentifier, } from './interpolate.js';
|
|
1
2
|
import { loadEnvFiles } from './loadEnvFiles.js';
|
|
2
3
|
import { schema } from './schema.js';
|
|
3
4
|
/** Raised when one or more environment variables fail validation. */
|
|
@@ -13,6 +14,18 @@ export class EnvValidationException extends Error {
|
|
|
13
14
|
export class Env {
|
|
14
15
|
/** The validation schema surface — `Env.schema.string()`, `.number()`, … */
|
|
15
16
|
static schema = schema;
|
|
17
|
+
/** Register an interpolation identifier (AdonisJS `Env.defineIdentifier`). */
|
|
18
|
+
static defineIdentifier(name, resolver) {
|
|
19
|
+
defineIdentifier(name, resolver);
|
|
20
|
+
}
|
|
21
|
+
/** Register an identifier only if the name is free (AdonisJS `defineIdentifierIfMissing`). */
|
|
22
|
+
static defineIdentifierIfMissing(name, resolver) {
|
|
23
|
+
defineIdentifierIfMissing(name, resolver);
|
|
24
|
+
}
|
|
25
|
+
/** Remove a registered interpolation identifier (AdonisJS `Env.removeIdentifier`). */
|
|
26
|
+
static removeIdentifier(name) {
|
|
27
|
+
removeIdentifier(name);
|
|
28
|
+
}
|
|
16
29
|
#values;
|
|
17
30
|
constructor(values) {
|
|
18
31
|
this.#values = values;
|
|
@@ -43,10 +56,20 @@ export class Env {
|
|
|
43
56
|
return new Env(collected);
|
|
44
57
|
}
|
|
45
58
|
get(key, fallback) {
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
return
|
|
49
|
-
|
|
59
|
+
const cached = this.#values[key];
|
|
60
|
+
if (cached !== undefined)
|
|
61
|
+
return cached;
|
|
62
|
+
// Fallback to raw process.env for keys outside the validated schema.
|
|
63
|
+
const fromEnv = process.env[key];
|
|
64
|
+
if (fromEnv !== undefined && fromEnv !== '')
|
|
65
|
+
return fromEnv;
|
|
66
|
+
return fallback;
|
|
67
|
+
}
|
|
68
|
+
set(key, value) {
|
|
69
|
+
// Reflect.set writes to the generic-typed cache without a cast (a direct
|
|
70
|
+
// `this.#values[key] = value` is rejected: a generic type is read-only-indexed).
|
|
71
|
+
Reflect.set(this.#values, key, value);
|
|
72
|
+
process.env[key] = String(value);
|
|
50
73
|
}
|
|
51
74
|
}
|
|
52
75
|
//# sourceMappingURL=Env.js.map
|
package/dist/env/Env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Env.js","sourceRoot":"","sources":["../../src/env/Env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAmB,MAAM,EAAE,MAAM,aAAa,CAAA;AA+BrD,qEAAqE;AACrE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,sFAAsF;IAC7E,IAAI,CAAQ;IACrB,YAAY,QAAkB;QAC5B,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IACd,4EAA4E;IAC5E,MAAM,CAAU,MAAM,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Env.js","sourceRoot":"","sources":["../../src/env/Env.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EAEzB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAmB,MAAM,EAAE,MAAM,aAAa,CAAA;AA+BrD,qEAAqE;AACrE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,sFAAsF;IAC7E,IAAI,CAAQ;IACrB,YAAY,QAAkB;QAC5B,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IACd,4EAA4E;IAC5E,MAAM,CAAU,MAAM,GAAG,MAAM,CAAA;IAE/B,8EAA8E;IAC9E,MAAM,CAAC,gBAAgB,CAAC,IAAY,EAAE,QAA4B;QAChE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED,8FAA8F;IAC9F,MAAM,CAAC,yBAAyB,CAAC,IAAY,EAAE,QAA4B;QACzE,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC3C,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,gBAAgB,CAAC,IAAY;QAClC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAEQ,OAAO,CAAQ;IAExB,YAAoB,MAAc;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAY,EACZ,MAAS;QAET,YAAY,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAA;QAExE,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,MAAM,SAAS,GAA4B,EAAE,CAAA;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QAEnE,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,+EAA+E;QAC/E,OAAO,IAAI,GAAG,CAAC,SAAyB,CAAC,CAAA;IAC3C,CAAC;IAYD,GAAG,CAAC,GAAW,EAAE,QAAkB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAA;QACvC,qEAAqE;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,OAAO,CAAA;QAC3D,OAAO,QAAQ,CAAA;IACjB,CAAC;IAQD,GAAG,CAAC,GAAW,EAAE,KAAc;QAC7B,yEAAyE;QACzE,iFAAiF;QACjF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class Secret<T> {
|
|
2
|
+
#private;
|
|
3
|
+
constructor(value: T, redactedKeyword?: string);
|
|
4
|
+
/** Redacted placeholder (so `JSON.stringify` never emits the secret). */
|
|
5
|
+
toJSON(): string;
|
|
6
|
+
/** Redacted placeholder for string coercion + template literals. */
|
|
7
|
+
toString(): string;
|
|
8
|
+
/** Release the underlying value — the one deliberate way to read the secret. */
|
|
9
|
+
release(): T;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=Secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secret.d.ts","sourceRoot":"","sources":["../../src/env/Secret.ts"],"names":[],"mappings":"AAYA,qBAAa,MAAM,CAAC,CAAC;;gBAIP,KAAK,EAAE,CAAC,EAAE,eAAe,GAAE,MAAiB;IAKxD,yEAAyE;IACzE,MAAM,IAAI,MAAM;IAIhB,oEAAoE;IACpE,QAAQ,IAAI,MAAM;IASlB,gFAAgF;IAChF,OAAO,IAAI,CAAC;CAGb"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret — wraps a sensitive value so it never leaks through logs, JSON, or
|
|
3
|
+
* `util.inspect`. Mirrors `@poppinss/utils`'s `Secret` (zero-dep here). Read the
|
|
4
|
+
* underlying value explicitly with {@link release}.
|
|
5
|
+
*
|
|
6
|
+
* const key = env.get('APP_KEY') // Secret<string> when declared via schema.secret
|
|
7
|
+
* key.toString() // '[redacted]'
|
|
8
|
+
* JSON.stringify({ key }) // '{"key":"[redacted]"}'
|
|
9
|
+
* key.release() // the real value — only when you deliberately need it
|
|
10
|
+
*/
|
|
11
|
+
const REDACTED = '[redacted]';
|
|
12
|
+
export class Secret {
|
|
13
|
+
#value;
|
|
14
|
+
#keyword;
|
|
15
|
+
constructor(value, redactedKeyword = REDACTED) {
|
|
16
|
+
this.#value = value;
|
|
17
|
+
this.#keyword = redactedKeyword;
|
|
18
|
+
}
|
|
19
|
+
/** Redacted placeholder (so `JSON.stringify` never emits the secret). */
|
|
20
|
+
toJSON() {
|
|
21
|
+
return this.#keyword;
|
|
22
|
+
}
|
|
23
|
+
/** Redacted placeholder for string coercion + template literals. */
|
|
24
|
+
toString() {
|
|
25
|
+
return this.#keyword;
|
|
26
|
+
}
|
|
27
|
+
/** Redacted placeholder for `console.log` / `util.inspect`. */
|
|
28
|
+
[Symbol.for('nodejs.util.inspect.custom')]() {
|
|
29
|
+
return this.#keyword;
|
|
30
|
+
}
|
|
31
|
+
/** Release the underlying value — the one deliberate way to read the secret. */
|
|
32
|
+
release() {
|
|
33
|
+
return this.#value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secret.js","sourceRoot":"","sources":["../../src/env/Secret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAG,YAAY,CAAA;AAE7B,MAAM,OAAO,MAAM;IACR,MAAM,CAAG;IACT,QAAQ,CAAQ;IAEzB,YAAY,KAAQ,EAAE,kBAA0B,QAAQ;QACtD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAA;IACjC,CAAC;IAED,yEAAyE;IACzE,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,oEAAoE;IACpE,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,+DAA+D;IAC/D,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,gFAAgF;IAChF,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env value interpolation — AdonisJS-style variable substitution + identifiers,
|
|
3
|
+
* applied by {@link loadEnvFiles} as each `.env` value is loaded.
|
|
4
|
+
*
|
|
5
|
+
* - `$VAR` / `${VAR}` are replaced with the value of `VAR` (looked up against
|
|
6
|
+
* the values already loaded + `process.env`). A missing reference expands to
|
|
7
|
+
* an empty string. `\$` is a literal dollar sign (escape).
|
|
8
|
+
* - `identifier:rest` — when `identifier` was registered via
|
|
9
|
+
* {@link defineIdentifier}, the registered callback transforms `rest`
|
|
10
|
+
* (e.g. a `base64:` decoder). Unregistered prefixes (like `postgres://…`)
|
|
11
|
+
* are left untouched.
|
|
12
|
+
*/
|
|
13
|
+
/** Transform the remainder of an `identifier:rest` value into its final form. */
|
|
14
|
+
export type IdentifierResolver = (value: string) => string;
|
|
15
|
+
/** Register an identifier resolver (AdonisJS `Env.defineIdentifier`). */
|
|
16
|
+
export declare function defineIdentifier(name: string, resolver: IdentifierResolver): void;
|
|
17
|
+
/** Register an identifier resolver only if the name is free (AdonisJS `defineIdentifierIfMissing`). */
|
|
18
|
+
export declare function defineIdentifierIfMissing(name: string, resolver: IdentifierResolver): void;
|
|
19
|
+
/** Remove a registered identifier (AdonisJS `Env.removeIdentifier`). */
|
|
20
|
+
export declare function removeIdentifier(name: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Expand `$VAR` / `${VAR}` references and apply an identifier prefix. `lookup`
|
|
23
|
+
* resolves a referenced variable name to its current value (or undefined).
|
|
24
|
+
*/
|
|
25
|
+
export declare function interpolate(value: string, lookup: (name: string) => string | undefined): string;
|
|
26
|
+
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/env/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;AAI1D,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAEjF;AAED,uGAAuG;AACvG,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAE1F;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,CAc/F"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env value interpolation — AdonisJS-style variable substitution + identifiers,
|
|
3
|
+
* applied by {@link loadEnvFiles} as each `.env` value is loaded.
|
|
4
|
+
*
|
|
5
|
+
* - `$VAR` / `${VAR}` are replaced with the value of `VAR` (looked up against
|
|
6
|
+
* the values already loaded + `process.env`). A missing reference expands to
|
|
7
|
+
* an empty string. `\$` is a literal dollar sign (escape).
|
|
8
|
+
* - `identifier:rest` — when `identifier` was registered via
|
|
9
|
+
* {@link defineIdentifier}, the registered callback transforms `rest`
|
|
10
|
+
* (e.g. a `base64:` decoder). Unregistered prefixes (like `postgres://…`)
|
|
11
|
+
* are left untouched.
|
|
12
|
+
*/
|
|
13
|
+
const identifiers = new Map();
|
|
14
|
+
/** Register an identifier resolver (AdonisJS `Env.defineIdentifier`). */
|
|
15
|
+
export function defineIdentifier(name, resolver) {
|
|
16
|
+
identifiers.set(name, resolver);
|
|
17
|
+
}
|
|
18
|
+
/** Register an identifier resolver only if the name is free (AdonisJS `defineIdentifierIfMissing`). */
|
|
19
|
+
export function defineIdentifierIfMissing(name, resolver) {
|
|
20
|
+
if (!identifiers.has(name))
|
|
21
|
+
identifiers.set(name, resolver);
|
|
22
|
+
}
|
|
23
|
+
/** Remove a registered identifier (AdonisJS `Env.removeIdentifier`). */
|
|
24
|
+
export function removeIdentifier(name) {
|
|
25
|
+
identifiers.delete(name);
|
|
26
|
+
}
|
|
27
|
+
const REFERENCE = /(\\)?\$(?:\{([^}]+)\}|([A-Za-z_][A-Za-z0-9_]*))/g;
|
|
28
|
+
/**
|
|
29
|
+
* Expand `$VAR` / `${VAR}` references and apply an identifier prefix. `lookup`
|
|
30
|
+
* resolves a referenced variable name to its current value (or undefined).
|
|
31
|
+
*/
|
|
32
|
+
export function interpolate(value, lookup) {
|
|
33
|
+
const substituted = value.replace(REFERENCE, (full, escaped, braced, bare) => {
|
|
34
|
+
// `\$FOO` → literal `$FOO` (drop only the escaping backslash).
|
|
35
|
+
if (escaped)
|
|
36
|
+
return full.slice(1);
|
|
37
|
+
const name = braced ?? bare;
|
|
38
|
+
return lookup(name) ?? '';
|
|
39
|
+
});
|
|
40
|
+
const prefixed = /^([A-Za-z_][A-Za-z0-9_]*):([\s\S]*)$/.exec(substituted);
|
|
41
|
+
if (prefixed) {
|
|
42
|
+
const resolver = identifiers.get(prefixed[1]);
|
|
43
|
+
if (resolver)
|
|
44
|
+
return resolver(prefixed[2]);
|
|
45
|
+
}
|
|
46
|
+
return substituted;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=interpolate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/env/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;AAEzD,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAA4B;IACzE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,QAA4B;IAClF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,SAAS,GAAG,kDAAkD,CAAA;AAEpE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAA4C;IACrF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC3E,+DAA+D;QAC/D,IAAI,OAAO;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAA;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadEnvFiles.d.ts","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadEnvFiles.d.ts","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CA6BzF"}
|
package/dist/env/loadEnvFiles.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { parseEnv } from 'node:util';
|
|
4
|
+
import { interpolate } from './interpolate.js';
|
|
4
5
|
/**
|
|
5
6
|
* Load `.env` files into `process.env` — the shared primitive behind both the
|
|
6
7
|
* Ignitor (HTTP/console boot) and `Env.create()` (config/test flow), mirroring
|
|
@@ -30,10 +31,19 @@ export function loadEnvFiles(appRoot, options = {}) {
|
|
|
30
31
|
catch {
|
|
31
32
|
continue; // file absent — nothing to load
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const parsed = parseEnv(contents);
|
|
35
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
36
|
+
if (typeof value !== 'string' || process.env[key] !== undefined)
|
|
37
|
+
continue;
|
|
38
|
+
// Interpolate `$VAR`/`${VAR}` against process.env then this file's own
|
|
39
|
+
// (already-loaded) values, and apply any `identifier:` resolver.
|
|
40
|
+
process.env[key] = interpolate(value, (name) => {
|
|
41
|
+
const fromProcess = process.env[name];
|
|
42
|
+
if (fromProcess !== undefined)
|
|
43
|
+
return fromProcess;
|
|
44
|
+
const fromFile = parsed[name];
|
|
45
|
+
return typeof fromFile === 'string' ? fromFile : undefined;
|
|
46
|
+
});
|
|
37
47
|
}
|
|
38
48
|
}
|
|
39
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadEnvFiles.js","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"loadEnvFiles.js","sourceRoot":"","sources":["../../src/env/loadEnvFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,OAAY,EAAE,UAAsC,EAAE;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IACpC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI;QACxC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;QAC1C,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;QAClC,MAAM;KACP,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,QAAgB,CAAA;QACpB,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ,CAAC,gCAAgC;QAC3C,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAQ;YACzE,uEAAuE;YACvE,iEAAiE;YACjE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAI,WAAW,KAAK,SAAS;oBAAE,OAAO,WAAW,CAAA;gBACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7B,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5D,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/env/schema.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* value (or throws {@link EnvVarError}); `.optional()` accepts an absent/empty
|
|
13
13
|
* value as `undefined`.
|
|
14
14
|
*/
|
|
15
|
+
import { Secret } from './Secret.js';
|
|
15
16
|
/** A single failed-variable validation — collected by `Env.create`. */
|
|
16
17
|
export declare class EnvVarError extends Error {
|
|
17
18
|
constructor(message: string);
|
|
@@ -20,29 +21,45 @@ export declare class EnvVarError extends Error {
|
|
|
20
21
|
export interface SchemaNode<T> {
|
|
21
22
|
validate(name: string, value: string | undefined): T;
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
+
/** Condition deciding whether a variable is optional (AdonisJS `optionalWhen`). */
|
|
25
|
+
export type OptionalCondition = boolean | ((name: string, value: string | undefined) => boolean);
|
|
26
|
+
/**
|
|
27
|
+
* A required node that can be turned optional — `.optional()` widens `T` to
|
|
28
|
+
* `T | undefined`; `.optionalWhen(cond)` does so only when `cond` holds.
|
|
29
|
+
*/
|
|
24
30
|
export interface RequiredNode<T> extends SchemaNode<T> {
|
|
25
31
|
optional(): SchemaNode<T | undefined>;
|
|
32
|
+
optionalWhen(condition: OptionalCondition): SchemaNode<T | undefined>;
|
|
26
33
|
}
|
|
27
|
-
|
|
34
|
+
/** Options common to every schema function (AdonisJS `SchemaFnOptions`). */
|
|
35
|
+
export interface SchemaFnOptions {
|
|
36
|
+
/** Custom error message, replacing the default when validation fails. */
|
|
37
|
+
message?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface StringOptions extends SchemaFnOptions {
|
|
28
40
|
/** Validate the string against a known format. */
|
|
29
|
-
format?: 'host' | 'url' | 'email';
|
|
41
|
+
format?: 'host' | 'url' | 'email' | 'uuid';
|
|
30
42
|
/** For `format: 'url'` — require a TLD (default true). */
|
|
31
43
|
tld?: boolean;
|
|
32
44
|
/** For `format: 'url'` — require a protocol (default true). */
|
|
33
45
|
protocol?: boolean;
|
|
34
46
|
}
|
|
35
|
-
declare function number(): RequiredNode<number>;
|
|
36
|
-
declare function boolean(): RequiredNode<boolean>;
|
|
37
|
-
declare function enumNode<V extends readonly string[]>(values: V): RequiredNode<V[number]>;
|
|
47
|
+
declare function number(options?: SchemaFnOptions): RequiredNode<number>;
|
|
48
|
+
declare function boolean(options?: SchemaFnOptions): RequiredNode<boolean>;
|
|
49
|
+
declare function enumNode<V extends readonly string[]>(values: V, options?: SchemaFnOptions): RequiredNode<V[number]>;
|
|
38
50
|
/** The `Env.schema` surface. */
|
|
39
51
|
export declare const schema: {
|
|
40
52
|
string: ((options?: StringOptions) => RequiredNode<string>) & {
|
|
41
53
|
optional(options?: StringOptions): SchemaNode<string | undefined>;
|
|
54
|
+
optionalWhen(condition: OptionalCondition, options?: StringOptions): SchemaNode<string | undefined>;
|
|
42
55
|
};
|
|
43
56
|
number: typeof number;
|
|
44
57
|
boolean: typeof boolean;
|
|
45
58
|
enum: typeof enumNode;
|
|
59
|
+
secret: ((options?: SchemaFnOptions) => RequiredNode<Secret<string>>) & {
|
|
60
|
+
optional(options?: SchemaFnOptions): SchemaNode<Secret<string> | undefined>;
|
|
61
|
+
optionalWhen(condition: OptionalCondition, options?: SchemaFnOptions): SchemaNode<Secret<string> | undefined>;
|
|
62
|
+
};
|
|
46
63
|
};
|
|
47
64
|
export {};
|
|
48
65
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/env/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;CACrD;AAED,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,uEAAuE;AACvE,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAAA;CACrD;AAED,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,CAAA;AAEhG;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACpD,QAAQ,IAAI,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;IACrC,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CACtE;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;IAC1C,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAuHD,iBAAS,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,CAE/D;AAaD,iBAAS,OAAO,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,CAEjE;AAED,iBAAS,QAAQ,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,EAC3C,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,eAAe,GACxB,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAWzB;AAsBD,gCAAgC;AAChC,eAAO,MAAM,MAAM;wBAjFO,aAAa,KAAK,YAAY,CAAC,MAAM,CAAC;2BAC3C,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;gCAEpD,iBAAiB,YAClB,aAAa,GACtB,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;wBA2DT,eAAe,KAAK,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;2BACrD,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;gCAE9D,iBAAiB,YAClB,eAAe,GACxB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;;CAkB1C,CAAA"}
|
package/dist/env/schema.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* value (or throws {@link EnvVarError}); `.optional()` accepts an absent/empty
|
|
13
13
|
* value as `undefined`.
|
|
14
14
|
*/
|
|
15
|
+
import { Secret } from './Secret.js';
|
|
15
16
|
/** A single failed-variable validation — collected by `Env.create`. */
|
|
16
17
|
export class EnvVarError extends Error {
|
|
17
18
|
constructor(message) {
|
|
@@ -23,25 +24,31 @@ const TRUE_VALUES = new Set(['true', '1']);
|
|
|
23
24
|
const FALSE_VALUES = new Set(['false', '0']);
|
|
24
25
|
/**
|
|
25
26
|
* Build a node from a `parse` that only ever sees a present, non-empty string.
|
|
26
|
-
* Required `validate` throws on absent/empty
|
|
27
|
+
* Required `validate` throws on absent/empty (using `message` when given);
|
|
28
|
+
* `.optional()` returns `undefined`; `.optionalWhen(cond)` is optional only
|
|
29
|
+
* when the condition holds.
|
|
27
30
|
*/
|
|
28
|
-
function makeNode(parse) {
|
|
31
|
+
function makeNode(parse, message) {
|
|
32
|
+
const required = (name, value) => {
|
|
33
|
+
if (value === undefined || value === '') {
|
|
34
|
+
throw new EnvVarError(message ?? `Missing required environment variable "${name}"`);
|
|
35
|
+
}
|
|
36
|
+
return parse(name, value);
|
|
37
|
+
};
|
|
38
|
+
const optional = (name, value) => {
|
|
39
|
+
if (value === undefined || value === '')
|
|
40
|
+
return undefined;
|
|
41
|
+
return parse(name, value);
|
|
42
|
+
};
|
|
29
43
|
return {
|
|
30
|
-
validate
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
validate(name, value) {
|
|
39
|
-
if (value === undefined || value === '')
|
|
40
|
-
return undefined;
|
|
41
|
-
return parse(name, value);
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
},
|
|
44
|
+
validate: required,
|
|
45
|
+
optional: () => ({ validate: optional }),
|
|
46
|
+
optionalWhen: (condition) => ({
|
|
47
|
+
validate(name, value) {
|
|
48
|
+
const skip = typeof condition === 'function' ? condition(name, value) : condition;
|
|
49
|
+
return skip ? optional(name, value) : required(name, value);
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
45
52
|
};
|
|
46
53
|
}
|
|
47
54
|
function isHost(value) {
|
|
@@ -71,6 +78,9 @@ function isUrl(value, options) {
|
|
|
71
78
|
function isEmail(value) {
|
|
72
79
|
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
73
80
|
}
|
|
81
|
+
function isUuid(value) {
|
|
82
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
83
|
+
}
|
|
74
84
|
function checkFormat(name, value, options) {
|
|
75
85
|
if (!options?.format)
|
|
76
86
|
return;
|
|
@@ -78,9 +88,12 @@ function checkFormat(name, value, options) {
|
|
|
78
88
|
? isHost(value)
|
|
79
89
|
: options.format === 'url'
|
|
80
90
|
? isUrl(value, options)
|
|
81
|
-
:
|
|
91
|
+
: options.format === 'uuid'
|
|
92
|
+
? isUuid(value)
|
|
93
|
+
: isEmail(value);
|
|
82
94
|
if (!ok) {
|
|
83
|
-
throw new EnvVarError(
|
|
95
|
+
throw new EnvVarError(options.message ??
|
|
96
|
+
`Environment variable "${name}" must be a valid ${options.format}, got "${value}"`);
|
|
84
97
|
}
|
|
85
98
|
}
|
|
86
99
|
function stringParse(options) {
|
|
@@ -89,42 +102,63 @@ function stringParse(options) {
|
|
|
89
102
|
return raw;
|
|
90
103
|
};
|
|
91
104
|
}
|
|
92
|
-
/**
|
|
93
|
-
|
|
94
|
-
|
|
105
|
+
/**
|
|
106
|
+
* `string(opts?)` is callable AND exposes `.optional(opts?)` / `.optionalWhen()`
|
|
107
|
+
* shortcuts — all AdonisJS forms.
|
|
108
|
+
*/
|
|
109
|
+
const string = Object.assign((options) => makeNode(stringParse(options), options?.message), {
|
|
110
|
+
optional: (options) => makeNode(stringParse(options), options?.message).optional(),
|
|
111
|
+
optionalWhen: (condition, options) => makeNode(stringParse(options), options?.message).optionalWhen(condition),
|
|
95
112
|
});
|
|
96
|
-
function
|
|
97
|
-
return
|
|
113
|
+
function numberParse(options) {
|
|
114
|
+
return (name, raw) => {
|
|
98
115
|
const parsed = Number(raw);
|
|
99
116
|
if (Number.isNaN(parsed)) {
|
|
100
|
-
throw new EnvVarError(`Environment variable "${name}" must be a number, got "${raw}"`);
|
|
117
|
+
throw new EnvVarError(options?.message ?? `Environment variable "${name}" must be a number, got "${raw}"`);
|
|
101
118
|
}
|
|
102
119
|
return parsed;
|
|
103
|
-
}
|
|
120
|
+
};
|
|
104
121
|
}
|
|
105
|
-
function
|
|
106
|
-
return makeNode((
|
|
122
|
+
function number(options) {
|
|
123
|
+
return makeNode(numberParse(options), options?.message);
|
|
124
|
+
}
|
|
125
|
+
function booleanParse(options) {
|
|
126
|
+
return (name, raw) => {
|
|
107
127
|
if (TRUE_VALUES.has(raw))
|
|
108
128
|
return true;
|
|
109
129
|
if (FALSE_VALUES.has(raw))
|
|
110
130
|
return false;
|
|
111
|
-
throw new EnvVarError(
|
|
112
|
-
|
|
131
|
+
throw new EnvVarError(options?.message ??
|
|
132
|
+
`Environment variable "${name}" must be a boolean (true/false/1/0), got "${raw}"`);
|
|
133
|
+
};
|
|
113
134
|
}
|
|
114
|
-
function
|
|
135
|
+
function boolean(options) {
|
|
136
|
+
return makeNode(booleanParse(options), options?.message);
|
|
137
|
+
}
|
|
138
|
+
function enumNode(values, options) {
|
|
115
139
|
return makeNode((name, raw) => {
|
|
116
140
|
const match = values.find((candidate) => candidate === raw);
|
|
117
141
|
if (match === undefined) {
|
|
118
|
-
throw new EnvVarError(
|
|
142
|
+
throw new EnvVarError(options?.message ??
|
|
143
|
+
`Environment variable "${name}" must be one of [${values.join(', ')}], got "${raw}"`);
|
|
119
144
|
}
|
|
120
145
|
return match;
|
|
121
|
-
});
|
|
146
|
+
}, options?.message);
|
|
122
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* `secret(opts?)` wraps the value in a {@link Secret} so it never leaks through
|
|
150
|
+
* logs/JSON (AdonisJS `Env.schema.secret`). Read it with `.release()`.
|
|
151
|
+
*/
|
|
152
|
+
const secret = Object.assign((options) => makeNode((_name, raw) => new Secret(raw), options?.message), {
|
|
153
|
+
optional: (options) => makeNode((_name, raw) => new Secret(raw), options?.message).optional(),
|
|
154
|
+
optionalWhen: (condition, options) => makeNode((_name, raw) => new Secret(raw), options?.message).optionalWhen(condition),
|
|
155
|
+
});
|
|
123
156
|
/** The `Env.schema` surface. */
|
|
124
157
|
export const schema = {
|
|
125
158
|
string,
|
|
126
159
|
number,
|
|
127
160
|
boolean,
|
|
128
161
|
enum: enumNode,
|
|
162
|
+
secret,
|
|
129
163
|
};
|
|
130
164
|
//# sourceMappingURL=schema.js.map
|
package/dist/env/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/env/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,31 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @implements FR71, FR72, FR73, FR77
|
|
8
8
|
*/
|
|
9
|
+
/**
|
|
10
|
+
* Is this a Ream error, and one of these codes?
|
|
11
|
+
*
|
|
12
|
+
* The framework carries ONE error type with a `code`, because an error can be
|
|
13
|
+
* raised in Rust and rebuilt in TypeScript across the NAPI boundary — see
|
|
14
|
+
* {@link ReamError.fromNapi}. A class per code cannot cross that line, so the
|
|
15
|
+
* check that replaces `instanceof MyError` is this one.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* try {
|
|
20
|
+
* await consoleApp.exec('provision')
|
|
21
|
+
* } catch (error) {
|
|
22
|
+
* if (isReamError(error, 'E_CONSOLE_MISSING_FLAG', 'E_CONSOLE_MISSING_ARGUMENT')) {
|
|
23
|
+
* console.error(error.hint) // narrowed: `error` IS a ReamError here
|
|
24
|
+
* return
|
|
25
|
+
* }
|
|
26
|
+
* throw error
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function isReamError(error: unknown): error is ReamError;
|
|
31
|
+
export declare function isReamError<const Code extends string>(error: unknown, ...codes: [Code, ...Code[]]): error is ReamError & {
|
|
32
|
+
code: Code;
|
|
33
|
+
};
|
|
9
34
|
export declare class ReamError extends Error {
|
|
10
35
|
/** Error code (e.g., "ATLAS_QUERY_ERROR", "CONTAINER_NOT_FOUND") */
|
|
11
36
|
readonly code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReamError.d.ts","sourceRoot":"","sources":["../../src/errors/ReamError.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qBAAa,SAAU,SAAQ,KAAK;IAClC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEtB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAE5B,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAE5B,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IAEzB,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;gBAG7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB;IAaH;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS;IAoBxC;;OAEG;IACH,WAAW,IAAI,MAAM;IA2CrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAG5B"}
|
|
1
|
+
{"version":3,"file":"ReamError.d.ts","sourceRoot":"","sources":["../../src/errors/ReamError.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAAA;AAC/D,wBAAgB,WAAW,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EACnD,KAAK,EAAE,OAAO,EACd,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,GAC1B,KAAK,IAAI,SAAS,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAA;AAMtC,qBAAa,SAAU,SAAQ,KAAK;IAClC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEtB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAE5B,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAE5B,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IAEzB,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;gBAG7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB;IAaH;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS;IAoBxC;;OAEG;IACH,WAAW,IAAI,MAAM;IA2CrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAG5B"}
|
package/dist/errors/ReamError.js
CHANGED
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @implements FR71, FR72, FR73, FR77
|
|
8
8
|
*/
|
|
9
|
+
export function isReamError(error, ...codes) {
|
|
10
|
+
if (!(error instanceof ReamError))
|
|
11
|
+
return false;
|
|
12
|
+
return codes.length === 0 || codes.includes(error.code);
|
|
13
|
+
}
|
|
9
14
|
export class ReamError extends Error {
|
|
10
15
|
/** Error code (e.g., "ATLAS_QUERY_ERROR", "CONTAINER_NOT_FOUND") */
|
|
11
16
|
code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReamError.js","sourceRoot":"","sources":["../../src/errors/ReamError.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"ReamError.js","sourceRoot":"","sources":["../../src/errors/ReamError.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render an error for a human reading a terminal (AdonisJS `prettyPrintError`).
|
|
3
|
+
*
|
|
4
|
+
* Its own module rather than a helper inside `Ignitor.ts`: the console kernel
|
|
5
|
+
* renders the failures of the command it ran, and reaching into the Ignitor for
|
|
6
|
+
* that would make the two import each other.
|
|
7
|
+
*/
|
|
8
|
+
export declare function prettyPrintError(error: unknown): void;
|
|
9
|
+
//# sourceMappingURL=prettyPrintError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prettyPrintError.d.ts","sourceRoot":"","sources":["../../src/errors/prettyPrintError.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CASrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render an error for a human reading a terminal (AdonisJS `prettyPrintError`).
|
|
3
|
+
*
|
|
4
|
+
* Its own module rather than a helper inside `Ignitor.ts`: the console kernel
|
|
5
|
+
* renders the failures of the command it ran, and reaching into the Ignitor for
|
|
6
|
+
* that would make the two import each other.
|
|
7
|
+
*/
|
|
8
|
+
import { ReamError } from './ReamError.js';
|
|
9
|
+
export function prettyPrintError(error) {
|
|
10
|
+
if (error instanceof ReamError) {
|
|
11
|
+
console.error(error.toDevString());
|
|
12
|
+
}
|
|
13
|
+
else if (error instanceof Error) {
|
|
14
|
+
console.error(`\n ${error.message}\n`);
|
|
15
|
+
if (error.stack)
|
|
16
|
+
console.error(error.stack);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.error(error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=prettyPrintError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prettyPrintError.js","sourceRoot":"","sources":["../../src/errors/prettyPrintError.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IACpC,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;QACvC,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;AACH,CAAC"}
|