1858 extensibility create relation metadata decorator in thwenty sdkapplications (#15907)

as title

First PR 
I will update the twenty-cli in another PR
This commit is contained in:
martmull
2025-11-20 10:22:42 +01:00
committed by GitHub
parent 89d166ece6
commit 3190ca5b9e
74 changed files with 162 additions and 118 deletions
@@ -413,7 +413,7 @@ export const format = async (params: any): Promise<any> => {
});
it('manifest should contains typescript sources', async () => {
const { isTwentyClientUsed } = await loadManifest(appDirectory);
expect(isTwentyClientUsed).toBe(false);
const { shouldGenerate } = await loadManifest(appDirectory);
expect(shouldGenerate).toBe(false);
});
});
+7 -23
View File
@@ -31,7 +31,6 @@ import {
isTemplateExpression,
isVariableStatement,
isImportDeclaration,
NamedImports,
} from 'typescript';
import {
AppManifest,
@@ -448,7 +447,7 @@ export const extractTwentyAppConfig = (program: Program): Application => {
throw new Error('Could not find default exported ApplicationConfig');
};
const isTwentyClientUsedInProgram = (program: Program): boolean => {
const isGeneratedModuleUsedInProgram = (program: Program): boolean => {
for (const sf of program.getSourceFiles()) {
if (sf.isDeclarationFile) continue;
@@ -468,24 +467,9 @@ const isTwentyClientUsedInProgram = (program: Program): boolean => {
moduleText === GENERATED_FOLDER_NAME ||
moduleText.endsWith(`/${GENERATED_FOLDER_NAME}`);
if (
isGeneratedModule &&
node.importClause &&
node.importClause.namedBindings &&
node.importClause.namedBindings.kind === SyntaxKind.NamedImports
) {
const namedImports = node.importClause
.namedBindings as NamedImports;
for (const element of namedImports.elements) {
const importedName =
element.propertyName?.text ?? element.name.text;
if (importedName === 'createClient') {
found = true;
return;
}
}
if (isGeneratedModule && node.importClause) {
found = true;
return;
}
}
}
@@ -507,7 +491,7 @@ export const loadManifest = async (
packageJson: PackageJson;
yarnLock: string;
manifest: AppManifest;
isTwentyClientUsed: boolean;
shouldGenerate: boolean;
}> => {
const packageJson = await parseJsoncFile(
await findPathFile(appPath, 'package.json'),
@@ -532,7 +516,7 @@ export const loadManifest = async (
await loadFolderContentIntoJson(program, appPath),
];
const isTwentyClientUsed = isTwentyClientUsedInProgram(program);
const shouldGenerate = isGeneratedModuleUsedInProgram(program);
return {
packageJson,
@@ -543,6 +527,6 @@ export const loadManifest = async (
serverlessFunctions,
sources,
},
isTwentyClientUsed,
shouldGenerate,
};
};