How to use Mongo schema validation using typescript in a meteor?

Is there a package for using schema validation in Meteor 1.3 when using Typescript. The recommended package from the Meteor manual (aldeed: simple-schema) does not seem to have a definition file.

So what to use instead, or maybe Typescript has a built-in way to do this?

+4
source share
1 answer

The best package for Meteor 1.3 and Typescript is aldeed: node-simple-schema .

From the docs:

History of SimpleSchema

SimpleSchema Meteor 2013 . 1.0 2014 . 2016 2.0 NPM, Meteor, NodeJS, .

npm install simple-schema NPM simpleschema . , . "e" "".

, Typescript :

import SimpleSchema from 'simpl-schema';

. , "", - https://github.com/meteor-typescript/meteor-typescript-libs/tree/master/definitions.
collection2 simple-schema, . , 2. , / .. , Meteor Git. , , .

declare module "simpl-schema" {

export class ValidationContext {
    constructor(ss: any);
    addValidationErrors(errors: any): void;
    clean(...args: any[]): any;
    getErrorForKey(key: any, ...args: any[]): any;
    isValid(): any;
    keyErrorMessage(key: any, ...args: any[]): any;
    keyIsInvalid(key: any, ...args: any[]): any;
    reset(): void;
    setValidationErrors(errors: any): void;
    validate(obj: any, ...args: any[]): any;
    validationErrors(): any;
}

interface SchemaDefinition {
    type: any;
    label?: string | Function;
    optional?: boolean | Function;
    min?: number | boolean | Date | Function;
    max?: number | boolean | Date | Function;
    minCount?: number | Function;
    maxCount?: number | Function;
    allowedValues?: any[] | Function;
    decimal?: boolean;
    exclusiveMax?: boolean;
    exclusiveMin?: boolean;
    regEx?: RegExp | RegExp[];
    custom?: Function;
    blackbox?: boolean;
    autoValue?: Function;
    defaultValue?: any;
    trim?: boolean;
}

interface CleanOption {
  filter?: boolean;
  autoConvert?: boolean;
  removeEmptyStrings?: boolean;
  trimStrings?: boolean;
  getAutoValues?: boolean;
  isModifier?: boolean;
  extendAutoValueContext?: boolean;
}

interface SimpleSchemaStatic {
  new(schema: {[key: string]: SchemaDefinition} | any[]): SimpleSchemaStatic;
  debug: boolean;
  namedContext(name?: string): SimpleSchemaValidationContextStatic;
  addValidator(validator: Function): any;
  pick(...fields: string[]): SimpleSchemaStatic;
  omit(...fields: string[]): SimpleSchemaStatic;
  clean(doc: any, options?: CleanOption): any;
  schema(key?: string): SchemaDefinition | SchemaDefinition[];
  getDefinition(key: string, propList?: any, functionContext?: any): any;
  keyIsInBlackBox(key: string): boolean;
  labels(labels: {[key: string]: string}): void;
  label(key: any): any;
  Integer: RegExp;
  messages(messages: any): void;
  messageForError(type: any, key: any, def: any, value: any): string;
  allowsKey(key: any): string;
  newContext(): SimpleSchemaValidationContextStatic;
  objectKeys(keyPrefix: any): any[];
  validate(obj: any, options?: ValidationOption): void;
  validator(options: ValidationOption): Function;
  RegEx: {
      Email: RegExp;
      EmailWithTLD: RegExp;
      Domain: RegExp;
      WeakDomain: RegExp;
      IP: RegExp;
      IPv4: RegExp;
      IPv6: RegExp;
      Url: RegExp;
      Id: RegExp;
      ZipCode: RegExp;
      Phone: RegExp;
  };
}

interface ValidationOption {
    modifier?: boolean;
    upsert?: boolean;
    clean?: boolean;
    filter?: boolean;
    upsertextendedCustomContext?: boolean;
}

interface SimpleSchemaValidationContextStatic {
    validate(obj: any, options?: ValidationOption): boolean;
    validateOne(doc: any, keyName: string, options?: ValidationOption): boolean;
    resetValidation(): void;
    isValid(): boolean;
    invalidKeys(): { name: string; type: string; value?: any; }[];
    addInvalidKeys(errors: { name: string, type: string; }[]): void;
    keyIsInvalid(name: any): boolean;
    keyErrorMessage(name: any): string;
    getErrorObject(): any;
}

interface MongoObjectStatic {
    forEachNode(func: Function, options?: {endPointsOnly: boolean;}): void;
    getValueForPosition(position: string): any;
    setValueForPosition(position: string, value: any): void;
    removeValueForPosition(position: string): void;
    getKeyForPosition(position: string): any;
    getGenericKeyForPosition(position: string): any;
    getInfoForKey(key: string): any;
    getPositionForKey(key: string): string;
    getPositionsForGenericKey(key: string): string[];
    getValueForKey(key: string): any;
    addKey(key: string, val: any, op: string): any;
    removeGenericKeys(keys: string[]): void;
    removeGenericKey(key: string): void;
    removeKey(key: string): void;
    removeKeys(keys: string[]): void;
    filterGenericKeys(test: Function): void;
    setValueForKey(key: string, val: any): void;
    setValueForGenericKey(key: string, val: any): void;
    getObject(): any;
    getFlatObject(options?: {keepArrays?: boolean}): any;
    affectsKey(key: string): any;
    affectsGenericKey(key: string): any;
    affectsGenericKeyImplicit(key: string): any;
}

export const SimpleSchema: SimpleSchemaStatic;
export const SimpleSchemaValidationContext: SimpleSchemaValidationContextStatic;
export const MongoObject: MongoObjectStatic;

export interface SimpleSchema {
  debug: boolean;
  addValidator(validator: Function): any;
  extendOptions(options: {[key: string]: any}): void;
  messages(messages: any): void;
  RegEx: {
      Email: RegExp;
      Domain: RegExp;
      WeakDomain: RegExp;
      IP: RegExp;
      IPv4: RegExp;
      IPv6: RegExp;
      Url: RegExp;
      Id: RegExp;
      ZipCode: RegExp;
      Phone: RegExp;
  };
}

export interface MongoObject {
  expandKey(val: any, key: string, obj: any): void;
}

export default SimpleSchema;
}

4/23/2017.

, validated-method, :

declare module "meteor/mdg:validated-method" {
    declare class ValidatedMethod<T> extends MeteorValidatedMethod.ValidatedMethod<T> { }

    declare module MeteorValidatedMethod {
        export class ValidatedMethod<T> {
            constructor(options: ValidatedMethodOptions<T>);
            call(options?: T, cb?: (err, res)=> void): void;
        }

        interface ValidatedMethodOptions<T> {
            name: string;
            mixins?: Function[];
            validate: any;
            applyOptions: any;
            run(opts: T);
        }
    }
}

, Meteor, , :

aldeed:collection2-core       2.0.0  Core package for aldeed:collection2
aldeed:schema-deny            2.0.0  Deny inserting or updating certain properties through schema options
aldeed:schema-index           2.0.0  Control some MongoDB indexing with schema options
mdg:validated-method          1.1.0  A simple wrapper for Meteor.methods
mdg:validation-error          0.5.1  A standard validation error to be used by form/method/validation packages
+3

All Articles