Move predicates into a separate property

This commit is contained in:
Koen Vlaswinkel
2023-10-27 11:29:29 +02:00
parent 14c6f98289
commit b9fa79a76e
5 changed files with 135 additions and 129 deletions

View File

@@ -156,7 +156,7 @@ async function runSingleFlowQuery(
// Interpret the results
const modelsAsDataLanguage = getModelsAsDataLanguage(language);
const definition = modelsAsDataLanguage[type];
const definition = modelsAsDataLanguage.predicates[type];
const bqrsPath = completedQuery.outputDir.bqrsPath;

View File

@@ -6,14 +6,18 @@ type ReadModeledMethod = (row: DataTuple[]) => ModeledMethod;
export type ModelsAsDataLanguageModelType = Exclude<ModeledMethodType, "none">;
export type ModelsAsDataLanguageModel = {
export type ModelsAsDataLanguagePredicate = {
extensiblePredicate: string;
supportedKinds: string[];
generateMethodDefinition: GenerateMethodDefinition;
readModeledMethod: ReadModeledMethod;
};
export type ModelsAsDataLanguage = Record<
export type ModelsAsDataLanguagePredicates = Record<
ModelsAsDataLanguageModelType,
ModelsAsDataLanguageModel
ModelsAsDataLanguagePredicate
>;
export type ModelsAsDataLanguage = {
predicates: ModelsAsDataLanguagePredicates;
};

View File

@@ -8,125 +8,127 @@ function readRowToMethod(row: DataTuple[]): string {
}
export const staticLanguage: ModelsAsDataLanguage = {
source: {
extensiblePredicate: sharedExtensiblePredicates.source,
supportedKinds: sharedKinds.source,
// extensible predicate sourceModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string output, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.output,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "source" as ModeledMethodType,
input: "",
output: row[6] as string,
kind: row[7] as string,
provenance: row[8] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
sink: {
extensiblePredicate: sharedExtensiblePredicates.sink,
supportedKinds: sharedKinds.sink,
// extensible predicate sinkModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string input, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.input,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "sink",
input: row[6] as string,
output: "",
kind: row[7] as string,
provenance: row[8] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
summary: {
extensiblePredicate: sharedExtensiblePredicates.summary,
supportedKinds: sharedKinds.summary,
// extensible predicate summaryModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string input, string output, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.input,
method.output,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "summary",
input: row[6] as string,
output: row[7] as string,
kind: row[8] as string,
provenance: row[9] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
neutral: {
extensiblePredicate: sharedExtensiblePredicates.neutral,
supportedKinds: sharedKinds.neutral,
// extensible predicate neutralModel(
// string package, string type, string name, string signature, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
method.methodName,
method.methodParameters,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "neutral",
input: "",
output: "",
kind: row[4] as string,
provenance: row[5] as Provenance,
signature: `${row[0]}.${row[1]}#${row[2]}${row[3]}`,
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[2] as string,
methodParameters: row[3] as string,
}),
predicates: {
source: {
extensiblePredicate: sharedExtensiblePredicates.source,
supportedKinds: sharedKinds.source,
// extensible predicate sourceModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string output, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.output,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "source" as ModeledMethodType,
input: "",
output: row[6] as string,
kind: row[7] as string,
provenance: row[8] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
sink: {
extensiblePredicate: sharedExtensiblePredicates.sink,
supportedKinds: sharedKinds.sink,
// extensible predicate sinkModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string input, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.input,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "sink",
input: row[6] as string,
output: "",
kind: row[7] as string,
provenance: row[8] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
summary: {
extensiblePredicate: sharedExtensiblePredicates.summary,
supportedKinds: sharedKinds.summary,
// extensible predicate summaryModel(
// string package, string type, boolean subtypes, string name, string signature, string ext,
// string input, string output, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
true,
method.methodName,
method.methodParameters,
"",
method.input,
method.output,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "summary",
input: row[6] as string,
output: row[7] as string,
kind: row[8] as string,
provenance: row[9] as Provenance,
signature: readRowToMethod(row),
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[3] as string,
methodParameters: row[4] as string,
}),
},
neutral: {
extensiblePredicate: sharedExtensiblePredicates.neutral,
supportedKinds: sharedKinds.neutral,
// extensible predicate neutralModel(
// string package, string type, string name, string signature, string kind, string provenance
// );
generateMethodDefinition: (method) => [
method.packageName,
method.typeName,
method.methodName,
method.methodParameters,
method.kind,
method.provenance,
],
readModeledMethod: (row) => ({
type: "neutral",
input: "",
output: "",
kind: row[4] as string,
provenance: row[5] as Provenance,
signature: `${row[0]}.${row[1]}#${row[2]}${row[3]}`,
packageName: row[0] as string,
typeName: row[1] as string,
methodName: row[2] as string,
methodParameters: row[3] as string,
}),
},
},
};

View File

@@ -4,7 +4,7 @@ import { Method } from "./method";
import { ModeledMethod, ModeledMethodType } from "./modeled-method";
import {
getModelsAsDataLanguage,
ModelsAsDataLanguageModel,
ModelsAsDataLanguagePredicate,
} from "./languages";
import * as modelExtensionFileSchema from "./model-extension-file.schema.json";
@@ -18,7 +18,7 @@ const modelExtensionFileSchemaValidate = ajv.compile(modelExtensionFileSchema);
function createDataProperty(
methods: readonly ModeledMethod[],
definition: ModelsAsDataLanguageModel,
definition: ModelsAsDataLanguagePredicate,
) {
if (methods.length === 0) {
return " []";
@@ -56,7 +56,7 @@ export function createDataExtensionYaml(
}
}
const extensions = Object.entries(modelsAsDataLanguage).map(
const extensions = Object.entries(modelsAsDataLanguage.predicates).map(
([type, definition]) => ` - addsTo:
pack: codeql/${language}-all
extensible: ${definition.extensiblePredicate}
@@ -260,7 +260,7 @@ export function loadDataExtensionYaml(
const extensible = addsTo.extensible;
const data = extension.data;
const definition = Object.values(modelsAsDataLanguage).find(
const definition = Object.values(modelsAsDataLanguage.predicates).find(
(definition) => definition.extensiblePredicate === extensible,
);
if (!definition) {

View File

@@ -26,7 +26,7 @@ export const ModelKindDropdown = ({
const modelsAsDataLanguage = getModelsAsDataLanguage(language);
return modeledMethod?.type && modeledMethod.type !== "none"
? modelsAsDataLanguage[modeledMethod.type]
? modelsAsDataLanguage.predicates[modeledMethod.type]
: undefined;
}, [language, modeledMethod?.type]);