@compas/code-gen
Version:
Generate various boring parts of your server
99 lines (98 loc) • 4.51 kB
TypeScript
/**
* @typedef {{ type: "root"}
* |{ type: "stringKey", key: string}
* |{ type: "dynamicKey", key: string }
* } ValidatorPath
*/
/**
* @typedef {object} ValidatorState
* @property {import("../generate.js").GenerateContext} generateContext
* @property {string} inputVariableName
* @property {string} outputVariableName
* @property {string} errorMapVariableName
* @property {string} inputTypeName
* @property {string} outputTypeName
* @property {import("../types/generator.js").GenerateTypeOptions} outputTypeOptions
* @property {number} reusedVariableIndex
* @property {Array<ValidatorPath>} validatedValuePath
* @property {Array<import("../generated/common/types.js").StructureReferenceDefinition>} dependingValidators
* @property {boolean} [jsHasInlineTypes]
* @property {boolean} [skipFirstNilCheck]
*/
/**
* Generate all the 'validated' types in the provided structure. This means that, for
* example, `defaults` are resolved, and things like `T.date()` are always in the
* language native `Date` type.
*
* We skip `route` ad `crud` since these are not directly usable as types.
*
* @param {import("../generate.js").GenerateContext} generateContext
*/
export function validatorGeneratorGenerateBaseTypes(generateContext: import("../generate.js").GenerateContext): void;
/**
* Provides the validator function name and adds the import to the provided file for the
* type.
*
* @param {import("../generate.js").GenerateContext} generateContext
* @param {import("../file/context.js").GenerateFile} file
* @param {import("../../types/advanced-types.d.ts").NamedType<
* import("../generated/common/types.d.ts").StructureTypeSystemDefinition
* >} type
* @param {string} outputTypeName
* @returns {string}
*/
export function validatorGetNameAndImport(generateContext: import("../generate.js").GenerateContext, file: import("../file/context.js").GenerateFile, type: import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureTypeSystemDefinition>, outputTypeName: string): string;
/**
* Generate a named type for the target language. Skips if the cache already has a name
* registered for the provided type and options.
*
* TODO: Expand docs
*
* - How to use the types
* - Duplication
* - Resolved & unique names
*
* @param {import("../generate.js").GenerateContext} generateContext
* @param {import("../../types/advanced-types.d.ts").NamedType<
* import("../generated/common/types.d.ts").StructureTypeSystemDefinition
* >} type
* @param {import("../types/generator.js").GenerateTypeOptions & {
* preferInputBaseName?: boolean;
* }} outputTypeOptions
*/
export function validatorGeneratorGenerateValidator(generateContext: import("../generate.js").GenerateContext, type: import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureTypeSystemDefinition>, outputTypeOptions: import("../types/generator.js").GenerateTypeOptions & {
preferInputBaseName?: boolean;
}): void;
/**
* Generate the body of a validator. This function should be called and work for
* recursive types as well.
*
* @param {import("../generate.js").GenerateContext} generateContext
* @param {import("../file/context.js").GenerateFile} file
* @param {import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureTypeSystemDefinition>} type
* @param {ValidatorState} validatorState
*/
export function validatorGeneratorGenerateBody(generateContext: import("../generate.js").GenerateContext, file: import("../file/context.js").GenerateFile, type: import("../../types/advanced-types.d.ts").NamedType<import("../generated/common/types.d.ts").StructureTypeSystemDefinition>, validatorState: ValidatorState): void;
export type ValidatorPath = {
type: "root";
} | {
type: "stringKey";
key: string;
} | {
type: "dynamicKey";
key: string;
};
export type ValidatorState = {
generateContext: import("../generate.js").GenerateContext;
inputVariableName: string;
outputVariableName: string;
errorMapVariableName: string;
inputTypeName: string;
outputTypeName: string;
outputTypeOptions: import("../types/generator.js").GenerateTypeOptions;
reusedVariableIndex: number;
validatedValuePath: Array<ValidatorPath>;
dependingValidators: Array<import("../generated/common/types.js").StructureReferenceDefinition>;
jsHasInlineTypes?: boolean | undefined;
skipFirstNilCheck?: boolean | undefined;
};