@sprucelabs/schema 32.3.2 → 32.3.3

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.
@@ -48,8 +48,8 @@ ${body}}`;
48
48
  if (isRequired) {
49
49
  validateTags.push('required');
50
50
  }
51
- if (minArrayLength !== undefined) {
52
- validateTags.push(`min=${minArrayLength}`);
51
+ if ((isArray && isRequired) || minArrayLength !== undefined) {
52
+ validateTags.push(`min=${minArrayLength ?? 1}`);
53
53
  }
54
54
  if (!isRequired) {
55
55
  fieldLine += ',omitempty"';
@@ -75,7 +75,7 @@ ${body}}`;
75
75
  comment = `// ${schema.name}`;
76
76
  }
77
77
  if (schema.description) {
78
- comment += `: ${schema.description}`;
78
+ comment += `${schema.name ? ': ' : '// '}${schema.description}`;
79
79
  }
80
80
  return comment;
81
81
  }
@@ -43,8 +43,8 @@ ${body}}`;
43
43
  if (isRequired) {
44
44
  validateTags.push('required');
45
45
  }
46
- if (minArrayLength !== undefined) {
47
- validateTags.push(`min=${minArrayLength}`);
46
+ if ((isArray && isRequired) || minArrayLength !== undefined) {
47
+ validateTags.push(`min=${minArrayLength !== null && minArrayLength !== void 0 ? minArrayLength : 1}`);
48
48
  }
49
49
  if (!isRequired) {
50
50
  fieldLine += ',omitempty"';
@@ -70,7 +70,7 @@ ${body}}`;
70
70
  comment = `// ${schema.name}`;
71
71
  }
72
72
  if (schema.description) {
73
- comment += `: ${schema.description}`;
73
+ comment += `${schema.name ? ': ' : '// '}${schema.description}`;
74
74
  }
75
75
  return comment;
76
76
  }
@@ -1,8 +1,23 @@
1
1
  import AbstractField from './AbstractField.js';
2
2
  class RawField extends AbstractField {
3
3
  static generateTemplateDetails(options) {
4
+ const { definition, language } = options;
5
+ const { isArray } = definition;
6
+ const { options: fieldOptions } = definition;
7
+ const { valueType } = fieldOptions;
8
+ const arrayNotation = isArray ? '[]' : '';
9
+ let resolvedType = valueType;
10
+ if (language === 'go') {
11
+ const goType = valueType === 'Record<string, any>'
12
+ ? 'map[string]interface{}'
13
+ : 'interface{}';
14
+ resolvedType = `${arrayNotation}${goType}`;
15
+ }
16
+ else {
17
+ resolvedType = `${arrayNotation}${valueType}`;
18
+ }
4
19
  return {
5
- valueType: `(${options.definition.options.valueType})${options.definition.isArray ? '[]' : ''}`,
20
+ valueType: resolvedType,
6
21
  };
7
22
  }
8
23
  }
@@ -12,6 +12,7 @@ export default class SchemaField<F extends SchemaFieldFieldDefinition = SchemaFi
12
12
  valueTypeMapper: string;
13
13
  };
14
14
  static generateTemplateDetails(options: FieldTemplateDetailOptions<SchemaFieldFieldDefinition>): FieldTemplateDetails;
15
+ private static findSchemaInTemplateItems;
15
16
  private static mapFieldDefinitionToSchemas;
16
17
  validate(value: any, options?: ValidateOptions<SchemaFieldFieldDefinition>): FieldError[];
17
18
  private Schema;
@@ -49,68 +49,33 @@ class SchemaField extends AbstractField {
49
49
  }
50
50
  static generateTemplateDetails(options) {
51
51
  const { templateItems, renderAs, definition, globalNamespace, language, } = options;
52
+ const { isArray } = definition;
52
53
  const { typeSuffix = '' } = definition.options;
53
- const idsWithVersion = SchemaField.mapFieldDefinitionToSchemaIdsWithVersion(definition);
54
+ const idsWithVersion = this.mapFieldDefinitionToSchemaIdsWithVersion(definition);
54
55
  const unions = [];
55
56
  idsWithVersion.forEach((idWithVersion) => {
56
- const { id, version, namespace } = idWithVersion;
57
- let allMatches = templateItems.filter((item) => {
58
- if (!item.id) {
59
- throwInvalidReferenceError(item);
60
- }
61
- return item.id.toLowerCase() === id.toLowerCase();
62
- });
63
- if (namespace) {
64
- allMatches = allMatches.filter((item) => {
65
- if (!item.namespace) {
66
- throwInvalidReferenceError(item);
67
- }
68
- return (item.namespace.toLowerCase() === namespace.toLowerCase());
69
- });
57
+ const { version } = idWithVersion;
58
+ const { namePascal, namespace, id, nameCamel, schema } = this.findSchemaInTemplateItems(idWithVersion, templateItems);
59
+ let valueType;
60
+ if (language === 'go') {
61
+ valueType = `${namespace}${namePascal}`;
70
62
  }
71
- let matchedTemplateItem;
72
- if (allMatches.length === 0) {
73
- matchedTemplateItem = allMatches[0];
63
+ else if (renderAs === TemplateRenderAs.Value) {
64
+ valueType = `${nameCamel}Schema${schema.version ? `_${schema.version}` : ''}`;
74
65
  }
75
66
  else {
76
- matchedTemplateItem = allMatches.find((d) => d.schema.version === version);
77
- if (!matchedTemplateItem) {
78
- throw new SpruceError({
79
- code: 'VERSION_NOT_FOUND',
80
- schemaId: id,
81
- });
67
+ valueType = `${globalNamespace}.${namespace}${version ? `.${version}` : ''}${renderAs === TemplateRenderAs.Type
68
+ ? `.${namePascal + typeSuffix}`
69
+ : `.${namePascal}Schema`}`;
70
+ if (renderAs === TemplateRenderAs.Type &&
71
+ idsWithVersion.length > 1) {
72
+ valueType = `{ id: '${id}', values: ${valueType} }`;
82
73
  }
83
74
  }
84
- if (matchedTemplateItem) {
85
- let valueType;
86
- const { namePascal, namespace, id, nameCamel, schema } = matchedTemplateItem;
87
- if (language === 'go') {
88
- valueType = `*${namespace}${namePascal}`;
89
- }
90
- else if (renderAs === TemplateRenderAs.Value) {
91
- valueType = `${nameCamel}Schema${schema.version ? `_${schema.version}` : ''}`;
92
- }
93
- else {
94
- valueType = `${globalNamespace}.${namespace}${version ? `.${version}` : ''}${renderAs === TemplateRenderAs.Type
95
- ? `.${namePascal + typeSuffix}`
96
- : `.${namePascal}Schema`}`;
97
- if (renderAs === TemplateRenderAs.Type &&
98
- idsWithVersion.length > 1) {
99
- valueType = `{ id: '${id}', values: ${valueType} }`;
100
- }
101
- }
102
- unions.push({
103
- schemaId: id,
104
- valueType,
105
- });
106
- }
107
- else {
108
- throw new SpruceError({
109
- code: 'SCHEMA_NOT_FOUND',
110
- schemaId: id,
111
- friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace !== null && namespace !== void 0 ? namespace : '**missing**'}'.`,
112
- });
113
- }
75
+ unions.push({
76
+ schemaId: id,
77
+ valueType,
78
+ });
114
79
  });
115
80
  let valueType;
116
81
  if (renderAs === TemplateRenderAs.Value) {
@@ -123,19 +88,55 @@ class SchemaField extends AbstractField {
123
88
  }
124
89
  else {
125
90
  valueType = unions.map((item) => item.valueType).join(' | ');
126
- valueType = `${(definition.isArray ||
127
- renderAs === TemplateRenderAs.SchemaType) &&
128
- unions.length > 1
129
- ? `(${valueType})`
130
- : `${valueType}`}${(definition.isArray && renderAs === TemplateRenderAs.Type) ||
131
- (unions.length > 1 && renderAs === TemplateRenderAs.SchemaType)
132
- ? '[]'
133
- : ''}`;
91
+ const shouldRenderAsArray = (isArray && renderAs === TemplateRenderAs.Type) ||
92
+ (unions.length > 1 && renderAs === TemplateRenderAs.SchemaType);
93
+ const arrayNotation = shouldRenderAsArray ? '[]' : '';
94
+ if (language === 'go') {
95
+ valueType = `*${arrayNotation}${valueType}`;
96
+ }
97
+ else {
98
+ valueType = `${shouldRenderAsArray && unions.length > 1
99
+ ? `(${valueType})`
100
+ : `${valueType}`}${arrayNotation}`;
101
+ }
134
102
  }
135
103
  return {
136
104
  valueType,
137
105
  };
138
106
  }
107
+ static findSchemaInTemplateItems(idWithVersion, templateItems) {
108
+ const { id, namespace, version } = idWithVersion;
109
+ let allMatches = templateItems.filter((item) => {
110
+ if (!item.id) {
111
+ throwInvalidReferenceError(item);
112
+ }
113
+ return item.id.toLowerCase() === id.toLowerCase();
114
+ });
115
+ if (namespace) {
116
+ allMatches = allMatches.filter((item) => {
117
+ if (!item.namespace) {
118
+ throwInvalidReferenceError(item);
119
+ }
120
+ return item.namespace.toLowerCase() === namespace.toLowerCase();
121
+ });
122
+ }
123
+ if (allMatches.length === 0) {
124
+ throw new SpruceError({
125
+ code: 'SCHEMA_NOT_FOUND',
126
+ schemaId: id,
127
+ friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace !== null && namespace !== void 0 ? namespace : '**missing**'}'.`,
128
+ });
129
+ }
130
+ let matchedTemplateItem;
131
+ matchedTemplateItem = allMatches.find((d) => d.schema.version === version);
132
+ if (!matchedTemplateItem) {
133
+ throw new SpruceError({
134
+ code: 'VERSION_NOT_FOUND',
135
+ schemaId: id,
136
+ });
137
+ }
138
+ return matchedTemplateItem;
139
+ }
139
140
  static mapFieldDefinitionToSchemas(definition, options) {
140
141
  const { schemasById: schemasById = {} } = options || {};
141
142
  const schemasOrIds = SchemaField.mapFieldDefinitionToSchemasOrIdsWithVersion(definition);
@@ -6,8 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const AbstractField_1 = __importDefault(require("./AbstractField"));
7
7
  class RawField extends AbstractField_1.default {
8
8
  static generateTemplateDetails(options) {
9
+ const { definition, language } = options;
10
+ const { isArray } = definition;
11
+ const { options: fieldOptions } = definition;
12
+ const { valueType } = fieldOptions;
13
+ const arrayNotation = isArray ? '[]' : '';
14
+ let resolvedType = valueType;
15
+ if (language === 'go') {
16
+ const goType = valueType === 'Record<string, any>'
17
+ ? 'map[string]interface{}'
18
+ : 'interface{}';
19
+ resolvedType = `${arrayNotation}${goType}`;
20
+ }
21
+ else {
22
+ resolvedType = `${arrayNotation}${valueType}`;
23
+ }
9
24
  return {
10
- valueType: `(${options.definition.options.valueType})${options.definition.isArray ? '[]' : ''}`,
25
+ valueType: resolvedType,
11
26
  };
12
27
  }
13
28
  }
@@ -12,6 +12,7 @@ export default class SchemaField<F extends SchemaFieldFieldDefinition = SchemaFi
12
12
  valueTypeMapper: string;
13
13
  };
14
14
  static generateTemplateDetails(options: FieldTemplateDetailOptions<SchemaFieldFieldDefinition>): FieldTemplateDetails;
15
+ private static findSchemaInTemplateItems;
15
16
  private static mapFieldDefinitionToSchemas;
16
17
  validate(value: any, options?: ValidateOptions<SchemaFieldFieldDefinition>): FieldError[];
17
18
  private Schema;
@@ -54,68 +54,33 @@ class SchemaField extends AbstractField_1.default {
54
54
  }
55
55
  static generateTemplateDetails(options) {
56
56
  const { templateItems, renderAs, definition, globalNamespace, language, } = options;
57
+ const { isArray } = definition;
57
58
  const { typeSuffix = '' } = definition.options;
58
- const idsWithVersion = SchemaField.mapFieldDefinitionToSchemaIdsWithVersion(definition);
59
+ const idsWithVersion = this.mapFieldDefinitionToSchemaIdsWithVersion(definition);
59
60
  const unions = [];
60
61
  idsWithVersion.forEach((idWithVersion) => {
61
- const { id, version, namespace } = idWithVersion;
62
- let allMatches = templateItems.filter((item) => {
63
- if (!item.id) {
64
- throwInvalidReferenceError(item);
65
- }
66
- return item.id.toLowerCase() === id.toLowerCase();
67
- });
68
- if (namespace) {
69
- allMatches = allMatches.filter((item) => {
70
- if (!item.namespace) {
71
- throwInvalidReferenceError(item);
72
- }
73
- return (item.namespace.toLowerCase() === namespace.toLowerCase());
74
- });
62
+ const { version } = idWithVersion;
63
+ const { namePascal, namespace, id, nameCamel, schema } = this.findSchemaInTemplateItems(idWithVersion, templateItems);
64
+ let valueType;
65
+ if (language === 'go') {
66
+ valueType = `${namespace}${namePascal}`;
75
67
  }
76
- let matchedTemplateItem;
77
- if (allMatches.length === 0) {
78
- matchedTemplateItem = allMatches[0];
68
+ else if (renderAs === template_types_1.TemplateRenderAs.Value) {
69
+ valueType = `${nameCamel}Schema${schema.version ? `_${schema.version}` : ''}`;
79
70
  }
80
71
  else {
81
- matchedTemplateItem = allMatches.find((d) => d.schema.version === version);
82
- if (!matchedTemplateItem) {
83
- throw new SpruceError_1.default({
84
- code: 'VERSION_NOT_FOUND',
85
- schemaId: id,
86
- });
72
+ valueType = `${globalNamespace}.${namespace}${version ? `.${version}` : ''}${renderAs === template_types_1.TemplateRenderAs.Type
73
+ ? `.${namePascal + typeSuffix}`
74
+ : `.${namePascal}Schema`}`;
75
+ if (renderAs === template_types_1.TemplateRenderAs.Type &&
76
+ idsWithVersion.length > 1) {
77
+ valueType = `{ id: '${id}', values: ${valueType} }`;
87
78
  }
88
79
  }
89
- if (matchedTemplateItem) {
90
- let valueType;
91
- const { namePascal, namespace, id, nameCamel, schema } = matchedTemplateItem;
92
- if (language === 'go') {
93
- valueType = `*${namespace}${namePascal}`;
94
- }
95
- else if (renderAs === template_types_1.TemplateRenderAs.Value) {
96
- valueType = `${nameCamel}Schema${schema.version ? `_${schema.version}` : ''}`;
97
- }
98
- else {
99
- valueType = `${globalNamespace}.${namespace}${version ? `.${version}` : ''}${renderAs === template_types_1.TemplateRenderAs.Type
100
- ? `.${namePascal + typeSuffix}`
101
- : `.${namePascal}Schema`}`;
102
- if (renderAs === template_types_1.TemplateRenderAs.Type &&
103
- idsWithVersion.length > 1) {
104
- valueType = `{ id: '${id}', values: ${valueType} }`;
105
- }
106
- }
107
- unions.push({
108
- schemaId: id,
109
- valueType,
110
- });
111
- }
112
- else {
113
- throw new SpruceError_1.default({
114
- code: 'SCHEMA_NOT_FOUND',
115
- schemaId: id,
116
- friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace ?? '**missing**'}'.`,
117
- });
118
- }
80
+ unions.push({
81
+ schemaId: id,
82
+ valueType,
83
+ });
119
84
  });
120
85
  let valueType;
121
86
  if (renderAs === template_types_1.TemplateRenderAs.Value) {
@@ -128,19 +93,55 @@ class SchemaField extends AbstractField_1.default {
128
93
  }
129
94
  else {
130
95
  valueType = unions.map((item) => item.valueType).join(' | ');
131
- valueType = `${(definition.isArray ||
132
- renderAs === template_types_1.TemplateRenderAs.SchemaType) &&
133
- unions.length > 1
134
- ? `(${valueType})`
135
- : `${valueType}`}${(definition.isArray && renderAs === template_types_1.TemplateRenderAs.Type) ||
136
- (unions.length > 1 && renderAs === template_types_1.TemplateRenderAs.SchemaType)
137
- ? '[]'
138
- : ''}`;
96
+ const shouldRenderAsArray = (isArray && renderAs === template_types_1.TemplateRenderAs.Type) ||
97
+ (unions.length > 1 && renderAs === template_types_1.TemplateRenderAs.SchemaType);
98
+ const arrayNotation = shouldRenderAsArray ? '[]' : '';
99
+ if (language === 'go') {
100
+ valueType = `*${arrayNotation}${valueType}`;
101
+ }
102
+ else {
103
+ valueType = `${shouldRenderAsArray && unions.length > 1
104
+ ? `(${valueType})`
105
+ : `${valueType}`}${arrayNotation}`;
106
+ }
139
107
  }
140
108
  return {
141
109
  valueType,
142
110
  };
143
111
  }
112
+ static findSchemaInTemplateItems(idWithVersion, templateItems) {
113
+ const { id, namespace, version } = idWithVersion;
114
+ let allMatches = templateItems.filter((item) => {
115
+ if (!item.id) {
116
+ throwInvalidReferenceError(item);
117
+ }
118
+ return item.id.toLowerCase() === id.toLowerCase();
119
+ });
120
+ if (namespace) {
121
+ allMatches = allMatches.filter((item) => {
122
+ if (!item.namespace) {
123
+ throwInvalidReferenceError(item);
124
+ }
125
+ return item.namespace.toLowerCase() === namespace.toLowerCase();
126
+ });
127
+ }
128
+ if (allMatches.length === 0) {
129
+ throw new SpruceError_1.default({
130
+ code: 'SCHEMA_NOT_FOUND',
131
+ schemaId: id,
132
+ friendlyMessage: `Template generation failed. I could not find a schema that was being referenced. I was looking for a schema with the id of '${id}' and namespace '${namespace ?? '**missing**'}'.`,
133
+ });
134
+ }
135
+ let matchedTemplateItem;
136
+ matchedTemplateItem = allMatches.find((d) => d.schema.version === version);
137
+ if (!matchedTemplateItem) {
138
+ throw new SpruceError_1.default({
139
+ code: 'VERSION_NOT_FOUND',
140
+ schemaId: id,
141
+ });
142
+ }
143
+ return matchedTemplateItem;
144
+ }
144
145
  static mapFieldDefinitionToSchemas(definition, options) {
145
146
  const { schemasById: schemasById = {} } = options || {};
146
147
  const schemasOrIds = SchemaField.mapFieldDefinitionToSchemasOrIdsWithVersion(definition);
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "!build/__tests__",
9
9
  "esm"
10
10
  ],
11
- "version": "32.3.2",
11
+ "version": "32.3.3",
12
12
  "main": "./build/index.js",
13
13
  "types": "./build/index.d.ts",
14
14
  "module": "./build/esm/index.js",