Remove the ModeledExternalApiUsage type in favour of just ModeledMethod

This commit is contained in:
Robert
2023-07-13 16:46:11 +01:00
parent 16f98491e7
commit 97a331cf6a
2 changed files with 25 additions and 111 deletions

View File

@@ -14,28 +14,19 @@ import { sanitizeExtensionPackName } from "./extension-pack-name";
const ajv = new Ajv({ allErrors: true });
const dataSchemaValidate = ajv.compile(dataSchemaJson);
type ModeledExternalApiUsage = {
externalApiUsage: ExternalApiUsage;
modeledMethod?: ModeledMethod;
};
function createDataProperty(
methods: ModeledExternalApiUsage[],
methods: ModeledMethod[],
definition: ExtensiblePredicateDefinition,
) {
if (methods.length === 0) {
return " []";
}
const modeledMethods = methods.filter(
(method) => method.modeledMethod !== undefined,
);
return `\n${modeledMethods
return `\n${methods
.map(
(method) =>
` - ${JSON.stringify(
definition.generateMethodDefinition(method.modeledMethod!),
definition.generateMethodDefinition(method),
)}`,
)
.join("\n")}`;
@@ -43,11 +34,11 @@ function createDataProperty(
export function createDataExtensionYaml(
language: string,
modeledUsages: ModeledExternalApiUsage[],
modeledMethods: ModeledMethod[],
) {
const methodsByType: Record<
Exclude<ModeledMethodType, "none">,
ModeledExternalApiUsage[]
ModeledMethod[]
> = {
source: [],
sink: [],
@@ -55,11 +46,9 @@ export function createDataExtensionYaml(
neutral: [],
};
for (const modeledUsage of modeledUsages) {
const { modeledMethod } = modeledUsage;
for (const modeledMethod of modeledMethods) {
if (modeledMethod?.type && modeledMethod.type !== "none") {
methodsByType[modeledMethod.type].push(modeledUsage);
methodsByType[modeledMethod.type].push(modeledMethod);
}
}
@@ -83,32 +72,24 @@ export function createDataExtensionYamlsForApplicationMode(
externalApiUsages: ExternalApiUsage[],
modeledMethods: Record<string, ModeledMethod>,
): Record<string, string> {
const methodsByLibraryFilename: Record<string, ModeledExternalApiUsage[]> =
{};
const methodsByLibraryFilename: Record<string, ModeledMethod[]> = {};
for (const externalApiUsage of externalApiUsages) {
const modeledMethod = modeledMethods[externalApiUsage.signature];
if (!modeledMethod) {
continue;
}
const filename = createFilenameForLibrary(externalApiUsage.library);
methodsByLibraryFilename[filename] =
methodsByLibraryFilename[filename] || [];
methodsByLibraryFilename[filename].push({
externalApiUsage,
modeledMethod,
});
methodsByLibraryFilename[filename].push(modeledMethod);
}
const result: Record<string, string> = {};
for (const [filename, methods] of Object.entries(methodsByLibraryFilename)) {
const hasModeledMethods = methods.some(
(method) => method.modeledMethod !== undefined,
);
if (!hasModeledMethods) {
continue;
}
result[filename] = createDataExtensionYaml(language, methods);
}
@@ -129,10 +110,9 @@ export function createDataExtensionYamlsForFrameworkMode(
.map((part) => sanitizeExtensionPackName(part))
.join("-");
const methods = externalApiUsages.map((externalApiUsage) => ({
externalApiUsage,
modeledMethod: modeledMethods[externalApiUsage.signature],
}));
const methods = externalApiUsages
.map((externalApiUsage) => modeledMethods[externalApiUsage.signature])
.filter((modeledMethod) => modeledMethod !== undefined);
return {
[`${prefix}${libraryName}${suffix}.yml`]: createDataExtensionYaml(

View File

@@ -10,82 +10,16 @@ describe("createDataExtensionYaml", () => {
it("creates the correct YAML file", () => {
const yaml = createDataExtensionYaml("java", [
{
externalApiUsage: {
library: "sql2o-1.6.0.jar",
signature: "org.sql2o.Connection#createQuery(String)",
packageName: "org.sql2o",
typeName: "Connection",
methodName: "createQuery",
methodParameters: "(String)",
supported: true,
usages: [
{
label: "createQuery(...)",
url: {
uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java",
startLine: 15,
startColumn: 13,
endLine: 15,
endColumn: 56,
},
},
{
label: "createQuery(...)",
url: {
uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java",
startLine: 26,
startColumn: 13,
endLine: 26,
endColumn: 39,
},
},
],
},
modeledMethod: {
type: "sink",
input: "Argument[0]",
output: "",
kind: "sql",
provenance: "df-generated",
signature: "org.sql2o.Connection#createQuery(String)",
packageName: "org.sql2o",
typeName: "Connection",
methodName: "createQuery",
methodParameters: "(String)",
},
},
{
externalApiUsage: {
library: "sql2o-1.6.0.jar",
signature: "org.sql2o.Query#executeScalar(Class)",
packageName: "org.sql2o",
typeName: "Query",
methodName: "executeScalar",
methodParameters: "(Class)",
supported: true,
usages: [
{
label: "executeScalar(...)",
url: {
uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java",
startLine: 15,
startColumn: 13,
endLine: 15,
endColumn: 85,
},
},
{
label: "executeScalar(...)",
url: {
uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java",
startLine: 26,
startColumn: 13,
endLine: 26,
endColumn: 68,
},
},
],
},
type: "sink",
input: "Argument[0]",
output: "",
kind: "sql",
provenance: "df-generated",
signature: "org.sql2o.Connection#createQuery(String)",
packageName: "org.sql2o",
typeName: "Connection",
methodName: "createQuery",
methodParameters: "(String)",
},
]);