129 lines
16 KiB
JavaScript
129 lines
16 KiB
JavaScript
"use strict";
|
|||
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
|
exports.CloudArtifact = void 0;
|
||
|
|
const fs = require("fs");
|
||
|
|
const path = require("path");
|
||
|
|
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
||
|
|
const metadata_1 = require("./metadata");
|
||
|
|
const error_1 = require("./private/error");
|
||
|
|
/**
|
||
|
|
* Represents an artifact within a cloud assembly.
|
||
|
|
*/
|
||
|
|
class CloudArtifact {
|
||
|
|
/**
|
||
|
|
* Read the metadata for the given artifact
|
||
|
|
*
|
||
|
|
* HISTORICAL OR PRIVATE USE ONLY
|
||
|
|
*
|
||
|
|
* This is publicly exposed as a static function for downstream libraries that
|
||
|
|
* don't use the `CloudAssembly`/`CloudArtifact` API, yet still need to read
|
||
|
|
* an artifact's metadata.
|
||
|
|
*
|
||
|
|
* 99% of consumers should just access `artifact.metadata`.
|
||
|
|
*/
|
||
|
|
static readMetadata(assemblyDirectory, x) {
|
||
|
|
const ret = {};
|
||
|
|
if (x.additionalMetadataFile) {
|
||
|
|
Object.assign(ret, JSON.parse(fs.readFileSync(path.join(assemblyDirectory, x.additionalMetadataFile), 'utf-8')));
|
||
|
|
}
|
||
|
|
for (const [p, entries] of Object.entries(x.metadata ?? {})) {
|
||
|
|
if (ret[p]) {
|
||
|
|
ret[p].push(...entries);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
ret[p] = entries;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Returns a subclass of `CloudArtifact` based on the artifact type defined in the artifact manifest.
|
||
|
|
*
|
||
|
|
* @param assembly - The cloud assembly from which to load the artifact
|
||
|
|
* @param id - The artifact ID
|
||
|
|
* @param artifact - The artifact manifest
|
||
|
|
* @returns the `CloudArtifact` that matches the artifact type or `undefined` if it's an artifact type that is unrecognized by this module.
|
||
|
|
*/
|
||
|
|
static fromManifest(assembly, id, artifact) {
|
||
|
|
// Implementation is defined in a separate file to break cyclic dependencies
|
||
|
|
void (assembly), void (id), void (artifact);
|
||
|
|
throw new error_1.CloudAssemblyError('Implementation not overridden yet');
|
||
|
|
}
|
||
|
|
constructor(assembly, id, manifest) {
|
||
|
|
this.assembly = assembly;
|
||
|
|
this.id = id;
|
||
|
|
this.manifest = manifest;
|
||
|
|
this.messages = this.renderMessages();
|
||
|
|
this._dependencyIDs = manifest.dependencies || [];
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Returns the metadata associated with this Cloud Artifact
|
||
|
|
*/
|
||
|
|
get metadata() {
|
||
|
|
return CloudArtifact.readMetadata(this.assembly.directory, this.manifest);
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Returns all the artifacts that this artifact depends on.
|
||
|
|
*/
|
||
|
|
get dependencies() {
|
||
|
|
if (this._deps) {
|
||
|
|
return this._deps;
|
||
|
|
}
|
||
|
|
this._deps = this._dependencyIDs.map(id => {
|
||
|
|
const dep = this.assembly.tryGetArtifact(id);
|
||
|
|
if (!dep) {
|
||
|
|
throw new error_1.CloudAssemblyError(`Artifact ${this.id} depends on non-existing artifact ${id}`);
|
||
|
|
}
|
||
|
|
return dep;
|
||
|
|
});
|
||
|
|
return this._deps;
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* @returns all the metadata entries of a specific type in this artifact.
|
||
|
|
*/
|
||
|
|
findMetadataByType(type) {
|
||
|
|
const metadata = this.metadata;
|
||
|
|
const result = new Array();
|
||
|
|
for (const p of Object.keys(metadata || {})) {
|
||
|
|
for (const entry of (metadata || {})[p]) {
|
||
|
|
if (entry.type === type) {
|
||
|
|
result.push({ path: p, ...entry });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
renderMessages() {
|
||
|
|
const messages = new Array();
|
||
|
|
for (const [id, metadata] of Object.entries(this.metadata || {})) {
|
||
|
|
for (const entry of metadata) {
|
||
|
|
let level;
|
||
|
|
switch (entry.type) {
|
||
|
|
case cxschema.ArtifactMetadataEntryType.WARN:
|
||
|
|
level = metadata_1.SynthesisMessageLevel.WARNING;
|
||
|
|
break;
|
||
|
|
case cxschema.ArtifactMetadataEntryType.ERROR:
|
||
|
|
level = metadata_1.SynthesisMessageLevel.ERROR;
|
||
|
|
break;
|
||
|
|
case cxschema.ArtifactMetadataEntryType.INFO:
|
||
|
|
level = metadata_1.SynthesisMessageLevel.INFO;
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
messages.push({ level, entry, id });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return messages;
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* An identifier that shows where this artifact is located in the tree
|
||
|
|
* of nested assemblies, based on their manifests. Defaults to the normal
|
||
|
|
* id. Should only be used in user interfaces.
|
||
|
|
*/
|
||
|
|
get hierarchicalId() {
|
||
|
|
return this.manifest.displayName ?? this.id;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
exports.CloudArtifact = CloudArtifact;
|
||
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtYXJ0aWZhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZC1hcnRpZmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDJEQUEyRDtBQUczRCx5Q0FBbUQ7QUFDbkQsMkNBQXFEO0FBOEJyRDs7R0FFRztBQUNILE1BQWEsYUFBYTtJQUN4Qjs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxpQkFBeUIsRUFBRSxDQUE0QjtRQUNoRixNQUFNLEdBQUcsR0FBNkMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUF1QixFQUFFLEVBQVUsRUFBRSxRQUFtQztR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
|