Skip to content

Commit 8c36e57

Browse files
committed
Create model filenames for framework mode
1 parent 2351346 commit 8c36e57

File tree

3 files changed

+52
-8
lines changed

3 files changed

+52
-8
lines changed

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ import { decodeBqrsToExternalApiUsages } from "./bqrs";
3636
import { redactableError } from "../common/errors";
3737
import { readQueryResults, runQuery } from "./external-api-usage-query";
3838
import {
39-
createDataExtensionYamlsPerLibrary,
39+
createDataExtensionYamlsForApplicationMode,
40+
createDataExtensionYamlsForFrameworkMode,
4041
createFilenameForLibrary,
4142
loadDataExtensionYaml,
4243
} from "./yaml";
@@ -197,11 +198,26 @@ export class DataExtensionsEditorView extends AbstractWebview<
197198
externalApiUsages: ExternalApiUsage[],
198199
modeledMethods: Record<string, ModeledMethod>,
199200
): Promise<void> {
200-
const yamls = createDataExtensionYamlsPerLibrary(
201-
this.databaseItem.language,
202-
externalApiUsages,
203-
modeledMethods,
204-
);
201+
let yamls: Record<string, string>;
202+
switch (this.mode) {
203+
case Mode.Application:
204+
yamls = createDataExtensionYamlsForApplicationMode(
205+
this.databaseItem.language,
206+
externalApiUsages,
207+
modeledMethods,
208+
);
209+
break;
210+
case Mode.Framework:
211+
yamls = createDataExtensionYamlsForFrameworkMode(
212+
this.databaseItem.name,
213+
this.databaseItem.language,
214+
externalApiUsages,
215+
modeledMethods,
216+
);
217+
break;
218+
default:
219+
assertNever(this.mode);
220+
}
205221

206222
for (const [filename, yaml] of Object.entries(yamls)) {
207223
await outputFile(join(this.extensionPack.path, filename), yaml);

extensions/ql-vscode/src/data-extensions-editor/extension-pack-name.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function autoNameExtensionPack(
3737
};
3838
}
3939

40-
function sanitizeExtensionPackName(name: string) {
40+
export function sanitizeExtensionPackName(name: string) {
4141
// Lowercase everything
4242
name = name.toLowerCase();
4343

extensions/ql-vscode/src/data-extensions-editor/yaml.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
} from "./predicates";
1111

1212
import * as dataSchemaJson from "./data-schema.json";
13+
import { sanitizeExtensionPackName } from "./extension-pack-name";
1314

1415
const ajv = new Ajv({ allErrors: true });
1516
const dataSchemaValidate = ajv.compile(dataSchemaJson);
@@ -79,7 +80,7 @@ export function createDataExtensionYaml(
7980
${extensions.join("\n")}`;
8081
}
8182

82-
export function createDataExtensionYamlsPerLibrary(
83+
export function createDataExtensionYamlsForApplicationMode(
8384
language: string,
8485
externalApiUsages: ExternalApiUsage[],
8586
modeledMethods: Record<string, ModeledMethod>,
@@ -116,6 +117,33 @@ export function createDataExtensionYamlsPerLibrary(
116117
return result;
117118
}
118119

120+
export function createDataExtensionYamlsForFrameworkMode(
121+
databaseName: string,
122+
language: string,
123+
externalApiUsages: ExternalApiUsage[],
124+
modeledMethods: Record<string, ModeledMethod>,
125+
prefix = "models/",
126+
suffix = ".model",
127+
): Record<string, string> {
128+
const parts = databaseName.split("/");
129+
const libraryName = parts
130+
.slice(1)
131+
.map((part) => sanitizeExtensionPackName(part))
132+
.join("-");
133+
134+
const methods = externalApiUsages.map((externalApiUsage) => ({
135+
externalApiUsage,
136+
modeledMethod: modeledMethods[externalApiUsage.signature],
137+
}));
138+
139+
return {
140+
[`${prefix}${libraryName}${suffix}.yml`]: createDataExtensionYaml(
141+
language,
142+
methods,
143+
),
144+
};
145+
}
146+
119147
// From the semver package using
120148
// const { re, t } = require("semver/internal/re");
121149
// console.log(re[t.LOOSE]);

0 commit comments

Comments
 (0)