function isWhereModelDirective()

in powershell/plugins/modifiers-v2.ts [253:307]


function isWhereModelDirective(it: any): it is WhereModelDirective {
  const directive = it;
  const where = directive.where;
  const set = directive.set;


  if (where && set && (where['model-name'] || where['model-fullname'] || where['model-namespace'] || where['property-name'] || directive.select === 'model')) {
    const prohibitedFilters = ['enum-name', 'enum-value-name', 'subject', 'subject-prefix', 'verb', 'variant', 'parameter-name'];
    let error = getFilterError(where, prohibitedFilters, 'enum');
    const prohibitedSetters = ['enum-name', 'enum-value-name', 'subject', 'subject-prefix', 'verb', 'variant', 'parameter-name', 'parameter-description', 'command-description', 'completer', 'default'];
    error += getSetError(set, prohibitedSetters, 'enum');
    const modelSelectNameConflict = [];
    let modelSelectNameType = '';
    if (where['model-name']) {
      modelSelectNameType = 'model-name';
      if (where['model-fullname']) {
        modelSelectNameConflict.push('model-fullname');
      }

      if (where['model-namespace']) {
        modelSelectNameConflict.push('model-namespace');
      }
    } else if (where['model-fullname']) {
      modelSelectNameType = 'model-fullname';
      if (where['model-name']) {
        modelSelectNameConflict.push('model-name');
      }

      if (where['model-namespace']) {
        modelSelectNameConflict.push('model-namespace');
      }
    } else if (where['model-namespace']) {
      modelSelectNameType = 'model-namespace';
      if (where['model-fullname']) {
        modelSelectNameConflict.push('model-fullname');
      }

      if (where['model-name']) {
        modelSelectNameConflict.push('model-name');
      }
    }

    if (length(modelSelectNameConflict) > 0) {
      error += `Can't select ${modelSelectNameType} and ${modelSelectNameConflict} at the same time`;
    }

    if (error) {
      throw Error(`Incorrect Directive: ${JSON.stringify(it, null, 2)}.Reason: ${error}.`);
    }

    return true;

  }
  return false;
}