All files / schemas/oada/ainz rule.schema.cts

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

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 96 97 98 99 100 101 102 103 104 105 106 1071x 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 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/ainz/rule.schema.json',
  $schema: 'http://json-schema.org/draft-07/schema#',
  description: 'The format for ainz orchestation rules',
  type: 'object',
  properties: {
    type: {
      description: 'A field for discriminating the different types of rules',
    },
    list: {
      description: 'A path to an OADA list to watch for changes',
      $ref: '../../oada.schema.json#/definitions/path',
    },
    schema: {
      description: 'A JSON Schema to which to compare new items in list',
      $ref: 'https://json-schema.org/draft/2019-09/schema',
    },
  },
  oneOf: [
    {
      description: 'A rule which "moves" (re-indexes) a resource',
      type: 'object',
      properties: {
        type: { enum: ['reindex'] },
        destination: {
          description: 'A path to an OADA list to which to add maching items',
          type: 'string',
          // $ref: '../../oada.schema.json#/definitions/path',
        },
        tree: {
          description: 'A tree to use for "tree PUTs"',
          type: 'object',
          $comment: 'Recursive schema breaks schema to TS compiler',
          // $ref: '../tree/v1.schema.json',
        },
        itemsPath: {
          description: 'A JSONPath for resolving the items of an indexed list',
          type: 'string',
          examples: ['$.day-index.*.*'],
          default: '$.*',
        },
        meta: {
          description: "An object to PUT on matching items's _meta",
          type: 'object',
        },
      },
    },
    {
      description: 'A rule which creates an OADA job when a resource matches',
      type: 'object',
      properties: {
        type: { enum: ['job'] },
        pointer: {
          description:
            'A JSON pointer of where in the job config to create a link to the resource',
          type: 'string',
          format: 'json-pointer',
        },
        job: {
          description:
            'The job to create. A link to the matching resource will be added to the job.',
          $ref: '../service/job.schema.json#',
        },
      },
    },
  ],
  required: ['type', 'list', 'schema'],
  examples: [
    {
      type: 'reindex',
      list: '/bookmarks/stuff',
      schema: {
        const: { foo: 'bar' },
      },
      destination: '/bookmarks/foo',
    },
    {
      type: 'job',
      list: '/bookmarks/stuff',
      schema: {
        const: { foo: 'bar' },
      },
      pointer: '/resource',
      job: {
        service: 'coolservice',
        type: 'cool',
        config: {
          foo: 'bar',
        },
      },
    },
  ],
};
 
export = schema;