@json-layout/vocabulary 1.4.2 → 1.5.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-layout/vocabulary",
3
- "version": "1.4.2",
3
+ "version": "1.5.0",
4
4
  "description": "Main JSON Layout vocabulary as JSON schemas and Typescript types. Also contains some small utility functions to validate and normalize annotations.",
5
5
  "type": "module",
6
6
  "exports": {
package/src/index.js CHANGED
@@ -4,4 +4,4 @@
4
4
  export * from './layout-keyword/index.js'
5
5
  export * from './normalized-layout/index.js'
6
6
  export * from './components/index.js'
7
- export { normalizeLayoutFragment, getSchemaFragmentType } from './normalize.js'
7
+ export { normalizeLayoutFragment, getSchemaFragmentType, mergeNullableSubSchema } from './normalize.js'
package/src/normalize.js CHANGED
@@ -291,6 +291,35 @@ function getItemsFromSchema (schemaFragment) {
291
291
  return null
292
292
  }
293
293
 
294
+ /**
295
+ * @param {SchemaFragment} schemaFragment
296
+ * @returns {boolean | undefined}
297
+ */
298
+ export const mergeNullableSubSchema = (schemaFragment) => {
299
+ /** @type {null | 'oneOf' | 'anyOf'} */
300
+ let subTypesKey = null
301
+ if (schemaFragment.oneOf) subTypesKey = 'oneOf'
302
+ else if (schemaFragment.anyOf) subTypesKey = 'anyOf'
303
+ if (subTypesKey) {
304
+ const subTypes = schemaFragment[subTypesKey]
305
+ /* if (subTypes && subTypes.length === 1) {
306
+ const subType = subTypes[0]
307
+ for (const key of Object.keys(schemaFragment)) delete subType[key]
308
+ Object.assign(schemaFragment, subType)
309
+ delete schemaFragment[subTypesKey]
310
+ } */
311
+ if (subTypes && subTypes.length === 2 && subTypes.some(t => t.type === 'null')) {
312
+ const subType = subTypes.find(t => t.type !== 'null')
313
+ if (subType) {
314
+ for (const key of Object.keys(schemaFragment)) delete subType[key]
315
+ Object.assign(schemaFragment, subType)
316
+ delete schemaFragment[subTypesKey]
317
+ return true
318
+ }
319
+ }
320
+ }
321
+ }
322
+
294
323
  /**
295
324
  * @param {SchemaFragment} schemaFragment
296
325
  * @returns {{type: string | undefined, nullable: boolean}}
@@ -306,7 +335,6 @@ export const getSchemaFragmentType = (schemaFragment) => {
306
335
  }
307
336
 
308
337
  // case where type is not defined but can be deduced from children oneOf/allOf/anyOf
309
- /** @type {any[]} */
310
338
  if (!schemaFragment.type) {
311
339
  /** @type {string[]} */
312
340
  const combinationTypes = []
@@ -323,6 +351,10 @@ export const getSchemaFragmentType = (schemaFragment) => {
323
351
  if (combinationTypes.length === 1) return { type: combinationTypes[0], nullable: false }
324
352
  }
325
353
 
354
+ if (Array.isArray(schemaFragment.type)) {
355
+ throw new Error('multiple types are not supported')
356
+ }
357
+
326
358
  return { type: schemaFragment.type, nullable: false }
327
359
  }
328
360
 
@@ -661,6 +693,7 @@ function normalizeValidLayoutFragment (key, schemaFragment, type, nullable, sche
661
693
  */
662
694
  export function normalizeLayoutFragment (key, schemaFragment, schemaPath, components, markdown = (src) => src, useDescription, optionsKeys, schemaChild, knownType, knownNullable) {
663
695
  const { type, nullable } = knownType ? { type: knownType, nullable: knownNullable ?? false } : getSchemaFragmentType(schemaFragment)
696
+
664
697
  /** @type {string[]} */
665
698
  const errors = []
666
699
  try {
package/src/types.ts CHANGED
@@ -5,7 +5,7 @@ export interface SchemaFragment {
5
5
  layout?: LayoutKeyword
6
6
  oneOfLayout?: LayoutKeyword
7
7
  patternPropertiesLayout?: LayoutKeyword
8
- type: string
8
+ type?: string | string[]
9
9
  format?: string
10
10
  title?: string
11
11
  description?: string
package/types/index.d.ts CHANGED
@@ -3,5 +3,5 @@ export * from "./normalized-layout/index.js";
3
3
  export * from "./components/index.js";
4
4
  export type SchemaFragment = import("./types.js").SchemaFragment;
5
5
  export type ComponentInfo = import("./types.js").ComponentInfo;
6
- export { normalizeLayoutFragment, getSchemaFragmentType } from "./normalize.js";
6
+ export { normalizeLayoutFragment, getSchemaFragmentType, mergeNullableSubSchema } from "./normalize.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -15,6 +15,7 @@ export function normalizeLayoutFragment(key: string | number, schemaFragment: Sc
15
15
  layout: NormalizedLayout;
16
16
  errors: string[];
17
17
  };
18
+ export function mergeNullableSubSchema(schemaFragment: SchemaFragment): boolean | undefined;
18
19
  export function getSchemaFragmentType(schemaFragment: SchemaFragment): {
19
20
  type: string | undefined;
20
21
  nullable: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.js"],"names":[],"mappings":"AAwoBA;;;;;;;;;;;;GAYG;AACH,6CAZW,MAAM,GAAG,MAAM,kBACf,cAAc,cACd,MAAM,cACN,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,aAAa,CAAC,aAClD,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,+BACxB,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,gBACnC,MAAM,EAAE,gBACR,OAAO,GAAG,mBAAmB,cAC7B,MAAM,GAAG,SAAS,kBAClB,OAAO,GACL;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CAuBxD;AAjYM,sDAHI,cAAc,GACZ;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAC,CA+BzD;oBAjUY,OAAO,YAAY,EAAE,KAAK;uBAC1B,OAAO,YAAY,EAAE,QAAQ;6BAC7B,OAAO,YAAY,EAAE,cAAc;yBACnC,OAAO,YAAY,EAAE,UAAU;+BAC/B,OAAO,YAAY,EAAE,gBAAgB;4BACrC,OAAO,YAAY,EAAE,aAAa;8BAClC,OAAO,YAAY,EAAE,eAAe;gCACpC,OAAO,YAAY,EAAE,iBAAiB;6BACtC,OAAO,YAAY,EAAE,cAAc"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.js"],"names":[],"mappings":"AAwqBA;;;;;;;;;;;;GAYG;AACH,6CAZW,MAAM,GAAG,MAAM,kBACf,cAAc,cACd,MAAM,cACN,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,aAAa,CAAC,aAClD,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,+BACxB,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,gBACnC,MAAM,EAAE,gBACR,OAAO,GAAG,mBAAmB,cAC7B,MAAM,GAAG,SAAS,kBAClB,OAAO,GACL;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CAwBxD;AAlaM,uDAHI,cAAc,GACZ,OAAO,GAAG,SAAS,CAyB/B;AAMM,sDAHI,cAAc,GACZ;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAC,CAkCzD;oBAjWY,OAAO,YAAY,EAAE,KAAK;uBAC1B,OAAO,YAAY,EAAE,QAAQ;6BAC7B,OAAO,YAAY,EAAE,cAAc;yBACnC,OAAO,YAAY,EAAE,UAAU;+BAC/B,OAAO,YAAY,EAAE,gBAAgB;4BACrC,OAAO,YAAY,EAAE,aAAa;8BAClC,OAAO,YAAY,EAAE,eAAe;gCACpC,OAAO,YAAY,EAAE,iBAAiB;6BACtC,OAAO,YAAY,EAAE,cAAc"}
package/types/types.d.ts CHANGED
@@ -4,7 +4,7 @@ export interface SchemaFragment {
4
4
  layout?: LayoutKeyword;
5
5
  oneOfLayout?: LayoutKeyword;
6
6
  patternPropertiesLayout?: LayoutKeyword;
7
- type: string;
7
+ type?: string | string[];
8
8
  format?: string;
9
9
  title?: string;
10
10
  description?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,uBAAuB,CAAC,EAAE,aAAa,CAAA;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,GAAG,CAAA;IACR,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,aAAa,EAAE,GAAG,GAAG,aAAa,IAAI,aAAa,CAAA;IACpD,MAAM,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,wBAAwB;IACvC,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,gBAAgB,CAAA;IACzC,MAAM,EAAE,GAAG,CAAA;CACZ"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,uBAAuB,CAAC,EAAE,aAAa,CAAA;IACvC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,GAAG,CAAA;IACR,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,aAAa,EAAE,GAAG,GAAG,aAAa,IAAI,aAAa,CAAA;IACpD,MAAM,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,wBAAwB;IACvC,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,gBAAgB,CAAA;IACzC,MAAM,EAAE,GAAG,CAAA;CACZ"}