Skip to content

⬅️ Back to Table of Contents

📄 generateObjectType.ts

📊 Analysis Summary

Metric Count
🔧 Functions 1
📦 Imports 8
📊 Variables & Constants 4

📚 Table of Contents

🛠️ File Location:

📂 packages/rule-schema-to-typescript-types/src/generateObjectType.ts

📦 Imports

Name Source
JSONSchema4ObjectSchema @typescript-eslint/utils/json-schema
requiresQuoting @typescript-eslint/type-utils
TSUtils @typescript-eslint/utils
AST ./types
ObjectAST ./types
RefMap ./types
generateType ./generateType
getCommentLines ./getCommentLines

Variables & Constants

Name Type Kind Value Exported
indexSignature AST | null let/var null
properties ObjectAST['properties'] const []
required Set<unknown> const `new Set(
TSUtils.isArray(schema.required) ? schema.required : [],
)`
sanitisedPropName string const `requiresQuoting(propName)
? '${propName}'
: propName`

Functions

generateObjectType(schema: JSONSchema4ObjectSchema, refMap: RefMap): ObjectAST

Code
export function generateObjectType(
  schema: JSONSchema4ObjectSchema,
  refMap: RefMap,
): ObjectAST {
  const commentLines = getCommentLines(schema);

  let indexSignature: AST | null = null;
  if (
    schema.additionalProperties === true ||
    // eslint-disable-next-line @typescript-eslint/internal/eqeq-nullish
    schema.additionalProperties === undefined
  ) {
    indexSignature = {
      commentLines: [],
      type: 'type-reference',
      typeName: 'unknown',
    };
  } else if (typeof schema.additionalProperties === 'object') {
    const indexSigType = generateType(schema.additionalProperties, refMap);
    indexSignature = indexSigType;
  }

  const properties: ObjectAST['properties'] = [];
  const required = new Set(
    TSUtils.isArray(schema.required) ? schema.required : [],
  );
  if (schema.properties) {
    const propertyDefs = Object.entries(schema.properties);
    for (const [propName, propSchema] of propertyDefs) {
      const propType = generateType(propSchema, refMap);
      const sanitisedPropName = requiresQuoting(propName)
        ? `'${propName}'`
        : propName;
      properties.push({
        name: sanitisedPropName,
        optional: !required.has(propName),
        type: propType,
      });
    }
  }

  return {
    commentLines,
    indexSignature,
    properties,
    type: 'object',
  };
}
  • Parameters:
  • schema: JSONSchema4ObjectSchema
  • refMap: RefMap
  • Return Type: ObjectAST
  • Calls:
  • getCommentLines (from ./getCommentLines)
  • generateType (from ./generateType)
  • TSUtils.isArray
  • Object.entries
  • requiresQuoting (from @typescript-eslint/type-utils)
  • properties.push
  • required.has
  • Internal Comments:
    // eslint-disable-next-line @typescript-eslint/internal/eqeq-nullish (x3)