diff --git a/lib/init-action.js b/lib/init-action.js index 7e3eed4cd..507a76cc0 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -104279,9 +104279,22 @@ function getUnknownLanguagesError(languages) { // src/feature-flags/properties.ts var RepositoryPropertyName = /* @__PURE__ */ ((RepositoryPropertyName2) => { + RepositoryPropertyName2["DISABLE_OVERLAY"] = "github-codeql-disable-overlay"; RepositoryPropertyName2["EXTRA_QUERIES"] = "github-codeql-extra-queries"; return RepositoryPropertyName2; })(RepositoryPropertyName || {}); +function isKnownPropertyName(value) { + return Object.values(RepositoryPropertyName).includes( + value + ); +} +var mapRepositoryProperties = { + ["github-codeql-disable-overlay" /* DISABLE_OVERLAY */]: (value) => value === "true", + ["github-codeql-extra-queries" /* EXTRA_QUERIES */]: (value) => value +}; +function setProperty2(properties, name, value) { + properties[name] = mapRepositoryProperties[name](value); +} async function loadPropertiesFromApi(gitHubVersion, logger, repositoryNwo) { if (gitHubVersion.type === "GitHub Enterprise Server" /* GHES */) { return {}; @@ -104297,7 +104310,6 @@ async function loadPropertiesFromApi(gitHubVersion, logger, repositoryNwo) { logger.debug( `Retrieved ${remoteProperties.length} repository properties: ${remoteProperties.map((p) => p.property_name).join(", ")}` ); - const knownProperties = new Set(Object.values(RepositoryPropertyName)); const properties = {}; for (const property of remoteProperties) { if (property.property_name === void 0) { @@ -104305,8 +104317,8 @@ async function loadPropertiesFromApi(gitHubVersion, logger, repositoryNwo) { `Expected property object to have a 'property_name', but got: ${JSON.stringify(property)}` ); } - if (knownProperties.has(property.property_name)) { - properties[property.property_name] = property.value; + if (isKnownPropertyName(property.property_name)) { + setProperty2(properties, property.property_name, property.value); } } if (Object.keys(properties).length === 0) { diff --git a/src/feature-flags/properties.test.ts b/src/feature-flags/properties.test.ts index dd0c72a21..a7c425002 100644 --- a/src/feature-flags/properties.test.ts +++ b/src/feature-flags/properties.test.ts @@ -59,7 +59,7 @@ test("loadPropertiesFromApi returns empty object if on GHES", async (t) => { data: [ { property_name: "github-codeql-extra-queries", value: "+queries" }, { property_name: "unknown-property", value: "something" }, - ] satisfies properties.RepositoryProperty[], + ] satisfies properties.GitHubPropertiesResponse, }); const logger = getRunnerLogger(true); const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); @@ -82,7 +82,7 @@ test("loadPropertiesFromApi loads known properties", async (t) => { data: [ { property_name: "github-codeql-extra-queries", value: "+queries" }, { property_name: "unknown-property", value: "something" }, - ] satisfies properties.RepositoryProperty[], + ] satisfies properties.GitHubPropertiesResponse, }); const logger = getRunnerLogger(true); const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); diff --git a/src/feature-flags/properties.ts b/src/feature-flags/properties.ts index d0eb23370..70af80129 100644 --- a/src/feature-flags/properties.ts +++ b/src/feature-flags/properties.ts @@ -7,13 +7,42 @@ import { GitHubVariant, GitHubVersion } from "../util"; * Enumerates repository property names that have some meaning to us. */ export enum RepositoryPropertyName { + DISABLE_OVERLAY = "github-codeql-disable-overlay", EXTRA_QUERIES = "github-codeql-extra-queries", } +function isKnownPropertyName(value: string): value is RepositoryPropertyName { + return Object.values(RepositoryPropertyName).includes( + value as RepositoryPropertyName, + ); +} + +type AllRepositoryProperties = { + [RepositoryPropertyName.DISABLE_OVERLAY]: boolean; + [RepositoryPropertyName.EXTRA_QUERIES]: string; +}; + +export type RepositoryProperties = Partial; + +const mapRepositoryProperties: { + [K in RepositoryPropertyName]: (value: string) => AllRepositoryProperties[K]; +} = { + [RepositoryPropertyName.DISABLE_OVERLAY]: (value) => value === "true", + [RepositoryPropertyName.EXTRA_QUERIES]: (value) => value, +}; + +function setProperty( + properties: RepositoryProperties, + name: K, + value: string, +): void { + properties[name] = mapRepositoryProperties[name](value); +} + /** * A repository property has a name and a value. */ -export interface RepositoryProperty { +interface GitHubRepositoryProperty { property_name: string; value: string; } @@ -21,14 +50,7 @@ export interface RepositoryProperty { /** * The API returns a list of `RepositoryProperty` objects. */ -type GitHubPropertiesResponse = RepositoryProperty[]; - -/** - * A partial mapping from `RepositoryPropertyName` to values. - */ -export type RepositoryProperties = Partial< - Record ->; +export type GitHubPropertiesResponse = GitHubRepositoryProperty[]; /** * Retrieves all known repository properties from the API. @@ -62,7 +84,6 @@ export async function loadPropertiesFromApi( `Retrieved ${remoteProperties.length} repository properties: ${remoteProperties.map((p) => p.property_name).join(", ")}`, ); - const knownProperties = new Set(Object.values(RepositoryPropertyName)); const properties: RepositoryProperties = {}; for (const property of remoteProperties) { if (property.property_name === undefined) { @@ -71,10 +92,8 @@ export async function loadPropertiesFromApi( ); } - if ( - knownProperties.has(property.property_name as RepositoryPropertyName) - ) { - properties[property.property_name] = property.value; + if (isKnownPropertyName(property.property_name)) { + setProperty(properties, property.property_name, property.value); } }