UNPKG

@halospv3/hce.shared-config

Version:

Automate commit message quality, changelogs, and CI/CD releases. Its `main` entry point is a Semantic Release config. Functions and classes are exposed for customization. An ESLint config, a Commitlint config, and addl. resources for .NET projects are als

1 lines 27.6 kB
{"version":3,"file":"NugetProjectProperties.mjs","names":[],"sources":["../../src/dotnet/NugetProjectProperties.ts"],"sourcesContent":["import { type } from 'arktype';\nimport { CaseInsensitiveMap } from '../CaseInsensitiveMap.ts';\nimport {\n tBooleanString,\n tEmptyOrBooleanString,\n type BooleanString,\n type EmptyOrBooleanString,\n} from '../utils/miscTypes.ts';\nimport {\n getPrototypesChainOf,\n listOwnGetters,\n type ClassLike,\n type ProtoChainOfClass as PrototypeChainOfClass,\n type WithProto as WithPrototype,\n} from '../utils/reflection.ts';\nimport { MSBuildProjectProperties, type Class_MSBPP } from './MSBuildProjectProperties.ts';\n\n/**\n * A readonly record of a .csproj or .fsproj with NuGet configuration properties in\n * addition to those specified by {@link MSBuildProjectProperties}. This record\n * should be considered immutable. A new instance should be constructed from MSBuild's evaluation output.\n * @see https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#pack-target-inputs\n */\nexport class NugetProjectProperties extends MSBuildProjectProperties {\n // #region private\n private _isPackable: BooleanString | undefined;\n private _suppressDependenciesWhenPacking: BooleanString | undefined;\n private _generatePackageOnBuild: BooleanString | undefined;\n private _packageVersion: string | undefined;\n private _packageId: string | undefined;\n private _packageDescription: string | undefined;\n private _authors: string | undefined;\n private _copyright: string | undefined;\n private _packageRequireLicenseAcceptance: BooleanString | undefined;\n private _developmentDependency: EmptyOrBooleanString | undefined;\n private _packageLicenseExpression: string | undefined;\n private _packageLicenseFile: string | undefined;\n private _packageProjectUrl: string | undefined;\n private _packageIcon: string | undefined;\n private _packageReleaseNotes: string | undefined;\n private _packageReadmeFile: string | undefined;\n private _packageTags: string | undefined;\n private _packageOutputPath: string | undefined;\n private _includeSymbols: EmptyOrBooleanString | undefined;\n private _includeSource: EmptyOrBooleanString | undefined;\n private _packageType: string | undefined;\n private _isTool: EmptyOrBooleanString | undefined;\n private _repositoryUrl: string | undefined;\n private _repositoryType: '' | 'git' | 'tfs' | undefined;\n private _repositoryCommit: string | undefined;\n private _symbolPackageFormat: 'symbols.nupkg' | 'snupkg' | undefined;\n private _noPackageAnalysis: EmptyOrBooleanString | undefined;\n private _minClientVersion: string | undefined;\n private _includeBuiltOutput: BooleanString | undefined;\n private _includeContentInPack: BooleanString | undefined;\n private _buildOutputTargetFolder: string | undefined;\n private _contentTargetFolders: string | undefined;\n private _nuspecFile: string | undefined;\n private _nuspecBasePath: string | undefined;\n private _nuspecProperties: string | undefined;\n private _title: string | undefined;\n private _company: string | undefined;\n private _product: string | undefined;\n // #endregion private\n\n /**\n * Initialize a readonly record of an MSBuild project's properties, including those related to NuGet.\n * @param msbuildProjectFullPath See {@link NugetProjectProperties.MSBuildProjectFullPath}\n * @param properties The dictionary returned by MSBuild's `-getProperty:propname,...` argument\n */\n constructor(\n msbuildProjectFullPath: string,\n properties: CaseInsensitiveMap<string, string>,\n ) {\n /**\n * names of properties to consume in this constructor instead of its super.\n * These are the names of getters, lowercased.\n */\n const keysToMoveOut = NPPGetterNames.InstanceGetters;\n /** Entries to remove from {@link properties} and apply to `this` after calling `super` */\n const consumables = new CaseInsensitiveMap<string, string>();\n // move property by key from `properties` to `consumables`. The types of keys and values in `properties` do not matter here.\n for (const key of keysToMoveOut) {\n const value = NugetProjectProperties.getAndForget(properties, key);\n if (value !== undefined)\n consumables.set(key, value);\n }\n\n // Pass the remainder to super\n super(msbuildProjectFullPath, properties);\n\n const _getAndForget = (key: string) => NugetProjectProperties.getAndForget(consumables, key);\n let data;\n this._authors = _getAndForget('Authors');\n this._buildOutputTargetFolder = _getAndForget('BuildOutputTargetFolder');\n this._company = _getAndForget('Company');\n this._contentTargetFolders = _getAndForget('ContentTargetFolders');\n this._copyright = _getAndForget('Copyright');\n if (tEmptyOrBooleanString.allows(data = _getAndForget('DevelopmentDependency')))\n this._developmentDependency = data;\n if (tBooleanString.allows(data = _getAndForget('IncludeBuiltOutput')))\n this._includeBuiltOutput = data;\n if (tBooleanString.allows(data = _getAndForget('IncludeContentInPack')))\n this._includeContentInPack = data;\n if (tEmptyOrBooleanString.allows(data = _getAndForget('IncludeSource')))\n this._includeSource = data;\n if (tEmptyOrBooleanString.allows(data = _getAndForget('IncludeSymbols')))\n this._includeSymbols = data;\n if (tBooleanString.allows(data = _getAndForget('IsPackable')))\n this._isPackable = data;\n if (tEmptyOrBooleanString.allows(data = _getAndForget('IsTool')))\n this._isTool = data;\n this._minClientVersion = _getAndForget('MinClientVersion');\n if (tEmptyOrBooleanString.allows(data = _getAndForget('NoPackageAnalysis')))\n this._noPackageAnalysis = data;\n this._nuspecBasePath = _getAndForget('NuspecBasePath');\n this._nuspecFile = _getAndForget('NuspecFile');\n this._nuspecProperties = _getAndForget('NuspecProperties');\n this._packageDescription = _getAndForget('PackageDescription');\n this._packageIcon = _getAndForget('PackageIcon');\n this._packageId = _getAndForget('PackageId');\n this._packageLicenseExpression = _getAndForget('PackageLicenseExpression');\n this._packageLicenseFile = _getAndForget('PackageLicenseFile');\n this._packageOutputPath = _getAndForget('PackageOutputPath');\n this._packageProjectUrl = _getAndForget('PackageProjectUrl');\n this._packageReadmeFile = _getAndForget('PackageReadmeFile');\n this._packageReleaseNotes = _getAndForget('PackageReleaseNotes');\n if (tBooleanString.allows(data = _getAndForget('PackageRequireLicenseAcceptance')))\n this._packageRequireLicenseAcceptance = data;\n this._packageTags = _getAndForget('PackageTags');\n this._packageType = _getAndForget('PackageType');\n this._packageVersion = _getAndForget('PackageVersion');\n this._product = _getAndForget('Product');\n this._repositoryCommit = _getAndForget('RepositoryCommit');\n if (Type_RepoType.allows(data = _getAndForget('RepositoryType')))\n this._repositoryType = data;\n this._repositoryUrl = _getAndForget('RepositoryUrl');\n if (tBooleanString.allows(data = _getAndForget('SuppressDependenciesWhenPacking')))\n this._suppressDependenciesWhenPacking = data;\n if (Type_SymbolPackageFormat.allows(data = _getAndForget('SymbolPackageFormat')))\n this._symbolPackageFormat = data;\n this._title = _getAndForget('Title');\n }\n\n /**\n * @returns A string-formatted boolean. If 'false', the project's `Pack`\n * Target (if available) will no-op.\n *\n * Default: `\"true\"`\n */\n get IsPackable(): BooleanString {\n return this._isPackable ??= 'true';\n }\n\n /**\n * @returns `\"true\"` or `\"false\"`. If \"true\", the package's dependencies are\n * excluded from the generated NuGet package.\n *\n * Default: `\"false\"`\n */\n get SuppressDependenciesWhenPacking(): BooleanString {\n return this._suppressDependenciesWhenPacking ??= 'false';\n }\n\n /**\n * @returns \"true\" or \"false\". If \"true\", Pack will run after every Build. To\n * prevent recursion, Build will no longer auto-run before Pack.\n *\n * WARNING: Pack may fail if there are no Build artifacts!\n *\n * Default: \"false\"\n */\n get GeneratePackageOnBuild(): BooleanString {\n return this._generatePackageOnBuild ??= 'false';\n }\n\n /**\n * @returns A semver-compatible version number in the form\n * Major.Minor.Patch[-Suffix], where -Suffix identifies prerelease versions.\n *\n * Default: {@link Version}\n * @example \"1.0.0\", \"1.0.0-beta\", \"1.0.0-beta-00345\"\n */\n get PackageVersion(): string {\n return this._packageVersion ??= this.Version;\n }\n\n /**\n * @returns The ID of the resulting NuGet package.\n *\n * Default: {@link AssemblyName}\n */\n get PackageId(): string {\n return this._packageId ??= this.AssemblyName;\n }\n\n /**\n * @returns A long description of the package for UI display.\n *\n * Default: {@link Description}\n */\n get PackageDescription(): string {\n return this._packageDescription ??= this.Description;\n }\n\n /**\n * @returns A semicolon-separated list of the package's authors, matching the\n * profile names on nuget.org. These are displayed in the NuGet Gallery on\n * nuget.org and are used to cross-reference packages by the same authors.\n *\n * Default: {@link AssemblyName `AssemblyName`}\n */\n get Authors(): string {\n return this._authors ??= this.AssemblyName;\n }\n\n /**\n * @returns Copyright details for the package.\n *\n * Default: `''`\n */\n get Copyright(): string {\n return this._copyright ??= '';\n }\n\n /**\n * @returns A string-formatted boolean. If `\"true\"`, the client must prompt the\n * consumer to accept the package license before installing the package.\n *\n * Default: `\"false\"`\n */\n get PackageRequireLicenseAcceptance(): BooleanString {\n return this._packageRequireLicenseAcceptance ??= 'false';\n }\n\n /**\n * This boolean only affects the package created from the project.\n * @see\n * {@link https://github.com/NuGet/Home/wiki/DevelopmentDependency-support-for-PackageReference DevelopmentDependency support for PackageReference}\n * @returns A string-formatted boolean. If `\"true\"`, the package is marked as\n * a development-only dependency and is prevented from being included as a\n * dependency in other packages. With PackageReference (NuGet 4.8+), this flag\n * also means that compile-time assets are excluded from compilation.\n *\n * Default: `''` (`false`-y)\n */\n get DevelopmentDependency(): EmptyOrBooleanString {\n return this._developmentDependency ??= '';\n }\n\n /**\n * @returns The {@link https://spdx.org/licenses/ SPDX license identifier} or\n * expression.\n *\n * Default: `''`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-a-license-expression-or-a-license-file Packing a license expression or a license file}\n * @example \"Apache-2.0\"\n */\n get PackageLicenseExpression(): string {\n return this._packageLicenseExpression ??= '';\n }\n\n /**\n * @returns The path to a license file within the package if you're using a\n * custom license or a license that hasn't been assigned an SPDX identifier.\n *\n * Default: `''`\n */\n get PackageLicenseFile(): string {\n return this._packageLicenseFile ??= '';\n }\n\n /**\n * @returns The package's project URL.\n *\n * Default: `''`\n */\n get PackageProjectUrl(): string {\n return this._packageProjectUrl ??= '';\n }\n\n /**\n * @returns The package icon path, relative to the root of the package.\n *\n * Default: `''`\n * @description You must pack the referenced icon image file. By default, it\n * is not packed.\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-an-icon-image-file Packing an icon image file},\n * {@link https://learn.microsoft.com/en-us/nuget/reference/nuspec#icon icon metadata}\n */\n get PackageIcon(): string {\n return this._packageIcon ??= '';\n }\n\n /**\n * @returns Release notes for the package.\n *\n * Default: `''`\n */\n get PackageReleaseNotes(): string {\n return this._packageReleaseNotes ??= '';\n }\n\n /**\n * @returns The path of the package's README file relative to the package's\n * root.\n *\n * Default: `''`\n * @description You must pack the referenced readme file. By default, it is\n * not packed.\n */\n get PackageReadmeFile(): string {\n return this._packageReadmeFile ??= '';\n }\n\n /**\n * @returns A semicolon-delimited list of tags that designates the package.\n *\n * Default : `''`\n */\n get PackageTags(): string {\n return this._packageTags ??= '';\n }\n\n /**\n * @returns A relative or absolute path determining the where the packed\n * package will be dropped.\n *\n * Default: {@link OutputPath}\n */\n get PackageOutputPath(): string {\n return this._packageOutputPath ??= this.OutputPath;\n }\n\n /**\n * @returns A string-formatted boolean indicating whether the package should\n * create an additional symbols package when the project is packed. The\n * symbols package's format is controlled by the `SymbolPackageFormat`\n * property.\n *\n * Default: `''` (false-y)\n * @description When using `dotnet msbuild my.csproj -restore -t:pack\n * -p:IncludeSymbols=true`, the corresponding .pdb files are copied along with\n * other output files (.dll, .exe, .winmd, .xml, .json, .pri). Note that\n * setting `IncludeSymbols=true` creates a regular package and a symbols\n * package.\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#includesymbols IncludeSymbols}\n */\n get IncludeSymbols(): EmptyOrBooleanString {\n return this._includeSymbols ??= '';\n }\n\n /**\n * @returns A string-formatted boolean indicating whether the pack process\n * should create a source package. The source package contains the library's\n * source code as well as PDB files. Source files are put under the\n * `src/ProjectName` directory in the resulting package file.\n *\n * Default: `''` (false-y)\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#includesource IncludeSource}\n */\n get IncludeSource(): EmptyOrBooleanString {\n return this._includeSource ??= '';\n }\n\n /**\n * @returns A semicolon-separated list of tags indicating the package's\n * intended use. Custom types are allowed, but cannot be installed via Visual\n * Studio nor nuget.exe. See https://github.com/NuGet/Home/issues/10468.\n *\n * Package types can be version e.g. `PackageType1, 1.0.0.0;PackageType2`\n *\n * Default: `''`\n * @example \"Dependency \", \"DotnetTool\", \"MSBuildSdk\", \"Template\"\n * @see {@link https://learn.microsoft.com/en-us/nuget/create-packages/set-package-type?tabs=dotnet Set a NuGet package type}\n */\n get PackageType(): string {\n return this._packageType ??= '';\n }\n\n /**\n * @returns A string-formatted boolean specifying whether all output files are\n * copied to the *tools* folder instead of the *lib* folder.\n *\n * Default: `''` (false-y)\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#istool IsTool}\n */\n get IsTool(): EmptyOrBooleanString {\n return this._isTool ??= '';\n }\n\n /**\n * @returns The repository URL used to clone or retrieve source code.\n *\n * Default: `''`\n * @example \"https://github.com/NuGet/NuGet.Client.git\".\n */\n get RepositoryUrl(): string {\n return this._repositoryUrl ??= '';\n }\n\n /**\n * @returns The repository type.\n *\n * Default: `''`\n * @example \"git\", \"fts\"\n */\n get RepositoryType(): typeof Type_RepoType.inferOut {\n return this._repositoryType ??= '';\n }\n\n /**\n * @returns The (optional) repository commit or changeset to indicate which\n * source the package was built against. {@link RepositoryUrl} must also be\n * specified for this property to be included.\n *\n * Default: `''`\n * @description This is evaluated only during the \"Pack\" and \"Publish\"\n * Targets. If using nuget.exe or Visual Studio, NuGet 4.7.0 or later is\n * required.\n * @example \"0e4d1b598f350b3dc675018d539114d1328189ef\"\n */\n get RepositoryCommit(): string {\n return this._repositoryCommit ??= '';\n }\n\n /**\n * @returns A string specifying the format of the symbols package. If\n * \"symbols.nupkg\", a legacy symbols package is created with a .symbols.nupkg\n * extension containing PDBs, DLLs, and other output files. If \"snupkg\", a\n * snupkg symbol package is created containing the portable PDBs. The default\n * is \"symbols.nupkg\".\n *\n * Default: \"symbols.nupkg\"\n * @example \"symbols.nupkg\", \"snupkg\"\n */\n get SymbolPackageFormat(): typeof Type_SymbolPackageFormat.inferOut {\n return this._symbolPackageFormat ??= 'symbols.nupkg';\n }\n\n /**\n * @returns A string-formatted boolean specifying that `pack` should not run\n * package analysis after building the package.\n *\n * Default: `''` (false-y)\n */\n get NoPackageAnalysis(): EmptyOrBooleanString {\n return this._noPackageAnalysis ??= '';\n }\n\n /**\n * @returns A string specifying the minimum version of the NuGet client that\n * can install this package, enforced by nuget.exe and the Visual Studio\n * Package Manager.\n *\n * Default: `''`\n */\n get MinClientVersion(): string {\n return this._minClientVersion ??= '';\n }\n\n /**\n * @returns A string-formatted boolean value specifying whether the build\n * output assemblies should be packed into the .nupkg file or not.\n *\n * Default: `\"true\"`\n */\n get IncludeBuildOutput(): BooleanString {\n return this._includeBuiltOutput ??= 'true';\n }\n\n /**\n * @returns A string-formatted boolean specifying whether any items that have\n * a type of Content are included in the resulting package automatically.\n *\n * Default: `\"true\"`\n */\n get IncludeContentInPack(): BooleanString {\n return this._includeContentInPack ??= 'true';\n }\n\n /**\n * @returns The output directory of the output assemblies relative to the root\n * of the package. The output assemblies (and other output files) are copied\n * into their respective framework folders.\n *\n * Default: `''`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#output-assemblies Output assemblies}\n */\n get BuildOutputTargetFolder(): string {\n return this._buildOutputTargetFolder ??= '';\n }\n\n /**\n * @returns A semicolon-separated list of default locations of where all the\n * content files should go if `PackagePath` is not specified for them.\n *\n * Default: `\"content;contentFiles\"`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#including-content-in-a-package Including content in a package}\n */\n get ContentTargetFolders(): string {\n return this._contentTargetFolders ??= 'content;contentFiles';\n }\n\n /**\n * @returns The relative or absolute path to the `*.nuspec` file being used\n * for packing. If specified, it's used **exclusively** for packaging\n * information, and any information in the projects is not used.\n *\n * Default: `''`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec-file Packing using a .nuspec}\n */\n get NuspecFile(): string {\n return this._nuspecFile ??= '';\n }\n\n /**\n * @returns The base path for the *.nuspec* file.\n *\n * Default: `''`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec-file Packing using a .nuspec}\n */\n get NuspecBasePath(): string {\n return this._nuspecBasePath ??= '';\n }\n\n /**\n * @returns A semicolon-separated list of key=value pairs.\n *\n * Default: `''`\n * @see\n * {@link https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec-file Packing using a .nuspec}\n */\n get NuspecProperties(): string {\n return this._nuspecProperties ??= '';\n }\n\n /**\n * @returns A human-friendly title of the package, typically used in UI displays as\n * on nuget.org and the Package Manager in Visual Studio.\n * Default: {@link PackageId}\n */\n get Title(): string {\n return this._title ??= this.PackageId;\n }\n\n /**\n * @returns Company name or information.\n *\n * Default: {@link Authors}\n */\n get Company(): string {\n return this._company ??= this.Authors;\n }\n\n /**\n * @returns Product name or information.\n *\n * Default: {@link AssemblyName}\n */\n get Product(): string {\n return this._product ??= this.AssemblyName;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class NPPGetterNames {\n private static _prototypeChain: PrototypeChainOfClass<Class_NPP> | undefined;\n\n private static _instanceGetters: Exclude<keyof NugetProjectProperties, keyof MSBuildProjectProperties>[] | undefined;\n private static _instanceGettersRecursive: (keyof NugetProjectProperties)[] | undefined;\n private static _StaticGetters: never[] | undefined;\n private static _StaticGettersRecursive: (keyof typeof NugetProjectProperties)[] | undefined;\n\n private static get PrototypeChain(): [Class_NPP, Class_MSBPP] {\n return this._prototypeChain ??= getPrototypesChainOf(NugetProjectProperties as Class_NPP, 'classes');\n }\n\n public static get InstanceGetters(): Exclude<keyof NugetProjectProperties, keyof MSBuildProjectProperties>[] {\n return this._instanceGetters ??= listOwnGetters(NugetProjectProperties as Class_NPP, 'Instance');\n }\n\n public static get InstanceGettersRecursive(): (keyof NugetProjectProperties)[] {\n return this._instanceGettersRecursive ??= this.PrototypeChain.flatMap(\n prototype => listOwnGetters<typeof prototype, 'Instance'>(prototype, 'Instance'),\n );\n }\n\n public static get StaticGetters(): never[] {\n return this._StaticGetters ??= listOwnGetters(NugetProjectProperties as Class_NPP, 'Static');\n };\n\n public static get StaticGettersRecursive(): ('prototype' | 'GetFullPath')[] {\n return this._StaticGettersRecursive ??= this.PrototypeChain.flatMap(\n prototype => listOwnGetters(prototype, 'Static'),\n );\n }\n}\n\nexport type Class_NPP = ClassLike<\n typeof NugetProjectProperties\n & WithPrototype<Class_MSBPP>\n>;\nconst Type_RepoType: type<'' | 'git' | 'tfs'> = type('\"\"|\"git\"|\"tfs\"');\nconst Type_SymbolPackageFormat: type<'symbols.nupkg' | 'snupkg'> = type('\"symbols.nupkg\" | \"snupkg\"');\n\n/** @module NugetProjectProperties */\n"],"mappings":"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"}