All files / schemas/oada/change v2.schema.cts

100% Statements 95/95
100% Branches 0/0
100% Functions 0/0
100% Lines 95/95

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 961x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
/**
 * @license
 * Copyright 2022 Open Ag Data Alliance
 *
 * Use of this source code is governed by an MIT-style
 * license that can be found in the LICENSE file or at
 * https://opensource.org/licenses/MIT.
 */
 
import type { JSONSchema8 as Schema } from 'jsonschema8';
 
const schema: Schema = {
  $id: 'https://formats.openag.io/oada/change/v2.schema.json',
  $schema: 'http://json-schema.org/draft-07/schema#',
  definitions: {
    change: {
      allOf: [
        {
          type: 'object',
          required: ['type', 'body', 'path', 'resource_id'],
          properties: {
            type: { enum: ['merge', 'delete'] },
            path: { $ref: '../../oada.schema.json#/definitions/path' },
            resource_id: { $ref: '../../oada.schema.json#/definitions/_id' },
          },
        },
        {
          oneOf: [
            {
              type: 'object',
              required: ['body'],
              properties: {
                body: {
                  $comment: 'Should probably narrow this schema down',
                  description: 'The contents of what changed',
                  type: 'object',
                  required: ['_rev'],
                  properties: {
                    _rev: {
                      $ref: '../../oada.schema.json#/definitions/_rev',
                    },
                  },
                },
              },
            },
            {
              type: 'object',
              required: ['type', 'body'],
              properties: {
                type: {
                  enum: ['delete'],
                },
                body: {
                  type: 'null',
                },
              },
            },
          ],
        },
      ],
    },
  },
  type: 'array',
  description: 'Array-based change representation (OADA v2)',
  items: {
    $ref: '#/definitions/change',
  },
  examples: [
    // OADA v2
    [
      {
        resource_id: 'resources/default:resources_bookmarks_123',
        path: '',
        body: {
          rocks: {
            _rev: 1,
          },
          _rev: 1,
        },
        type: 'merge',
      },
      {
        resource_id: 'resources/default:resources_rocks_123',
        path: '/rocks',
        body: {
          test: 'abc',
          _rev: 1,
        },
        type: 'merge',
      },
    ],
  ],
};
 
export = schema;