npm package diff

Package: @forge/manifest

Versions: 7.7.0-next.12 - 7.5.2-next.0-experimental-204139e

File: package/out/utils/manifest-parser.js

Index: package/out/utils/manifest-parser.js
===================================================================
--- package/out/utils/manifest-parser.js
+++ package/out/utils/manifest-parser.js
@@ -1,9 +1,11 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.ManifestParser = exports.ManifestParserError = void 0;
+const tslib_1 = require("tslib");
 const yaml_1 = require("yaml");
-const manifest_interpolator_1 = require("../interpolator/manifest-interpolator");
+const errors_1 = require("../text/errors");
+const Sentry = tslib_1.__importStar(require("@sentry/node"));
 const yamlConfigOptions = { indent: 2, skipInvalid: true };
 class ManifestParserError extends Error {
     constructor(message) {
         super(message);
@@ -14,23 +16,37 @@
         };
     }
 }
 exports.ManifestParserError = ManifestParserError;
+const POSSIBLE_ENVIRONMENT_VARIABLE = /\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
 class ManifestParser {
-    manifestInterpolator;
-    constructor(manifestInterpolator) {
-        this.manifestInterpolator = manifestInterpolator;
+    envVarsRecord;
+    envVarsToReplace;
+    constructor(envVarsRecord = {}) {
+        this.envVarsRecord = envVarsRecord;
+        this.envVarsToReplace = [];
     }
     parseManifest(manifest) {
-        try {
-            return this.manifestInterpolator.interpolate(manifest);
-        }
-        catch (error) {
-            if (error instanceof manifest_interpolator_1.ManifestInterpolatorError) {
-                throw new ManifestParserError(error.message);
-            }
-            throw error;
-        }
+        const rawManifest = (0, yaml_1.parse)(manifest);
+        this.envVarsToReplace = rawManifest.environment?.variables ?? [];
+        return (0, yaml_1.parse)(manifest, this.environmentVariableReviver);
     }
     parseManifestAsString = (manifest) => (0, yaml_1.stringify)(this.parseManifest(manifest), yamlConfigOptions);
+    environmentVariableReviver = (_, value) => {
+        if (!(typeof value == 'string')) {
+            return value;
+        }
+        value = value.replace(POSSIBLE_ENVIRONMENT_VARIABLE, (original, envVarName) => {
+            if (!this.envVarsToReplace.includes(envVarName)) {
+                return original;
+            }
+            const envVar = this.envVarsRecord[envVarName];
+            if (envVar === undefined) {
+                throw new ManifestParserError(errors_1.errors.schema.missingEnvironmentVariable(envVarName));
+            }
+            Sentry.captureMessage('replaced environment variable');
+            return envVar;
+        });
+        return value;
+    };
 }
 exports.ManifestParser = ManifestParser;