@compas/code-gen
Advanced tools
Comparing version 0.15.4 to 0.15.5
{ | ||
"name": "@compas/code-gen", | ||
"version": "0.15.4", | ||
"version": "0.15.5", | ||
"description": "Generate various boring parts of your server", | ||
@@ -22,3 +22,3 @@ "exports": { | ||
"dependencies": { | ||
"@compas/stdlib": "0.15.4" | ||
"@compas/stdlib": "0.15.5" | ||
}, | ||
@@ -25,0 +25,0 @@ "author": { |
@@ -32,2 +32,6 @@ import { fileBlockEnd, fileBlockStart } from "../file/block.js"; | ||
typeImportCollector: new JavascriptImportCollector(true), | ||
contents: | ||
generateContext.options.generators.router ? | ||
`// @ts-nocheck\n\n` | ||
: undefined, | ||
}, | ||
@@ -77,3 +81,58 @@ ); | ||
); | ||
if (generateContext.options.generators.router) { | ||
importCollector.destructure("@compas/stdlib", "AppError"); | ||
importCollector.destructure("@compas/stdlib", "streamToBuffer"); | ||
fileWrite( | ||
file, | ||
`/** | ||
* Adds an interceptor to the provided Axios instance, wrapping any error in an AppError. | ||
* This allows directly testing against an error key or property. | ||
*/ | ||
export function axiosInterceptErrorAndWrapWithAppError(axiosInstance: AxiosInstance) { | ||
axiosInstance.interceptors.response.use(undefined, async (error) => { | ||
// Validator error | ||
if (AppError.instanceOf(error)) { | ||
// If it is an AppError already, it most likely is thrown by the response | ||
// validators. So we rethrow it as is. | ||
throw error; | ||
} | ||
if (typeof error?.response?.data?.pipe === "function") { | ||
const buffer = await streamToBuffer(error.response.data); | ||
try { | ||
error.response.data = JSON.parse(buffer.toString("utf-8")); | ||
} catch { | ||
// Unknown error | ||
throw new AppError( | ||
\`response.error\`, | ||
error.response?.status ?? 500, | ||
{ | ||
message: | ||
"Could not decode the response body for further information.", | ||
}, | ||
error, | ||
); | ||
} | ||
} | ||
// Server AppError | ||
const { key, info } = error.response?.data ?? {}; | ||
if (typeof key === "string" && !!info && typeof info === "object") { | ||
throw new AppError(key, error.response.status, info, error); | ||
} | ||
// Unknown error | ||
throw new AppError( | ||
\`response.error\`, | ||
error.response?.status ?? 500, | ||
AppError.format(error), | ||
); | ||
}); | ||
} | ||
`, | ||
); | ||
} | ||
} | ||
@@ -80,0 +139,0 @@ /** |
@@ -33,6 +33,2 @@ import { isNil } from "@compas/stdlib"; | ||
export function crudEventsGenerate(generateContext) { | ||
if (generateContext.options.targetLanguage !== "js") { | ||
return; | ||
} | ||
if (isNil(generateContext.options.generators.router?.target?.library)) { | ||
@@ -100,5 +96,10 @@ return; | ||
function crudEventsFile(generateContext, crud) { | ||
return fileContextCreateGeneric(generateContext, `${crud.group}/events.js`, { | ||
importCollector: new JavascriptImportCollector(), | ||
}); | ||
return fileContextCreateGeneric( | ||
generateContext, | ||
`${crud.group}/events.${generateContext.options.targetLanguage}`, | ||
{ | ||
importCollector: new JavascriptImportCollector(), | ||
contents: "// @ts-nocheck\n\n", | ||
}, | ||
); | ||
} | ||
@@ -105,0 +106,0 @@ |
@@ -39,6 +39,2 @@ import { isNil } from "@compas/stdlib"; | ||
export function crudHandlersGenerate(generateContext) { | ||
if (generateContext.options.targetLanguage !== "js") { | ||
return; | ||
} | ||
if (isNil(generateContext.options.generators.router?.target?.library)) { | ||
@@ -64,5 +60,10 @@ return; | ||
function crudHandlersFile(generateContext, crud) { | ||
return fileContextCreateGeneric(generateContext, `${crud.group}/crud.js`, { | ||
importCollector: new JavascriptImportCollector(), | ||
}); | ||
return fileContextCreateGeneric( | ||
generateContext, | ||
`${crud.group}/crud.${generateContext.options.targetLanguage}`, | ||
{ | ||
importCollector: new JavascriptImportCollector(), | ||
contents: "// @ts-nocheck\n\n", | ||
}, | ||
); | ||
} | ||
@@ -69,0 +70,0 @@ |
@@ -41,3 +41,3 @@ import { isNil } from "@compas/stdlib"; | ||
generateContext, | ||
"common/database.js", | ||
"common/database.ts", | ||
{ | ||
@@ -58,2 +58,3 @@ importCollector: new JavascriptImportCollector(), | ||
helperImportCollector.destructure("@compas/stdlib", "AppError"); | ||
helperTypeImportCollector.destructure("@compas/store", "Postgres"); | ||
helperTypeImportCollector.destructure("@compas/store", "QueryPart"); | ||
@@ -1177,3 +1178,3 @@ helperTypeImportCollector.destructure("@compas/store", "WrappedQueryPart"); | ||
file, | ||
`export function query${upperCaseFirst(model.name)}<QueryBuilder extends ${contextNames.queryBuilderType.inputType}>(input: QueryBuilder = {}): WrappedQueryResult<${fullTypeName}QueryResolver<QueryBuilder>>`, | ||
`export function query${upperCaseFirst(model.name)}<QueryBuilder extends ${contextNames.queryBuilderType.inputType}>(input?: QueryBuilder): WrappedQueryResult<${fullTypeName}QueryResolver<QueryBuilder>>`, | ||
); | ||
@@ -1184,3 +1185,3 @@ | ||
file, | ||
`const { error, value: validatedInput } = ${contextNames.queryBuilderType.validatorFunction}(input);`, | ||
`const { error, value: validatedInput } = ${contextNames.queryBuilderType.validatorFunction}(input ?? {});`, | ||
); | ||
@@ -1205,3 +1206,3 @@ fileBlockStart(file, `if (error)`); | ||
Object.keys(model.keys).length | ||
}, });`, | ||
}, }) as unknown as WrappedQueryResult<${fullTypeName}QueryResolver<QueryBuilder>>;`, | ||
); | ||
@@ -1208,0 +1209,0 @@ |
@@ -1392,1 +1392,3 @@ // Generated by @compas/code-gen | ||
|StructureRouteInvalidationDefinitionInput; | ||
@@ -41,6 +41,6 @@ import { AnyType } from "../builders/index.js"; | ||
validatorExpression: `isQueryPart($value$)`, | ||
validatorInputType: `(QueryPart)`, | ||
validatorOutputType: `(QueryPart)`, | ||
validatorInputType: `(import("@compas/store").QueryPart)`, | ||
validatorOutputType: `(import("@compas/store").QueryPart)`, | ||
}, | ||
}); | ||
} |
1446130
43044
+ Added@compas/stdlib@0.15.5(transitive)
- Removed@compas/stdlib@0.15.4(transitive)
Updated@compas/stdlib@0.15.5