@basictech/schema 0.6.0 → 0.7.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts"],"sourcesContent":["// Basic Schema Library\n// utils for validating and interacting with Basic schemas\nimport Ajv from 'ajv'\n\nconst basicJsonSchema = {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"project_id\": {\n \"type\": \"string\"\n },\n \"namespace\": {\n \"type\": \"string\",\n },\n \"version\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"tables\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"patternProperties\": {\n \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"collection\"]\n },\n \"origin\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"reference\"]\n },\n \"project_id\": {\n \"type\": \"string\"\n },\n \"table\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"integer\"\n }\n },\n \"if\": {\n \"properties\": { \"type\": { \"const\": \"reference\" } }\n },\n \"then\": {\n \"required\": [\"project_id\", \"table\"]\n }\n },\n \"fields\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"patternProperties\": {\n \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"string\", \"boolean\", \"number\", \"json\"]\n },\n \"indexed\": {\n \"type\": \"boolean\"\n },\n \"required\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"type\"]\n }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"fields\"]\n }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"project_id\", \"version\", \"tables\"]\n}\n\nconst ajv = new Ajv({ allErrors: true })\nconst validator = ajv.compile(basicJsonSchema)\n\nfunction generateEmptySchema(project_id: string = \"\", version: number = 0) {\n return {\n project_id: project_id,\n version: version,\n tables: {\n foo: { \n name: \"foo\",\n type: \"collection\",\n fields: {\n bar: {\n type: \"string\",\n required: true,\n }\n }\n }\n }\n }\n}\n\ntype Schema = {\n project_id: string,\n version: number,\n tables: any\n}\n\n\n/**\n * Compare two schemas and detect any differences between them\n * @param oldSchema - The original schema to compare against\n * @param newSchema - The new schema to compare with the original\n * @returns {Object} Comparison result containing:\n * - valid: boolean indicating if schemas are identical\n * - changes: Array of detected changes between schemas\n */\nfunction compareSchemas(oldSchema: any, newSchema: any) {\n const changes = _getSchemaChanges(oldSchema, newSchema)\n const valid = changes.length === 0 ? true : false\n return { valid, changes }\n}\n\n/**\n * Validate a schema\n * only checks if the schema is formatted correctly, not if can be published\n * @param schema - The schema to validate\n * @returns {valid: boolean, errors: any[]} - The validation result\n */\nfunction validateSchema(schema: Schema): { valid: boolean, errors: ErrorObject[] } {\n const v = validator(schema)\n const ajvErrors = validator.errors || []\n \n // Add custom validation for case-insensitive duplicates\n const customErrors = validateCaseInsensitiveNames(schema)\n \n return {\n valid: v && customErrors.length === 0,\n errors: [...ajvErrors, ...customErrors]\n }\n}\n\n/**\n * Validate that table and field names are case-insensitive unique\n * @param schema - The schema to validate\n * @returns Array of validation errors\n */\nfunction validateCaseInsensitiveNames(schema: Schema): ErrorObject[] {\n const errors: ErrorObject[] = []\n \n if (!schema.tables) return errors\n \n // Check for case-insensitive duplicate table names\n const tableNames = new Set<string>()\n for (const tableName in schema.tables) {\n const lowerTableName = tableName.toLowerCase()\n if (tableNames.has(lowerTableName)) {\n errors.push({\n keyword: 'caseInsensitiveDuplicate',\n instancePath: `/tables/${tableName}`,\n schemaPath: '#/properties/tables/propertyNames',\n params: { propertyName: tableName },\n message: `Table name \"${tableName}\" conflicts with another table name (case-insensitive)`\n })\n } else {\n tableNames.add(lowerTableName)\n }\n }\n \n // Check for case-insensitive duplicate field names within each table\n for (const tableName in schema.tables) {\n const table = schema.tables[tableName]\n if (!table.fields) continue\n \n const fieldNames = new Set<string>()\n for (const fieldName in table.fields) {\n const lowerFieldName = fieldName.toLowerCase()\n if (fieldNames.has(lowerFieldName)) {\n errors.push({\n keyword: 'caseInsensitiveDuplicate',\n instancePath: `/tables/${tableName}/fields/${fieldName}`,\n schemaPath: '#/properties/tables/patternProperties/^%5E%28%3F%21id%24%7CID%24%7CId%24%7CiD%24%29%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames',\n params: { propertyName: fieldName },\n message: `Field name \"${fieldName}\" conflicts with another field name in table \"${tableName}\" (case-insensitive)`\n })\n } else {\n fieldNames.add(lowerFieldName)\n }\n }\n }\n \n return errors\n}\n\ntype ErrorObject = {\n keyword?: string;\n instancePath?: string; \n schemaPath?: string;\n params?: Record<string, any>;\n propertyName?: string;\n message?: string;\n schema?: any;\n parentSchema?: any;\n data?: any;\n}\n\n\n/**\n * Validate data against a schema's table definition. Only checks against provided schema.\n * @param schema - The schema to validate against\n * @param table - The table name in the schema to validate against\n * @param data - The data object to validate\n * @param checkRequired - Whether to check if required fields are present (default: true)\n * @returns {Object} Validation result containing:\n * - valid: boolean indicating if validation passed\n * - errors: Array of validation error objects\n * - message: Error message if validation failed\n */\nfunction validateData(schema: Schema, table: string, data: Record<string, any>, checkRequired: boolean = true) : { valid: boolean, errors?: ErrorObject[], message?: string } {\n const valid = validateSchema(schema)\n if (!valid.valid) {\n return { valid: false, errors: valid.errors, message: \"Schema is invalid\" }\n }\n\n const tableSchema = schema.tables[table]\n\n if (!tableSchema) {\n return { valid: false, errors: [{ message: `Table ${table} not found in schema` }], message: \"Table not found\" }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(data)) {\n const fieldSchema = tableSchema.fields[fieldName]\n\n if (!fieldSchema) {\n return {\n valid: false,\n errors: [{ message: `Field ${fieldName} not found in schema` }],\n message: \"Invalid field\"\n }\n }\n\n const schemaType = fieldSchema.type\n const valueType = typeof fieldValue\n\n if (\n (schemaType === 'string' && valueType !== 'string') ||\n (schemaType === 'number' && valueType !== 'number') ||\n (schemaType === 'boolean' && valueType !== 'boolean') ||\n (schemaType === 'json' && valueType !== 'object')\n ) {\n return {\n valid: false,\n errors: [{\n message: `Field ${fieldName} should be type ${schemaType}, got ${valueType}`\n }],\n message: \"invalid type\"\n }\n }\n }\n\n if (checkRequired) {\n for (const [fieldName, fieldSchema] of Object.entries(tableSchema.fields)) {\n if ((fieldSchema as { required?: boolean }).required && !data[fieldName]) {\n return { valid: false, errors: [{ message: `Field ${fieldName} is required` }], message: \"Required field missing\" }\n }\n }\n }\n\n return { valid: true, errors: [] }\n}\n\ntype SchemaChangeType = \"property_changed\" | \"property_removed\" | \"table_added\" | \"table_removed\" | \"field_added\" | \"field_removed\" | \"field_type_changed\" | \"field_required_changed\" | \"field_property_added\" | \"field_property_changed\" | \"field_property_removed\"\n\ntype SchemaChange = {\n type: SchemaChangeType,\n property?: string,\n table?: string,\n field?: string,\n old?: any,\n new?: any\n}\n\nfunction _getSchemaChanges(oldSchema: any, newSchema: any): SchemaChange[] {\n // Compare tables between schemas\n const changes: SchemaChange[] = []\n\n // Check for top level property changes\n for (const key in newSchema) {\n if (key !== 'tables' && newSchema[key] !== oldSchema[key]) {\n changes.push({\n type: 'property_changed',\n property: key,\n old: oldSchema[key],\n new: newSchema[key]\n })\n }\n }\n\n for (const key in oldSchema) {\n if (key !== 'tables' && !newSchema.hasOwnProperty(key)) {\n changes.push({\n type: 'property_removed',\n property: key,\n old: oldSchema[key]\n })\n }\n }\n\n // Check for removed tables\n for (const tableName in oldSchema.tables) {\n if (!newSchema.tables[tableName]) {\n changes.push({\n type: 'table_removed',\n table: tableName\n })\n }\n }\n\n // Check for added tables and field changes\n for (const tableName in newSchema.tables) {\n const newTable = newSchema.tables[tableName]\n const oldTable = oldSchema.tables[tableName]\n\n if (!oldTable) {\n changes.push({\n type: 'table_added',\n table: tableName\n })\n continue\n }\n\n // Compare fields - only if both tables have fields\n if (newTable.fields && oldTable.fields) {\n for (const fieldName in newTable.fields) {\n const newField = newTable.fields[fieldName]\n const oldField = oldTable.fields[fieldName]\n\n if (!oldField) {\n changes.push({\n type: 'field_added',\n table: tableName,\n field: fieldName\n })\n continue\n }\n\n // Check for field type changes\n if (newField.type !== oldField.type) {\n changes.push({\n type: 'field_type_changed',\n table: tableName,\n field: fieldName,\n old: oldField.type,\n new: newField.type\n })\n }\n\n // Check for required flag changes\n if (newField.required !== oldField.required) {\n changes.push({\n type: 'field_required_changed',\n table: tableName,\n field: fieldName,\n old: oldField.required,\n new: newField.required\n })\n }\n }\n\n // Check for removed fields\n for (const fieldName in oldTable.fields) {\n if (!newTable.fields[fieldName]) {\n changes.push({\n type: 'field_removed',\n table: tableName,\n field: fieldName\n })\n }\n }\n }\n }\n\n // Check for field property changes (excluding type which is already checked)\n for (const tableName in newSchema.tables) {\n const newTable = newSchema.tables[tableName]\n const oldTable = oldSchema.tables[tableName]\n\n if (!oldTable || !newTable.fields || !oldTable.fields) continue\n\n for (const fieldName in newTable.fields) {\n const newField = newTable.fields[fieldName]\n const oldField = oldTable.fields[fieldName]\n\n if (!oldField) continue\n\n // Compare all properties except type\n for (const prop in newField) {\n if (prop === 'type') continue\n\n if (!(prop in oldField)) {\n changes.push({\n type: 'field_property_added',\n table: tableName,\n field: fieldName,\n property: prop,\n new: newField[prop]\n })\n } else if (JSON.stringify(newField[prop]) !== JSON.stringify(oldField[prop])) {\n changes.push({\n type: 'field_property_changed',\n table: tableName,\n field: fieldName,\n property: prop,\n old: oldField[prop],\n new: newField[prop]\n })\n }\n }\n\n // Check for removed properties\n for (const prop in oldField) {\n if (prop === 'type') continue\n if (!(prop in newField)) {\n changes.push({\n type: 'field_property_removed',\n table: tableName,\n field: fieldName,\n property: prop,\n old: oldField[prop]\n })\n }\n }\n }\n }\n\n return changes\n}\n\n\nfunction validateUpdateSchema(oldSchema: any, newSchema: any) {\n const oldValid = validateSchema(oldSchema)\n const newValid = validateSchema(newSchema)\n\n if (!oldValid.valid || !newValid.valid) {\n return { valid: false, errors: oldValid.errors.concat(newValid.errors), message: \"schemas are invalid\" }\n }\n\n // Always check that version is incremented by 1\n if (newSchema.version !== oldSchema.version + 1) {\n return {\n valid: false,\n errors: [{\n change: {\n type: 'property_changed',\n property: 'version',\n old: oldSchema.version,\n new: newSchema.version\n },\n message: `Version must be incremented by 1. Expected version:${oldSchema.version + 1}, got version:${newSchema.version}`\n }],\n message: \"Version must be incremented by 1\"\n }\n }\n\n const changes = _getSchemaChanges(oldSchema, newSchema)\n\n const changeErrors = []\n for (const change of changes) {\n if (change.type === 'property_changed' && change.property === 'project_id') {\n changeErrors.push({\n change: change,\n message: \"Cannot modify project_id property\"\n })\n }\n\n if (change.type === 'field_type_changed') {\n changeErrors.push({\n change: change,\n message: `Cannot change type of field \"${change.field}\" from \"${change.old}\" to \"${change.new}\"`\n })\n }\n }\n\n if (changeErrors.length > 0) {\n return {\n valid: false,\n errors: changeErrors,\n message: \"Invalid schema changes detected\"\n }\n }\n\n return { valid: true, changes: changes, errors: [] }\n}\n\n\n/**\n * Get the JSON schema definition for the Basic Schema\n * @returns {Object} The JSON schema\n */\nfunction getJsonSchema() {\n return basicJsonSchema\n}\n\nexport {\n validateSchema,\n validateData,\n generateEmptySchema,\n validateUpdateSchema,\n compareSchemas,\n getJsonSchema\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAAgB;AAEhB,IAAM,kBAAkB;AAAA,EACpB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,cAAc;AAAA,IACV,cAAc;AAAA,MACV,QAAQ;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACT,QAAQ;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACN,QAAQ;AAAA,MACR,iBAAiB;AAAA,QACb,WAAW;AAAA,QACX,aAAa;AAAA,QACb,aAAa;AAAA,QACb,QAAQ;AAAA,MACZ;AAAA,MACA,qBAAqB;AAAA,QACjB,iDAAiD;AAAA,UAC7C,QAAQ;AAAA,UACR,iBAAiB;AAAA,YACb,WAAW;AAAA,YACX,aAAa;AAAA,YACb,aAAa;AAAA,YACb,QAAQ;AAAA,UACZ;AAAA,UACA,cAAc;AAAA,YACV,QAAQ;AAAA,cACJ,QAAQ;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,cACJ,QAAQ;AAAA,cACR,QAAQ,CAAC,YAAY;AAAA,YACzB;AAAA,YACA,UAAU;AAAA,cACN,QAAQ;AAAA,cACR,cAAc;AAAA,gBACV,QAAQ;AAAA,kBACJ,QAAQ;AAAA,kBACR,QAAQ,CAAC,WAAW;AAAA,gBACxB;AAAA,gBACA,cAAc;AAAA,kBACV,QAAQ;AAAA,gBACZ;AAAA,gBACA,SAAS;AAAA,kBACL,QAAQ;AAAA,gBACZ;AAAA,gBACA,WAAW;AAAA,kBACP,QAAQ;AAAA,gBACZ;AAAA,cACJ;AAAA,cACA,MAAM;AAAA,gBACF,cAAc,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE;AAAA,cACrD;AAAA,cACA,QAAQ;AAAA,gBACJ,YAAY,CAAC,cAAc,OAAO;AAAA,cACtC;AAAA,YACJ;AAAA,YACA,UAAU;AAAA,cACN,QAAQ;AAAA,cACR,iBAAiB;AAAA,gBACb,WAAW;AAAA,gBACX,aAAa;AAAA,gBACb,aAAa;AAAA,gBACb,QAAQ;AAAA,cACZ;AAAA,cACA,qBAAqB;AAAA,gBACjB,iDAAiD;AAAA,kBAC7C,QAAQ;AAAA,kBACR,cAAc;AAAA,oBACV,QAAQ;AAAA,sBACJ,QAAQ;AAAA,sBACR,QAAQ,CAAC,UAAU,WAAW,UAAU,MAAM;AAAA,oBAClD;AAAA,oBACA,WAAW;AAAA,sBACP,QAAQ;AAAA,oBACZ;AAAA,oBACA,YAAY;AAAA,sBACR,QAAQ;AAAA,oBACZ;AAAA,kBACJ;AAAA,kBACA,YAAY,CAAC,MAAM;AAAA,gBACvB;AAAA,cACJ;AAAA,cACA,wBAAwB;AAAA,YAC5B;AAAA,UACJ;AAAA,UACA,YAAY,CAAC,QAAQ;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,wBAAwB;AAAA,IAC5B;AAAA,EACJ;AAAA,EACA,YAAY,CAAC,cAAc,WAAW,QAAQ;AAClD;AAEA,IAAM,MAAM,IAAI,WAAAA,QAAI,EAAE,WAAW,KAAK,CAAC;AACvC,IAAM,YAAY,IAAI,QAAQ,eAAe;AAE7C,SAAS,oBAAoB,aAAqB,IAAI,UAAkB,GAAG;AACvE,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACJ,KAAK;AAAA,QACD,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,UACJ,KAAK;AAAA,YACD,MAAM;AAAA,YACN,UAAU;AAAA,UACd;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAiBA,SAAS,eAAe,WAAgB,WAAgB;AACpD,QAAM,UAAU,kBAAkB,WAAW,SAAS;AACtD,QAAM,QAAQ,QAAQ,WAAW,IAAI,OAAO;AAC5C,SAAO,EAAE,OAAO,QAAQ;AAC5B;AAQA,SAAS,eAAe,QAA2D;AAC/E,QAAM,IAAI,UAAU,MAAM;AAC1B,QAAM,YAAY,UAAU,UAAU,CAAC;AAGvC,QAAM,eAAe,6BAA6B,MAAM;AAExD,SAAO;AAAA,IACH,OAAO,KAAK,aAAa,WAAW;AAAA,IACpC,QAAQ,CAAC,GAAG,WAAW,GAAG,YAAY;AAAA,EAC1C;AACJ;AAOA,SAAS,6BAA6B,QAA+B;AACjE,QAAM,SAAwB,CAAC;AAE/B,MAAI,CAAC,OAAO;AAAQ,WAAO;AAG3B,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,aAAa,OAAO,QAAQ;AACnC,UAAM,iBAAiB,UAAU,YAAY;AAC7C,QAAI,WAAW,IAAI,cAAc,GAAG;AAChC,aAAO,KAAK;AAAA,QACR,SAAS;AAAA,QACT,cAAc,WAAW,SAAS;AAAA,QAClC,YAAY;AAAA,QACZ,QAAQ,EAAE,cAAc,UAAU;AAAA,QAClC,SAAS,eAAe,SAAS;AAAA,MACrC,CAAC;AAAA,IACL,OAAO;AACH,iBAAW,IAAI,cAAc;AAAA,IACjC;AAAA,EACJ;AAGA,aAAW,aAAa,OAAO,QAAQ;AACnC,UAAM,QAAQ,OAAO,OAAO,SAAS;AACrC,QAAI,CAAC,MAAM;AAAQ;AAEnB,UAAM,aAAa,oBAAI,IAAY;AACnC,eAAW,aAAa,MAAM,QAAQ;AAClC,YAAM,iBAAiB,UAAU,YAAY;AAC7C,UAAI,WAAW,IAAI,cAAc,GAAG;AAChC,eAAO,KAAK;AAAA,UACR,SAAS;AAAA,UACT,cAAc,WAAW,SAAS,WAAW,SAAS;AAAA,UACtD,YAAY;AAAA,UACZ,QAAQ,EAAE,cAAc,UAAU;AAAA,UAClC,SAAS,eAAe,SAAS,iDAAiD,SAAS;AAAA,QAC/F,CAAC;AAAA,MACL,OAAO;AACH,mBAAW,IAAI,cAAc;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AA0BA,SAAS,aAAa,QAAgB,OAAe,MAA2B,gBAAyB,MAAqE;AAC1K,QAAM,QAAQ,eAAe,MAAM;AACnC,MAAI,CAAC,MAAM,OAAO;AACd,WAAO,EAAE,OAAO,OAAO,QAAQ,MAAM,QAAQ,SAAS,oBAAoB;AAAA,EAC9E;AAEA,QAAM,cAAc,OAAO,OAAO,KAAK;AAEvC,MAAI,CAAC,aAAa;AACd,WAAO,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,SAAS,KAAK,uBAAuB,CAAC,GAAG,SAAS,kBAAkB;AAAA,EACnH;AAEA,aAAW,CAAC,WAAW,UAAU,KAAK,OAAO,QAAQ,IAAI,GAAG;AACxD,UAAM,cAAc,YAAY,OAAO,SAAS;AAEhD,QAAI,CAAC,aAAa;AACd,aAAO;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,CAAC,EAAE,SAAS,SAAS,SAAS,uBAAuB,CAAC;AAAA,QAC9D,SAAS;AAAA,MACb;AAAA,IACJ;AAEA,UAAM,aAAa,YAAY;AAC/B,UAAM,YAAY,OAAO;AAEzB,QACK,eAAe,YAAY,cAAc,YACzC,eAAe,YAAY,cAAc,YACzC,eAAe,aAAa,cAAc,aAC1C,eAAe,UAAU,cAAc,UAC1C;AACE,aAAO;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,CAAC;AAAA,UACL,SAAS,SAAS,SAAS,mBAAmB,UAAU,SAAS,SAAS;AAAA,QAC9E,CAAC;AAAA,QACD,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,eAAe;AACf,eAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,YAAY,MAAM,GAAG;AACvE,UAAK,YAAuC,YAAY,CAAC,KAAK,SAAS,GAAG;AACtE,eAAO,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,SAAS,SAAS,eAAe,CAAC,GAAG,SAAS,yBAAyB;AAAA,MACtH;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAE;AACrC;AAaA,SAAS,kBAAkB,WAAgB,WAAgC;AAEvE,QAAM,UAA0B,CAAC;AAGjC,aAAW,OAAO,WAAW;AACzB,QAAI,QAAQ,YAAY,UAAU,GAAG,MAAM,UAAU,GAAG,GAAG;AACvD,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK,UAAU,GAAG;AAAA,QAClB,KAAK,UAAU,GAAG;AAAA,MACtB,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,aAAW,OAAO,WAAW;AACzB,QAAI,QAAQ,YAAY,CAAC,UAAU,eAAe,GAAG,GAAG;AACpD,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK,UAAU,GAAG;AAAA,MACtB,CAAC;AAAA,IACL;AAAA,EACJ;AAGA,aAAW,aAAa,UAAU,QAAQ;AACtC,QAAI,CAAC,UAAU,OAAO,SAAS,GAAG;AAC9B,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACX,CAAC;AAAA,IACL;AAAA,EACJ;AAGA,aAAW,aAAa,UAAU,QAAQ;AACtC,UAAM,WAAW,UAAU,OAAO,SAAS;AAC3C,UAAM,WAAW,UAAU,OAAO,SAAS;AAE3C,QAAI,CAAC,UAAU;AACX,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACX,CAAC;AACD;AAAA,IACJ;AAGA,QAAI,SAAS,UAAU,SAAS,QAAQ;AACpC,iBAAW,aAAa,SAAS,QAAQ;AACrC,cAAM,WAAW,SAAS,OAAO,SAAS;AAC1C,cAAM,WAAW,SAAS,OAAO,SAAS;AAE1C,YAAI,CAAC,UAAU;AACX,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,UACX,CAAC;AACD;AAAA,QACJ;AAGA,YAAI,SAAS,SAAS,SAAS,MAAM;AACjC,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,UAClB,CAAC;AAAA,QACL;AAGA,YAAI,SAAS,aAAa,SAAS,UAAU;AACzC,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,UAClB,CAAC;AAAA,QACL;AAAA,MACJ;AAGA,iBAAW,aAAa,SAAS,QAAQ;AACrC,YAAI,CAAC,SAAS,OAAO,SAAS,GAAG;AAC7B,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,UACX,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGA,aAAW,aAAa,UAAU,QAAQ;AACtC,UAAM,WAAW,UAAU,OAAO,SAAS;AAC3C,UAAM,WAAW,UAAU,OAAO,SAAS;AAE3C,QAAI,CAAC,YAAY,CAAC,SAAS,UAAU,CAAC,SAAS;AAAQ;AAEvD,eAAW,aAAa,SAAS,QAAQ;AACrC,YAAM,WAAW,SAAS,OAAO,SAAS;AAC1C,YAAM,WAAW,SAAS,OAAO,SAAS;AAE1C,UAAI,CAAC;AAAU;AAGf,iBAAW,QAAQ,UAAU;AACzB,YAAI,SAAS;AAAQ;AAErB,YAAI,EAAE,QAAQ,WAAW;AACrB,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,KAAK,SAAS,IAAI;AAAA,UACtB,CAAC;AAAA,QACL,WAAW,KAAK,UAAU,SAAS,IAAI,CAAC,MAAM,KAAK,UAAU,SAAS,IAAI,CAAC,GAAG;AAC1E,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,KAAK,SAAS,IAAI;AAAA,YAClB,KAAK,SAAS,IAAI;AAAA,UACtB,CAAC;AAAA,QACL;AAAA,MACJ;AAGA,iBAAW,QAAQ,UAAU;AACzB,YAAI,SAAS;AAAQ;AACrB,YAAI,EAAE,QAAQ,WAAW;AACrB,kBAAQ,KAAK;AAAA,YACT,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,KAAK,SAAS,IAAI;AAAA,UACtB,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAGA,SAAS,qBAAqB,WAAgB,WAAgB;AAC1D,QAAM,WAAW,eAAe,SAAS;AACzC,QAAM,WAAW,eAAe,SAAS;AAEzC,MAAI,CAAC,SAAS,SAAS,CAAC,SAAS,OAAO;AACpC,WAAO,EAAE,OAAO,OAAO,QAAQ,SAAS,OAAO,OAAO,SAAS,MAAM,GAAG,SAAS,sBAAsB;AAAA,EAC3G;AAGA,MAAI,UAAU,YAAY,UAAU,UAAU,GAAG;AAC7C,WAAO;AAAA,MACH,OAAO;AAAA,MACP,QAAQ,CAAC;AAAA,QACL,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,UAAU;AAAA,UACV,KAAK,UAAU;AAAA,UACf,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,SAAS,sDAAsD,UAAU,UAAU,CAAC,iBAAiB,UAAU,OAAO;AAAA,MAC1H,CAAC;AAAA,MACD,SAAS;AAAA,IACb;AAAA,EACJ;AAEA,QAAM,UAAU,kBAAkB,WAAW,SAAS;AAEtD,QAAM,eAAe,CAAC;AACtB,aAAW,UAAU,SAAS;AAC1B,QAAI,OAAO,SAAS,sBAAsB,OAAO,aAAa,cAAc;AACxE,mBAAa,KAAK;AAAA,QACd;AAAA,QACA,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AAEA,QAAI,OAAO,SAAS,sBAAsB;AACtC,mBAAa,KAAK;AAAA,QACd;AAAA,QACA,SAAS,gCAAgC,OAAO,KAAK,WAAW,OAAO,GAAG,SAAS,OAAO,GAAG;AAAA,MACjG,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,MAAI,aAAa,SAAS,GAAG;AACzB,WAAO;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,IACb;AAAA,EACJ;AAEA,SAAO,EAAE,OAAO,MAAM,SAAkB,QAAQ,CAAC,EAAE;AACvD;AAOA,SAAS,gBAAgB;AACrB,SAAO;AACX;","names":["Ajv"]}
1
+ {"version":3,"sources":["../index.ts","../generated-validator.js"],"sourcesContent":["// Basic Schema Library\n// utils for validating and interacting with Basic schemas\nimport { validate as standaloneValidator } from './generated-validator'\nimport type { ErrorObject as AjvErrorObject } from 'ajv'\n\nconst basicJsonSchema = {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"project_id\": {\n \"type\": \"string\"\n },\n \"namespace\": {\n \"type\": \"string\",\n },\n \"version\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"tables\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"patternProperties\": {\n \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"collection\"]\n },\n \"origin\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"reference\"]\n },\n \"project_id\": {\n \"type\": \"string\"\n },\n \"table\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"integer\"\n }\n },\n \"if\": {\n \"properties\": { \"type\": { \"const\": \"reference\" } }\n },\n \"then\": {\n \"required\": [\"project_id\", \"table\"]\n }\n },\n \"fields\": {\n \"type\": \"object\",\n \"propertyNames\": {\n \"pattern\": \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\n \"minLength\": 1,\n \"maxLength\": 50, \n \"type\": \"string\"\n },\n \"patternProperties\": {\n \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"string\", \"boolean\", \"number\", \"json\"]\n },\n \"indexed\": {\n \"type\": \"boolean\"\n },\n \"required\": {\n \"type\": \"boolean\"\n }\n },\n \"required\": [\"type\"]\n }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"fields\"]\n }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"project_id\", \"version\", \"tables\"]\n}\n\n// Using standalone pre-compiled validator (no dynamic code generation)\nconst validator = standaloneValidator\n\nfunction generateEmptySchema(project_id: string = \"\", version: number = 0) {\n return {\n project_id: project_id,\n version: version,\n tables: {\n foo: { \n name: \"foo\",\n type: \"collection\",\n fields: {\n bar: {\n type: \"string\",\n required: true,\n }\n }\n }\n }\n }\n}\n\ntype Schema = {\n project_id: string,\n version: number,\n tables: any\n}\n\n// ---------------------------------------------------------------------------\n// Typed schema helpers\n// ---------------------------------------------------------------------------\n\nexport type BasicFieldType = 'string' | 'boolean' | 'number' | 'json'\n\nexport interface BasicFieldDef {\n type: BasicFieldType\n indexed?: boolean\n required?: boolean\n}\n\nexport interface BasicTableDef {\n name?: string\n type?: 'collection'\n origin?: { type: 'reference', project_id: string, table: string, version?: number }\n fields: Record<string, BasicFieldDef>\n}\n\n/** A full Basic schema document (`{ project_id, version, tables }`). */\nexport interface BasicSchema {\n project_id: string\n namespace?: string\n version: number\n tables: Record<string, BasicTableDef>\n}\n\n/**\n * Identity helper that preserves literal types so `InferRecord` can derive\n * per-table record types:\n *\n * ```ts\n * export const schema = defineSchema({\n * project_id: '…',\n * version: 1,\n * tables: { todos: { fields: { title: { type: 'string', required: true } } } },\n * })\n * type Todo = InferRecord<typeof schema, 'todos'>\n * // { id: string; title: string }\n * ```\n */\nexport function defineSchema<const S extends BasicSchema>(schema: S): S {\n return schema\n}\n\ntype FieldTsType<F extends BasicFieldDef> =\n F['type'] extends 'string' ? string :\n F['type'] extends 'number' ? number :\n F['type'] extends 'boolean' ? boolean :\n F['type'] extends 'json' ? unknown :\n never\n\ntype RequiredFieldKeys<T extends BasicTableDef> = {\n [K in keyof T['fields']]: T['fields'][K] extends { required: true } ? K : never\n}[keyof T['fields']]\n\ntype OptionalFieldKeys<T extends BasicTableDef> = Exclude<keyof T['fields'], RequiredFieldKeys<T>>\n\n/** The TypeScript record type for one table of a schema (plus its `id`). */\nexport type InferRecord<S extends BasicSchema, T extends keyof S['tables']> =\n { id: string }\n & { [K in RequiredFieldKeys<S['tables'][T]>]: FieldTsType<S['tables'][T]['fields'][K]> }\n & { [K in OptionalFieldKeys<S['tables'][T]>]?: FieldTsType<S['tables'][T]['fields'][K]> }\n\n/** Table names of a schema. */\nexport type TableNames<S extends BasicSchema> = keyof S['tables'] & string\n\n\n/**\n * Compare two schemas and detect any differences between them\n * @param oldSchema - The original schema to compare against\n * @param newSchema - The new schema to compare with the original\n * @returns {Object} Comparison result containing:\n * - valid: boolean indicating if schemas are identical\n * - changes: Array of detected changes between schemas\n */\nfunction compareSchemas(oldSchema: any, newSchema: any) {\n const changes = _getSchemaChanges(oldSchema, newSchema)\n const valid = changes.length === 0 ? true : false\n return { valid, changes }\n}\n\n/**\n * Validate a schema\n * only checks if the schema is formatted correctly, not if can be published\n * @param schema - The schema to validate\n * @returns {valid: boolean, errors: any[]} - The validation result\n */\nfunction validateSchema(schema: Schema): { valid: boolean, errors: AjvErrorObject[] } {\n const v = validator(schema)\n const ajvErrors = validator.errors || []\n \n // Add custom validation for case-insensitive duplicates\n const customErrors = validateCaseInsensitiveNames(schema)\n \n return {\n valid: v && customErrors.length === 0,\n errors: [...ajvErrors, ...customErrors]\n }\n}\n\n/**\n * Validate that table and field names are case-insensitive unique\n * @param schema - The schema to validate\n * @returns Array of validation errors\n */\nfunction validateCaseInsensitiveNames(schema: Schema): ErrorObject[] {\n const errors: ErrorObject[] = []\n \n if (!schema.tables) return errors\n \n // Check for case-insensitive duplicate table names\n const tableNames = new Set<string>()\n for (const tableName in schema.tables) {\n const lowerTableName = tableName.toLowerCase()\n if (tableNames.has(lowerTableName)) {\n errors.push({\n keyword: 'caseInsensitiveDuplicate',\n instancePath: `/tables/${tableName}`,\n schemaPath: '#/properties/tables/propertyNames',\n params: { propertyName: tableName },\n message: `Table name \"${tableName}\" conflicts with another table name (case-insensitive)`\n })\n } else {\n tableNames.add(lowerTableName)\n }\n }\n \n // Check for case-insensitive duplicate field names within each table\n for (const tableName in schema.tables) {\n const table = schema.tables[tableName]\n if (!table.fields) continue\n \n const fieldNames = new Set<string>()\n for (const fieldName in table.fields) {\n const lowerFieldName = fieldName.toLowerCase()\n if (fieldNames.has(lowerFieldName)) {\n errors.push({\n keyword: 'caseInsensitiveDuplicate',\n instancePath: `/tables/${tableName}/fields/${fieldName}`,\n schemaPath: '#/properties/tables/patternProperties/^%5E%28%3F%21id%24%7CID%24%7CId%24%7CiD%24%29%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames',\n params: { propertyName: fieldName },\n message: `Field name \"${fieldName}\" conflicts with another field name in table \"${tableName}\" (case-insensitive)`\n })\n } else {\n fieldNames.add(lowerFieldName)\n }\n }\n }\n \n return errors\n}\n\ntype ErrorObject = {\n keyword?: string;\n instancePath?: string; \n schemaPath?: string;\n params?: Record<string, any>;\n propertyName?: string;\n message?: string;\n schema?: any;\n parentSchema?: any;\n data?: any;\n}\n\n\n/**\n * Validate data against a schema's table definition. Only checks against provided schema.\n * @param schema - The schema to validate against\n * @param table - The table name in the schema to validate against\n * @param data - The data object to validate\n * @param checkRequired - Whether to check if required fields are present (default: true)\n * @returns {Object} Validation result containing:\n * - valid: boolean indicating if validation passed\n * - errors: Array of validation error objects\n * - message: Error message if validation failed\n */\nfunction validateData(schema: Schema, table: string, data: Record<string, any>, checkRequired: boolean = true) : { valid: boolean, errors?: ErrorObject[], message?: string } {\n const valid = validateSchema(schema)\n if (!valid.valid) {\n return { valid: false, errors: valid.errors, message: \"Schema is invalid\" }\n }\n\n const tableSchema = schema.tables[table]\n\n if (!tableSchema) {\n return { valid: false, errors: [{ message: `Table ${table} not found in schema` }], message: \"Table not found\" }\n }\n\n for (const [fieldName, fieldValue] of Object.entries(data)) {\n const fieldSchema = tableSchema.fields[fieldName]\n\n if (!fieldSchema) {\n return {\n valid: false,\n errors: [{ message: `Field ${fieldName} not found in schema` }],\n message: \"Invalid field\"\n }\n }\n\n const schemaType = fieldSchema.type\n const valueType = typeof fieldValue\n\n if (\n (schemaType === 'string' && valueType !== 'string') ||\n (schemaType === 'number' && valueType !== 'number') ||\n (schemaType === 'boolean' && valueType !== 'boolean') ||\n (schemaType === 'json' && valueType !== 'object')\n ) {\n return {\n valid: false,\n errors: [{\n message: `Field ${fieldName} should be type ${schemaType}, got ${valueType}`\n }],\n message: \"invalid type\"\n }\n }\n }\n\n if (checkRequired) {\n for (const [fieldName, fieldSchema] of Object.entries(tableSchema.fields)) {\n if ((fieldSchema as { required?: boolean }).required && !data[fieldName]) {\n return { valid: false, errors: [{ message: `Field ${fieldName} is required` }], message: \"Required field missing\" }\n }\n }\n }\n\n return { valid: true, errors: [] }\n}\n\ntype SchemaChangeType = \"property_changed\" | \"property_removed\" | \"table_added\" | \"table_removed\" | \"field_added\" | \"field_removed\" | \"field_type_changed\" | \"field_required_changed\" | \"field_property_added\" | \"field_property_changed\" | \"field_property_removed\"\n\ntype SchemaChange = {\n type: SchemaChangeType,\n property?: string,\n table?: string,\n field?: string,\n old?: any,\n new?: any\n}\n\nfunction _getSchemaChanges(oldSchema: any, newSchema: any): SchemaChange[] {\n // Compare tables between schemas\n const changes: SchemaChange[] = []\n\n // Check for top level property changes\n for (const key in newSchema) {\n if (key !== 'tables' && newSchema[key] !== oldSchema[key]) {\n changes.push({\n type: 'property_changed',\n property: key,\n old: oldSchema[key],\n new: newSchema[key]\n })\n }\n }\n\n for (const key in oldSchema) {\n if (key !== 'tables' && !newSchema.hasOwnProperty(key)) {\n changes.push({\n type: 'property_removed',\n property: key,\n old: oldSchema[key]\n })\n }\n }\n\n // Check for removed tables\n for (const tableName in oldSchema.tables) {\n if (!newSchema.tables[tableName]) {\n changes.push({\n type: 'table_removed',\n table: tableName\n })\n }\n }\n\n // Check for added tables and field changes\n for (const tableName in newSchema.tables) {\n const newTable = newSchema.tables[tableName]\n const oldTable = oldSchema.tables[tableName]\n\n if (!oldTable) {\n changes.push({\n type: 'table_added',\n table: tableName\n })\n continue\n }\n\n // Compare fields - only if both tables have fields\n if (newTable.fields && oldTable.fields) {\n for (const fieldName in newTable.fields) {\n const newField = newTable.fields[fieldName]\n const oldField = oldTable.fields[fieldName]\n\n if (!oldField) {\n changes.push({\n type: 'field_added',\n table: tableName,\n field: fieldName\n })\n continue\n }\n\n // Check for field type changes\n if (newField.type !== oldField.type) {\n changes.push({\n type: 'field_type_changed',\n table: tableName,\n field: fieldName,\n old: oldField.type,\n new: newField.type\n })\n }\n\n // Check for required flag changes\n if (newField.required !== oldField.required) {\n changes.push({\n type: 'field_required_changed',\n table: tableName,\n field: fieldName,\n old: oldField.required,\n new: newField.required\n })\n }\n }\n\n // Check for removed fields\n for (const fieldName in oldTable.fields) {\n if (!newTable.fields[fieldName]) {\n changes.push({\n type: 'field_removed',\n table: tableName,\n field: fieldName\n })\n }\n }\n }\n }\n\n // Check for field property changes (excluding type which is already checked)\n for (const tableName in newSchema.tables) {\n const newTable = newSchema.tables[tableName]\n const oldTable = oldSchema.tables[tableName]\n\n if (!oldTable || !newTable.fields || !oldTable.fields) continue\n\n for (const fieldName in newTable.fields) {\n const newField = newTable.fields[fieldName]\n const oldField = oldTable.fields[fieldName]\n\n if (!oldField) continue\n\n // Compare all properties except type\n for (const prop in newField) {\n if (prop === 'type') continue\n\n if (!(prop in oldField)) {\n changes.push({\n type: 'field_property_added',\n table: tableName,\n field: fieldName,\n property: prop,\n new: newField[prop]\n })\n } else if (JSON.stringify(newField[prop]) !== JSON.stringify(oldField[prop])) {\n changes.push({\n type: 'field_property_changed',\n table: tableName,\n field: fieldName,\n property: prop,\n old: oldField[prop],\n new: newField[prop]\n })\n }\n }\n\n // Check for removed properties\n for (const prop in oldField) {\n if (prop === 'type') continue\n if (!(prop in newField)) {\n changes.push({\n type: 'field_property_removed',\n table: tableName,\n field: fieldName,\n property: prop,\n old: oldField[prop]\n })\n }\n }\n }\n }\n\n return changes\n}\n\n\nfunction validateUpdateSchema(oldSchema: any, newSchema: any) {\n const oldValid = validateSchema(oldSchema)\n const newValid = validateSchema(newSchema)\n\n if (!oldValid.valid || !newValid.valid) {\n return { valid: false, errors: oldValid.errors.concat(newValid.errors), message: \"schemas are invalid\" }\n }\n\n // Always check that version is incremented by 1\n if (newSchema.version !== oldSchema.version + 1) {\n return {\n valid: false,\n errors: [{\n change: {\n type: 'property_changed',\n property: 'version',\n old: oldSchema.version,\n new: newSchema.version\n },\n message: `Version must be incremented by 1. Expected version:${oldSchema.version + 1}, got version:${newSchema.version}`\n }],\n message: \"Version must be incremented by 1\"\n }\n }\n\n const changes = _getSchemaChanges(oldSchema, newSchema)\n\n const changeErrors = []\n for (const change of changes) {\n if (change.type === 'property_changed' && change.property === 'project_id') {\n changeErrors.push({\n change: change,\n message: \"Cannot modify project_id property\"\n })\n }\n\n if (change.type === 'field_type_changed') {\n changeErrors.push({\n change: change,\n message: `Cannot change type of field \"${change.field}\" from \"${change.old}\" to \"${change.new}\"`\n })\n }\n }\n\n if (changeErrors.length > 0) {\n return {\n valid: false,\n errors: changeErrors,\n message: \"Invalid schema changes detected\"\n }\n }\n\n return { valid: true, changes: changes, errors: [] }\n}\n\n\n/**\n * Get the JSON schema definition for the Basic Schema\n * @returns {Object} The JSON schema\n */\nfunction getJsonSchema() {\n return basicJsonSchema\n}\n\nexport {\n validateSchema,\n validateData,\n generateEmptySchema,\n validateUpdateSchema,\n compareSchemas,\n getJsonSchema\n}","\"use strict\";export const validate = validate10;export default validate10;const schema11 = {\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"project_id\":{\"type\":\"string\"},\"namespace\":{\"type\":\"string\"},\"version\":{\"type\":\"integer\",\"minimum\":0},\"tables\":{\"type\":\"object\",\"propertyNames\":{\"pattern\":\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\"minLength\":1,\"maxLength\":50,\"type\":\"string\"},\"patternProperties\":{\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\":{\"type\":\"object\",\"propertyNames\":{\"pattern\":\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\"minLength\":1,\"maxLength\":50,\"type\":\"string\"},\"properties\":{\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"enum\":[\"collection\"]},\"origin\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"reference\"]},\"project_id\":{\"type\":\"string\"},\"table\":{\"type\":\"string\"},\"version\":{\"type\":\"integer\"}},\"if\":{\"properties\":{\"type\":{\"const\":\"reference\"}}},\"then\":{\"required\":[\"project_id\",\"table\"]}},\"fields\":{\"type\":\"object\",\"propertyNames\":{\"pattern\":\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\",\"minLength\":1,\"maxLength\":50,\"type\":\"string\"},\"patternProperties\":{\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"string\",\"boolean\",\"number\",\"json\"]},\"indexed\":{\"type\":\"boolean\"},\"required\":{\"type\":\"boolean\"}},\"required\":[\"type\"]}},\"additionalProperties\":true}},\"required\":[\"fields\"]}},\"additionalProperties\":true}},\"required\":[\"project_id\",\"version\",\"tables\"]};\n// Modern JavaScript Unicode string length (replaces ajv/dist/runtime/ucs2length)\nconst ucs2length = (str) => [...str].length;\nconst func2 = ucs2length;const pattern0 = new RegExp(\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\", \"u\");function validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;const _errs0 = errors;if(data && typeof data == \"object\" && !Array.isArray(data)){if(data.project_id === undefined){const err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"project_id\"},message:\"must have required property '\"+\"project_id\"+\"'\"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.version === undefined){const err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"version\"},message:\"must have required property '\"+\"version\"+\"'\"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.tables === undefined){const err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"tables\"},message:\"must have required property '\"+\"tables\"+\"'\"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}if(data.project_id !== undefined){let data0 = data.project_id;const _errs1 = errors;if(typeof data0 !== \"string\"){const err3 = {instancePath:instancePath+\"/project_id\",schemaPath:\"#/properties/project_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}const _errs2 = errors;var valid0 = _errs1 === errors;}if(data.namespace !== undefined){let data1 = data.namespace;const _errs3 = errors;if(typeof data1 !== \"string\"){const err4 = {instancePath:instancePath+\"/namespace\",schemaPath:\"#/properties/namespace/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}const _errs4 = errors;var valid0 = _errs3 === errors;}if(data.version !== undefined){let data2 = data.version;const _errs5 = errors;if(!((typeof data2 == \"number\") && (!(data2 % 1) && !isNaN(data2)))){const err5 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const _errs6 = errors;if(typeof data2 == \"number\"){if(data2 < 0 || isNaN(data2)){const err6 = {instancePath:instancePath+\"/version\",schemaPath:\"#/properties/version/minimum\",keyword:\"minimum\",params:{comparison: \">=\", limit: 0},message:\"must be >= 0\"};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}var valid0 = _errs5 === errors;}if(data.tables !== undefined){let data3 = data.tables;const _errs7 = errors;const _errs8 = errors;if(data3 && typeof data3 == \"object\" && !Array.isArray(data3)){for(const key0 in data3){const _errs9 = errors;const _errs10 = errors;if(typeof key0 === \"string\"){if(func2(key0) > 50){const err7 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/propertyNames/maxLength\",keyword:\"maxLength\",params:{limit: 50},message:\"must NOT have more than 50 characters\",propertyName:key0};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}if(func2(key0) < 1){const err8 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/propertyNames/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\",propertyName:key0};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(!pattern0.test(key0)){const err9 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/propertyNames/pattern\",keyword:\"pattern\",params:{pattern: \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"},message:\"must match pattern \\\"\"+\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"+\"\\\"\",propertyName:key0};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}else {const err10 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/propertyNames/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\",propertyName:key0};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}var valid1 = _errs9 === errors;if(!valid1){const err11 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/propertyNames\",keyword:\"propertyNames\",params:{propertyName: key0},message:\"property name must be valid\"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}const _errs11 = errors;for(const key1 in data3){if(pattern0.test(key1)){let data4 = data3[key1];const _errs12 = errors;const _errs13 = errors;if(data4 && typeof data4 == \"object\" && !Array.isArray(data4)){if(data4.fields === undefined){const err12 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/required\",keyword:\"required\",params:{missingProperty: \"fields\"},message:\"must have required property '\"+\"fields\"+\"'\"};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}for(const key2 in data4){const _errs14 = errors;const _errs15 = errors;if(typeof key2 === \"string\"){if(func2(key2) > 50){const err13 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/propertyNames/maxLength\",keyword:\"maxLength\",params:{limit: 50},message:\"must NOT have more than 50 characters\",propertyName:key2};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(func2(key2) < 1){const err14 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/propertyNames/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\",propertyName:key2};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(!pattern0.test(key2)){const err15 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/propertyNames/pattern\",keyword:\"pattern\",params:{pattern: \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"},message:\"must match pattern \\\"\"+\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"+\"\\\"\",propertyName:key2};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}else {const err16 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/propertyNames/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\",propertyName:key2};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}var valid3 = _errs14 === errors;if(!valid3){const err17 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/propertyNames\",keyword:\"propertyNames\",params:{propertyName: key2},message:\"property name must be valid\"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data4.name !== undefined){let data5 = data4.name;const _errs16 = errors;if(typeof data5 !== \"string\"){const err18 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/name\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}const _errs17 = errors;var valid4 = _errs16 === errors;}if(data4.type !== undefined){let data6 = data4.type;const _errs18 = errors;if(typeof data6 !== \"string\"){const err19 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}const _errs19 = errors;const vSchema0 = schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.type.enum;if(!(data6 === \"collection\")){const err20 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/type/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.type.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}var valid4 = _errs18 === errors;}if(data4.origin !== undefined){let data7 = data4.origin;const _errs20 = errors;const _errs21 = errors;const _errs22 = errors;let valid5 = true;const _errs23 = errors;if(data7 && typeof data7 == \"object\" && !Array.isArray(data7)){if(data7.type !== undefined){let data8 = data7.type;const _errs24 = errors;if(\"reference\" !== data8){const err21 = {};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}else {}if(errors === _errs24){}var valid6 = _errs24 === errors;}else {var valid6 = true;}if(valid6){}}if(errors === _errs23){}var _valid0 = _errs23 === errors;errors = _errs22;if(vErrors !== null){if(_errs22){vErrors.length = _errs22;}else {vErrors = null;}}if(_valid0){const _errs25 = errors;if(data7 && typeof data7 == \"object\" && !Array.isArray(data7)){if(data7.project_id === undefined){const err22 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/then/required\",keyword:\"required\",params:{missingProperty: \"project_id\"},message:\"must have required property '\"+\"project_id\"+\"'\"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}if(data7.table === undefined){const err23 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/then/required\",keyword:\"required\",params:{missingProperty: \"table\"},message:\"must have required property '\"+\"table\"+\"'\"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}var _valid0 = _errs25 === errors;valid5 = _valid0;}if(!valid5){const err24 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/if\",keyword:\"if\",params:{failingKeyword: \"then\"},message:\"must match \\\"then\\\" schema\"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}if(data7 && typeof data7 == \"object\" && !Array.isArray(data7)){if(data7.type !== undefined){let data9 = data7.type;const _errs26 = errors;if(typeof data9 !== \"string\"){const err25 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/properties/type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}const _errs27 = errors;const vSchema1 = schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.origin.properties.type.enum;if(!(data9 === \"reference\")){const err26 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/properties/type/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.origin.properties.type.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}var valid7 = _errs26 === errors;}if(data7.project_id !== undefined){let data10 = data7.project_id;const _errs28 = errors;if(typeof data10 !== \"string\"){const err27 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin/project_id\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/properties/project_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}const _errs29 = errors;var valid7 = _errs28 === errors;}if(data7.table !== undefined){let data11 = data7.table;const _errs30 = errors;if(typeof data11 !== \"string\"){const err28 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin/table\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/properties/table/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}const _errs31 = errors;var valid7 = _errs30 === errors;}if(data7.version !== undefined){let data12 = data7.version;const _errs32 = errors;if(!((typeof data12 == \"number\") && (!(data12 % 1) && !isNaN(data12)))){const err29 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin/version\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/properties/version/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}const _errs33 = errors;var valid7 = _errs32 === errors;}}else {const err30 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/origin\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/origin/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}var valid4 = _errs20 === errors;}if(data4.fields !== undefined){let data13 = data4.fields;const _errs34 = errors;const _errs35 = errors;if(data13 && typeof data13 == \"object\" && !Array.isArray(data13)){for(const key3 in data13){const _errs36 = errors;const _errs37 = errors;if(typeof key3 === \"string\"){if(func2(key3) > 50){const err31 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames/maxLength\",keyword:\"maxLength\",params:{limit: 50},message:\"must NOT have more than 50 characters\",propertyName:key3};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if(func2(key3) < 1){const err32 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames/minLength\",keyword:\"minLength\",params:{limit: 1},message:\"must NOT have fewer than 1 characters\",propertyName:key3};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}if(!pattern0.test(key3)){const err33 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames/pattern\",keyword:\"pattern\",params:{pattern: \"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"},message:\"must match pattern \\\"\"+\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"+\"\\\"\",propertyName:key3};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\",propertyName:key3};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}var valid8 = _errs36 === errors;if(!valid8){const err35 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/propertyNames\",keyword:\"propertyNames\",params:{propertyName: key3},message:\"property name must be valid\"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}const _errs38 = errors;for(const key4 in data13){if(pattern0.test(key4)){let data14 = data13[key4];const _errs39 = errors;const _errs40 = errors;if(data14 && typeof data14 == \"object\" && !Array.isArray(data14)){if(data14.type === undefined){const err36 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/required\",keyword:\"required\",params:{missingProperty: \"type\"},message:\"must have required property '\"+\"type\"+\"'\"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}if(data14.type !== undefined){let data15 = data14.type;const _errs41 = errors;if(typeof data15 !== \"string\"){const err37 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}const _errs42 = errors;const vSchema2 = schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.fields.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.type.enum;if(!((((data15 === \"string\") || (data15 === \"boolean\")) || (data15 === \"number\")) || (data15 === \"json\"))){const err38 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/type\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/type/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.tables.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.fields.patternProperties[\"^(?!id$|ID$|Id$|iD$)[a-zA-Z0-9][a-zA-Z0-9_]*$\"].properties.type.enum},message:\"must be equal to one of the allowed values\"};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}var valid10 = _errs41 === errors;}if(data14.indexed !== undefined){let data16 = data14.indexed;const _errs43 = errors;if(typeof data16 !== \"boolean\"){const err39 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/indexed\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/indexed/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}const _errs44 = errors;var valid10 = _errs43 === errors;}if(data14.required !== undefined){let data17 = data14.required;const _errs45 = errors;if(typeof data17 !== \"boolean\"){const err40 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/required\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/required/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}const _errs46 = errors;var valid10 = _errs45 === errors;}}else {const err41 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields/\" + key4.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}var valid9 = _errs39 === errors;}}}else {const err42 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/fields\",schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/properties/fields/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}var valid4 = _errs34 === errors;}}else {const err43 = {instancePath:instancePath+\"/tables/\" + key1.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/tables/patternProperties/%5E(%3F!id%24%7CID%24%7CId%24%7CiD%24)%5Ba-zA-Z0-9%5D%5Ba-zA-Z0-9_%5D*%24/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}var valid2 = _errs12 === errors;}}}else {const err44 = {instancePath:instancePath+\"/tables\",schemaPath:\"#/properties/tables/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}var valid0 = _errs7 === errors;}}else {const err45 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}validate10.errors = vErrors;return errors === 0;}"],"mappings":"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","names":[]}