Skip to content

Commit

Permalink
fix: lint
Browse files Browse the repository at this point in the history
  • Loading branch information
czy88840616 committed Feb 16, 2025
1 parent 259c63a commit 88b2e63
Show file tree
Hide file tree
Showing 10 changed files with 688 additions and 51 deletions.
1 change: 0 additions & 1 deletion packages/i18n/src/i18nService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ export class MidwayI18nServiceSingleton {
});
}
// add origin locale json

}

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/validation-joi/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import * as Joi from 'joi';

declare module '@midwayjs/core/dist/interface' {
interface MidwayConfig {
joi?: Joi.ValidationOptions
joi?: Joi.ValidationOptions;
}
}
2 changes: 1 addition & 1 deletion packages/validation-joi/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
},
"license": "MIT",
"dependencies": {
"@midwayjs/i18n": "workspace:^",
"@midwayjs/validation": "workspace:^"
},
"devDependencies": {
"@midwayjs/core": "workspace:^",
"@midwayjs/express": "workspace:^",
"@midwayjs/koa": "workspace:^",
"@midwayjs/mock": "workspace:^",
"joi": "17.13.3"
Expand Down
29 changes: 19 additions & 10 deletions packages/validation-joi/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
getRuleMeta,
ValidateResult,
ValidationExtendOptions,
IValidationService
IValidationService,
} from '@midwayjs/validation';
import { MidwayI18nServiceSingleton } from '@midwayjs/i18n';

Expand All @@ -23,15 +23,20 @@ export default (container: IMidwayContainer) => {
joi: require('../locales/zh_CN.json'),
},
},
}
},
});

return new class implements IValidationService<any> {
return new (class implements IValidationService<any> {
defaultValidatorOptions: Joi.ValidationOptions;
async init() {
const i18nServiceSingleton = await container.getAsync(MidwayI18nServiceSingleton);
const i18nServiceSingleton = await container.getAsync(
MidwayI18nServiceSingleton
);
for (const locale of i18nServiceSingleton.getLocaleList('joi')) {
localeMapping.set(locale, i18nServiceSingleton.getOriginLocaleJSON(locale, 'joi'));
localeMapping.set(
locale,
i18nServiceSingleton.getOriginLocaleJSON(locale, 'joi')
);
}

this.defaultValidatorOptions = configService.getConfiguration('joi');
Expand All @@ -42,15 +47,19 @@ export default (container: IMidwayContainer) => {
options: ValidationExtendOptions,
validatorOptions: any = {}
): ValidateResult {
const locale = localeMapping.has(options.locale) ? options.locale : (localeMapping.has(options.fallbackLocale) ? options.fallbackLocale : 'en-us');
const locale = localeMapping.has(options.locale)
? options.locale
: localeMapping.has(options.fallbackLocale)
? options.fallbackLocale
: 'en-us';
const newValidatorOptions = {
errors: {
language: locale
language: locale,
},
messages: localeMapping.get(locale),
...this.defaultValidatorOptions,
...validatorOptions,
}
};
const result = schema.validate(value, newValidatorOptions);

if (result.error) {
Expand Down Expand Up @@ -87,5 +96,5 @@ export default (container: IMidwayContainer) => {
public getStringSchema(): Joi.StringSchema<any> {
return Joi.string().required();
}
};
}
})();
};
41 changes: 28 additions & 13 deletions packages/validation-zod/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { IMidwayContainer, MidwayConfigService } from '@midwayjs/core';
import { getRuleMeta, IValidationService, ValidateResult, ValidationExtendOptions } from '@midwayjs/validation';
import {
getRuleMeta,
IValidationService,
ValidateResult,
ValidationExtendOptions,
} from '@midwayjs/validation';
import { z, ParseParams } from 'zod';
import { fromError } from 'zod-validation-error';
import * as i18next from 'i18next';
import { makeZodI18nMap } from 'zod-i18n-map';
import * as en from "zod-i18n-map/locales/en/zod.json";
import * as cn from "zod-i18n-map/locales/zh-CN/zod.json";
import * as en from 'zod-i18n-map/locales/en/zod.json';
import * as cn from 'zod-i18n-map/locales/zh-CN/zod.json';
import { MidwayI18nServiceSingleton } from '@midwayjs/i18n';

// 将 i18n 的标准 locale 转换为 zod-i18n-map 提供的 locale
Expand Down Expand Up @@ -41,7 +46,7 @@ const lngMapping = {
'tr-tr': 'tr',
'uk-ua': 'uk-UA',
'zh-cn': 'zh-CN',
'zh-tw': 'zh-TW'
'zh-tw': 'zh-TW',
};

const localeMapping = new Map();
Expand All @@ -58,15 +63,18 @@ export default async (container: IMidwayContainer) => {
zod: cn,
},
},
}
},
});
return new class implements IValidationService<z.ZodType> {
return new (class implements IValidationService<z.ZodType> {
defaultZodOptions: z.ParseParams;

async init(container: IMidwayContainer) {
const i18nServiceSingleton = await container.getAsync(MidwayI18nServiceSingleton);
const i18nServiceSingleton = await container.getAsync(
MidwayI18nServiceSingleton
);
const configService = await container.getAsync(MidwayConfigService);
this.defaultZodOptions = configService.getConfiguration<z.ParseParams>('zod');
this.defaultZodOptions =
configService.getConfiguration<z.ParseParams>('zod');

for (const locale of i18nServiceSingleton.getLocaleList('zod')) {
const instance = i18next.createInstance();
Expand All @@ -91,14 +99,21 @@ export default async (container: IMidwayContainer) => {
validatorOptions: Partial<ParseParams> = {}
) {
const res = {} as ValidateResult;
const locale = localeMapping.has(options.locale) ? options.locale : (localeMapping.has(options.fallbackLocale) ? options.fallbackLocale : 'en-us');
const locale = localeMapping.has(options.locale)
? options.locale
: localeMapping.has(options.fallbackLocale)
? options.fallbackLocale
: 'en-us';
const newValidatorOptions = {
errorMap: localeMapping.get(locale),
...this.defaultZodOptions,
...validatorOptions,
}
};

const { success, data, error } = schema.safeParse(value, newValidatorOptions);
const { success, data, error } = schema.safeParse(
value,
newValidatorOptions
);
if (success) {
res.status = true;
res.value = data;
Expand Down Expand Up @@ -130,5 +145,5 @@ export default async (container: IMidwayContainer) => {
getStringSchema(): z.ZodType<any, z.ZodTypeDef, any> {
return z.string();
}
};
}
})();
};
12 changes: 10 additions & 2 deletions packages/validation/src/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,18 @@ export class ValidationConfiguration {
}
);

const validators = this.configService.getConfiguration<Record<string, (container: IMidwayContainer) => Promise<IValidationService<any>>>>('validation.validators');
const validators = this.configService.getConfiguration<
Record<
string,
(container: IMidwayContainer) => Promise<IValidationService<any>>
>
>('validation.validators');
if (validators) {
for (const [name, validatorHandler] of Object.entries(validators)) {
registry.register(name, await validatorHandler(this.applicationContext));
registry.register(
name,
await validatorHandler(this.applicationContext)
);
}
}
}
Expand Down
13 changes: 9 additions & 4 deletions packages/validation/src/error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,13 @@ export class MidwayValidationError extends MidwayHttpError {

export class MidwayValidatorNotFoundError extends MidwayHttpError {
constructor(name: string, status: number, cause?: Error) {
super(`validator ${name} not found`, status, ValidateErrorCode.VALIDATOR_NOT_FOUND, {
cause,
});
super(
`validator ${name} not found`,
status,
ValidateErrorCode.VALIDATOR_NOT_FOUND,
{
cause,
}
);
}
}
}
15 changes: 12 additions & 3 deletions packages/validation/src/pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ export abstract class AbstractValidationPipe implements PipeTransform {
options: TransformOptions,
schema: any
): any {
const validateOptions: ValidationDecoratorOptions = this.parseValidationOptions(options);
const validateOptions: ValidationDecoratorOptions =
this.parseValidationOptions(options);
return (
this.validationService.validateWithSchema(
schema,
Expand All @@ -39,8 +40,16 @@ export abstract class AbstractValidationPipe implements PipeTransform {
if (options.metaType.isBaseType || !options.metaType.originDesign) {
return value;
}
const validateOptions: ValidationDecoratorOptions = this.parseValidationOptions(options);
return this.validationService.validate(options.metaType.originDesign as any, value, validateOptions, validateOptions?.validatorOptions)?.value ?? value;
const validateOptions: ValidationDecoratorOptions =
this.parseValidationOptions(options);
return (
this.validationService.validate(
options.metaType.originDesign as any,
value,
validateOptions,
validateOptions?.validatorOptions
)?.value ?? value
);
}

protected parseValidationOptions(
Expand Down
49 changes: 33 additions & 16 deletions packages/validation/src/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@ import {
Init,
MetadataManager,
Singleton,
MidwayConfigService, MidwayCommonError,
MidwayConfigService,
MidwayCommonError,
IMidwayContainer,
ApplicationContext
ApplicationContext,
} from '@midwayjs/core';
import { RULES_KEY } from './constants';
import {
formatLocale,
I18nOptions,
} from '@midwayjs/i18n';
import { formatLocale, I18nOptions } from '@midwayjs/i18n';
import { ValidateResult, ValidationOptions } from './interface';
import { MidwayValidationError, MidwayValidatorNotFoundError } from './error';
import { registry } from './registry';
Expand Down Expand Up @@ -63,10 +61,18 @@ export class ValidationService {
): ValidateResult | undefined {
const validator = this.getValidator(validationOptions?.defaultValidator);
if (!validator) {
throw new MidwayValidatorNotFoundError(validationOptions?.defaultValidator, 500);
throw new MidwayValidatorNotFoundError(
validationOptions?.defaultValidator,
500
);
}
const anySchema = validator.getSchema(ClzType);
return this.validateWithSchema(anySchema, value, validationOptions, validatorOptions);
return this.validateWithSchema(
anySchema,
value,
validationOptions,
validatorOptions
);
}

public validateWithSchema<T>(
Expand All @@ -82,16 +88,27 @@ export class ValidationService {
const validator = this.getValidator(validationOptions?.defaultValidator);

if (!validator) {
throw new MidwayValidatorNotFoundError(validationOptions?.defaultValidator, 500);
throw new MidwayValidatorNotFoundError(
validationOptions?.defaultValidator,
500
);
}

const res = validator.validateWithSchema(schema, value, {
locale: formatLocale(validationOptions?.locale),
fallbackLocale: this.defaultFallbackLocale,
}, validatorOptions);

const throwValidateError = validationOptions?.throwValidateError ?? this.validateConfig.throwValidateError;
const errorStatus = validationOptions?.errorStatus ?? this.validateConfig.errorStatus;
const res = validator.validateWithSchema(
schema,
value,
{
locale: formatLocale(validationOptions?.locale),
fallbackLocale: this.defaultFallbackLocale,
},
validatorOptions
);

const throwValidateError =
validationOptions?.throwValidateError ??
this.validateConfig.throwValidateError;
const errorStatus =
validationOptions?.errorStatus ?? this.validateConfig.errorStatus;

if (res.status === false && throwValidateError) {
throw new MidwayValidationError(
Expand Down
Loading

0 comments on commit 88b2e63

Please sign in to comment.