UNPKG

ts-app-env

Version:
64 lines (63 loc) 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const __1 = require("../"); // Each component has its own/different config const RollbarEnv = { ROLLBAR_URL: (0, __1.string)(), }; const StatsEnv = { STATSD_URL: (0, __1.string)(), }; // Pretend this is a 3rd party initialization function that we can't change. // It expects a url and port as part of its initialization config. function createThirdPartyMod(settings) { return `${settings.someUrl}:${settings.somePort}`; } // And so we declare an "env" adapter for its config const SomeThirdPartyEnv = { somePort: (0, __1.number)({ env: "SOME_PORT" }), someUrl: (0, __1.string)(), }; const somePrimitivesObject = { foo: true, bar: "bar", baz: 1, }; const AppEnv = Object.assign(Object.assign(Object.assign({ APP_URL: (0, __1.string)(), ENVIRONMENT: (0, __1.string)({ default: "staging" }) }, RollbarEnv), StatsEnv), { someThirdParty: SomeThirdPartyEnv, somePrimitives: somePrimitivesObject }); /* eslint-disable prefer-destructuring */ describe("AppEnv", () => { const validEnvVars = { APP_URL: "http://app", ENVIRONMENT: "production", ROLLBAR_URL: "http://rollbar", SOME_PORT: "100", SOME_URL: "thirdPartyUrl", STATSD_URL: "http://statsd", }; it("can be constructed", () => { const c = (0, __1.newConfig)(AppEnv, validEnvVars); expect(c.ROLLBAR_URL).toBe("http://rollbar"); expect(c.STATSD_URL).toBe("http://statsd"); expect(c.APP_URL).toBe("http://app"); expect(c.ENVIRONMENT).toBe("production"); }); it("can compose settings", () => { const c = (0, __1.newConfig)(AppEnv, validEnvVars); expect(createThirdPartyMod(c.someThirdParty)).toBe("thirdPartyUrl:100"); }); it("can compose settings", () => { const c = (0, __1.newConfig)(AppEnv, validEnvVars); expect(createThirdPartyMod(c.someThirdParty)).toBe("thirdPartyUrl:100"); }); it("throws a single error for composed configs", () => { const invalidEnv = Object.assign({}, validEnvVars); delete invalidEnv.APP_URL; delete invalidEnv.SOME_URL; delete invalidEnv.SOME_PORT; expect(() => (0, __1.newConfig)(AppEnv, invalidEnv)).toThrow("APP_URL is not set, SOME_PORT is not set, SOME_URL is not set"); }); it("can pass primitive values as-is", () => { const c = (0, __1.newConfig)(AppEnv, validEnvVars); expect(c.somePrimitives).toEqual(somePrimitivesObject); }); });