From f250ddee2c7522f1564ddca7afcac5a8c1ccfd1b Mon Sep 17 00:00:00 2001
From: Sebastian Frank <sebastian@webmakers.de>
Date: Wed, 12 Oct 2022 16:23:32 +0200
Subject: [PATCH] allow x- properties in schema

---
 demo-api/collections/mycol.yml      | 25 +++++++++++++++----------
 schemas/api-config/collection.json  |  5 +++++
 schemas/api-config/config.json      |  5 +++++
 schemas/api-config/field.json       |  5 +++++
 schemas/api-config/hooks.json       |  5 +++++
 schemas/api-config/imageFilter.json |  3 +++
 schemas/api-config/index.json       |  5 +++++
 schemas/api-config/job.json         |  7 ++++++-
 schemas/api-config/permissions.json |  3 +++
 schemas/api-config/projections.json |  8 ++++++--
 10 files changed, 58 insertions(+), 13 deletions(-)

diff --git a/demo-api/collections/mycol.yml b/demo-api/collections/mycol.yml
index 3cf4f89..1138ec4 100644
--- a/demo-api/collections/mycol.yml
+++ b/demo-api/collections/mycol.yml
@@ -2,19 +2,24 @@ name: mycol
 uploadPath: ../media/mycol
 
 meta:
-  label: { de: mycol, en: mycol }
-  rowIdentTpl: { twig: "{{ title }}" }
-  views:
-    - type: table
-      columns:
-        - title
+    label: { de: mycol, en: mycol }
+    rowIdentTpl: { twig: "{{ title }}" }
+    views:
+        - type: table
+          columns:
+              - title
 
 permissions: !include global/test-permissions.yml
 
+projections:
+    test:
+        select:
+            field1: 1
 
 hooks:
-  get:
-    return:
-      type: javascript
-      file: hooks/mycol/get_return.js
+    get:
+        return:
+            type: javascript
+            file: hooks/mycol/get_return.js
 
+x-additional: test
diff --git a/schemas/api-config/collection.json b/schemas/api-config/collection.json
index 33e90b0..9bb4acb 100644
--- a/schemas/api-config/collection.json
+++ b/schemas/api-config/collection.json
@@ -4,6 +4,11 @@
     "description": "tibi-server collection linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "name": {
             "type": "string",
diff --git a/schemas/api-config/config.json b/schemas/api-config/config.json
index 5a3c514..7422427 100644
--- a/schemas/api-config/config.json
+++ b/schemas/api-config/config.json
@@ -4,6 +4,11 @@
     "description": "tibi-server config.yml linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "namespace": {
             "type": "string",
diff --git a/schemas/api-config/field.json b/schemas/api-config/field.json
index a3a708f..359cc5f 100644
--- a/schemas/api-config/field.json
+++ b/schemas/api-config/field.json
@@ -4,6 +4,11 @@
     "description": "tibi-server field linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "name": {
             "type": "string",
diff --git a/schemas/api-config/hooks.json b/schemas/api-config/hooks.json
index a2c429f..7abcbd2 100644
--- a/schemas/api-config/hooks.json
+++ b/schemas/api-config/hooks.json
@@ -4,6 +4,11 @@
     "description": "tibi-server hooks linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "get": {
             "type": "object",
diff --git a/schemas/api-config/imageFilter.json b/schemas/api-config/imageFilter.json
index c02baa4..09565e2 100644
--- a/schemas/api-config/imageFilter.json
+++ b/schemas/api-config/imageFilter.json
@@ -4,6 +4,9 @@
     "description": "tibi-server imageFilter linter",
     "type": "object",
     "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        },
         "^[a-zA-Z0-9_-]+$": {
             "type": "array",
             "items": {
diff --git a/schemas/api-config/index.json b/schemas/api-config/index.json
index a16e3b2..a8a6a1c 100644
--- a/schemas/api-config/index.json
+++ b/schemas/api-config/index.json
@@ -4,6 +4,11 @@
     "description": "tibi-server index linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "name": {
             "type": "string",
diff --git a/schemas/api-config/job.json b/schemas/api-config/job.json
index e55b014..34aee81 100644
--- a/schemas/api-config/job.json
+++ b/schemas/api-config/job.json
@@ -4,6 +4,11 @@
     "description": "tibi-server cronjob linter",
     "type": "object",
     "additionalProperties": false,
+    "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        }
+    },
     "properties": {
         "meta": {
             "type": "object",
@@ -24,4 +29,4 @@
         }
     },
     "required": ["type", "file"]
-}
\ No newline at end of file
+}
diff --git a/schemas/api-config/permissions.json b/schemas/api-config/permissions.json
index 0b53ade..2aaf272 100644
--- a/schemas/api-config/permissions.json
+++ b/schemas/api-config/permissions.json
@@ -15,6 +15,9 @@
         }
     },
     "patternProperties": {
+        "^x\\-": {
+            "description": "template property"
+        },
         "^token:": {
             "description": "permissions for header or query token",
             "$ref": "#/definitions/permissionSet"
diff --git a/schemas/api-config/projections.json b/schemas/api-config/projections.json
index 0aa5e79..c66dd1c 100644
--- a/schemas/api-config/projections.json
+++ b/schemas/api-config/projections.json
@@ -1,9 +1,13 @@
 {
     "$schema": "http://json-schema.org/draft-07/schema#",
     "title": "JSON Schema tibi-server imageFilter configuration",
-    "description": "tibi-server imageFilter linter",
+    "description": "tibi-server projections linter",
+    "type": "object",
     "patternProperties": {
-        "^[a-zA-Z0-9_-]$": {
+        "^x\\-": {
+            "description": "template property"
+        },
+        "^[a-zA-Z0-9_-]+$": {
             "type": "object",
             "description": "dataset query projection config",
             "properties": {