@vnodes/prop 0.0.23 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './lib/normalize-property-options.js';
6
6
  export * from './lib/number-prop.js';
7
7
  export * from './lib/prop.js';
8
8
  export * from './lib/prop-options.js';
9
+ export * from './lib/prop-validation.js';
9
10
  export * from './lib/string-format-prop.js';
10
11
  export * from './lib/string-prop.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from './lib/normalize-property-options.js';
7
7
  export * from './lib/number-prop.js';
8
8
  export * from './lib/prop.js';
9
9
  export * from './lib/prop-options.js';
10
+ export * from './lib/prop-validation.js';
10
11
  export * from './lib/string-format-prop.js';
11
12
  export * from './lib/string-prop.js';
12
13
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)\nexport * from './lib/array-prop.js';\nexport * from './lib/common-validation-pipe.js';\nexport * from './lib/is-class-type.js';\nexport * from './lib/is-enum-type.js';\nexport * from './lib/normalize-property-options.js';\nexport * from './lib/number-prop.js';\nexport * from './lib/prop.js';\nexport * from './lib/prop-options.js';\nexport * from './lib/string-format-prop.js';\nexport * from './lib/string-prop.js';\n"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,cAAc,sBAAsB;AACpC,cAAc,kCAAkC;AAChD,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,sCAAsC;AACpD,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,wBAAwB;AACtC,cAAc,8BAA8B;AAC5C,cAAc,uBAAuB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @index(['./**/*.ts', '!./**/*.{spec,test}.ts'], f => `export * from '${f.path}.js'`)\nexport * from './lib/array-prop.js';\nexport * from './lib/common-validation-pipe.js';\nexport * from './lib/is-class-type.js';\nexport * from './lib/is-enum-type.js';\nexport * from './lib/normalize-property-options.js';\nexport * from './lib/number-prop.js';\nexport * from './lib/prop.js';\nexport * from './lib/prop-options.js';\nexport * from './lib/prop-validation.js';\nexport * from './lib/string-format-prop.js';\nexport * from './lib/string-prop.js';\n"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,cAAc,sBAAsB;AACpC,cAAc,kCAAkC;AAChD,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,sCAAsC;AACpD,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,wBAAwB;AACtC,cAAc,2BAA2B;AACzC,cAAc,8BAA8B;AAC5C,cAAc,uBAAuB"}
@@ -0,0 +1,24 @@
1
+ import { type ValidationOptions } from '@vnodes/nestjs/class-validator';
2
+ import type { PropOptions } from './prop-options.js';
3
+ /**
4
+ * ## Examples
5
+ * ```typescript
6
+ * \@PropValidation() value: string;
7
+ * \@PropValidation() value: number;
8
+ * \@PropValidation() value: boolean;
9
+ * \@PropValidation() value: Date;
10
+ * \@PropValidation({ type: CustomObject }) value: CustomObject;
11
+ * \@PropValidation({ type: [String] }) value: string[];
12
+ * \@PropValidation({ enum: EnumClss }) value: EnumClss;
13
+ * \@PropValidation({ type:[EnumClss] enum: EnumClss }) value: EnumClss;
14
+ *
15
+ * ## Notes
16
+ * - properties are optional by defualt if required is not set true
17
+ * ```
18
+ * @param options Open api property options
19
+ * @param validationOptions property validation options from class-validator
20
+ * @returns -- {@link PropertyDecorator}
21
+ */
22
+ export declare function PropValidation(options?: PropOptions, validationOptions?: ValidationOptions): PropertyDecorator;
23
+ export declare function OptionalPropValidation(options?: PropOptions, validationOptions?: ValidationOptions): PropertyDecorator;
24
+ //# sourceMappingURL=prop-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-validation.d.ts","sourceRoot":"","sources":["../../src/lib/prop-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAC;AAMxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,WAAgB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAoDlH;AAED,wBAAgB,sBAAsB,CAClC,OAAO,GAAE,WAAgB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,iBAAiB,CAUnB"}
@@ -0,0 +1,92 @@
1
+ import { Expose, Type } from '@vnodes/nestjs/class-transformer';
2
+ import { IsBoolean, IsDate, IsDefined, IsEnum, IsOptional, ValidateNested } from '@vnodes/nestjs/class-validator';
3
+ import { ArrayProp } from './array-prop.js';
4
+ import { isClassType } from './is-class-type.js';
5
+ import { normalizePropertyOptions } from './normalize-property-options.js';
6
+ import { NumberProp } from './number-prop.js';
7
+ import { StringProp } from './string-prop.js';
8
+ /**
9
+ * ## Examples
10
+ * ```typescript
11
+ * \@PropValidation() value: string;
12
+ * \@PropValidation() value: number;
13
+ * \@PropValidation() value: boolean;
14
+ * \@PropValidation() value: Date;
15
+ * \@PropValidation({ type: CustomObject }) value: CustomObject;
16
+ * \@PropValidation({ type: [String] }) value: string[];
17
+ * \@PropValidation({ enum: EnumClss }) value: EnumClss;
18
+ * \@PropValidation({ type:[EnumClss] enum: EnumClss }) value: EnumClss;
19
+ *
20
+ * ## Notes
21
+ * - properties are optional by defualt if required is not set true
22
+ * ```
23
+ * @param options Open api property options
24
+ * @param validationOptions property validation options from class-validator
25
+ * @returns -- {@link PropertyDecorator}
26
+ */ export function PropValidation(options = {}, validationOptions) {
27
+ return (...args)=>{
28
+ options = normalizePropertyOptions(options, args[0], args[1]);
29
+ const decorators = new Set();
30
+ const add = (...propertyDecorators)=>{
31
+ for (const propertyDecorator of propertyDecorators){
32
+ decorators.add(propertyDecorator);
33
+ }
34
+ };
35
+ if (options.enum) {
36
+ if (!Array.isArray(options.enum)) {
37
+ options.enum = Object.values(options.enum);
38
+ }
39
+ add(IsEnum(options.enum, {
40
+ ...validationOptions,
41
+ message: `$property should be one of ${options.enum}`
42
+ }));
43
+ }
44
+ if (Array.isArray(options.type)) {
45
+ add(ArrayProp(options, validationOptions));
46
+ add(PropValidation({
47
+ ...options.items,
48
+ type: options.type[0]
49
+ }, {
50
+ each: true
51
+ }));
52
+ } else if (options.type === String) {
53
+ add(StringProp(options, validationOptions));
54
+ } else if (options.type === Number) {
55
+ add(NumberProp(options, validationOptions));
56
+ } else if (options.type === Boolean) {
57
+ add(IsBoolean(validationOptions));
58
+ } else if (options.type === Date) {
59
+ add(IsDate(validationOptions));
60
+ } else if (isClassType(options.type)) {
61
+ options.type = new options.type();
62
+ add(Type(()=>options.type));
63
+ add(ValidateNested(validationOptions));
64
+ } else if (typeof options.type === 'function') {
65
+ add(Type(options.type));
66
+ add(ValidateNested(validationOptions));
67
+ }
68
+ if (!validationOptions) {
69
+ add(Expose());
70
+ if (options.required === true) {
71
+ add(IsDefined(validationOptions));
72
+ } else {
73
+ add(IsOptional(validationOptions));
74
+ }
75
+ }
76
+ for (const decorator of [
77
+ ...decorators
78
+ ]){
79
+ decorator(...args);
80
+ }
81
+ };
82
+ }
83
+ export function OptionalPropValidation(options = {}, validationOptions) {
84
+ return (...args)=>{
85
+ PropValidation({
86
+ ...options,
87
+ required: false
88
+ }, validationOptions)(...args);
89
+ };
90
+ }
91
+
92
+ //# sourceMappingURL=prop-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/prop-validation.ts"],"sourcesContent":["import { type ClassConstructor, Expose, Type } from '@vnodes/nestjs/class-transformer';\nimport {\n IsBoolean,\n IsDate,\n IsDefined,\n IsEnum,\n IsOptional,\n ValidateNested,\n type ValidationOptions,\n} from '@vnodes/nestjs/class-validator';\nimport type { Any } from '@vnodes/types';\nimport { ArrayProp } from './array-prop.js';\nimport { isClassType } from './is-class-type.js';\nimport { normalizePropertyOptions } from './normalize-property-options.js';\nimport { NumberProp } from './number-prop.js';\nimport type { PropOptions } from './prop-options.js';\nimport { StringProp } from './string-prop.js';\n\n/**\n * ## Examples\n * ```typescript\n * \\@PropValidation() value: string;\n * \\@PropValidation() value: number;\n * \\@PropValidation() value: boolean;\n * \\@PropValidation() value: Date;\n * \\@PropValidation({ type: CustomObject }) value: CustomObject;\n * \\@PropValidation({ type: [String] }) value: string[];\n * \\@PropValidation({ enum: EnumClss }) value: EnumClss;\n * \\@PropValidation({ type:[EnumClss] enum: EnumClss }) value: EnumClss;\n *\n * ## Notes\n * - properties are optional by defualt if required is not set true\n * ```\n * @param options Open api property options\n * @param validationOptions property validation options from class-validator\n * @returns -- {@link PropertyDecorator}\n */\nexport function PropValidation(options: PropOptions = {}, validationOptions?: ValidationOptions): PropertyDecorator {\n return (...args) => {\n options = normalizePropertyOptions(options, args[0], args[1]);\n\n const decorators = new Set<PropertyDecorator>();\n const add = (...propertyDecorators: PropertyDecorator[]) => {\n for (const propertyDecorator of propertyDecorators) {\n decorators.add(propertyDecorator);\n }\n };\n\n if (options.enum) {\n if (!Array.isArray(options.enum)) {\n options.enum = Object.values(options.enum);\n }\n add(IsEnum(options.enum, { ...validationOptions, message: `$property should be one of ${options.enum}` }));\n }\n\n if (Array.isArray(options.type)) {\n add(ArrayProp(options, validationOptions));\n add(PropValidation({ ...options.items, type: options.type[0] } as Any, { each: true }));\n } else if (options.type === String) {\n add(StringProp(options, validationOptions));\n } else if (options.type === Number) {\n add(NumberProp(options, validationOptions));\n } else if (options.type === Boolean) {\n add(IsBoolean(validationOptions));\n } else if (options.type === Date) {\n add(IsDate(validationOptions));\n } else if (isClassType(options.type)) {\n options.type = new (options.type as Any)();\n add(Type(() => options.type as ClassConstructor<unknown>));\n add(ValidateNested(validationOptions));\n } else if (typeof options.type === 'function') {\n add(Type(options.type as () => ClassConstructor<Any>));\n add(ValidateNested(validationOptions));\n }\n\n if (!validationOptions) {\n add(Expose());\n\n if (options.required === true) {\n add(IsDefined(validationOptions));\n } else {\n add(IsOptional(validationOptions));\n }\n }\n\n for (const decorator of [...decorators]) {\n decorator(...args);\n }\n };\n}\n\nexport function OptionalPropValidation(\n options: PropOptions = {},\n validationOptions?: ValidationOptions,\n): PropertyDecorator {\n return (...args) => {\n PropValidation(\n {\n ...options,\n required: false,\n } as PropOptions,\n validationOptions,\n )(...args);\n };\n}\n"],"names":["Expose","Type","IsBoolean","IsDate","IsDefined","IsEnum","IsOptional","ValidateNested","ArrayProp","isClassType","normalizePropertyOptions","NumberProp","StringProp","PropValidation","options","validationOptions","args","decorators","Set","add","propertyDecorators","propertyDecorator","enum","Array","isArray","Object","values","message","type","items","each","String","Number","Boolean","Date","required","decorator","OptionalPropValidation"],"mappings":"AAAA,SAAgCA,MAAM,EAAEC,IAAI,QAAQ,mCAAmC;AACvF,SACIC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,cAAc,QAEX,iCAAiC;AAExC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,WAAW,QAAQ,qBAAqB;AACjD,SAASC,wBAAwB,QAAQ,kCAAkC;AAC3E,SAASC,UAAU,QAAQ,mBAAmB;AAE9C,SAASC,UAAU,QAAQ,mBAAmB;AAE9C;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASC,eAAeC,UAAuB,CAAC,CAAC,EAAEC,iBAAqC;IAC3F,OAAO,CAAC,GAAGC;QACPF,UAAUJ,yBAAyBI,SAASE,IAAI,CAAC,EAAE,EAAEA,IAAI,CAAC,EAAE;QAE5D,MAAMC,aAAa,IAAIC;QACvB,MAAMC,MAAM,CAAC,GAAGC;YACZ,KAAK,MAAMC,qBAAqBD,mBAAoB;gBAChDH,WAAWE,GAAG,CAACE;YACnB;QACJ;QAEA,IAAIP,QAAQQ,IAAI,EAAE;YACd,IAAI,CAACC,MAAMC,OAAO,CAACV,QAAQQ,IAAI,GAAG;gBAC9BR,QAAQQ,IAAI,GAAGG,OAAOC,MAAM,CAACZ,QAAQQ,IAAI;YAC7C;YACAH,IAAId,OAAOS,QAAQQ,IAAI,EAAE;gBAAE,GAAGP,iBAAiB;gBAAEY,SAAS,CAAC,2BAA2B,EAAEb,QAAQQ,IAAI,EAAE;YAAC;QAC3G;QAEA,IAAIC,MAAMC,OAAO,CAACV,QAAQc,IAAI,GAAG;YAC7BT,IAAIX,UAAUM,SAASC;YACvBI,IAAIN,eAAe;gBAAE,GAAGC,QAAQe,KAAK;gBAAED,MAAMd,QAAQc,IAAI,CAAC,EAAE;YAAC,GAAU;gBAAEE,MAAM;YAAK;QACxF,OAAO,IAAIhB,QAAQc,IAAI,KAAKG,QAAQ;YAChCZ,IAAIP,WAAWE,SAASC;QAC5B,OAAO,IAAID,QAAQc,IAAI,KAAKI,QAAQ;YAChCb,IAAIR,WAAWG,SAASC;QAC5B,OAAO,IAAID,QAAQc,IAAI,KAAKK,SAAS;YACjCd,IAAIjB,UAAUa;QAClB,OAAO,IAAID,QAAQc,IAAI,KAAKM,MAAM;YAC9Bf,IAAIhB,OAAOY;QACf,OAAO,IAAIN,YAAYK,QAAQc,IAAI,GAAG;YAClCd,QAAQc,IAAI,GAAG,IAAKd,QAAQc,IAAI;YAChCT,IAAIlB,KAAK,IAAMa,QAAQc,IAAI;YAC3BT,IAAIZ,eAAeQ;QACvB,OAAO,IAAI,OAAOD,QAAQc,IAAI,KAAK,YAAY;YAC3CT,IAAIlB,KAAKa,QAAQc,IAAI;YACrBT,IAAIZ,eAAeQ;QACvB;QAEA,IAAI,CAACA,mBAAmB;YACpBI,IAAInB;YAEJ,IAAIc,QAAQqB,QAAQ,KAAK,MAAM;gBAC3BhB,IAAIf,UAAUW;YAClB,OAAO;gBACHI,IAAIb,WAAWS;YACnB;QACJ;QAEA,KAAK,MAAMqB,aAAa;eAAInB;SAAW,CAAE;YACrCmB,aAAapB;QACjB;IACJ;AACJ;AAEA,OAAO,SAASqB,uBACZvB,UAAuB,CAAC,CAAC,EACzBC,iBAAqC;IAErC,OAAO,CAAC,GAAGC;QACPH,eACI;YACI,GAAGC,OAAO;YACVqB,UAAU;QACd,GACApB,sBACCC;IACT;AACJ"}
@@ -1,4 +1,4 @@
1
- import { type ValidationOptions } from '@vnodes/nestjs/class-validator';
1
+ import type { ValidationOptions } from '@vnodes/nestjs/class-validator';
2
2
  import type { PropOptions } from './prop-options.js';
3
3
  /**
4
4
  * ## Examples
@@ -1 +1 @@
1
- {"version":3,"file":"prop.d.ts","sourceRoot":"","sources":["../../src/lib/prop.ts"],"names":[],"mappings":"AACA,OAAO,EAOH,KAAK,iBAAiB,EACzB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAuDxG;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,WAAgB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAUhH"}
1
+ {"version":3,"file":"prop.d.ts","sourceRoot":"","sources":["../../src/lib/prop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAuBxG;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,WAAgB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAUhH"}
package/dist/lib/prop.js CHANGED
@@ -1,11 +1,6 @@
1
- import { Expose, Type } from '@vnodes/nestjs/class-transformer';
2
- import { IsBoolean, IsDate, IsDefined, IsEnum, IsOptional, ValidateNested } from '@vnodes/nestjs/class-validator';
3
1
  import { ApiProperty } from '@vnodes/nestjs/swagger';
4
- import { ArrayProp } from './array-prop.js';
5
- import { isClassType } from './is-class-type.js';
6
2
  import { normalizePropertyOptions } from './normalize-property-options.js';
7
- import { NumberProp } from './number-prop.js';
8
- import { StringProp } from './string-prop.js';
3
+ import { PropValidation } from './prop-validation.js';
9
4
  /**
10
5
  * ## Examples
11
6
  * ```typescript
@@ -34,50 +29,12 @@ import { StringProp } from './string-prop.js';
34
29
  decorators.add(propertyDecorator);
35
30
  }
36
31
  };
37
- if (options.enum) {
38
- if (!Array.isArray(options.enum)) {
39
- options.enum = Object.values(options.enum);
40
- }
41
- add(IsEnum(options.enum, {
42
- ...validationOptions,
43
- message: `$property should be one of ${options.enum}`
44
- }));
45
- }
46
- if (Array.isArray(options.type)) {
47
- add(ArrayProp(options, validationOptions));
48
- add(Prop({
49
- ...options.items,
50
- type: options.type[0]
51
- }, {
52
- each: true
53
- }));
54
- } else if (options.type === String) {
55
- add(StringProp(options, validationOptions));
56
- } else if (options.type === Number) {
57
- add(NumberProp(options, validationOptions));
58
- } else if (options.type === Boolean) {
59
- add(IsBoolean(validationOptions));
60
- } else if (options.type === Date) {
61
- add(IsDate(validationOptions));
62
- } else if (isClassType(options.type)) {
63
- options.type = new options.type();
64
- add(Type(()=>options.type));
65
- add(ValidateNested(validationOptions));
66
- } else if (typeof options.type === 'function') {
67
- add(Type(options.type));
68
- add(ValidateNested(validationOptions));
69
- }
32
+ add(PropValidation(options, validationOptions));
70
33
  if (!validationOptions) {
71
34
  add(ApiProperty({
72
35
  ...options,
73
36
  type: safeType
74
37
  }));
75
- add(Expose());
76
- if (options.required === true) {
77
- add(IsDefined(validationOptions));
78
- } else {
79
- add(IsOptional(validationOptions));
80
- }
81
38
  }
82
39
  for (const decorator of [
83
40
  ...decorators
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/prop.ts"],"sourcesContent":["import { type ClassConstructor, Expose, Type } from '@vnodes/nestjs/class-transformer';\nimport {\n IsBoolean,\n IsDate,\n IsDefined,\n IsEnum,\n IsOptional,\n ValidateNested,\n type ValidationOptions,\n} from '@vnodes/nestjs/class-validator';\nimport { type ApiPropertyOptions as __ApiPropertyOptions, ApiProperty } from '@vnodes/nestjs/swagger';\nimport type { Any } from '@vnodes/types';\nimport { ArrayProp } from './array-prop.js';\nimport { isClassType } from './is-class-type.js';\nimport { normalizePropertyOptions } from './normalize-property-options.js';\nimport { NumberProp } from './number-prop.js';\nimport type { PropOptions } from './prop-options.js';\nimport { StringProp } from './string-prop.js';\n\n/**\n * ## Examples\n * ```typescript\n * \\@Prop() value: string;\n * \\@Prop() value: number;\n * \\@Prop() value: boolean;\n * \\@Prop() value: Date;\n * \\@Prop({ type: CustomObject }) value: CustomObject;\n * \\@Prop({ type: [String] }) value: string[];\n * \\@Prop({ enum: EnumClss }) value: EnumClss;\n * \\@Prop({ type:[EnumClss] enum: EnumClss }) value: EnumClss;\n *\n * ## Notes\n * - properties are optional by defualt if required is not set true\n * ```\n * @param options Open api property options\n * @param validationOptions property validation options from class-validator\n * @returns -- {@link PropertyDecorator}\n */\nexport function Prop(options: PropOptions = {}, validationOptions?: ValidationOptions): PropertyDecorator {\n return (...args) => {\n options = normalizePropertyOptions(options, args[0], args[1]);\n\n const safeType = options.type;\n\n const decorators = new Set<PropertyDecorator>();\n const add = (...propertyDecorators: PropertyDecorator[]) => {\n for (const propertyDecorator of propertyDecorators) {\n decorators.add(propertyDecorator);\n }\n };\n\n if (options.enum) {\n if (!Array.isArray(options.enum)) {\n options.enum = Object.values(options.enum);\n }\n add(IsEnum(options.enum, { ...validationOptions, message: `$property should be one of ${options.enum}` }));\n }\n\n if (Array.isArray(options.type)) {\n add(ArrayProp(options, validationOptions));\n add(Prop({ ...options.items, type: options.type[0] } as Any, { each: true }));\n } else if (options.type === String) {\n add(StringProp(options, validationOptions));\n } else if (options.type === Number) {\n add(NumberProp(options, validationOptions));\n } else if (options.type === Boolean) {\n add(IsBoolean(validationOptions));\n } else if (options.type === Date) {\n add(IsDate(validationOptions));\n } else if (isClassType(options.type)) {\n options.type = new (options.type as Any)();\n add(Type(() => options.type as ClassConstructor<unknown>));\n add(ValidateNested(validationOptions));\n } else if (typeof options.type === 'function') {\n add(Type(options.type as () => ClassConstructor<Any>));\n add(ValidateNested(validationOptions));\n }\n\n if (!validationOptions) {\n add(ApiProperty({ ...options, type: safeType } as __ApiPropertyOptions));\n add(Expose());\n\n if (options.required === true) {\n add(IsDefined(validationOptions));\n } else {\n add(IsOptional(validationOptions));\n }\n }\n\n for (const decorator of [...decorators]) {\n decorator(...args);\n }\n };\n}\n\nexport function OptionalProp(options: PropOptions = {}, validationOptions?: ValidationOptions): PropertyDecorator {\n return (...args) => {\n Prop(\n {\n ...options,\n required: false,\n } as PropOptions,\n validationOptions,\n )(...args);\n };\n}\n"],"names":["Expose","Type","IsBoolean","IsDate","IsDefined","IsEnum","IsOptional","ValidateNested","ApiProperty","ArrayProp","isClassType","normalizePropertyOptions","NumberProp","StringProp","Prop","options","validationOptions","args","safeType","type","decorators","Set","add","propertyDecorators","propertyDecorator","enum","Array","isArray","Object","values","message","items","each","String","Number","Boolean","Date","required","decorator","OptionalProp"],"mappings":"AAAA,SAAgCA,MAAM,EAAEC,IAAI,QAAQ,mCAAmC;AACvF,SACIC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,cAAc,QAEX,iCAAiC;AACxC,SAA0DC,WAAW,QAAQ,yBAAyB;AAEtG,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,WAAW,QAAQ,qBAAqB;AACjD,SAASC,wBAAwB,QAAQ,kCAAkC;AAC3E,SAASC,UAAU,QAAQ,mBAAmB;AAE9C,SAASC,UAAU,QAAQ,mBAAmB;AAE9C;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASC,KAAKC,UAAuB,CAAC,CAAC,EAAEC,iBAAqC;IACjF,OAAO,CAAC,GAAGC;QACPF,UAAUJ,yBAAyBI,SAASE,IAAI,CAAC,EAAE,EAAEA,IAAI,CAAC,EAAE;QAE5D,MAAMC,WAAWH,QAAQI,IAAI;QAE7B,MAAMC,aAAa,IAAIC;QACvB,MAAMC,MAAM,CAAC,GAAGC;YACZ,KAAK,MAAMC,qBAAqBD,mBAAoB;gBAChDH,WAAWE,GAAG,CAACE;YACnB;QACJ;QAEA,IAAIT,QAAQU,IAAI,EAAE;YACd,IAAI,CAACC,MAAMC,OAAO,CAACZ,QAAQU,IAAI,GAAG;gBAC9BV,QAAQU,IAAI,GAAGG,OAAOC,MAAM,CAACd,QAAQU,IAAI;YAC7C;YACAH,IAAIjB,OAAOU,QAAQU,IAAI,EAAE;gBAAE,GAAGT,iBAAiB;gBAAEc,SAAS,CAAC,2BAA2B,EAAEf,QAAQU,IAAI,EAAE;YAAC;QAC3G;QAEA,IAAIC,MAAMC,OAAO,CAACZ,QAAQI,IAAI,GAAG;YAC7BG,IAAIb,UAAUM,SAASC;YACvBM,IAAIR,KAAK;gBAAE,GAAGC,QAAQgB,KAAK;gBAAEZ,MAAMJ,QAAQI,IAAI,CAAC,EAAE;YAAC,GAAU;gBAAEa,MAAM;YAAK;QAC9E,OAAO,IAAIjB,QAAQI,IAAI,KAAKc,QAAQ;YAChCX,IAAIT,WAAWE,SAASC;QAC5B,OAAO,IAAID,QAAQI,IAAI,KAAKe,QAAQ;YAChCZ,IAAIV,WAAWG,SAASC;QAC5B,OAAO,IAAID,QAAQI,IAAI,KAAKgB,SAAS;YACjCb,IAAIpB,UAAUc;QAClB,OAAO,IAAID,QAAQI,IAAI,KAAKiB,MAAM;YAC9Bd,IAAInB,OAAOa;QACf,OAAO,IAAIN,YAAYK,QAAQI,IAAI,GAAG;YAClCJ,QAAQI,IAAI,GAAG,IAAKJ,QAAQI,IAAI;YAChCG,IAAIrB,KAAK,IAAMc,QAAQI,IAAI;YAC3BG,IAAIf,eAAeS;QACvB,OAAO,IAAI,OAAOD,QAAQI,IAAI,KAAK,YAAY;YAC3CG,IAAIrB,KAAKc,QAAQI,IAAI;YACrBG,IAAIf,eAAeS;QACvB;QAEA,IAAI,CAACA,mBAAmB;YACpBM,IAAId,YAAY;gBAAE,GAAGO,OAAO;gBAAEI,MAAMD;YAAS;YAC7CI,IAAItB;YAEJ,IAAIe,QAAQsB,QAAQ,KAAK,MAAM;gBAC3Bf,IAAIlB,UAAUY;YAClB,OAAO;gBACHM,IAAIhB,WAAWU;YACnB;QACJ;QAEA,KAAK,MAAMsB,aAAa;eAAIlB;SAAW,CAAE;YACrCkB,aAAarB;QACjB;IACJ;AACJ;AAEA,OAAO,SAASsB,aAAaxB,UAAuB,CAAC,CAAC,EAAEC,iBAAqC;IACzF,OAAO,CAAC,GAAGC;QACPH,KACI;YACI,GAAGC,OAAO;YACVsB,UAAU;QACd,GACArB,sBACCC;IACT;AACJ"}
1
+ {"version":3,"sources":["../../src/lib/prop.ts"],"sourcesContent":["import type { ValidationOptions } from '@vnodes/nestjs/class-validator';\nimport { type ApiPropertyOptions as __ApiPropertyOptions, ApiProperty } from '@vnodes/nestjs/swagger';\nimport { normalizePropertyOptions } from './normalize-property-options.js';\nimport type { PropOptions } from './prop-options.js';\nimport { PropValidation } from './prop-validation.js';\n\n/**\n * ## Examples\n * ```typescript\n * \\@Prop() value: string;\n * \\@Prop() value: number;\n * \\@Prop() value: boolean;\n * \\@Prop() value: Date;\n * \\@Prop({ type: CustomObject }) value: CustomObject;\n * \\@Prop({ type: [String] }) value: string[];\n * \\@Prop({ enum: EnumClss }) value: EnumClss;\n * \\@Prop({ type:[EnumClss] enum: EnumClss }) value: EnumClss;\n *\n * ## Notes\n * - properties are optional by defualt if required is not set true\n * ```\n * @param options Open api property options\n * @param validationOptions property validation options from class-validator\n * @returns -- {@link PropertyDecorator}\n */\nexport function Prop(options: PropOptions = {}, validationOptions?: ValidationOptions): PropertyDecorator {\n return (...args) => {\n options = normalizePropertyOptions(options, args[0], args[1]);\n\n const safeType = options.type;\n\n const decorators = new Set<PropertyDecorator>();\n const add = (...propertyDecorators: PropertyDecorator[]) => {\n for (const propertyDecorator of propertyDecorators) {\n decorators.add(propertyDecorator);\n }\n };\n\n add(PropValidation(options, validationOptions));\n\n if (!validationOptions) {\n add(ApiProperty({ ...options, type: safeType } as __ApiPropertyOptions));\n }\n\n for (const decorator of [...decorators]) {\n decorator(...args);\n }\n };\n}\n\nexport function OptionalProp(options: PropOptions = {}, validationOptions?: ValidationOptions): PropertyDecorator {\n return (...args) => {\n Prop(\n {\n ...options,\n required: false,\n } as PropOptions,\n validationOptions,\n )(...args);\n };\n}\n"],"names":["ApiProperty","normalizePropertyOptions","PropValidation","Prop","options","validationOptions","args","safeType","type","decorators","Set","add","propertyDecorators","propertyDecorator","decorator","OptionalProp","required"],"mappings":"AACA,SAA0DA,WAAW,QAAQ,yBAAyB;AACtG,SAASC,wBAAwB,QAAQ,kCAAkC;AAE3E,SAASC,cAAc,QAAQ,uBAAuB;AAEtD;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASC,KAAKC,UAAuB,CAAC,CAAC,EAAEC,iBAAqC;IACjF,OAAO,CAAC,GAAGC;QACPF,UAAUH,yBAAyBG,SAASE,IAAI,CAAC,EAAE,EAAEA,IAAI,CAAC,EAAE;QAE5D,MAAMC,WAAWH,QAAQI,IAAI;QAE7B,MAAMC,aAAa,IAAIC;QACvB,MAAMC,MAAM,CAAC,GAAGC;YACZ,KAAK,MAAMC,qBAAqBD,mBAAoB;gBAChDH,WAAWE,GAAG,CAACE;YACnB;QACJ;QAEAF,IAAIT,eAAeE,SAASC;QAE5B,IAAI,CAACA,mBAAmB;YACpBM,IAAIX,YAAY;gBAAE,GAAGI,OAAO;gBAAEI,MAAMD;YAAS;QACjD;QAEA,KAAK,MAAMO,aAAa;eAAIL;SAAW,CAAE;YACrCK,aAAaR;QACjB;IACJ;AACJ;AAEA,OAAO,SAASS,aAAaX,UAAuB,CAAC,CAAC,EAAEC,iBAAqC;IACzF,OAAO,CAAC,GAAGC;QACPH,KACI;YACI,GAAGC,OAAO;YACVY,UAAU;QACd,GACAX,sBACCC;IACT;AACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnodes/prop",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "description": "@vnodes/prop",
5
5
  "keywords": [
6
6
  "prop"
@@ -51,12 +51,12 @@
51
51
  "@swc/helpers": "~0.5.18"
52
52
  },
53
53
  "peerDependencies": {
54
- "@vnodes/nestjs": "0.0.23",
55
- "@vnodes/types": "0.0.23"
54
+ "@vnodes/nestjs": "0.0.25",
55
+ "@vnodes/types": "0.0.25"
56
56
  },
57
57
  "devDependencies": {
58
- "@vnodes/nestjs": "0.0.23",
59
- "@vnodes/types": "0.0.23"
58
+ "@vnodes/types": "0.0.25",
59
+ "@vnodes/nestjs": "0.0.25"
60
60
  },
61
61
  "publishConfig": {
62
62
  "access": "public",