private _getParameters()

in libs/logic-apps-shared/src/parsers/lib/swagger/parameterprocessor.ts [107:209]


  private _getParameters(parameter: Parameter, keyProjectionOption: KeyProjectionOptions = {}): InputParameter[] {
    const { in: location, schema, required } = parameter;
    let type = parameter.type;
    switch (location) {
      case Constants.ParameterLocations.Body: {
        type = parameter.schema.type;

        switch (type) {
          case Constants.Types.Array: {
            const processor = new SchemaProcessor({
              prefix: parameter.name ? encodePropertySegment(parameter.name) : undefined,
              isInputSchema: true,
              expandArrayOutputs: !!this.options.expandArray,
              expandArrayOutputsDepth: this.options.expandArrayDepth,
              keyPrefix: create(this._getMergedKeySegments(location, keyProjectionOption)),
              excludeAdvanced: this.options.excludeAdvanced,
              excludeInternal: this.options.excludeInternal,
              includeParentObject: this.options.includeParentObject,
              parentProperty: {
                visibility: parameter[Constants.ExtensionProperties.Visibility],
              },
              required,
              isNested: false,
            });

            const inputs = processor.getSchemaProperties(schema);
            return inputs.map((item) => ({ ...toInputParameter(item), in: location }));
          }

          case Constants.Types.Boolean:
          case Constants.Types.Integer:
          case Constants.Types.Null:
          case Constants.Types.Number:
          case Constants.Types.String:
            return [this._getParameterFromSchema(parameter, keyProjectionOption)];

          case Constants.Types.Object: {
            const hasDynamicSchema = schema[Constants.ExtensionProperties.DynamicSchema];
            let parameters: InputParameter[] = [];
            if (Object.keys(schema.properties || {}).length || hasDynamicSchema) {
              const processor = new SchemaProcessor({
                prefix: hasDynamicSchema ? encodePropertySegment(parameter.name) : undefined,
                keyPrefix: create(this._getMergedKeySegments(location, keyProjectionOption)),
                isInputSchema: true,
                expandArrayOutputs: !!this.options.expandArray,
                expandArrayOutputsDepth: this.options.expandArrayDepth,
                required: parameter.required,
                excludeAdvanced: this.options.excludeAdvanced,
                excludeInternal: this.options.excludeInternal,
                includeParentObject: this.options.includeParentObject,
              });
              const schemaProperties = processor.getSchemaProperties(schema);

              parameters = schemaProperties.map((schemaProperty) => ({ ...toInputParameter(schemaProperty), in: location }));
            }

            return parameters.length ? parameters : [this._getParameterFromSchema(parameter, keyProjectionOption)];
          }

          default:
            return [{ ...this._getParameterFromSchema(parameter, keyProjectionOption), type: Constants.Types.Any }];
        }
      }

      case Constants.ParameterLocations.FormData:
        switch (type) {
          case Constants.Types.Boolean:
          case Constants.Types.Integer:
          case Constants.Types.Number:
          case Constants.Types.String:
            return [
              this._getScalarParameter(
                parameter,
                create(this._getMergedKeySegments(location, keyProjectionOption, parameter.name)),
                keyProjectionOption
              ),
            ];

          case Constants.Types.File:
            return this._getFileParameters(parameter, keyProjectionOption);
          default:
            return [];
        }
      case Constants.ParameterLocations.Header:
      case Constants.ParameterLocations.Path:
      case Constants.ParameterLocations.Query:
        switch (type) {
          case Constants.Types.Array:
          case Constants.Types.Boolean:
          case Constants.Types.File:
          case Constants.Types.Integer:
          case Constants.Types.Number:
          case Constants.Types.String:
            return [this._getScalarParameter(parameter, /* key */ undefined, keyProjectionOption)];

          default:
            return [];
        }

      default:
        return [];
    }
  }