UNPKG

@manuth/woltlab-compiler

Version:

A compiler for generating WoltLab-Package `.tar` Archives and other WoltLab-Package Components

113 lines 5.21 kB
import { Constants } from "../../Constants.js"; import { XMLEditor } from "../../Serialization/XMLEditor.js"; import { WoltLabXMLCompiler } from "../WoltLabXMLCompiler.js"; /** * Provides the functionality to compile package-files. */ export class PackageFileCompiler extends WoltLabXMLCompiler { /** * Initializes a new instance of the {@link PackageFileCompiler `PackageFileCompiler`} class. * * @param item * The item to compile. */ constructor(item) { super(item); } /** * @inheritdoc */ get TagName() { return "package"; } /** * @inheritdoc */ get SchemaLocation() { return "http://www.woltlab.com/XSD/tornado/package.xsd"; } /** * @inheritdoc * * @returns * The serialized document. */ CreateDocument() { let document = super.CreateDocument(); let editor = new XMLEditor(document.documentElement); let packageNode = editor.CreateElement("packageinformation"); let authorNode = editor.CreateElement("authorinformation"); let compatibilityNode = editor.CreateElement("compatibility"); let apiNode = compatibilityNode.CreateElement("api"); compatibilityNode.Add(apiNode); editor.SetAttribute("name", this.Item.Identifier); // eslint-disable-next-line @delagen/deprecation/deprecation apiNode.SetAttribute("version", this.Item.APIVersion); editor.Add(packageNode); editor.Add(authorNode); for (let locale of this.Item.DisplayName.GetLocales()) { let displayNameElement = packageNode.CreateTextElement("packagename", this.Item.DisplayName.Data.get(locale)); packageNode.Add(displayNameElement); if (locale !== Constants.InvariantCultureName) { displayNameElement.SetAttribute("languagecode", locale); } } for (let locale of this.Item.Description.GetLocales()) { let description = packageNode.CreateTextElement("packagedescription", this.Item.Description.Data.get(locale)); packageNode.Add(description); if (locale !== Constants.InvariantCultureName) { description.SetAttribute("languagecode", locale); } } packageNode.Add(packageNode.CreateTextElement("version", this.Item.Version)); packageNode.Add(packageNode.CreateTextElement("date", this.Item.CreationDate.getFullYear().toString() + "-" + (this.Item.CreationDate.getMonth() + 1).toString().padStart(2, "0") + "-" + this.Item.CreationDate.getDate().toString().padStart(2, "0"))); if (this.Item.Author.Name) { authorNode.Add(authorNode.CreateTextElement("author", this.Item.Author.Name)); } if (this.Item.Author.URL) { authorNode.Add(authorNode.CreateTextElement("authorurl", this.Item.Author.URL)); } if (this.Item.RequiredPackages.length > 0) { let requiredPackagesNode = editor.CreateElement("requiredpackages"); editor.Add(requiredPackagesNode); for (let requiredPackage of this.Item.RequiredPackages) { let requiredPackageNode = requiredPackagesNode.CreateTextElement("requiredpackage", requiredPackage.Identifier); requiredPackagesNode.Add(requiredPackageNode); requiredPackageNode.SetAttribute("minversion", requiredPackage.MinVersion); if (requiredPackage.FileName) { requiredPackageNode.SetAttribute("file", requiredPackage.FileName); } } } if (this.Item.ConflictingPackages.length > 0) { let conflictingPackagesNode = editor.CreateElement("excludedpackages"); editor.Add(conflictingPackagesNode); for (let conflictingPackage of this.Item.ConflictingPackages) { let conflictingPackageNode = conflictingPackagesNode.CreateTextElement("excludedpackage", conflictingPackage.Identifier); conflictingPackagesNode.Add(conflictingPackageNode); conflictingPackageNode.SetAttribute("version", conflictingPackage.Version); } } if (this.Item.OptionalPackages.length > 0) { let optionalPackagesNode = editor.CreateElement("optionalpackages"); editor.Add(optionalPackagesNode); for (let optionalPackage of this.Item.OptionalPackages) { let optionalPackageNode = optionalPackagesNode.CreateTextElement("optionalpackage", optionalPackage.Identifier); optionalPackagesNode.Add(optionalPackageNode); optionalPackageNode.SetAttribute("file", optionalPackage.FileName); } } // eslint-disable-next-line @delagen/deprecation/deprecation if (this.Item.APIVersion) { editor.Add(compatibilityNode); } editor.Add(this.Item.InstallSet.Serialize()); for (let instructionSet of this.Item.UpdateSets) { editor.Add(instructionSet.Serialize()); } return document; } } //# sourceMappingURL=PackageFileCompiler.js.map