Comparing version 1.0.0 to 2.0.0
@@ -35,3 +35,3 @@ "use strict"; | ||
else { | ||
return { success: false, errors }; | ||
return { errors }; | ||
} | ||
@@ -38,0 +38,0 @@ } |
@@ -37,4 +37,3 @@ "use strict"; | ||
const expectedError = { | ||
success: false, | ||
errors: [rule_1.emptyFail], | ||
errors: [Object.assign({}, rule_1.emptyFail)], | ||
}; | ||
@@ -41,0 +40,0 @@ chai_1.expect(field.validate(rule_1.emptyData)).to.deep.equal(expectedError); |
@@ -5,4 +5,6 @@ "use strict"; | ||
require("mocha"); | ||
const __1 = require(".."); | ||
const StringRule_1 = require("../rule/StringRule"); | ||
const field_1 = require("../test_helpers/field"); | ||
const utils_1 = require("../utils"); | ||
const StringField_1 = require("./StringField"); | ||
@@ -12,8 +14,16 @@ describe('StringField', () => { | ||
it('will pass', () => { | ||
const testString = 'will fail'; | ||
const rule = __1.createValidationRule().string().maxLength(5); | ||
const rule2 = __1.createValidationRule().string().blacklist(['will']); | ||
const rule3 = __1.createValidationRule().string().upperCase(); | ||
const field = new StringField_1.StringField() | ||
.addRule((r) => r.maxLength(5)) | ||
.addRule((r) => r.blacklist(['will'])) | ||
.addRule((r) => r.upperCase()) | ||
.validate('will fail'); | ||
chai_1.expect(field.errors).to.have.length(3); | ||
.addRule(rule) | ||
.addRule(rule2) | ||
.addRule(rule3); | ||
const validation = field.validate(testString); | ||
chai_1.expect(utils_1.isError(validation)).to.be; | ||
// @ts-ignore | ||
chai_1.expect(validation.errors).to.be.an.instanceof(Array); | ||
// @ts-ignore | ||
chai_1.expect(validation.errors).to.have.lengthOf(3); | ||
}); | ||
@@ -20,0 +30,0 @@ it('should return a new string rule type', () => { |
export { createValidationField } from './field/FieldFactory'; | ||
export { createValidationRule } from './rule/RuleFactory'; | ||
export { createValidationSchema } from './schema/Schema'; | ||
export { isSuccess, isError } from './utils'; |
@@ -9,2 +9,5 @@ "use strict"; | ||
exports.createValidationSchema = Schema_1.createValidationSchema; | ||
var utils_1 = require("./utils"); | ||
exports.isSuccess = utils_1.isSuccess; | ||
exports.isError = utils_1.isError; | ||
//# sourceMappingURL=index.js.map |
@@ -16,3 +16,2 @@ "use strict"; | ||
const expectedError = { | ||
success: false, | ||
title: 'not true', | ||
@@ -32,3 +31,2 @@ description: 'must be true', | ||
const expectedError = { | ||
success: false, | ||
title: 'not false', | ||
@@ -35,0 +33,0 @@ description: 'must be false', |
@@ -12,3 +12,2 @@ "use strict"; | ||
const expectedError = { | ||
success: false, | ||
title: 'less than minimum', | ||
@@ -32,3 +31,2 @@ description: 'must be greater than the minimum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'less than minimum', | ||
@@ -52,3 +50,2 @@ description: 'must be greater than the minimum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'less than or equal to minimum', | ||
@@ -62,3 +59,2 @@ description: 'must be greater than the open minimum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'less than or equal to minimum', | ||
@@ -78,3 +74,2 @@ description: 'must be greater than the open minimum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'greater than maximum', | ||
@@ -98,3 +93,2 @@ description: 'must be less than the maximum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'greater than maximum', | ||
@@ -116,3 +110,2 @@ description: 'must be less than the maximum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'greater than or equal to maximum', | ||
@@ -136,3 +129,2 @@ description: 'must be less than the open maximum value of 5', | ||
const expectedError = { | ||
success: false, | ||
title: 'outside closed interval', | ||
@@ -164,3 +156,2 @@ description: 'outside of the closed interval of [2,4]', | ||
const expectedError = { | ||
success: false, | ||
title: 'outside open interval', | ||
@@ -167,0 +158,0 @@ description: 'outside of the open interval of (2,4)', |
@@ -27,3 +27,2 @@ "use strict"; | ||
return { | ||
success: false, | ||
title: `${fieldName}${this.internalTitle || validationRuleResult.title}`, | ||
@@ -30,0 +29,0 @@ description: `${fieldName}${this.internalDescription || validationRuleResult.description}`, |
@@ -93,3 +93,2 @@ "use strict"; | ||
const expectedError = { | ||
success: false, | ||
title: 'username will fail', | ||
@@ -96,0 +95,0 @@ description: 'username will fail, description', |
@@ -33,3 +33,2 @@ "use strict"; | ||
return { | ||
success: false, | ||
title: `type must be ${this.opts.initialTypeTestType}`, | ||
@@ -60,3 +59,2 @@ description: `must have type '${this.opts.initialTypeTestType}' but was really of type '${typeof data}'`, | ||
return { | ||
success: false, | ||
title, | ||
@@ -63,0 +61,0 @@ description, |
@@ -25,3 +25,3 @@ "use strict"; | ||
}; | ||
const expectedError = Object.assign({ success: false }, defaultError); | ||
const expectedError = Object.assign({}, defaultError); | ||
testRunner.addTest({ | ||
@@ -45,3 +45,2 @@ test: rule_1.falsyTest, | ||
const expectedError = { | ||
success: false, | ||
title: `${defaultError1.title}, ${defaultError2.title}`, | ||
@@ -67,3 +66,2 @@ description: `${defaultError1.description}, ${defaultError2.description}`, | ||
const expectedError = { | ||
success: false, | ||
title: `${defaultError1.title}; ${defaultError2.title}`, | ||
@@ -93,3 +91,2 @@ description: `${defaultError1.description}; ${defaultError2.description}`, | ||
const expectedError = { | ||
success: false, | ||
title: `${defaultError1.title}, ${defaultError3.title}`, | ||
@@ -96,0 +93,0 @@ description: `${defaultError1.description}, ${defaultError3.description}`, |
@@ -10,3 +10,2 @@ "use strict"; | ||
const getExpectedError = (type) => ({ | ||
success: false, | ||
title: `type must be string`, | ||
@@ -60,3 +59,2 @@ description: `must have type 'string' but was really of type '${type}'`, | ||
const expectedError = { | ||
success: false, | ||
title: 'too short', | ||
@@ -80,3 +78,2 @@ description: 'must be at least 4 characters long', | ||
const expectedError = { | ||
success: false, | ||
title: 'too long', | ||
@@ -100,3 +97,2 @@ description: 'must not be longer than 4 characters long', | ||
const expectedError = { | ||
success: false, | ||
title: 'failed blacklist', | ||
@@ -120,3 +116,2 @@ description: 'must not contain one of the blacklisted phrases \'hello\', \'world\'', | ||
const expectedError = { | ||
success: false, | ||
title: 'contains lowercase', | ||
@@ -140,3 +135,2 @@ description: 'must not contain lowercase characters', | ||
const expectedError = { | ||
success: false, | ||
title: 'contains uppercase', | ||
@@ -160,3 +154,2 @@ description: 'must not contain uppercase characters', | ||
const expectedError = { | ||
success: false, | ||
title: 'not alphanumeric', | ||
@@ -182,3 +175,2 @@ description: 'must only contain letters and numbers', | ||
const expectedError = { | ||
success: false, | ||
title: 'failed regex', | ||
@@ -185,0 +177,0 @@ description: 'failed the regular expression \'/blablabla/\'', |
import { Field } from '../field/Field'; | ||
import { FieldFactory } from '../field/FieldFactory'; | ||
import { Rule } from '../rule/Rule'; | ||
import { Validation } from '../types/Validation'; | ||
export interface SchemaOptions { | ||
@@ -13,14 +14,4 @@ } | ||
addField<T, F extends Field<T, Rule<T>>>(fieldName: string, field: F): this; | ||
run(obj: any): { | ||
success: boolean; | ||
errors?: undefined; | ||
} | { | ||
success: boolean; | ||
errors: { | ||
title: string; | ||
description: string; | ||
fieldName: string; | ||
}[]; | ||
}; | ||
run(obj: any): Validation; | ||
} | ||
export declare function createValidationSchema(opts?: SchemaOptions): Schema; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const FieldFactory_1 = require("../field/FieldFactory"); | ||
const utils_1 = require("../utils"); | ||
exports.defaultSchemaOptions = {}; | ||
@@ -23,7 +24,11 @@ class Schema { | ||
run(obj) { | ||
function objHasResultPropAsFailure(o) { | ||
return utils_1.isError(o.testResult); | ||
} | ||
const errors = Array | ||
.from(this.fields) | ||
.map(([fieldName, field]) => ({ fieldName, result: field.validate(obj[fieldName]) })) | ||
.filter(({ result }) => !result.success) | ||
.map(({ fieldName, result }) => result.errors.map(({ title, description }) => ({ | ||
.map(([fieldName, field]) => ({ fieldName, testResult: field.validate(obj[fieldName]) })) | ||
// .filter(({ result }) => !isSuccess(result)) | ||
.filter(objHasResultPropAsFailure) | ||
.map(({ fieldName, testResult }) => testResult.errors.map(({ title, description }) => ({ | ||
title, | ||
@@ -34,8 +39,3 @@ description, | ||
.reduce((t, e) => t.concat(e), []); | ||
if (errors.length === 0) { | ||
return { success: true }; | ||
} | ||
else { | ||
return { success: false, errors }; | ||
} | ||
return errors.length === 0 ? { success: true } : { errors }; | ||
} | ||
@@ -42,0 +42,0 @@ } |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.emptyFail = { | ||
success: false, | ||
title: '', | ||
@@ -6,0 +5,0 @@ description: '', |
import { ValidationRuleError } from './ValidationRule'; | ||
export interface Validation { | ||
success: boolean; | ||
errors?: ValidationRuleError[]; | ||
export declare type Validation = ValidationSuccess | ValidationError; | ||
export interface ValidationSuccess { | ||
success: true; | ||
} | ||
export interface ValidationError { | ||
errors: ValidationRuleError[]; | ||
} |
export declare type ValidationRuleResult = ValidationRuleError | ValidationRuleSuccess; | ||
export interface ValidationRuleError extends DefaultValidationRuleError { | ||
success: false; | ||
fieldName?: string; | ||
} | ||
@@ -5,0 +5,0 @@ export interface DefaultValidationRuleError { |
@@ -50,4 +50,3 @@ import { expect } from 'chai'; | ||
const expectedError: Validation = { | ||
success: false, | ||
errors: [emptyFail], | ||
errors: [{ ...emptyFail }], | ||
}; | ||
@@ -54,0 +53,0 @@ |
import { Rule } from '../rule/Rule'; | ||
import { Validation } from '../types/Validation'; | ||
import { ValidationRuleError, ValidationRuleResult } from '../types/ValidationRule'; | ||
import { ValidationRuleError, ValidationRuleResult, ValidationRuleSuccess } from '../types/ValidationRule'; | ||
@@ -49,3 +49,3 @@ export interface FieldOptions { | ||
} else { | ||
return { success: false, errors }; | ||
return { errors }; | ||
} | ||
@@ -60,3 +60,3 @@ } | ||
function ruleIsError(r: ValidationRuleResult): r is ValidationRuleError { | ||
return !r.success; | ||
return !(r as ValidationRuleSuccess).success; | ||
} |
import { expect } from 'chai'; | ||
import 'mocha'; | ||
import { createValidationRule } from '..'; | ||
import { StringRule } from '../rule/StringRule'; | ||
import { extractRule } from '../test_helpers/field'; | ||
import { Validation, ValidationError } from '../types/Validation'; | ||
import { isError } from '../utils'; | ||
import { StringField } from './StringField'; | ||
@@ -10,9 +13,17 @@ | ||
it('will pass', () => { | ||
const field: any = new StringField() | ||
.addRule((r) => r.maxLength(5)) | ||
.addRule((r) => r.blacklist(['will'])) | ||
.addRule((r) => r.upperCase()) | ||
.validate('will fail'); | ||
const testString: string = 'will fail'; | ||
const rule: StringRule = createValidationRule().string().maxLength(5); | ||
const rule2: StringRule = createValidationRule().string().blacklist(['will']); | ||
const rule3: StringRule = createValidationRule().string().upperCase(); | ||
const field: StringField = new StringField() | ||
.addRule(rule) | ||
.addRule(rule2) | ||
.addRule(rule3); | ||
expect(field.errors).to.have.length(3); | ||
const validation: ValidationError = field.validate(testString) as ValidationError; | ||
expect(isError(validation)).to.be; | ||
// @ts-ignore | ||
expect(validation.errors).to.be.an.instanceof(Array); | ||
// @ts-ignore | ||
expect(validation.errors).to.have.lengthOf(3); | ||
}); | ||
@@ -23,3 +34,3 @@ | ||
const r: {rule?: any} = {}; | ||
const r: { rule?: any } = {}; | ||
@@ -26,0 +37,0 @@ // @ts-ignore |
export { createValidationField } from './field/FieldFactory'; | ||
export { createValidationRule } from './rule/RuleFactory'; | ||
export { createValidationSchema } from './schema/Schema'; | ||
export { isSuccess, isError } from './utils'; |
@@ -19,3 +19,2 @@ import { expect } from 'chai'; | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'not true', | ||
@@ -40,3 +39,2 @@ description: 'must be true', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'not false', | ||
@@ -43,0 +41,0 @@ description: 'must be false', |
@@ -13,3 +13,2 @@ import { expect } from 'chai'; | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'less than minimum', | ||
@@ -40,3 +39,2 @@ description: 'must be greater than the minimum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'less than minimum', | ||
@@ -67,3 +65,2 @@ description: 'must be greater than the minimum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'less than or equal to minimum', | ||
@@ -80,3 +77,2 @@ description: 'must be greater than the open minimum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'less than or equal to minimum', | ||
@@ -101,3 +97,2 @@ description: 'must be greater than the open minimum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'greater than maximum', | ||
@@ -128,3 +123,2 @@ description: 'must be less than the maximum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'greater than maximum', | ||
@@ -152,3 +146,2 @@ description: 'must be less than the maximum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'greater than or equal to maximum', | ||
@@ -179,3 +172,2 @@ description: 'must be less than the open maximum value of 5', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'outside closed interval', | ||
@@ -218,3 +210,2 @@ description: 'outside of the closed interval of [2,4]', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'outside open interval', | ||
@@ -221,0 +212,0 @@ description: 'outside of the open interval of (2,4)', |
@@ -122,3 +122,2 @@ import { expect } from 'chai'; | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'username will fail', | ||
@@ -125,0 +124,0 @@ description: 'username will fail, description', |
@@ -5,3 +5,3 @@ import { | ||
ValidationRuleError, | ||
ValidationRuleResult, | ||
ValidationRuleResult, ValidationRuleSuccess, | ||
} from '../types/ValidationRule'; | ||
@@ -46,6 +46,4 @@ import { RuleTestRunner, RuleTestRunnerOptions } from './RuleTestRunner'; | ||
const fieldName = this.getFieldNameOrEmpty(); | ||
if (this.resultIsError(validationRuleResult)) { | ||
return { | ||
success: false, | ||
title: `${fieldName}${this.internalTitle || validationRuleResult.title}`, | ||
@@ -69,4 +67,4 @@ description: `${fieldName}${this.internalDescription || validationRuleResult.description}`, | ||
private resultIsError(r: ValidationRuleResult): r is ValidationRuleError { | ||
return !r.success; | ||
return !(r as ValidationRuleSuccess).success; | ||
} | ||
} |
@@ -27,3 +27,3 @@ import { expect } from 'chai'; | ||
}; | ||
const expectedError: ValidationRuleError = { success: false, ...defaultError }; | ||
const expectedError: ValidationRuleError = { ...defaultError }; | ||
testRunner.addTest({ | ||
@@ -49,3 +49,2 @@ test: falsyTest, | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: `${defaultError1.title}, ${defaultError2.title}`, | ||
@@ -75,3 +74,2 @@ description: `${defaultError1.description}, ${defaultError2.description}`, | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: `${defaultError1.title}; ${defaultError2.title}`, | ||
@@ -105,3 +103,2 @@ description: `${defaultError1.description}; ${defaultError2.description}`, | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: `${defaultError1.title}, ${defaultError3.title}`, | ||
@@ -108,0 +105,0 @@ description: `${defaultError1.description}, ${defaultError3.description}`, |
@@ -54,3 +54,2 @@ import { RuleTestRunnerOptions } from '../rule/RuleTestRunner'; | ||
return { | ||
success: false, | ||
title: `type must be ${this.opts.initialTypeTestType}`, | ||
@@ -87,3 +86,2 @@ description: `must have type '${this.opts.initialTypeTestType}' but was really of type '${typeof data}'`, | ||
return { | ||
success: false, | ||
title, | ||
@@ -90,0 +88,0 @@ description, |
@@ -10,3 +10,2 @@ import { expect } from 'chai'; | ||
const getExpectedError: (type: string) => ValidationRuleError = (type: string) => ({ | ||
success: false, | ||
title: `type must be string`, | ||
@@ -76,3 +75,2 @@ description: `must have type 'string' but was really of type '${type}'`, | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'too short', | ||
@@ -103,3 +101,2 @@ description: 'must be at least 4 characters long', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'too long', | ||
@@ -130,3 +127,2 @@ description: 'must not be longer than 4 characters long', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'failed blacklist', | ||
@@ -157,3 +153,2 @@ description: 'must not contain one of the blacklisted phrases \'hello\', \'world\'', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'contains lowercase', | ||
@@ -184,3 +179,2 @@ description: 'must not contain lowercase characters', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'contains uppercase', | ||
@@ -211,3 +205,2 @@ description: 'must not contain uppercase characters', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'not alphanumeric', | ||
@@ -240,3 +233,2 @@ description: 'must only contain letters and numbers', | ||
const expectedError: ValidationRuleError = { | ||
success: false, | ||
title: 'failed regex', | ||
@@ -243,0 +235,0 @@ description: 'failed the regular expression \'/blablabla/\'', |
import { Field } from '../field/Field'; | ||
import { FieldFactory } from '../field/FieldFactory'; | ||
import { Rule } from '../rule/Rule'; | ||
import { Validation, ValidationError, ValidationSuccess } from '../types/Validation'; | ||
import { ValidationRuleError } from '../types/ValidationRule'; | ||
import { isError, isSuccess } from '../utils'; | ||
@@ -37,9 +40,15 @@ export interface SchemaOptions { | ||
public run(obj: any) { | ||
public run(obj: any): Validation { | ||
function objHasResultPropAsFailure(o: { fieldName: string, testResult: Validation }): | ||
o is { fieldName: string, testResult: ValidationError } { | ||
return isError(o.testResult); | ||
} | ||
const errors = Array | ||
.from(this.fields) | ||
.map(([fieldName, field]) => ({ fieldName, result: field.validate(obj[fieldName]) })) | ||
.filter(({ result }) => !result.success) | ||
.map(({ fieldName, result }) => | ||
result.errors.map(({ title, description }) => ({ | ||
.map(([fieldName, field]) => ({ fieldName, testResult: field.validate(obj[fieldName]) })) | ||
// .filter(({ result }) => !isSuccess(result)) | ||
.filter(objHasResultPropAsFailure) | ||
.map(({ fieldName, testResult }) => | ||
testResult.errors.map(({ title, description }) => ({ | ||
title, | ||
@@ -51,7 +60,4 @@ description, | ||
.reduce((t, e) => t.concat(e), []); | ||
if (errors.length === 0) { | ||
return { success: true }; | ||
} else { | ||
return { success: false, errors }; | ||
} | ||
return errors.length === 0 ? { success: true } : { errors }; | ||
} | ||
@@ -58,0 +64,0 @@ } |
import { ValidationRuleError, ValidationRuleSuccess } from '../types/ValidationRule'; | ||
export const emptyFail: ValidationRuleError = { | ||
success: false, | ||
title: '', | ||
@@ -6,0 +5,0 @@ description: '', |
import { ValidationRuleError } from './ValidationRule'; | ||
export interface Validation { | ||
success: boolean; | ||
errors?: ValidationRuleError[]; | ||
export type Validation = ValidationSuccess | ValidationError; | ||
export interface ValidationSuccess { | ||
success: true; | ||
} | ||
export interface ValidationError { | ||
errors: ValidationRuleError[]; | ||
} |
export type ValidationRuleResult = ValidationRuleError | ValidationRuleSuccess; | ||
export interface ValidationRuleError extends DefaultValidationRuleError { | ||
success: false; | ||
fieldName?: string; | ||
} | ||
@@ -6,0 +6,0 @@ |
{ | ||
"name": "mev", | ||
"version": "1.0.0", | ||
"version": "2.0.0", | ||
"description": "Another validator..", | ||
@@ -9,2 +9,3 @@ "main": "dist/index.js", | ||
"build": "tsc", | ||
"lint": "tslint --project .", | ||
"test": "mocha --require ts-node/register --reporter spec 'lib/**/*.spec.ts'" | ||
@@ -30,2 +31,4 @@ }, | ||
"tsc": "^1.20150623.0", | ||
"tslint": "^5.11.0", | ||
"tslint-no-unused-expression-chai": "^0.1.3", | ||
"typescript": "^3.0.3" | ||
@@ -32,0 +35,0 @@ }, |
{ | ||
"defaultSeverity": "error", | ||
"extends": [ | ||
"tslint:recommended" | ||
"defaultSeverity": "error", | ||
"extends": [ | ||
"tslint:recommended", | ||
"tslint-no-unused-expression-chai" | ||
], | ||
"jsRules": {}, | ||
"rules": { | ||
"quotemark": [ | ||
true, | ||
"single" | ||
], | ||
"jsRules": {}, | ||
"rules": { | ||
"quotemark": [true, "single"], | ||
"interface-name": false, | ||
"object-literal-sort-keys": false, | ||
"no-empty-interface": false, | ||
"unified-signatures": false | ||
}, | ||
"rulesDirectory": [] | ||
"interface-name": false, | ||
"object-literal-sort-keys": false, | ||
"no-empty-interface": false, | ||
"unified-signatures": false | ||
}, | ||
"rulesDirectory": [ | ||
] | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
273526
130
10
3147