@compas/code-gen
Version:
Generate various boring parts of your server
127 lines (126 loc) • 4.4 kB
TypeScript
/**
* @typedef {{ type: "root"}
* |{ type: "stringKey", key: string}
* |{ type: "dynamicKey", key: string }
* } ValidatorPath
*/
/**
* @typedef {object} ValidatorState
* @property {import("../generate").GenerateContext} generateContext
* @property {string} inputVariableName
* @property {string} outputVariableName
* @property {string} errorMapVariableName
* @property {string} inputTypeName
* @property {string} outputTypeName
* @property {import("../types/generator").GenerateTypeOptions} outputTypeOptions
* @property {number} reusedVariableIndex
* @property {ValidatorPath[]} validatedValuePath
* @property {import("../generated/common/types")
* .ExperimentalReferenceDefinition[]
* } 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").GenerateContext} generateContext
*/
export function validatorGeneratorGenerateBaseTypes(
generateContext: import("../generate").GenerateContext,
): void;
/**
* Provides the validator function name and adds the import to the provided file for the
* type.
*
* @param {import("../generate").GenerateContext} generateContext
* @param {import("../file/context").GenerateFile} file
* @param {import("../types").NamedType<
* import("../generated/common/types").ExperimentalTypeSystemDefinition
* >} type
* @param {string} outputTypeName
* @returns {string}
*/
export function validatorGetNameAndImport(
generateContext: import("../generate").GenerateContext,
file: import("../file/context").GenerateFile,
type: import("../types").NamedType<
import("../generated/common/types").ExperimentalTypeSystemDefinition
>,
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").GenerateContext} generateContext
* @param {import("../types").NamedType<
* import("../generated/common/types").ExperimentalTypeSystemDefinition
* >} type
* @param {import("../types/generator").GenerateTypeOptions & {
* preferInputBaseName?: boolean;
* }} outputTypeOptions
*/
export function validatorGeneratorGenerateValidator(
generateContext: import("../generate").GenerateContext,
type: import("../types").NamedType<
import("../generated/common/types").ExperimentalTypeSystemDefinition
>,
outputTypeOptions: import("../types/generator").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").GenerateContext} generateContext
* @param {import("../file/context").GenerateFile} file
* @param {import("../types").NamedType<import("../generated/common/types").ExperimentalTypeSystemDefinition>} type
* @param {ValidatorState} validatorState
*/
export function validatorGeneratorGenerateBody(
generateContext: import("../generate").GenerateContext,
file: import("../file/context").GenerateFile,
type: import("../types").NamedType<
import("../generated/common/types").ExperimentalTypeSystemDefinition
>,
validatorState: ValidatorState,
): void;
export type ValidatorPath =
| {
type: "root";
}
| {
type: "stringKey";
key: string;
}
| {
type: "dynamicKey";
key: string;
};
export type ValidatorState = {
generateContext: import("../generate").GenerateContext;
inputVariableName: string;
outputVariableName: string;
errorMapVariableName: string;
inputTypeName: string;
outputTypeName: string;
outputTypeOptions: import("../types/generator").GenerateTypeOptions;
reusedVariableIndex: number;
validatedValuePath: ValidatorPath[];
dependingValidators: import("../generated/common/types").ExperimentalReferenceDefinition[];
jsHasInlineTypes?: boolean | undefined;
skipFirstNilCheck?: boolean | undefined;
};
//# sourceMappingURL=generator.d.ts.map