private _addParameterInSchema()

in libs/logic-apps-shared/src/designer-client-services/lib/base/appService.ts [134:215]


  private _addParameterInSchema(finalSchema: any, parameter: any) {
    const schemaProperties = finalSchema.properties;
    const { in: $in, name, required, schema } = parameter;
    switch ($in) {
      case 'header':
      case 'query': {
        const property = $in === 'header' ? 'headers' : 'queries';
        this._setScalarParameterInSchema(finalSchema, property, parameter);
        break;
      }
      case 'path': {
        const pathProperty = 'pathParameters';
        if (!finalSchema.properties[pathProperty]) {
          // eslint-disable-next-line no-param-reassign
          finalSchema.properties[pathProperty] = { type: 'object', properties: {}, required: [] };
          finalSchema.required.push(pathProperty);
        }

        schemaProperties[pathProperty].properties[name] = {
          'x-ms-url-encoding': 'single',
          ...parameter,
          'x-ms-deserialization': { type: 'pathtemplateproperties', parameterReference: 'inputs.operationDetails.uri' },
        };
        if (required) {
          schemaProperties[pathProperty].required.push(name);
        }
        break;
      }
      case 'formData': {
        const formDataParameter = {
          ...parameter,
          'x-ms-serialization': { property: { type: 'formdata', parameterReference: `formData.$.${name}` } },
        };
        if (parameter.type === 'file') {
          if (!includes(name, '"') && !includes(name, '@')) {
            const intl = getIntl();
            const properties: Record<string, any> = {
              $content: {
                ...parameter,
                type: undefined,
                'x-ms-summary': intl.formatMessage(
                  { defaultMessage: '{fileContent} (content)', id: 'Rj/V1x', description: 'Title for file name parameter' },
                  { fileContent: parameter['x-ms-summary'] ?? name }
                ),
                'x-ms-serialization': { property: { type: 'formdata', parameterReference: `formData.$.${name}.$content` } },
                name: undefined,
              },
            };
            if (parameter.format !== 'contentonly') {
              properties['$filename'] = {
                ...parameter,
                type: 'string',
                'x-ms-summary': intl.formatMessage(
                  { defaultMessage: '{fileName} (file name)', id: 'UYRIS/', description: 'Title for file name parameter' },
                  { fileName: parameter['x-ms-summary'] ?? name }
                ),
                'x-ms-serialization': { property: { type: 'formdata', parameterReference: `formData.$.${name}.$filename` } },
                name: undefined,
              };
            }

            this._setScalarParameterInSchema(finalSchema, $in, {
              ...formDataParameter,
              type: 'object',
              properties,
              required: required ? ['$content'] : [],
            });
          }

          break;
        }

        this._setScalarParameterInSchema(finalSchema, $in, formDataParameter);
        break;
      }
      default: {
        // eslint-disable-next-line no-param-reassign
        finalSchema.properties[$in] = schema;
        break;
      }
    }
  }