@sprucelabs/schema 28.8.1 → 29.0.1

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.
@@ -35,7 +35,7 @@ export interface FieldDefinitionMap {
35
35
  email: EmailFieldDefinition;
36
36
  image: ImageFieldDefinition;
37
37
  }
38
- export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEntityInstances extends boolean> {
38
+ export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEntityInstances extends boolean, ShouldIncludeNullAndUndefinedFieldsInSchemas extends boolean = false> {
39
39
  boolean: BooleanFieldDefinition['value'];
40
40
  select: SelectFieldValueTypeMapper<F extends SelectFieldDefinition ? F : SelectFieldDefinition>;
41
41
  duration: DurationFieldDefinition['value'];
@@ -43,7 +43,7 @@ export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEn
43
43
  text: TextFieldDefinition['value'];
44
44
  address: AddressFieldDefinition['value'];
45
45
  phone: PhoneFieldDefinition['value'];
46
- schema: SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition ? F : SchemaFieldFieldDefinition, CreateEntityInstances>;
46
+ schema: SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition ? F : SchemaFieldFieldDefinition, CreateEntityInstances, ShouldIncludeNullAndUndefinedFieldsInSchemas>;
47
47
  raw: RawFieldDefinition['value'];
48
48
  number: NumberFieldDefinition['value'];
49
49
  dateTime: DateTimeFieldDefinition['value'];
@@ -1,6 +1,5 @@
1
1
  import AbstractEntity from './AbstractEntity';
2
2
  import { Schema, StaticSchemaPartialValues, SchemaFieldNames, SchemaNormalizeOptions, SchemaFieldValueType, SchemaValidateOptions, SchemaDefaultValues, SchemaGetValuesOptions, SchemaAllValues, SchemaNamedFieldsOptions, SchemaNamedField, SchemaGetDefaultValuesOptions, SchemaFieldNamesWithDefaultValue, StaticSchemaEntity, SchemaPublicValues, SchemaPublicFieldNames } from './schemas.static.types';
3
- /** Universal schema class */
4
3
  export default class StaticSchemaEntityImplementation<S extends Schema> extends AbstractEntity implements StaticSchemaEntity<S> {
5
4
  static enableDuplicateCheckWhenTracking: boolean;
6
5
  protected schema: S;
@@ -9,7 +8,7 @@ export default class StaticSchemaEntityImplementation<S extends Schema> extends
9
8
  constructor(schema: S, values?: StaticSchemaPartialValues<S>);
10
9
  private buildFields;
11
10
  private normalizeValue;
12
- get<F extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = true>(fieldName: F, options?: SchemaNormalizeOptions<S, CreateEntityInstances>): SchemaFieldValueType<S, F, CreateEntityInstances>;
11
+ get<F extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = true>(fieldName: F, options?: SchemaNormalizeOptions<S, CreateEntityInstances>): SchemaFieldValueType<S, F, CreateEntityInstances, true>;
13
12
  set<F extends SchemaFieldNames<S>>(fieldName: F, value: SchemaFieldValueType<S, F>, options?: SchemaNormalizeOptions<S, false>): this;
14
13
  isValid(options?: SchemaValidateOptions<S>): boolean;
15
14
  private pluckExtraFields;
@@ -31,7 +31,6 @@ const SpruceError_1 = __importDefault(require("./errors/SpruceError"));
31
31
  const FieldFactory_1 = __importDefault(require("./factories/FieldFactory"));
32
32
  const cloneDeepPreservingInstances_1 = __importDefault(require("./utilities/cloneDeepPreservingInstances"));
33
33
  const normalizeFieldValue_1 = __importStar(require("./utilities/normalizeFieldValue"));
34
- /** Universal schema class */
35
34
  class StaticSchemaEntityImplementation extends AbstractEntity_1.default {
36
35
  constructor(schema, values) {
37
36
  super(schema);
@@ -158,11 +157,11 @@ class StaticSchemaEntityImplementation extends AbstractEntity_1.default {
158
157
  }
159
158
  getValues(options) {
160
159
  const values = {};
161
- const { fields = Object.keys(this.fields), shouldIncludePrivateFields: includePrivateFields = true, shouldIncludeOnlyFieldsWithValues, shouldStripUndefinedAndNullValues = false, } = options || {};
160
+ const { fields = Object.keys(this.fields), shouldIncludePrivateFields: includePrivateFields = true, shouldIncludeNullAndUndefinedFields = true, } = options || {};
162
161
  this.getNamedFields().forEach((namedField) => {
163
162
  const { name, field } = namedField;
164
- const shouldSkipBecauseNotSet = shouldIncludeOnlyFieldsWithValues && !(name in this.values);
165
- const shouldSkipBecauseUndefinedOrNull = shouldStripUndefinedAndNullValues &&
163
+ const shouldSkipBecauseNotSet = !shouldIncludeNullAndUndefinedFields && !(name in this.values);
164
+ const shouldSkipBecauseUndefinedOrNull = !shouldIncludeNullAndUndefinedFields &&
166
165
  (this.values[name] === undefined || this.values[name] === null);
167
166
  if (shouldSkipBecauseNotSet || shouldSkipBecauseUndefinedOrNull) {
168
167
  return;
@@ -35,7 +35,7 @@ export interface FieldDefinitionMap {
35
35
  email: EmailFieldDefinition;
36
36
  image: ImageFieldDefinition;
37
37
  }
38
- export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEntityInstances extends boolean> {
38
+ export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEntityInstances extends boolean, ShouldIncludeNullAndUndefinedFieldsInSchemas extends boolean = false> {
39
39
  boolean: BooleanFieldDefinition['value'];
40
40
  select: SelectFieldValueTypeMapper<F extends SelectFieldDefinition ? F : SelectFieldDefinition>;
41
41
  duration: DurationFieldDefinition['value'];
@@ -43,7 +43,7 @@ export interface FieldValueTypeGeneratorMap<F extends FieldDefinitions, CreateEn
43
43
  text: TextFieldDefinition['value'];
44
44
  address: AddressFieldDefinition['value'];
45
45
  phone: PhoneFieldDefinition['value'];
46
- schema: SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition ? F : SchemaFieldFieldDefinition, CreateEntityInstances>;
46
+ schema: SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition ? F : SchemaFieldFieldDefinition, CreateEntityInstances, ShouldIncludeNullAndUndefinedFieldsInSchemas>;
47
47
  raw: RawFieldDefinition['value'];
48
48
  number: NumberFieldDefinition['value'];
49
49
  dateTime: DateTimeFieldDefinition['value'];
@@ -1,6 +1,5 @@
1
1
  import AbstractEntity from './AbstractEntity';
2
2
  import { Schema, StaticSchemaPartialValues, SchemaFieldNames, SchemaNormalizeOptions, SchemaFieldValueType, SchemaValidateOptions, SchemaDefaultValues, SchemaGetValuesOptions, SchemaAllValues, SchemaNamedFieldsOptions, SchemaNamedField, SchemaGetDefaultValuesOptions, SchemaFieldNamesWithDefaultValue, StaticSchemaEntity, SchemaPublicValues, SchemaPublicFieldNames } from './schemas.static.types';
3
- /** Universal schema class */
4
3
  export default class StaticSchemaEntityImplementation<S extends Schema> extends AbstractEntity implements StaticSchemaEntity<S> {
5
4
  static enableDuplicateCheckWhenTracking: boolean;
6
5
  protected schema: S;
@@ -9,7 +8,7 @@ export default class StaticSchemaEntityImplementation<S extends Schema> extends
9
8
  constructor(schema: S, values?: StaticSchemaPartialValues<S>);
10
9
  private buildFields;
11
10
  private normalizeValue;
12
- get<F extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = true>(fieldName: F, options?: SchemaNormalizeOptions<S, CreateEntityInstances>): SchemaFieldValueType<S, F, CreateEntityInstances>;
11
+ get<F extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = true>(fieldName: F, options?: SchemaNormalizeOptions<S, CreateEntityInstances>): SchemaFieldValueType<S, F, CreateEntityInstances, true>;
13
12
  set<F extends SchemaFieldNames<S>>(fieldName: F, value: SchemaFieldValueType<S, F>, options?: SchemaNormalizeOptions<S, false>): this;
14
13
  isValid(options?: SchemaValidateOptions<S>): boolean;
15
14
  private pluckExtraFields;
@@ -3,7 +3,6 @@ import SpruceError from './errors/SpruceError.js';
3
3
  import FieldFactory from './factories/FieldFactory.js';
4
4
  import cloneDeepPreservingInstances from './utilities/cloneDeepPreservingInstances.js';
5
5
  import normalizeFieldValue, { normalizeValueToArray, } from './utilities/normalizeFieldValue.js';
6
- /** Universal schema class */
7
6
  class StaticSchemaEntityImplementation extends AbstractEntity {
8
7
  constructor(schema, values) {
9
8
  super(schema);
@@ -130,11 +129,11 @@ class StaticSchemaEntityImplementation extends AbstractEntity {
130
129
  }
131
130
  getValues(options) {
132
131
  const values = {};
133
- const { fields = Object.keys(this.fields), shouldIncludePrivateFields: includePrivateFields = true, shouldIncludeOnlyFieldsWithValues, shouldStripUndefinedAndNullValues = false, } = options || {};
132
+ const { fields = Object.keys(this.fields), shouldIncludePrivateFields: includePrivateFields = true, shouldIncludeNullAndUndefinedFields = true, } = options || {};
134
133
  this.getNamedFields().forEach((namedField) => {
135
134
  const { name, field } = namedField;
136
- const shouldSkipBecauseNotSet = shouldIncludeOnlyFieldsWithValues && !(name in this.values);
137
- const shouldSkipBecauseUndefinedOrNull = shouldStripUndefinedAndNullValues &&
135
+ const shouldSkipBecauseNotSet = !shouldIncludeNullAndUndefinedFields && !(name in this.values);
136
+ const shouldSkipBecauseUndefinedOrNull = !shouldIncludeNullAndUndefinedFields &&
138
137
  (this.values[name] === undefined || this.values[name] === null);
139
138
  if (shouldSkipBecauseNotSet || shouldSkipBecauseUndefinedOrNull) {
140
139
  return;
@@ -22,7 +22,7 @@ export type SchemaFieldUnion<S extends Array<Schema>, CreateEntityInstances exte
22
22
  values: SchemaValues<S[K]>;
23
23
  } : any;
24
24
  };
25
- export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false> = F['options']['schemas'] extends Array<Schema> ? IsArrayNoUnpack<SchemaFieldUnion<F['options']['schemas'], CreateEntityInstances>[number], F['isArray']> : F['options']['schema'] extends Schema ? CreateEntityInstances extends true ? IsArray<StaticSchemaEntity<F['options']['schema']>, F['isArray']> : IsArray<SchemaValues<F['options']['schema']>, F['isArray']> : any;
25
+ export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F['options']['schemas'] extends Array<Schema> ? IsArrayNoUnpack<SchemaFieldUnion<F['options']['schemas'], CreateEntityInstances>[number], F['isArray']> : F['options']['schema'] extends Schema ? CreateEntityInstances extends true ? IsArray<StaticSchemaEntity<F['options']['schema']>, F['isArray']> : IsArray<SchemaValues<F['options']['schema'], false, true, ShouldIncludeNullAndUndefinedFields>, F['isArray']> : any;
26
26
  export type SchemaFieldFieldDefinition = FieldDefinition<Record<string, any>, Record<string, any>, SchemaFieldValueUnion[], SchemaFieldValueUnion[]> & {
27
27
  /** * .Schema go team! */
28
28
  type: 'schema';
@@ -45,7 +45,7 @@ export type FieldDefinition<Value = any, DefaultValue = Value, ArrayValue = Valu
45
45
  defaultValue?: DefaultValue | null;
46
46
  value?: Value | null;
47
47
  });
48
- export type FieldDefinitionValueType<F extends FieldDefinitions, CreateEntityInstances extends boolean = false> = F extends FieldDefinitions ? IsRequired<IsArray<NonNullable<FieldValueTypeGeneratorMap<F, CreateEntityInstances>[F['type']]>, F['isArray']>, F['isRequired']> : any;
48
+ export type FieldDefinitionValueType<F extends FieldDefinitions, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F extends FieldDefinitions ? IsRequired<IsArray<NonNullable<FieldValueTypeGeneratorMap<F, CreateEntityInstances, ShouldIncludeNullAndUndefinedFields>[F['type']]>, F['isArray']>, F['isRequired']> : any;
49
49
  export interface Field<F extends FieldDefinitions> {
50
50
  readonly definition: F;
51
51
  readonly type: F['type'];
@@ -28,6 +28,7 @@ export interface StaticSchemaEntity<S extends Schema> extends SchemaEntity {
28
28
  validate(options?: SchemaValidateOptions<S>): void;
29
29
  isValid(options?: SchemaValidateOptions<S>): boolean;
30
30
  }
31
+ export type SchemaValues<S extends Schema, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, ShouldIncludeNullAndUndefinedFields extends boolean = false, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : IncludePrivateFields extends false ? ShouldIncludeNullAndUndefinedFields extends true ? Pick<SchemaAllValues<S, CreateEntityInstances>, PF> : Pick<SchemaStaticValues<S, CreateEntityInstances>, PF> : ShouldIncludeNullAndUndefinedFields extends true ? Pick<SchemaAllValues<S, CreateEntityInstances>, F> : Pick<SchemaStaticValues<S, CreateEntityInstances>, F>;
31
32
  export interface DynamicSchemaEntityByName<ISchema extends Schema, OurField extends Field<any> = ISchema['dynamicFieldSignature'] extends FieldDefinitions ? FieldMap[ISchema['dynamicFieldSignature']['type']] : any> extends SchemaEntity, Omit<StaticSchemaEntity<ISchema>, 'get' | 'set' | 'getValues' | 'setValues' | 'getNamedFields' | 'schemaId' | 'namespace' | 'name' | 'version' | 'description'> {
32
33
  get<F extends string, CreateEntityInstances extends boolean = true>(fieldName: F, options?: DynamicSchemaNormalizeOptions<CreateEntityInstances>): FieldDefinitionValueType<OurField, CreateEntityInstances>;
33
34
  set<F extends string>(fieldName: F, value: FieldDefinitionValueType<OurField>, options?: DynamicSchemaNormalizeOptions<false>): this;
@@ -79,7 +80,7 @@ export type DynamicSchemaPartialValues<S extends Schema, CreateEntityInstances e
79
80
  [dynamicField: string]: S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> | undefined | null : never;
80
81
  }>;
81
82
  export type SchemaStaticValues<T extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaOptionalFieldNames<T> = SchemaOptionalFieldNames<T>, V extends SchemaAllValues<T, CreateEntityInstances> = SchemaAllValues<T, CreateEntityInstances>> = Omit<V, K> & Partial<Pick<V, K>>;
82
- export type SchemaValues<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : SchemaStaticValues<S, CreateEntityInstances>;
83
+ export type SchemaValues_OLD<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : SchemaStaticValues<S, CreateEntityInstances>;
83
84
  export type IsDynamicSchema<S extends Schema> = S['dynamicFieldSignature'] extends FieldDefinitions ? true : false;
84
85
  export type SchemaDefaultValues<S extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaFieldNamesWithDefaultValue<S> = SchemaFieldNamesWithDefaultValue<S>, V extends SchemaAllValues<S, CreateEntityInstances> = SchemaAllValues<S, CreateEntityInstances>> = {
85
86
  [F in K]: NonNullable<V[F]>;
@@ -94,7 +95,7 @@ export type SchemaRequiredFieldNames<T extends Schema> = {
94
95
  export type SchemaFieldNamesWithDefaultValue<T extends Schema> = {
95
96
  [K in SchemaFieldNames<T>]: T['fields'][K] extends FieldDefinitions ? T['fields'][K]['defaultValue'] extends Required<T['fields'][K]['defaultValue']> ? K : never : never;
96
97
  }[SchemaFieldNames<T>];
97
- export type SchemaFieldValueType<S extends Schema, K extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = false> = S['fields'][K] extends FieldDefinitions ? FieldDefinitionValueType<S['fields'][K], CreateEntityInstances> : never;
98
+ export type SchemaFieldValueType<S extends Schema, K extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFieldsInSchemas extends boolean = false> = S['fields'][K] extends FieldDefinitions ? FieldDefinitionValueType<S['fields'][K], CreateEntityInstances, ShouldIncludeNullAndUndefinedFieldsInSchemas> : never;
98
99
  export type SchemaFieldNames<T extends Schema> = Extract<keyof T['fields'], string>;
99
100
  export type SchemaPublicFieldNames<S extends Schema> = {
100
101
  [K in SchemaFieldNames<S>]: S['fields'][K] extends FieldDefinitions ? S['fields'][K]['isPrivate'] extends true ? never : K : never;
@@ -116,17 +117,16 @@ export interface SchemaNormalizeFieldValueOptions<CreateEntityInstances extends
116
117
  /** Should I create schema instances for schema fields (defaults to true) */
117
118
  shouldCreateEntityInstances?: CreateEntityInstances;
118
119
  }
119
- export interface SchemaNormalizeOptions<S extends Schema, CreateEntityInstances extends boolean> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
120
+ export interface SchemaNormalizeOptions<S extends Schema, CreateEntityInstances extends boolean, ShouldIncludeNullAndUndefinedFields extends boolean = true> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
120
121
  /** Options passed to each field that conforms to the field definition's options */
121
122
  byField?: {
122
123
  [K in SchemaFieldNames<S>]?: S['fields'][K] extends FieldDefinition ? Partial<FieldDefinitionMap[S['fields'][K]['type']]['options']> : never;
123
124
  };
124
- shouldIncludeOnlyFieldsWithValues?: boolean;
125
- shouldStripUndefinedAndNullValues?: boolean;
125
+ shouldIncludeNullAndUndefinedFields?: ShouldIncludeNullAndUndefinedFields;
126
126
  }
127
127
  export interface DynamicSchemaNormalizeOptions<CreateEntityInstances extends boolean> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
128
128
  }
129
- export type SchemaGetValuesOptions<T extends Schema, F extends SchemaFieldNames<T>, PF extends SchemaPublicFieldNames<T>, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean> = SchemaNormalizeOptions<T, CreateEntityInstances> & (IncludePrivateFields extends false ? {
129
+ export type SchemaGetValuesOptions<T extends Schema, F extends SchemaFieldNames<T>, PF extends SchemaPublicFieldNames<T>, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, ShouldIncludeNullAndUndefinedFields extends boolean = true> = SchemaNormalizeOptions<T, CreateEntityInstances, ShouldIncludeNullAndUndefinedFields> & (IncludePrivateFields extends false ? {
130
130
  shouldIncludePrivateFields: IncludePrivateFields;
131
131
  fields?: PF[];
132
132
  } : {
@@ -1,5 +1,5 @@
1
1
  import normalizeSchemaValues from './normalizeSchemaValues.js';
2
2
  export default function normalizePartialSchemaValues(schema, values, options) {
3
- const normalized = normalizeSchemaValues(schema, values, Object.assign(Object.assign({}, options), { shouldIncludeOnlyFieldsWithValues: true }));
3
+ const normalized = normalizeSchemaValues(schema, values, Object.assign(Object.assign({}, options), { shouldIncludeNullAndUndefinedFields: false }));
4
4
  return normalized;
5
5
  }
@@ -1,2 +1,2 @@
1
- import { Schema, SchemaPartialValues, SchemaGetValuesOptions, SchemaFieldNames, SchemaPublicFieldNames, IsDynamicSchema, DynamicSchemaAllValues, SchemaPublicValues, SchemaAllValues } from '../schemas.static.types';
2
- export default function normalizeSchemaValues<S extends Schema, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, IsDynamic extends boolean = IsDynamicSchema<S>>(schema: S, values: SchemaPartialValues<S>, options?: SchemaGetValuesOptions<S, F, PF, CreateEntityInstances, IncludePrivateFields>): IsDynamic extends true ? DynamicSchemaAllValues<S, CreateEntityInstances> : IncludePrivateFields extends false ? Pick<SchemaPublicValues<S, CreateEntityInstances>, PF> : Pick<SchemaAllValues<S, CreateEntityInstances>, F>;
1
+ import { Schema, SchemaPartialValues, SchemaGetValuesOptions, SchemaFieldNames, SchemaPublicFieldNames, IsDynamicSchema, DynamicSchemaAllValues, SchemaValues } from '../schemas.static.types';
2
+ export default function normalizeSchemaValues<S extends Schema, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, IsDynamic extends boolean = IsDynamicSchema<S>, ShouldIncludeNullAndUndefinedFields extends boolean = true>(schema: S, values: SchemaPartialValues<S>, options?: SchemaGetValuesOptions<S, F, PF, CreateEntityInstances, IncludePrivateFields, ShouldIncludeNullAndUndefinedFields>): IsDynamic extends true ? DynamicSchemaAllValues<S, CreateEntityInstances> : IncludePrivateFields extends true ? Pick<SchemaValues<S, CreateEntityInstances, true, ShouldIncludeNullAndUndefinedFields>, F> : Pick<SchemaValues<S, CreateEntityInstances, true, ShouldIncludeNullAndUndefinedFields>, PF>;
@@ -22,7 +22,7 @@ export type SchemaFieldUnion<S extends Array<Schema>, CreateEntityInstances exte
22
22
  values: SchemaValues<S[K]>;
23
23
  } : any;
24
24
  };
25
- export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false> = F['options']['schemas'] extends Array<Schema> ? IsArrayNoUnpack<SchemaFieldUnion<F['options']['schemas'], CreateEntityInstances>[number], F['isArray']> : F['options']['schema'] extends Schema ? CreateEntityInstances extends true ? IsArray<StaticSchemaEntity<F['options']['schema']>, F['isArray']> : IsArray<SchemaValues<F['options']['schema']>, F['isArray']> : any;
25
+ export type SchemaFieldValueTypeMapper<F extends SchemaFieldFieldDefinition, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F['options']['schemas'] extends Array<Schema> ? IsArrayNoUnpack<SchemaFieldUnion<F['options']['schemas'], CreateEntityInstances>[number], F['isArray']> : F['options']['schema'] extends Schema ? CreateEntityInstances extends true ? IsArray<StaticSchemaEntity<F['options']['schema']>, F['isArray']> : IsArray<SchemaValues<F['options']['schema'], false, true, ShouldIncludeNullAndUndefinedFields>, F['isArray']> : any;
26
26
  export type SchemaFieldFieldDefinition = FieldDefinition<Record<string, any>, Record<string, any>, SchemaFieldValueUnion[], SchemaFieldValueUnion[]> & {
27
27
  /** * .Schema go team! */
28
28
  type: 'schema';
@@ -45,7 +45,7 @@ export type FieldDefinition<Value = any, DefaultValue = Value, ArrayValue = Valu
45
45
  defaultValue?: DefaultValue | null;
46
46
  value?: Value | null;
47
47
  });
48
- export type FieldDefinitionValueType<F extends FieldDefinitions, CreateEntityInstances extends boolean = false> = F extends FieldDefinitions ? IsRequired<IsArray<NonNullable<FieldValueTypeGeneratorMap<F, CreateEntityInstances>[F['type']]>, F['isArray']>, F['isRequired']> : any;
48
+ export type FieldDefinitionValueType<F extends FieldDefinitions, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFields extends boolean = false> = F extends FieldDefinitions ? IsRequired<IsArray<NonNullable<FieldValueTypeGeneratorMap<F, CreateEntityInstances, ShouldIncludeNullAndUndefinedFields>[F['type']]>, F['isArray']>, F['isRequired']> : any;
49
49
  export interface Field<F extends FieldDefinitions> {
50
50
  readonly definition: F;
51
51
  readonly type: F['type'];
@@ -28,6 +28,7 @@ export interface StaticSchemaEntity<S extends Schema> extends SchemaEntity {
28
28
  validate(options?: SchemaValidateOptions<S>): void;
29
29
  isValid(options?: SchemaValidateOptions<S>): boolean;
30
30
  }
31
+ export type SchemaValues<S extends Schema, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, ShouldIncludeNullAndUndefinedFields extends boolean = false, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : IncludePrivateFields extends false ? ShouldIncludeNullAndUndefinedFields extends true ? Pick<SchemaAllValues<S, CreateEntityInstances>, PF> : Pick<SchemaStaticValues<S, CreateEntityInstances>, PF> : ShouldIncludeNullAndUndefinedFields extends true ? Pick<SchemaAllValues<S, CreateEntityInstances>, F> : Pick<SchemaStaticValues<S, CreateEntityInstances>, F>;
31
32
  export interface DynamicSchemaEntityByName<ISchema extends Schema, OurField extends Field<any> = ISchema['dynamicFieldSignature'] extends FieldDefinitions ? FieldMap[ISchema['dynamicFieldSignature']['type']] : any> extends SchemaEntity, Omit<StaticSchemaEntity<ISchema>, 'get' | 'set' | 'getValues' | 'setValues' | 'getNamedFields' | 'schemaId' | 'namespace' | 'name' | 'version' | 'description'> {
32
33
  get<F extends string, CreateEntityInstances extends boolean = true>(fieldName: F, options?: DynamicSchemaNormalizeOptions<CreateEntityInstances>): FieldDefinitionValueType<OurField, CreateEntityInstances>;
33
34
  set<F extends string>(fieldName: F, value: FieldDefinitionValueType<OurField>, options?: DynamicSchemaNormalizeOptions<false>): this;
@@ -79,7 +80,7 @@ export type DynamicSchemaPartialValues<S extends Schema, CreateEntityInstances e
79
80
  [dynamicField: string]: S['dynamicFieldSignature'] extends FieldDefinitions ? FieldDefinitionValueType<S['dynamicFieldSignature'], CreateEntityInstances> | undefined | null : never;
80
81
  }>;
81
82
  export type SchemaStaticValues<T extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaOptionalFieldNames<T> = SchemaOptionalFieldNames<T>, V extends SchemaAllValues<T, CreateEntityInstances> = SchemaAllValues<T, CreateEntityInstances>> = Omit<V, K> & Partial<Pick<V, K>>;
82
- export type SchemaValues<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : SchemaStaticValues<S, CreateEntityInstances>;
83
+ export type SchemaValues_OLD<S extends Schema, CreateEntityInstances extends boolean = false> = IsDynamicSchema<S> extends true ? DynamicSchemaAllValues<S> : SchemaStaticValues<S, CreateEntityInstances>;
83
84
  export type IsDynamicSchema<S extends Schema> = S['dynamicFieldSignature'] extends FieldDefinitions ? true : false;
84
85
  export type SchemaDefaultValues<S extends Schema, CreateEntityInstances extends boolean = false, K extends SchemaFieldNamesWithDefaultValue<S> = SchemaFieldNamesWithDefaultValue<S>, V extends SchemaAllValues<S, CreateEntityInstances> = SchemaAllValues<S, CreateEntityInstances>> = {
85
86
  [F in K]: NonNullable<V[F]>;
@@ -94,7 +95,7 @@ export type SchemaRequiredFieldNames<T extends Schema> = {
94
95
  export type SchemaFieldNamesWithDefaultValue<T extends Schema> = {
95
96
  [K in SchemaFieldNames<T>]: T['fields'][K] extends FieldDefinitions ? T['fields'][K]['defaultValue'] extends Required<T['fields'][K]['defaultValue']> ? K : never : never;
96
97
  }[SchemaFieldNames<T>];
97
- export type SchemaFieldValueType<S extends Schema, K extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = false> = S['fields'][K] extends FieldDefinitions ? FieldDefinitionValueType<S['fields'][K], CreateEntityInstances> : never;
98
+ export type SchemaFieldValueType<S extends Schema, K extends SchemaFieldNames<S>, CreateEntityInstances extends boolean = false, ShouldIncludeNullAndUndefinedFieldsInSchemas extends boolean = false> = S['fields'][K] extends FieldDefinitions ? FieldDefinitionValueType<S['fields'][K], CreateEntityInstances, ShouldIncludeNullAndUndefinedFieldsInSchemas> : never;
98
99
  export type SchemaFieldNames<T extends Schema> = Extract<keyof T['fields'], string>;
99
100
  export type SchemaPublicFieldNames<S extends Schema> = {
100
101
  [K in SchemaFieldNames<S>]: S['fields'][K] extends FieldDefinitions ? S['fields'][K]['isPrivate'] extends true ? never : K : never;
@@ -116,17 +117,16 @@ export interface SchemaNormalizeFieldValueOptions<CreateEntityInstances extends
116
117
  /** Should I create schema instances for schema fields (defaults to true) */
117
118
  shouldCreateEntityInstances?: CreateEntityInstances;
118
119
  }
119
- export interface SchemaNormalizeOptions<S extends Schema, CreateEntityInstances extends boolean> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
120
+ export interface SchemaNormalizeOptions<S extends Schema, CreateEntityInstances extends boolean, ShouldIncludeNullAndUndefinedFields extends boolean = true> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
120
121
  /** Options passed to each field that conforms to the field definition's options */
121
122
  byField?: {
122
123
  [K in SchemaFieldNames<S>]?: S['fields'][K] extends FieldDefinition ? Partial<FieldDefinitionMap[S['fields'][K]['type']]['options']> : never;
123
124
  };
124
- shouldIncludeOnlyFieldsWithValues?: boolean;
125
- shouldStripUndefinedAndNullValues?: boolean;
125
+ shouldIncludeNullAndUndefinedFields?: ShouldIncludeNullAndUndefinedFields;
126
126
  }
127
127
  export interface DynamicSchemaNormalizeOptions<CreateEntityInstances extends boolean> extends SchemaNormalizeFieldValueOptions<CreateEntityInstances> {
128
128
  }
129
- export type SchemaGetValuesOptions<T extends Schema, F extends SchemaFieldNames<T>, PF extends SchemaPublicFieldNames<T>, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean> = SchemaNormalizeOptions<T, CreateEntityInstances> & (IncludePrivateFields extends false ? {
129
+ export type SchemaGetValuesOptions<T extends Schema, F extends SchemaFieldNames<T>, PF extends SchemaPublicFieldNames<T>, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, ShouldIncludeNullAndUndefinedFields extends boolean = true> = SchemaNormalizeOptions<T, CreateEntityInstances, ShouldIncludeNullAndUndefinedFields> & (IncludePrivateFields extends false ? {
130
130
  shouldIncludePrivateFields: IncludePrivateFields;
131
131
  fields?: PF[];
132
132
  } : {
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const normalizeSchemaValues_1 = __importDefault(require("./normalizeSchemaValues"));
7
7
  function normalizePartialSchemaValues(schema, values, options) {
8
- const normalized = (0, normalizeSchemaValues_1.default)(schema, values, Object.assign(Object.assign({}, options), { shouldIncludeOnlyFieldsWithValues: true }));
8
+ const normalized = (0, normalizeSchemaValues_1.default)(schema, values, Object.assign(Object.assign({}, options), { shouldIncludeNullAndUndefinedFields: false }));
9
9
  return normalized;
10
10
  }
11
11
  exports.default = normalizePartialSchemaValues;
@@ -1,2 +1,2 @@
1
- import { Schema, SchemaPartialValues, SchemaGetValuesOptions, SchemaFieldNames, SchemaPublicFieldNames, IsDynamicSchema, DynamicSchemaAllValues, SchemaPublicValues, SchemaAllValues } from '../schemas.static.types';
2
- export default function normalizeSchemaValues<S extends Schema, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, IsDynamic extends boolean = IsDynamicSchema<S>>(schema: S, values: SchemaPartialValues<S>, options?: SchemaGetValuesOptions<S, F, PF, CreateEntityInstances, IncludePrivateFields>): IsDynamic extends true ? DynamicSchemaAllValues<S, CreateEntityInstances> : IncludePrivateFields extends false ? Pick<SchemaPublicValues<S, CreateEntityInstances>, PF> : Pick<SchemaAllValues<S, CreateEntityInstances>, F>;
1
+ import { Schema, SchemaPartialValues, SchemaGetValuesOptions, SchemaFieldNames, SchemaPublicFieldNames, IsDynamicSchema, DynamicSchemaAllValues, SchemaValues } from '../schemas.static.types';
2
+ export default function normalizeSchemaValues<S extends Schema, F extends SchemaFieldNames<S> = SchemaFieldNames<S>, PF extends SchemaPublicFieldNames<S> = SchemaPublicFieldNames<S>, CreateEntityInstances extends boolean = false, IncludePrivateFields extends boolean = true, IsDynamic extends boolean = IsDynamicSchema<S>, ShouldIncludeNullAndUndefinedFields extends boolean = true>(schema: S, values: SchemaPartialValues<S>, options?: SchemaGetValuesOptions<S, F, PF, CreateEntityInstances, IncludePrivateFields, ShouldIncludeNullAndUndefinedFields>): IsDynamic extends true ? DynamicSchemaAllValues<S, CreateEntityInstances> : IncludePrivateFields extends true ? Pick<SchemaValues<S, CreateEntityInstances, true, ShouldIncludeNullAndUndefinedFields>, F> : Pick<SchemaValues<S, CreateEntityInstances, true, ShouldIncludeNullAndUndefinedFields>, PF>;
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "!build/__tests__",
9
9
  "esm"
10
10
  ],
11
- "version": "28.8.1",
11
+ "version": "29.0.1",
12
12
  "main": "./build/index.js",
13
13
  "types": "./build/index.d.ts",
14
14
  "module": "./build/esm/index.js",
@@ -66,8 +66,8 @@
66
66
  "build.copy-files": "mkdir -p build && rsync -avzq --exclude='*.ts' ./src/ ./build/"
67
67
  },
68
68
  "dependencies": {
69
- "@sprucelabs/error": "^5.1.11",
70
- "@sprucelabs/test-utils": "^3.4.75",
69
+ "@sprucelabs/error": "^5.1.12",
70
+ "@sprucelabs/test-utils": "^3.4.76",
71
71
  "email-validator": "^2.0.4",
72
72
  "just-safe-get": "^4.2.0",
73
73
  "just-safe-set": "^4.2.1"
@@ -78,18 +78,18 @@
78
78
  "@sprucelabs/jest-sheets-reporter": "^2.0.20",
79
79
  "@sprucelabs/resolve-path-aliases": "^1.1.122",
80
80
  "@sprucelabs/semantic-release": "^4.0.8",
81
- "@sprucelabs/test": "^7.7.453",
81
+ "@sprucelabs/test": "^7.7.454",
82
82
  "chokidar-cli": "^3.0.0",
83
83
  "concurrently": "^8.2.0",
84
- "eslint": "^8.43.0",
84
+ "eslint": "^8.44.0",
85
85
  "eslint-config-spruce": "^10.12.0",
86
- "jest": "^29.5.0",
87
- "jest-circus": "^29.5.0",
88
- "prettier": "^2.8.8",
86
+ "jest": "^29.6.1",
87
+ "jest-circus": "^29.6.1",
88
+ "prettier": "2.8.8",
89
89
  "ts-node": "^10.9.1",
90
90
  "tsc-watch": "^6.0.4",
91
91
  "tsconfig-paths": "^4.2.0",
92
- "typescript": "^5.1.3"
92
+ "typescript": "^5.1.6"
93
93
  },
94
94
  "jest": {
95
95
  "testEnvironment": "node",