Example #1
0
  constructor(options: Options, attribute: string, config: Partial<ObjectConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        keyType: string('string').notEmpty(),
        nullable: bool(),
        optional: bool(),
        type: string('object').notEmpty(),
        valueType: this.createUnionType(),
      },
      {
        name: 'ObjectDefinition',
        unknown: true,
      },
    );

    this.keyType = DefinitionFactory.factory(this.options, `${this.attribute}_key`, {
      nullable: false,
      optional: false,
      type: this.config.keyType,
    } as StringConfig);

    this.valueType = DefinitionFactory.factory(
      this.options,
      `${this.attribute}_value`,
      this.config.valueType,
    );
  }
Example #2
0
  constructor(options: Options, attribute: string, config: Partial<PolymorphConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        export: bool(true),
        keySuffix: string('_id').notEmpty(),
        nullable: bool(),
        optional: bool(),
        type: string('polymorph').notEmpty(),
        typeSuffix: string('_type').notEmpty(),
        valueTypes: array(this.createUnionType())
          .notEmpty()
          .required(),
      },
      {
        name: 'PolymorphDefinition',
        unknown: true,
      },
    );

    this.valueTypes = this.config.valueTypes.map((type, i) => {
      const valueConfig = toConfig(type);

      return DefinitionFactory.factory(this.options, `${this.attribute}_${i}`, {
        ...valueConfig,
        nullable: false,
      });
    });
  }
Example #3
0
  /**
   * Validate the definition configuration.
   */
  validateConfig() {
    const { name } = this.constructor;

    this.config = optimal(
      this.config,
      {
        nullable: bool(),
        optional: bool(),
        type: string(
          normalizeType(name.replace('Definition', '').toLowerCase() || 'unknown'),
        ).notEmpty(),
      },
      {
        name: name || 'Definition',
        unknown: true,
      },
    ) as any;
  }
Example #4
0
  constructor(options: Options, attribute: string, config: Partial<InstanceConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        contract: string()
          .required()
          .notEmpty(),
        nullable: bool(),
        optional: bool(),
        type: string('instance').notEmpty(),
      },
      {
        name: 'InstanceDefinition',
        unknown: true,
      },
    );
  }
Example #5
0
  constructor(options: Options, attribute: string, config: Partial<ArrayConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        nullable: bool(),
        optional: bool(),
        type: string('array').notEmpty(),
        valueType: this.createUnionType(),
      },
      {
        name: 'ArrayDefinition',
        unknown: true,
      },
    );

    this.valueType = DefinitionFactory.factory(this.options, this.attribute, this.config.valueType);
  }
Example #6
0
 constructor(options: Options) {
   this.options = optimal(options, {
     defaultNullable: bool(),
     defaultOptional: bool(),
     disableEslint: bool(),
     enums: bool(true),
     importPath: string('shapeshifter').notEmpty(),
     includeAttributes: bool(),
     includeDefinitions: bool(),
     includeSchemas: bool(),
     indentCharacter: string('  ').notEmpty(),
     inferPropTypesShape: bool(),
     renderers: array(string<RendererType>()).notEmpty(),
     schemaGenerics: bool(),
     stripPropTypes: bool(),
     suffix: bool(true),
     useDefine: bool(),
   });
 }
Example #7
0
  constructor(options: Options, attribute: string, config: Partial<ReferenceConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        export: bool(true),
        nullable: bool(),
        optional: bool(),
        reference: string().xor('self'),
        relation: string(),
        self: bool().xor('reference'),
        subset: string(),
        type: string('reference'),
      },
      {
        name: 'ReferenceDefinition',
        unknown: true,
      },
    );
  }
Example #8
0
  constructor(options: Options, attribute: string, config: Partial<EnumConfig> = {}) {
    super(options, attribute, config, false);

    this.config = optimal(
      this.config,
      {
        constant: bool(),
        nullable: bool(),
        optional: bool(),
        type: string('enum').notEmpty(),
        valueType: this.createUnionType(),
        // `valueType` must be validated before values
        values: array(custom(this.validateValue, ''))
          .notEmpty()
          .required(),
      },
      {
        name: 'EnumDefinition',
        unknown: true,
      },
    );
  }