@seedprotocol/sdk 0.7.3 → 0.7.4-next.784.g879c6a3
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/{BasePathResolver-Cm4apKRb.js → BasePathResolver-DxdS0wJ0.js} +43 -8
- package/dist/BasePathResolver-DxdS0wJ0.js.map +1 -0
- package/dist/{ClientManager-i3nJASkg.js → ClientManager-De-vKHGe.js} +37 -38
- package/dist/ClientManager-De-vKHGe.js.map +1 -0
- package/dist/{Item-DBFchXpC.js → Item-cq9VcsAY.js} +365 -191
- package/dist/Item-cq9VcsAY.js.map +1 -0
- package/dist/{ModelProperty-BS49g01Y.js → ModelProperty-DuuoFXaC.js} +45 -37
- package/dist/ModelProperty-DuuoFXaC.js.map +1 -0
- package/dist/{Schema-CpMNEnUO.js → Schema-Dc5EA8Yb.js} +246 -68
- package/dist/Schema-Dc5EA8Yb.js.map +1 -0
- package/dist/{SchemaValidationService-DieV4KL-.js → SchemaValidationService-DViJ056F.js} +49 -36
- package/dist/SchemaValidationService-DViJ056F.js.map +1 -0
- package/dist/{backfillMetadataPropertyIds-DSoOoTnX.js → backfillMetadataPropertyIds-DacVthS5.js} +3 -3
- package/dist/{backfillMetadataPropertyIds-DSoOoTnX.js.map → backfillMetadataPropertyIds-DacVthS5.js.map} +1 -1
- package/dist/{configurePlatform-D0lQGAMQ.js → configurePlatform-DlZ23w7e.js} +2 -2
- package/dist/{configurePlatform-D0lQGAMQ.js.map → configurePlatform-DlZ23w7e.js.map} +1 -1
- package/dist/{detachRowsBeforeDelete-S0q-DJPT.js → detachRowsBeforeDelete-YRSZY6dO.js} +2 -2
- package/dist/{detachRowsBeforeDelete-S0q-DJPT.js.map → detachRowsBeforeDelete-YRSZY6dO.js.map} +1 -1
- package/dist/{eas-6pjU-OuX.js → eas-D_6ptL_F.js} +4 -4
- package/dist/{eas-6pjU-OuX.js.map → eas-D_6ptL_F.js.map} +1 -1
- package/dist/{index-8O3Uow-Y.js → errors-Cl8rbtKR.js} +192 -48
- package/dist/errors-Cl8rbtKR.js.map +1 -0
- package/dist/{getItem-CxBNZ-WL.js → getItem-BcmJcUZB.js} +5 -5
- package/dist/{getItem-CxBNZ-WL.js.map → getItem-BcmJcUZB.js.map} +1 -1
- package/dist/{getPublishPayload-CTCvRUoU.js → getPublishPayload-C278kK9P.js} +15 -15
- package/dist/{getPublishPayload-CTCvRUoU.js.map → getPublishPayload-C278kK9P.js.map} +1 -1
- package/dist/{getPublishUploads-SFHCbf_y.js → getPublishUploads-DJ1UPh7i.js} +9 -9
- package/dist/{getPublishUploads-SFHCbf_y.js.map → getPublishUploads-DJ1UPh7i.js.map} +1 -1
- package/dist/{index-Cvt5UBz4.js → index-CqnU-5i0.js} +9 -9
- package/dist/index-CqnU-5i0.js.map +1 -0
- package/dist/{index-AVFTVp1m.js → index-DAl9U4rn.js} +2 -2
- package/dist/index-DAl9U4rn.js.map +1 -0
- package/dist/{index.browser-DBhxRoe8.js → index.browser-J6QZ9smP.js} +10 -10
- package/dist/{index.browser-DBhxRoe8.js.map → index.browser-J6QZ9smP.js.map} +1 -1
- package/dist/{index.node-CJhlcNHM.js → index.node-C9VB9NlX.js} +9 -9
- package/dist/index.node-C9VB9NlX.js.map +1 -0
- package/dist/main.js +24 -24
- package/dist/{model-DGMe-TTm.js → model-oHA3YhOd.js} +5 -1
- package/dist/model-oHA3YhOd.js.map +1 -0
- package/dist/node.js +11 -11
- package/dist/node.js.map +1 -1
- package/dist/platform.browser.js +5 -5
- package/dist/platform.node.js +4 -4
- package/dist/{property-DwPD283A.js → property-Brgr5RdT.js} +11 -11
- package/dist/{property-DwPD283A.js.map → property-Brgr5RdT.js.map} +1 -1
- package/dist/propertyValidationRules-CDRitiiK.js +51 -0
- package/dist/propertyValidationRules-CDRitiiK.js.map +1 -0
- package/dist/{publishDraftGraph-BOn3_Occ.js → publishDraftGraph-C37ibxb5.js} +6 -6
- package/dist/{publishDraftGraph-BOn3_Occ.js.map → publishDraftGraph-C37ibxb5.js.map} +1 -1
- package/dist/{resetAmbiguousLegacyItemData-BkYmBeJc.js → resetAmbiguousLegacyItemData-CcLFRREE.js} +2 -2
- package/dist/{resetAmbiguousLegacyItemData-BkYmBeJc.js.map → resetAmbiguousLegacyItemData-CcLFRREE.js.map} +1 -1
- package/dist/{resolveModelForSyncedSeed-BL24nLa7.js → resolveModelForSyncedSeed-BTAeCOJE.js} +2 -2
- package/dist/{resolveModelForSyncedSeed-BL24nLa7.js.map → resolveModelForSyncedSeed-BTAeCOJE.js.map} +1 -1
- package/dist/src/Item/Item.d.ts +6 -2
- package/dist/src/Item/Item.d.ts.map +1 -1
- package/dist/src/Item/errors.d.ts +23 -0
- package/dist/src/Item/errors.d.ts.map +1 -0
- package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveFile.d.ts +19 -0
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveFile.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
- package/dist/src/Model/Model.d.ts +2 -0
- package/dist/src/Model/Model.d.ts.map +1 -1
- package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -1
- package/dist/src/ModelProperty/ModelProperty.d.ts +2 -0
- package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
- package/dist/src/Schema/Schema.d.ts +11 -2
- package/dist/src/Schema/Schema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -1
- package/dist/src/Schema/service/schemaMachine.d.ts.map +1 -1
- package/dist/src/Schema/service/validation/SchemaValidationService.d.ts +4 -1
- package/dist/src/Schema/service/validation/SchemaValidationService.d.ts.map +1 -1
- package/dist/src/db/Db/BaseDb.d.ts +5 -2
- package/dist/src/db/Db/BaseDb.d.ts.map +1 -1
- package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
- package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
- package/dist/src/helpers/db.d.ts.map +1 -1
- package/dist/src/helpers/entity/draftSaveErrors.d.ts +4 -0
- package/dist/src/helpers/entity/draftSaveErrors.d.ts.map +1 -0
- package/dist/src/helpers/entity/entityUnload.d.ts +2 -1
- package/dist/src/helpers/entity/entityUnload.d.ts.map +1 -1
- package/dist/src/helpers/entity/evictionEpoch.d.ts +27 -2
- package/dist/src/helpers/entity/evictionEpoch.d.ts.map +1 -1
- package/dist/src/helpers/isSqliteUniqueConstraintError.d.ts.map +1 -1
- package/dist/src/helpers/model.d.ts.map +1 -1
- package/dist/src/helpers/propertyValidationRules.d.ts +12 -0
- package/dist/src/helpers/propertyValidationRules.d.ts.map +1 -0
- package/dist/src/helpers/propertyWriteQueue.d.ts +15 -0
- package/dist/src/helpers/propertyWriteQueue.d.ts.map +1 -0
- package/dist/src/helpers/schema.d.ts.map +1 -1
- package/dist/src/helpers/storageFileName.d.ts +7 -0
- package/dist/src/helpers/storageFileName.d.ts.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/node/db/Db.d.ts +1 -1
- package/dist/src/node/db/Db.d.ts.map +1 -1
- package/dist/src/node/index.d.ts +1 -0
- package/dist/src/node/index.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +12 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/{syncDbWithEas-Bv2Fe38J.js → syncDbWithEas-B-Ho0IOB.js} +50 -27
- package/dist/syncDbWithEas-B-Ho0IOB.js.map +1 -0
- package/dist/{tabEvents-9s2WCYw-.js → tabEvents-BTzckWrN.js} +4 -4
- package/dist/{tabEvents-9s2WCYw-.js.map → tabEvents-BTzckWrN.js.map} +1 -1
- package/dist/{tolerantWebAccess-iUu80pAP.js → tolerantWebAccess-DOm2Xv-f.js} +6 -6
- package/dist/{tolerantWebAccess-iUu80pAP.js.map → tolerantWebAccess-DOm2Xv-f.js.map} +1 -1
- package/dist/{updateSeedRevokedAt-zBfi931j.js → updateSeedRevokedAt-IHXnJI-i.js} +3 -3
- package/dist/{updateSeedRevokedAt-zBfi931j.js.map → updateSeedRevokedAt-IHXnJI-i.js.map} +1 -1
- package/package.json +5 -5
- package/dist/BasePathResolver-Cm4apKRb.js.map +0 -1
- package/dist/ClientManager-i3nJASkg.js.map +0 -1
- package/dist/Item-DBFchXpC.js.map +0 -1
- package/dist/ModelProperty-BS49g01Y.js.map +0 -1
- package/dist/Schema-CpMNEnUO.js.map +0 -1
- package/dist/SchemaValidationService-DieV4KL-.js.map +0 -1
- package/dist/index-8O3Uow-Y.js.map +0 -1
- package/dist/index-AVFTVp1m.js.map +0 -1
- package/dist/index-Cvt5UBz4.js.map +0 -1
- package/dist/index.node-CJhlcNHM.js.map +0 -1
- package/dist/model-DGMe-TTm.js.map +0 -1
- package/dist/syncDbWithEas-Bv2Fe38J.js.map +0 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { Value } from '@sinclair/typebox/value';
|
|
2
|
-
import './
|
|
3
|
-
import { M as ModelPropertyDataTypes, c as TPropertyDataType, n as normalizeDataType, a as TProperty, D as DEFAULT_TEXT_MAX_LENGTH, i as isDataType } from './BasePathResolver-
|
|
2
|
+
import './errors-Cl8rbtKR.js';
|
|
3
|
+
import { M as ModelPropertyDataTypes, c as TPropertyDataType, n as normalizeDataType, a as TProperty, D as DEFAULT_TEXT_MAX_LENGTH, i as isDataType } from './BasePathResolver-DxdS0wJ0.js';
|
|
4
4
|
import 'pluralize';
|
|
5
5
|
import 'drizzle-orm';
|
|
6
|
-
import { Type } from '@sinclair/typebox';
|
|
6
|
+
import { Type, FormatRegistry } from '@sinclair/typebox';
|
|
7
7
|
import debug from 'debug';
|
|
8
8
|
import 'xstate';
|
|
9
|
-
import './Item-
|
|
9
|
+
import './Item-cq9VcsAY.js';
|
|
10
10
|
import 'rxjs';
|
|
11
11
|
import 'lodash-es';
|
|
12
12
|
import 'drizzle-orm/casing';
|
|
13
13
|
import '@seedprotocol/eas';
|
|
14
14
|
import '@seedprotocol/arweave';
|
|
15
|
-
import './tabEvents-
|
|
16
|
-
import './model-
|
|
17
|
-
import './ClientManager-
|
|
15
|
+
import './tabEvents-BTzckWrN.js';
|
|
16
|
+
import './model-oHA3YhOd.js';
|
|
17
|
+
import './ClientManager-De-vKHGe.js';
|
|
18
18
|
import '@noble/hashes/sha3';
|
|
19
19
|
import '@noble/hashes/utils';
|
|
20
20
|
import '@seedprotocol/query';
|
|
@@ -24,6 +24,11 @@ import 'nanoid-dictionary';
|
|
|
24
24
|
import '@noble/hashes/sha256';
|
|
25
25
|
|
|
26
26
|
const logger = debug('seedSdk:schema:validation');
|
|
27
|
+
// Date properties use Type.String({ format: 'date-time' }). TypeBox only checks formats that are
|
|
28
|
+
// registered, and fails every value for an unknown one, so without this no Date value was valid.
|
|
29
|
+
if (!FormatRegistry.Has('date-time')) {
|
|
30
|
+
FormatRegistry.Set('date-time', (value) => !Number.isNaN(Date.parse(value)));
|
|
31
|
+
}
|
|
27
32
|
/**
|
|
28
33
|
* Service for validating schemas, models, and properties using TypeBox
|
|
29
34
|
*/
|
|
@@ -197,6 +202,14 @@ class SchemaValidationService {
|
|
|
197
202
|
};
|
|
198
203
|
}));
|
|
199
204
|
}
|
|
205
|
+
if (normalized.validation?.custom) {
|
|
206
|
+
errors.push({
|
|
207
|
+
field: 'validation.custom',
|
|
208
|
+
message: `Custom validators are not supported (validation.custom: "${normalized.validation.custom}"). Use pattern, minLength, maxLength or enum.`,
|
|
209
|
+
code: 'custom_validation_unsupported',
|
|
210
|
+
severity: 'error',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
200
213
|
// Non-List types: refValueType is only valid for Relation+Image (related entity type). Reject otherwise.
|
|
201
214
|
const nonListTypes = [
|
|
202
215
|
ModelPropertyDataTypes.Text,
|
|
@@ -329,7 +342,9 @@ class SchemaValidationService {
|
|
|
329
342
|
const elementDataType = normalizeDataType(String(refValueType));
|
|
330
343
|
// Apply default maxLength for Text elements in List. Html elements hold arbitrary-length content.
|
|
331
344
|
const elementEffectiveRules = validationRules ? { ...validationRules } : {};
|
|
332
|
-
if (elementDataType === ModelPropertyDataTypes.Text &&
|
|
345
|
+
if (elementDataType === ModelPropertyDataTypes.Text &&
|
|
346
|
+
elementEffectiveRules.maxLength === undefined &&
|
|
347
|
+
!(Array.isArray(elementEffectiveRules.enum) && elementEffectiveRules.enum.length > 0)) {
|
|
333
348
|
elementEffectiveRules.maxLength = DEFAULT_TEXT_MAX_LENGTH;
|
|
334
349
|
}
|
|
335
350
|
for (let i = 0; i < value.length; i++) {
|
|
@@ -369,7 +384,9 @@ class SchemaValidationService {
|
|
|
369
384
|
let schema = this.getBaseSchemaForDataType(dataType);
|
|
370
385
|
// Apply default maxLength for Text when not explicitly set. Html holds arbitrary-length content (e.g. article body) and must not default to 255.
|
|
371
386
|
const effectiveRules = validationRules ? { ...validationRules } : {};
|
|
372
|
-
|
|
387
|
+
// An enum already bounds the value, so the default limit is not added to it.
|
|
388
|
+
const hasEnum = !!(effectiveRules.enum && Array.isArray(effectiveRules.enum) && effectiveRules.enum.length > 0);
|
|
389
|
+
if (dataType === ModelPropertyDataTypes.Text && effectiveRules.maxLength === undefined && !hasEnum) {
|
|
373
390
|
effectiveRules.maxLength = DEFAULT_TEXT_MAX_LENGTH;
|
|
374
391
|
}
|
|
375
392
|
// Apply validation rules
|
|
@@ -715,38 +732,35 @@ class SchemaValidationService {
|
|
|
715
732
|
}
|
|
716
733
|
}
|
|
717
734
|
/**
|
|
718
|
-
* Apply validation rules to a TypeBox schema
|
|
735
|
+
* Apply validation rules to a TypeBox schema. For Text and Html, pattern, minLength and
|
|
736
|
+
* maxLength combine into one string schema; enum further restricts the value to its list.
|
|
737
|
+
* (Each rule used to replace the schema built so far, so e.g. Text's default maxLength
|
|
738
|
+
* silently dropped any pattern.)
|
|
719
739
|
*/
|
|
720
740
|
applyValidationRules(schema, dataType, rules) {
|
|
721
741
|
let result = schema;
|
|
722
|
-
// Apply pattern (regex) for strings
|
|
723
|
-
if (rules.pattern && (dataType === ModelPropertyDataTypes.Text || dataType === ModelPropertyDataTypes.Html)) {
|
|
724
|
-
try {
|
|
725
|
-
const regex = new RegExp(rules.pattern);
|
|
726
|
-
result = Type.RegExp(regex);
|
|
727
|
-
}
|
|
728
|
-
catch (error) {
|
|
729
|
-
logger('Invalid regex pattern:', rules.pattern, error);
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
// Apply minLength/maxLength for strings
|
|
733
742
|
if (dataType === ModelPropertyDataTypes.Text || dataType === ModelPropertyDataTypes.Html) {
|
|
734
|
-
|
|
735
|
-
if (rules.
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
if (rules.minLength !== undefined) {
|
|
740
|
-
result = Type.String({ minLength: rules.minLength, maxLength: rules.maxLength });
|
|
743
|
+
const options = {};
|
|
744
|
+
if (rules.pattern) {
|
|
745
|
+
try {
|
|
746
|
+
new RegExp(rules.pattern);
|
|
747
|
+
options.pattern = rules.pattern;
|
|
741
748
|
}
|
|
742
|
-
|
|
743
|
-
|
|
749
|
+
catch (error) {
|
|
750
|
+
logger('Invalid regex pattern:', rules.pattern, error);
|
|
744
751
|
}
|
|
745
752
|
}
|
|
753
|
+
if (rules.minLength !== undefined)
|
|
754
|
+
options.minLength = rules.minLength;
|
|
755
|
+
if (rules.maxLength !== undefined)
|
|
756
|
+
options.maxLength = rules.maxLength;
|
|
757
|
+
if (Object.keys(options).length > 0) {
|
|
758
|
+
result = Type.String(options);
|
|
759
|
+
}
|
|
746
760
|
}
|
|
747
|
-
// Apply enum
|
|
748
761
|
if (rules.enum && Array.isArray(rules.enum) && rules.enum.length > 0) {
|
|
749
|
-
|
|
762
|
+
const allowed = Type.Union(rules.enum.map(val => Type.Literal(val)));
|
|
763
|
+
result = result === schema ? allowed : Type.Intersect([result, allowed]);
|
|
750
764
|
}
|
|
751
765
|
return result;
|
|
752
766
|
}
|
|
@@ -755,14 +769,13 @@ class SchemaValidationService {
|
|
|
755
769
|
*/
|
|
756
770
|
validateCustomRules(value, rules) {
|
|
757
771
|
const errors = [];
|
|
758
|
-
// Custom
|
|
772
|
+
// Custom validators are not supported; validatePropertyStructure rejects schemas that use them.
|
|
759
773
|
if (rules.custom) {
|
|
760
|
-
|
|
761
|
-
logger('Custom validator not yet implemented:', rules.custom);
|
|
774
|
+
logger('Ignoring unsupported custom validator:', rules.custom);
|
|
762
775
|
}
|
|
763
776
|
return errors;
|
|
764
777
|
}
|
|
765
778
|
}
|
|
766
779
|
|
|
767
780
|
export { SchemaValidationService };
|
|
768
|
-
//# sourceMappingURL=SchemaValidationService-
|
|
781
|
+
//# sourceMappingURL=SchemaValidationService-DViJ056F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaValidationService-DViJ056F.js","sources":["../../src/Schema/service/validation/SchemaValidationService.ts"],"sourcesContent":["import { Value } from '@sinclair/typebox/value'\nimport { TProperty } from '@/Schema'\nimport { ModelPropertyDataTypes, TPropertyDataType, isDataType, normalizeDataType } from '@/helpers/property'\nimport { ValidationResult, ValidationError, ValidationRules, DEFAULT_TEXT_MAX_LENGTH } from '@/Schema/validation'\nimport { SchemaMachineContext } from '../schemaMachine'\nimport { ModelPropertyMachineContext } from '@/ModelProperty/service/modelPropertyMachine'\nimport { ModelMachineContext } from '@/Model/service/modelMachine'\nimport { FormatRegistry, Type, TSchema, TUnion, TLiteral } from '@sinclair/typebox'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:schema:validation')\n\n// Date properties use Type.String({ format: 'date-time' }). TypeBox only checks formats that are\n// registered, and fails every value for an unknown one, so without this no Date value was valid.\nif (!FormatRegistry.Has('date-time')) {\n FormatRegistry.Set('date-time', (value) => !Number.isNaN(Date.parse(value)))\n}\n\n/**\n * Service for validating schemas, models, and properties using TypeBox\n */\nexport class SchemaValidationService {\n /**\n * Enhance TypeBox error message with expected values for union/literal types\n */\n private enhanceErrorMessage(\n error: any,\n schema: TSchema,\n fieldPath: string\n ): string {\n const originalMessage = error.message || 'Validation failed'\n \n // Handle Union type errors (like TPropertyDataType)\n if (error.type === 'Union' || originalMessage.includes('union')) {\n const expectedValues = this.extractExpectedValues(schema, fieldPath)\n if (expectedValues.length > 0) {\n return `Expected one of: ${expectedValues.join(', ')}. Received: ${JSON.stringify(error.value)}`\n }\n }\n \n // Handle Literal type errors\n if (error.type === 'Literal') {\n const expectedValue = this.extractLiteralValue(schema, fieldPath)\n if (expectedValue !== undefined) {\n return `Expected: ${JSON.stringify(expectedValue)}. Received: ${JSON.stringify(error.value)}`\n }\n }\n \n // Return enhanced message with value info if available\n if (error.value !== undefined) {\n return `${originalMessage}. Received: ${JSON.stringify(error.value)}`\n }\n \n return originalMessage\n }\n\n /**\n * Extract expected values from a schema for a given field path\n */\n private extractExpectedValues(schema: TSchema | null, fieldPath: string): string[] {\n try {\n // Handle TProperty schema - check if this is the dataType field\n if (fieldPath === '/dataType' || fieldPath.endsWith('/dataType')) {\n // Return all ModelPropertyDataTypes enum values\n return Object.values(ModelPropertyDataTypes) as string[]\n }\n \n // Handle TStorageType\n if (fieldPath === '/storageType' || fieldPath.endsWith('/storageType')) {\n return ['ItemStorage', 'PropertyStorage']\n }\n \n // If we have a schema, try to extract from it\n if (!schema) {\n return []\n }\n \n // Try to extract from TypeBox Union type using the schema directly\n const schemaObj = schema as any\n const kind = schemaObj[Symbol.for('TypeBox.Kind')]\n \n if (kind === 'Union') {\n const union = schemaObj as TUnion<any>\n const anyOf = union.anyOf || []\n const values: string[] = []\n \n for (const item of anyOf) {\n const itemKind = item?.[Symbol.for('TypeBox.Kind')]\n if (itemKind === 'Literal') {\n const literal = item as TLiteral<any>\n if (literal.const !== undefined) {\n values.push(String(literal.const))\n }\n }\n }\n \n if (values.length > 0) {\n return values\n }\n }\n \n // Fallback: try to extract from JSON schema format\n if (typeof schema === 'object' && 'anyOf' in schema) {\n const union = schema as any\n if (Array.isArray(union.anyOf)) {\n return union.anyOf\n .map((item: any) => {\n if (item.const !== undefined) return String(item.const)\n if (item.enum && Array.isArray(item.enum)) return item.enum.map(String)\n return null\n })\n .filter((val: any) => val !== null)\n .flat()\n .map(String)\n }\n }\n } catch (error) {\n logger('Error extracting expected values:', error)\n }\n \n return []\n }\n\n /**\n * Extract literal value from a schema\n */\n private extractLiteralValue(schema: TSchema, fieldPath: string): any {\n try {\n if (schema && typeof schema === 'object') {\n const schemaObj = schema as any\n if (schemaObj[Symbol.for('TypeBox.Kind')] === 'Literal') {\n return (schemaObj as TLiteral<any>).const\n }\n if (schemaObj.const !== undefined) {\n return schemaObj.const\n }\n }\n } catch (error) {\n logger('Error extracting literal value:', error)\n }\n \n return undefined\n }\n\n /**\n * Get the schema for a specific field path\n */\n private getSchemaForField(schema: TSchema, fieldPath: string): TSchema | null {\n try {\n if (!schema || typeof schema !== 'object') return null\n \n // Remove leading slash\n const path = fieldPath.replace(/^\\//, '')\n if (!path) return schema\n \n const schemaObj = schema as any\n const kind = schemaObj[Symbol.for('TypeBox.Kind')]\n \n // For TProperty (Object type), check properties\n if (kind === 'Object') {\n const properties = schemaObj.properties\n if (properties && properties[path]) {\n return properties[path]\n }\n }\n \n // Special handling for known fields - return the actual schema\n if (path === 'dataType') {\n return TPropertyDataType as TSchema\n }\n \n // Fallback: check if schema has the property\n if (path in schemaObj) {\n return schemaObj[path]\n }\n } catch (error) {\n logger('Error getting schema for field:', error)\n }\n \n return null\n }\n\n /**\n * Validate a property structure against TProperty schema\n */\n validatePropertyStructure(\n property: ModelPropertyMachineContext\n ): ValidationResult {\n try {\n // Normalize dataType and refValueType for case-insensitive schema support (e.g. \"relation\" -> \"Relation\")\n const normalized = { ...property }\n if (typeof normalized.dataType === 'string') {\n normalized.dataType = normalizeDataType(normalized.dataType) as any\n }\n if (typeof normalized.refValueType === 'string') {\n normalized.refValueType = normalizeDataType(normalized.refValueType) as any\n }\n const isValid = Value.Check(TProperty, normalized)\n \n const errors: ValidationError[] = []\n \n if (!isValid) {\n const typeBoxErrors = [...Value.Errors(TProperty, normalized)]\n errors.push(...typeBoxErrors.map(err => {\n const fieldPath = err.path || 'unknown'\n const fieldSchema = this.getSchemaForField(TProperty, fieldPath)\n const enhancedMessage = this.enhanceErrorMessage(err, fieldSchema || TProperty, fieldPath)\n \n return {\n field: fieldPath,\n message: enhancedMessage,\n code: String(err.type || 'validation_error'),\n severity: 'error' as const,\n }\n }))\n }\n \n if (normalized.validation?.custom) {\n errors.push({\n field: 'validation.custom',\n message: `Custom validators are not supported (validation.custom: \"${normalized.validation.custom}\"). Use pattern, minLength, maxLength or enum.`,\n code: 'custom_validation_unsupported',\n severity: 'error' as const,\n })\n }\n\n // Non-List types: refValueType is only valid for Relation+Image (related entity type). Reject otherwise.\n const nonListTypes = [\n ModelPropertyDataTypes.Text,\n ModelPropertyDataTypes.Number,\n ModelPropertyDataTypes.Boolean,\n ModelPropertyDataTypes.Date,\n ModelPropertyDataTypes.Json,\n ModelPropertyDataTypes.Image,\n ModelPropertyDataTypes.File,\n ModelPropertyDataTypes.Html,\n ModelPropertyDataTypes.Relation,\n ]\n if (nonListTypes.includes(normalized.dataType as ModelPropertyDataTypes)) {\n const hasRefValueType = normalized.refValueType != null && String(normalized.refValueType).trim() !== ''\n if (hasRefValueType) {\n // Relation may keep refValueType only for Image (relation to Image entity)\n if (normalized.dataType === ModelPropertyDataTypes.Relation && normalized.refValueType === ModelPropertyDataTypes.Image) {\n // Allowed: Relation to Image\n } else {\n errors.push({\n field: 'refValueType',\n message: `refValueType is only valid for List properties. Use dataType 'List' with refValueType '${normalized.refValueType}' for lists of ${normalized.refValueType}.`,\n code: 'invalid_ref_value_type',\n severity: 'error' as const,\n })\n }\n }\n }\n\n // List: refValueType is required\n if (normalized.dataType === ModelPropertyDataTypes.List) {\n const hasRefValueType = normalized.refValueType != null && String(normalized.refValueType).trim() !== ''\n if (!hasRefValueType) {\n errors.push({\n field: 'refValueType',\n message: `List properties require refValueType (e.g. 'Text', 'Number', 'Relation') to specify the element type.`,\n code: 'missing_ref_value_type',\n severity: 'error' as const,\n })\n }\n // List of relations: ref is required\n if (hasRefValueType && normalized.refValueType === ModelPropertyDataTypes.Relation) {\n const hasRef = normalized.ref && normalized.ref.trim() !== ''\n const hasRefModelName = normalized.refModelName && normalized.refModelName.trim() !== ''\n const hasRefModelId = normalized.refModelId !== undefined && normalized.refModelId !== null\n if (!hasRef && !hasRefModelName && !hasRefModelId) {\n errors.push({\n field: 'ref',\n message: `List properties with refValueType 'Relation' require either a \"ref\", \"refModelName\", or \"refModelId\" field to be defined`,\n code: 'missing_ref',\n severity: 'error' as const,\n })\n }\n }\n }\n\n // Relation (single): ref is required\n if (normalized.dataType === ModelPropertyDataTypes.Relation) {\n const hasRef = normalized.ref && normalized.ref.trim() !== ''\n const hasRefModelName = normalized.refModelName && normalized.refModelName.trim() !== ''\n const hasRefModelId = normalized.refModelId !== undefined && normalized.refModelId !== null\n if (!hasRef && !hasRefModelName && !hasRefModelId) {\n errors.push({\n field: 'ref',\n message: `Property with dataType \"Relation\" requires either a \"ref\", \"refModelName\", or \"refModelId\" field to be defined`,\n code: 'missing_ref',\n severity: 'error' as const,\n })\n }\n if ((hasRef || hasRefModelName) && !hasRefModelId) {\n logger(`Property \"${normalized.name}\" has ref/refModelName but no refModelId - will be resolved asynchronously`)\n }\n }\n \n return {\n isValid: errors.length === 0,\n errors,\n }\n } catch (error) {\n logger('Error validating property structure:', error)\n return {\n isValid: false,\n errors: [{\n field: 'property',\n message: error instanceof Error ? error.message : 'Unknown validation error',\n code: 'validation_exception',\n severity: 'error' as const,\n }],\n }\n }\n }\n\n /**\n * Validate a property value against its validation rules\n * @param value - The value to validate\n * @param dataType - The property's data type\n * @param validationRules - Optional validation rules (enum, pattern, minLength, maxLength)\n * @param refValueType - For List properties: the element type (Text, Number, etc.). When set, each array element is validated against this type + validationRules.\n */\n validatePropertyValue(\n value: any,\n dataType: ModelPropertyDataTypes,\n validationRules?: ValidationRules,\n refValueType?: ModelPropertyDataTypes | string\n ): ValidationResult {\n dataType = normalizeDataType(dataType) as ModelPropertyDataTypes\n const errors: ValidationError[] = []\n const warnings: ValidationError[] = []\n\n try {\n // Array values are only allowed for List properties\n if (dataType !== ModelPropertyDataTypes.List && Array.isArray(value)) {\n errors.push({\n field: 'value',\n message: 'Array values are only allowed for List properties. Use dataType \"List\" with refValueType to store multiple values.',\n code: 'array_not_allowed',\n severity: 'error' as const,\n })\n }\n\n // File/Image: accept File objects from OS picker, and Blobs for Image (saveImage persists both).\n // The TypeBox schema only allows string|null.\n const isFileObject = typeof File !== 'undefined' && value instanceof File\n const isBlobObject = typeof Blob !== 'undefined' && value instanceof Blob\n if (\n (dataType === ModelPropertyDataTypes.File && isFileObject) ||\n (dataType === ModelPropertyDataTypes.Image && isBlobObject)\n ) {\n if (validationRules) {\n const customErrors = this.validateCustomRules(value, validationRules)\n errors.push(...customErrors)\n }\n return {\n isValid: errors.length === 0,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n }\n\n // List with refValueType: validate each element against element schema + validation rules\n if (dataType === ModelPropertyDataTypes.List && refValueType && Array.isArray(value)) {\n const elementDataType = normalizeDataType(String(refValueType)) as ModelPropertyDataTypes\n // Apply default maxLength for Text elements in List. Html elements hold arbitrary-length content.\n const elementEffectiveRules = validationRules ? { ...validationRules } : {}\n if (\n elementDataType === ModelPropertyDataTypes.Text &&\n elementEffectiveRules.maxLength === undefined &&\n !(Array.isArray(elementEffectiveRules.enum) && elementEffectiveRules.enum.length > 0)\n ) {\n elementEffectiveRules.maxLength = DEFAULT_TEXT_MAX_LENGTH\n }\n for (let i = 0; i < value.length; i++) {\n const elementResult = this.validatePropertyValue(\n value[i],\n elementDataType,\n elementEffectiveRules\n )\n if (!elementResult.isValid && elementResult.errors.length > 0) {\n for (const err of elementResult.errors) {\n errors.push({\n field: `value[${i}]`,\n message: `Element at index ${i}: ${err.message}`,\n code: validationRules?.enum && Array.isArray(validationRules.enum) && validationRules.enum.length > 0 ? 'enum_violation' : err.code,\n severity: err.severity,\n })\n }\n }\n }\n if (validationRules) {\n const customErrors = this.validateCustomRules(value, validationRules)\n errors.push(...customErrors)\n }\n return {\n isValid: errors.length === 0,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n }\n\n // List without refValueType or non-array: validate as scalar/array\n if (dataType === ModelPropertyDataTypes.List && !Array.isArray(value) && value != null) {\n errors.push({\n field: 'value',\n message: 'List properties require an array value.',\n code: 'array_required',\n severity: 'error' as const,\n })\n return { isValid: false, errors }\n }\n\n // Build base TypeBox schema from dataType\n let schema: TSchema = this.getBaseSchemaForDataType(dataType)\n\n // Apply default maxLength for Text when not explicitly set. Html holds arbitrary-length content (e.g. article body) and must not default to 255.\n const effectiveRules = validationRules ? { ...validationRules } : {}\n // An enum already bounds the value, so the default limit is not added to it.\n const hasEnum = !!(effectiveRules.enum && Array.isArray(effectiveRules.enum) && effectiveRules.enum.length > 0)\n if (dataType === ModelPropertyDataTypes.Text && effectiveRules.maxLength === undefined && !hasEnum) {\n effectiveRules.maxLength = DEFAULT_TEXT_MAX_LENGTH\n }\n\n // Apply validation rules\n const hasEnumRules = !!(validationRules?.enum && Array.isArray(validationRules.enum) && validationRules.enum.length > 0)\n if (Object.keys(effectiveRules).length > 0) {\n schema = this.applyValidationRules(schema, dataType, effectiveRules)\n }\n\n // Validate using TypeBox\n const isValid = Value.Check(schema, value)\n \n if (!isValid) {\n const typeBoxErrors = [...Value.Errors(schema, value)]\n const effectiveMaxLength = effectiveRules.maxLength\n const isDefaultTextLimit =\n dataType === ModelPropertyDataTypes.Text &&\n effectiveMaxLength === DEFAULT_TEXT_MAX_LENGTH &&\n validationRules?.maxLength === undefined\n errors.push(...typeBoxErrors.map(err => {\n const fieldPath = err.path || 'value'\n const originalMessage = (err.message || '').toLowerCase()\n // TypeBox maxLength errors have message like \"Expected string length less or equal to X\"\n const isMaxLengthError = originalMessage.includes('length') && (originalMessage.includes('less') || originalMessage.includes('equal') || originalMessage.includes('max'))\n let enhancedMessage: string\n if (isMaxLengthError && effectiveMaxLength !== undefined) {\n const typeLabel = dataType === ModelPropertyDataTypes.Html ? 'Html' : 'Text'\n if (isDefaultTextLimit) {\n enhancedMessage = `Text properties have a default limit of 255 characters. For longer content, use a File property instead, which can hold arbitrary amounts of text or data.`\n } else {\n enhancedMessage = `${typeLabel} must be ${effectiveMaxLength} characters or less. For longer content, use a File property instead, which can hold arbitrary amounts of text or data.`\n }\n } else {\n enhancedMessage = this.enhanceErrorMessage(err, schema, fieldPath)\n }\n // Use max_length_exceeded when failure is due to maxLength; enum_violation when enum rules; else generic\n const code = isMaxLengthError\n ? 'max_length_exceeded'\n : hasEnumRules\n ? 'enum_violation'\n : String(err.type || 'value_validation_error')\n\n return {\n field: fieldPath,\n message: enhancedMessage,\n code,\n severity: 'error' as const,\n }\n }))\n }\n\n // Additional custom validations\n if (validationRules) {\n const customErrors = this.validateCustomRules(value, validationRules)\n errors.push(...customErrors)\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n } catch (error) {\n logger('Error validating property value:', error)\n return {\n isValid: false,\n errors: [{\n field: 'value',\n message: error instanceof Error ? error.message : 'Unknown validation error',\n code: 'validation_exception',\n severity: 'error' as const,\n }],\n }\n }\n }\n\n /**\n * Validate a specific property within a schema\n */\n validateProperty(\n schema: SchemaMachineContext,\n modelName: string,\n propertyName: string,\n propertyData?: ModelPropertyMachineContext\n ): ValidationResult {\n const errors: ValidationError[] = []\n\n // Check if model exists\n if (!schema.models || !schema.models[modelName]) {\n errors.push({\n field: 'model',\n message: `Model \"${modelName}\" not found in schema`,\n code: 'model_not_found',\n severity: 'error' as const,\n })\n return { isValid: false, errors }\n }\n\n const model = schema.models[modelName]\n\n // Check if property exists in model\n // If the property name has changed (renamed), check if the original name exists\n let propertyDefinition = model.properties?.[propertyName]\n let actualPropertyName = propertyName\n \n if (!propertyDefinition && propertyData?._originalValues?.name) {\n const originalName = propertyData._originalValues.name\n // If the current name differs from the original, check if original exists\n if (originalName !== propertyName && model.properties?.[originalName]) {\n propertyDefinition = model.properties[originalName]\n actualPropertyName = originalName\n // Property is being renamed, which is allowed - continue validation\n }\n }\n \n if (!propertyDefinition) {\n errors.push({\n field: 'property',\n message: `Property \"${propertyName}\" not found in model \"${modelName}\"`,\n code: 'property_not_found',\n severity: 'error' as const,\n })\n return { isValid: false, errors }\n }\n\n // If propertyData is provided, validate its structure\n if (propertyData) {\n const structureResult = this.validatePropertyStructure(propertyData)\n errors.push(...structureResult.errors)\n }\n\n // Schema context definitions come in two shapes: schema-file ({ type, model }) and runtime\n // ({ dataType, ref/refModelName }, e.g. models added from Model instances). Accept both, as the\n // List check below already does; requiring `type` rejected every edit to a runtime-shaped property.\n const definitionType = propertyDefinition.type ?? (propertyDefinition as any).dataType\n const definitionRefModel: string | undefined =\n propertyDefinition.model ?? (propertyDefinition as any).ref ?? (propertyDefinition as any).refModelName\n\n // Validate property definition structure\n if (!definitionType) {\n errors.push({\n field: 'property.type',\n message: 'Property type is required',\n code: 'missing_type',\n severity: 'error' as const,\n })\n }\n\n // Validate Relation: requires model\n if (isDataType(definitionType, ModelPropertyDataTypes.Relation)) {\n if (!definitionRefModel || definitionRefModel.trim() === '') {\n errors.push({\n field: 'property.model',\n message: `Property with type \"Relation\" requires a \"model\" field to be defined`,\n code: 'missing_ref',\n severity: 'error' as const,\n })\n } else if (!schema.models[definitionRefModel]) {\n errors.push({\n field: 'property.model',\n message: `Referenced model \"${definitionRefModel}\" not found in schema`,\n code: 'invalid_reference',\n severity: 'error' as const,\n })\n }\n }\n\n // Validate List: requires refValueType; ref (model) required only when refValueType === 'Relation' (case-insensitive)\n if (isDataType(propertyDefinition.type, ModelPropertyDataTypes.List) || isDataType((propertyDefinition as any).dataType, ModelPropertyDataTypes.List)) {\n const rawRefValueType = (propertyDefinition as any).refValueType ?? (propertyDefinition as any).items?.type ?? (propertyDefinition as any).refvaluetype\n const refValueType = rawRefValueType ? normalizeDataType(String(rawRefValueType)) : undefined\n if (!refValueType || String(refValueType).trim() === '') {\n errors.push({\n field: 'property.refValueType',\n message: 'List properties require \"refValueType\" (e.g. refValueType: \"Text\" or refValueType: \"Relation\" with ref: \"Tag\")',\n code: 'missing_ref_value_type',\n severity: 'error' as const,\n })\n } else if (refValueType === 'Relation' || refValueType === 'RelationProperty') {\n const model = (propertyDefinition as any).ref ?? (propertyDefinition as any).model ?? (propertyDefinition as any).items?.model\n if (!model || String(model).trim() === '') {\n errors.push({\n field: 'property.ref',\n message: 'List of relations requires \"ref\" to specify the related model',\n code: 'missing_ref',\n severity: 'error' as const,\n })\n } else if (schema.models && !schema.models[model]) {\n errors.push({\n field: 'property.ref',\n message: `Referenced model \"${model}\" not found in schema`,\n code: 'invalid_reference',\n severity: 'error' as const,\n })\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n }\n }\n\n /**\n * Validate model structure (basic structure checks)\n */\n validateModelStructure(\n model: ModelMachineContext & { properties?: { [key: string]: any } }\n ): ValidationResult {\n const errors: ValidationError[] = []\n\n // Validate model name\n if (!model.modelName || model.modelName.trim() === '') {\n errors.push({\n field: 'modelName',\n message: 'Model name is required',\n code: 'missing_model_name',\n severity: 'error' as const,\n })\n }\n\n // Validate schema name\n if (!model.schemaName || model.schemaName.trim() === '') {\n errors.push({\n field: 'schemaName',\n message: 'Schema name is required',\n code: 'missing_schema_name',\n severity: 'error' as const,\n })\n }\n\n // Validate properties is an object\n if (model.properties && typeof model.properties !== 'object') {\n errors.push({\n field: 'properties',\n message: 'Properties must be an object',\n code: 'invalid_properties',\n severity: 'error' as const,\n })\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n }\n }\n\n /**\n * Validate a model against a schema WITHOUT requiring it to be in the schema's context\n * This allows validation before registration, preventing update loops\n */\n validateModelAgainstSchema(\n schema: SchemaMachineContext,\n modelName: string,\n modelData: ModelMachineContext & { properties?: { [key: string]: any } }\n ): ValidationResult {\n const errors: ValidationError[] = []\n\n // Create a temporary schema context that includes this model for validation purposes\n // This allows validateProperty to work without actually adding the model to the real schema\n const tempSchemaContext: SchemaMachineContext = {\n ...schema,\n models: {\n ...schema.models,\n [modelName]: {\n properties: modelData.properties || {},\n },\n },\n }\n\n // Use validateModel which now works because the model is in the temp context\n return this.validateModel(tempSchemaContext, modelName, modelData)\n }\n\n /**\n * Validate a model within a schema (requires model to already be in schema context)\n */\n validateModel(\n schema: SchemaMachineContext,\n modelName: string,\n modelData?: ModelMachineContext\n ): ValidationResult {\n const errors: ValidationError[] = []\n\n if (!schema.models || !schema.models[modelName]) {\n errors.push({\n field: 'model',\n message: `Model \"${modelName}\" not found in schema`,\n code: 'model_not_found',\n severity: 'error' as const,\n })\n return { isValid: false, errors }\n }\n\n const model = schema.models[modelName]\n\n // Validate all properties in the model\n if (model.properties) {\n for (const [propertyName, propertyDef] of Object.entries(model.properties)) {\n const propertyResult = this.validateProperty(schema, modelName, propertyName)\n if (!propertyResult.isValid) {\n errors.push(...propertyResult.errors.map(err => ({\n ...err,\n field: `${modelName}.${propertyName}.${err.field}`,\n })))\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n }\n }\n\n /**\n * Validate entire schema\n */\n validateSchema(schema: SchemaMachineContext): ValidationResult {\n const errors: ValidationError[] = []\n\n // Validate schema name\n if (!schema.schemaName || schema.schemaName.trim() === '') {\n errors.push({\n field: 'schemaName',\n message: 'Schema name is required',\n code: 'missing_schema_name',\n severity: 'error' as const,\n })\n }\n\n // Validate metadata\n if (!schema.metadata) {\n errors.push({\n field: 'metadata',\n message: 'Schema metadata is required',\n code: 'missing_metadata',\n severity: 'error' as const,\n })\n } else {\n if (!schema.metadata.name || schema.metadata.name.trim() === '') {\n errors.push({\n field: 'metadata.name',\n message: 'Schema metadata name is required',\n code: 'missing_metadata_name',\n severity: 'error' as const,\n })\n }\n }\n\n // Validate models if they exist\n if (schema.models && Object.keys(schema.models).length > 0) {\n // Validate each model\n for (const modelName of Object.keys(schema.models)) {\n const modelResult = this.validateModel(schema, modelName)\n if (!modelResult.isValid) {\n errors.push(...modelResult.errors)\n }\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n }\n }\n\n /**\n * Get base TypeBox schema for a data type\n */\n private getBaseSchemaForDataType(dataType: ModelPropertyDataTypes): TSchema {\n switch (dataType) {\n case ModelPropertyDataTypes.Text:\n case ModelPropertyDataTypes.Html:\n return Type.String()\n case ModelPropertyDataTypes.Number:\n return Type.Number()\n case ModelPropertyDataTypes.Boolean:\n return Type.Boolean()\n case ModelPropertyDataTypes.Date:\n return Type.String({ format: 'date-time' })\n case ModelPropertyDataTypes.Json:\n return Type.Any()\n case ModelPropertyDataTypes.List:\n return Type.Array(Type.Any())\n case ModelPropertyDataTypes.Relation:\n case ModelPropertyDataTypes.Image:\n case ModelPropertyDataTypes.File:\n return Type.Union([Type.String(), Type.Null()])\n default:\n return Type.Any()\n }\n }\n\n /**\n * Apply validation rules to a TypeBox schema. For Text and Html, pattern, minLength and\n * maxLength combine into one string schema; enum further restricts the value to its list.\n * (Each rule used to replace the schema built so far, so e.g. Text's default maxLength\n * silently dropped any pattern.)\n */\n private applyValidationRules(\n schema: TSchema,\n dataType: ModelPropertyDataTypes,\n rules: ValidationRules\n ): TSchema {\n let result = schema\n\n if (dataType === ModelPropertyDataTypes.Text || dataType === ModelPropertyDataTypes.Html) {\n const options: { pattern?: string; minLength?: number; maxLength?: number } = {}\n if (rules.pattern) {\n try {\n new RegExp(rules.pattern)\n options.pattern = rules.pattern\n } catch (error) {\n logger('Invalid regex pattern:', rules.pattern, error)\n }\n }\n if (rules.minLength !== undefined) options.minLength = rules.minLength\n if (rules.maxLength !== undefined) options.maxLength = rules.maxLength\n if (Object.keys(options).length > 0) {\n result = Type.String(options)\n }\n }\n\n if (rules.enum && Array.isArray(rules.enum) && rules.enum.length > 0) {\n const allowed = Type.Union(rules.enum.map(val => Type.Literal(val)))\n result = result === schema ? allowed : Type.Intersect([result, allowed])\n }\n\n return result\n }\n\n /**\n * Validate custom validation rules\n */\n private validateCustomRules(\n value: any,\n rules: ValidationRules\n ): ValidationError[] {\n const errors: ValidationError[] = []\n\n // Custom validators are not supported; validatePropertyStructure rejects schemas that use them.\n if (rules.custom) {\n logger('Ignoring unsupported custom validator:', rules.custom)\n }\n\n return errors\n }\n}\n\n"],"names":[],"mappings":"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"}
|
package/dist/{backfillMetadataPropertyIds-DSoOoTnX.js → backfillMetadataPropertyIds-DacVthS5.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as BaseDb, m as metadata, K as getPropertyIdForModelAndName, L as resolveItemModelFileId } from './BasePathResolver-
|
|
2
|
-
import { s as skipSeedOnAmbiguousModel } from './resolveModelForSyncedSeed-
|
|
1
|
+
import { E as BaseDb, m as metadata, K as getPropertyIdForModelAndName, L as resolveItemModelFileId } from './BasePathResolver-DxdS0wJ0.js';
|
|
2
|
+
import { s as skipSeedOnAmbiguousModel } from './resolveModelForSyncedSeed-BTAeCOJE.js';
|
|
3
3
|
import { and, isNull, sql, eq } from 'drizzle-orm';
|
|
4
4
|
import debug from 'debug';
|
|
5
5
|
import '@seedprotocol/arweave';
|
|
@@ -70,4 +70,4 @@ async function backfillMetadataPropertyIds() {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export { backfillMetadataPropertyIds };
|
|
73
|
-
//# sourceMappingURL=backfillMetadataPropertyIds-
|
|
73
|
+
//# sourceMappingURL=backfillMetadataPropertyIds-DacVthS5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfillMetadataPropertyIds-
|
|
1
|
+
{"version":3,"file":"backfillMetadataPropertyIds-DacVthS5.js","sources":["../../src/db/backfillMetadataPropertyIds.ts"],"sourcesContent":["import { resolveItemModelFileId } from '@/db/read/resolveModelRecord'\nimport { skipSeedOnAmbiguousModel } from '@/db/read/resolveModelForSyncedSeed'\nimport { and, eq, isNull, sql } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata } from '@/seedSchema'\nimport { getPropertyIdForModelAndName } from '@/helpers/db'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:db:backfillMetadataPropertyIds')\n\n/**\n * Backfill metadata.property_id for rows that have model_type and property_name\n * but property_id is null. Run after migrations. Idempotent - only updates NULL rows.\n * Call after appDb is set (e.g. at end of prepareDb).\n */\nexport async function backfillMetadataPropertyIds(): Promise<number> {\n const db = BaseDb.getAppDb()\n if (!db) {\n logger('No app db available, skipping backfill')\n return 0\n }\n\n try {\n const rowsToBackfill = await db\n .select({\n localId: metadata.localId,\n modelType: metadata.modelType,\n propertyName: metadata.propertyName,\n seedLocalId: metadata.seedLocalId,\n })\n .from(metadata)\n .where(\n and(\n isNull(metadata.propertyId),\n sql`${metadata.modelType} IS NOT NULL`,\n sql`${metadata.propertyName} IS NOT NULL`,\n ),\n )\n\n if (rowsToBackfill.length === 0) {\n return 0\n }\n\n let updated = 0\n for (const row of rowsToBackfill) {\n if (!row.modelType || !row.propertyName || !row.localId) continue\n\n // Pin to the seed's own model (model names are only unique per schema).\n const propertyId = await skipSeedOnAmbiguousModel(\n { seedLocalId: row.seedLocalId },\n 'backfillMetadataPropertyIds',\n async () =>\n getPropertyIdForModelAndName(row.modelType!, row.propertyName!, {\n modelFileId: await resolveItemModelFileId({ seedLocalId: row.seedLocalId }),\n }),\n )\n if (propertyId == null) continue\n\n await db\n .update(metadata)\n .set({ propertyId })\n .where(eq(metadata.localId, row.localId))\n\n updated++\n }\n\n if (updated > 0) {\n logger(`Backfilled property_id for ${updated}/${rowsToBackfill.length} metadata rows`)\n }\n return updated\n } catch (error) {\n logger('Backfill error:', error)\n throw error\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAQA,MAAM,MAAM,GAAG,KAAK,CAAC,wCAAwC,CAAC;AAE9D;;;;AAIG;AACI,eAAe,2BAA2B,GAAA;AAC/C,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;IAC5B,IAAI,CAAC,EAAE,EAAE;QACP,MAAM,CAAC,wCAAwC,CAAC;AAChD,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,IAAI;QACF,MAAM,cAAc,GAAG,MAAM;AAC1B,aAAA,MAAM,CAAC;YACN,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC;aACA,IAAI,CAAC,QAAQ;aACb,KAAK,CACJ,GAAG,CACD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC3B,GAAG,CAAA,CAAA,EAAG,QAAQ,CAAC,SAAS,CAAA,YAAA,CAAc,EACtC,GAAG,CAAA,CAAA,EAAG,QAAQ,CAAC,YAAY,CAAA,YAAA,CAAc,CAC1C,CACF;AAEH,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,CAAC;QACV;QAEA,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE;;AAGzD,YAAA,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAC/C,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAChC,6BAA6B,EAC7B,YACE,4BAA4B,CAAC,GAAG,CAAC,SAAU,EAAE,GAAG,CAAC,YAAa,EAAE;gBAC9D,WAAW,EAAE,MAAM,sBAAsB,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;AAC5E,aAAA,CAAC,CACL;YACD,IAAI,UAAU,IAAI,IAAI;gBAAE;AAExB,YAAA,MAAM;iBACH,MAAM,CAAC,QAAQ;AACf,iBAAA,GAAG,CAAC,EAAE,UAAU,EAAE;AAClB,iBAAA,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3C,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,MAAM,CAAC,8BAA8B,OAAO,CAAA,CAAA,EAAI,cAAc,CAAC,MAAM,CAAA,cAAA,CAAgB,CAAC;QACxF;AACA,QAAA,OAAO,OAAO;IAChB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC;AAChC,QAAA,MAAM,KAAK;IACb;AACF;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { I as BasePathResolver, J as BaseFileManager, E as BaseDb } from './BasePathResolver-
|
|
1
|
+
import { I as BasePathResolver, J as BaseFileManager, E as BaseDb } from './BasePathResolver-DxdS0wJ0.js';
|
|
2
2
|
import { BaseEasClient, BaseQueryClient } from '@seedprotocol/eas';
|
|
3
3
|
import { BaseArweaveClient } from '@seedprotocol/arweave';
|
|
4
4
|
import 'debug';
|
|
@@ -29,4 +29,4 @@ function configurePlatform(services) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export { configurePlatform };
|
|
32
|
-
//# sourceMappingURL=configurePlatform-
|
|
32
|
+
//# sourceMappingURL=configurePlatform-DlZ23w7e.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurePlatform-
|
|
1
|
+
{"version":3,"file":"configurePlatform-DlZ23w7e.js","sources":["../../src/platform/configurePlatform.ts"],"sourcesContent":["import { BasePathResolver } from '@/helpers/PathResolver/BasePathResolver'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { BaseArweaveClient } from '@/helpers'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport type { PlatformServices } from './types'\n\n/**\n * Wire all platform facades to the given service instances.\n */\nexport function configurePlatform(services: PlatformServices): void {\n BasePathResolver.configure(services.pathResolver)\n BaseFileManager.configure(services.fileManager)\n BaseDb.configure(services.db)\n BaseArweaveClient.configure(services.arweaveClient)\n BaseEasClient.configure(services.easClient)\n BaseQueryClient.configure(services.queryClient)\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAQA;;AAEG;AACG,SAAU,iBAAiB,CAAC,QAA0B,EAAA;AAC1D,IAAA,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;AACjD,IAAA,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC/C,IAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7B,IAAA,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;AACnD,IAAA,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC3C,IAAA,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;AACjD;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { inArray } from 'drizzle-orm';
|
|
2
|
-
import { u as properties, r as modelUids, m as metadata, x as propertyUids } from './BasePathResolver-
|
|
2
|
+
import { u as properties, r as modelUids, m as metadata, x as propertyUids } from './BasePathResolver-DxdS0wJ0.js';
|
|
3
3
|
import 'debug';
|
|
4
4
|
import '@seedprotocol/arweave';
|
|
5
5
|
import '@seedprotocol/eas';
|
|
@@ -47,4 +47,4 @@ async function detachModelRows(db, modelIds) {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export { detachModelRows, detachPropertyRows };
|
|
50
|
-
//# sourceMappingURL=detachRowsBeforeDelete-
|
|
50
|
+
//# sourceMappingURL=detachRowsBeforeDelete-YRSZY6dO.js.map
|
package/dist/{detachRowsBeforeDelete-S0q-DJPT.js.map → detachRowsBeforeDelete-YRSZY6dO.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detachRowsBeforeDelete-
|
|
1
|
+
{"version":3,"file":"detachRowsBeforeDelete-YRSZY6dO.js","sources":["../../src/helpers/entity/detachRowsBeforeDelete.ts"],"sourcesContent":["import { inArray } from 'drizzle-orm'\nimport type { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata, modelUids, properties, propertyUids } from '@/seedSchema'\n\ntype AppDb = NonNullable<ReturnType<typeof BaseDb.getAppDb>>\n\n/**\n * Before deleting property rows: unlink stored item values (metadata.property_id → NULL; the\n * values stay, keyed by property name) and drop the properties' EAS uid mappings. Without this,\n * Node (libsql enforces foreign keys) fails the delete as soon as an item has a value, and the\n * browser leaves rows pointing at deleted ids.\n */\nexport async function detachPropertyRows(db: AppDb, propertyIds: readonly number[]): Promise<void> {\n if (propertyIds.length === 0) return\n const ids = [...propertyIds]\n await db.update(metadata).set({ propertyId: null }).where(inArray(metadata.propertyId, ids))\n await db.delete(propertyUids).where(inArray(propertyUids.propertyId, ids))\n}\n\n/**\n * Before deleting model rows: detach their properties' rows (as above), drop the models' EAS\n * uid mappings, and clear relation properties elsewhere that point at them (ref_model_id).\n */\nexport async function detachModelRows(db: AppDb, modelIds: readonly number[]): Promise<void> {\n if (modelIds.length === 0) return\n const ids = [...modelIds]\n const propertyRows = await db\n .select({ id: properties.id })\n .from(properties)\n .where(inArray(properties.modelId, ids))\n await detachPropertyRows(\n db,\n propertyRows.map((row: { id: number | null }) => row.id).filter((id: number | null): id is number => id != null),\n )\n await db.delete(modelUids).where(inArray(modelUids.modelId, ids))\n await db.update(properties).set({ refModelId: null }).where(inArray(properties.refModelId, ids))\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAMA;;;;;AAKG;AACI,eAAe,kBAAkB,CAAC,EAAS,EAAE,WAA8B,EAAA;AAChF,IAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE;AAC9B,IAAA,MAAM,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC5F,IAAA,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC5E;AAEA;;;AAGG;AACI,eAAe,eAAe,CAAC,EAAS,EAAE,QAA2B,EAAA;AAC1E,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE;AAC3B,IAAA,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;IACzB,MAAM,YAAY,GAAG,MAAM;SACxB,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE;SAC5B,IAAI,CAAC,UAAU;SACf,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC1C,IAAA,MAAM,kBAAkB,CACtB,EAAE,EACF,YAAY,CAAC,GAAG,CAAC,CAAC,GAA0B,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAiB,KAAmB,EAAE,IAAI,IAAI,CAAC,CACjH;AACD,IAAA,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAClG;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getItemVersionsFromEas, BaseQueryClient, BaseEasClient, GET_SCHEMAS } from '@seedprotocol/eas';
|
|
2
2
|
export { PUBLISHED_BY_SCHEMA_DEF, PUBLISHED_BY_SCHEMA_NAME, decodePublishedByData, getCanonicalItemPropertiesFromEas, getEasSchemaUidBySchemaName, getItemPropertiesFromEas, getItemVersionsFromEas, getPublishedByFromEas, getSeedUidsBySchemaName, getSeedsBySchemaName, getSeedsFromSchemaUids, hashPublishedByBatch, verifyPublishedByBatch } from '@seedprotocol/eas';
|
|
3
|
-
import { H as toSnakeCase } from './BasePathResolver-
|
|
3
|
+
import { H as toSnakeCase } from './BasePathResolver-DxdS0wJ0.js';
|
|
4
4
|
import 'debug';
|
|
5
5
|
import '@seedprotocol/arweave';
|
|
6
6
|
import 'xstate';
|
|
@@ -21,8 +21,8 @@ import '@noble/hashes/utils';
|
|
|
21
21
|
const getModelSchemasFromEas = async () => {
|
|
22
22
|
const queryClient = BaseQueryClient.getQueryClient();
|
|
23
23
|
const easClient = BaseEasClient.getEasClient();
|
|
24
|
-
const _mod_0 = await import('./
|
|
25
|
-
const _ns_0 = _mod_0.
|
|
24
|
+
const _mod_0 = await import('./errors-Cl8rbtKR.js');
|
|
25
|
+
const _ns_0 = _mod_0.h;
|
|
26
26
|
const modelMod = _ns_0;
|
|
27
27
|
const { Model } = modelMod;
|
|
28
28
|
const allModels = await Model.all();
|
|
@@ -70,4 +70,4 @@ const getModelSchemasFromEas = async () => {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
export { getModelSchemasFromEas };
|
|
73
|
-
//# sourceMappingURL=eas-
|
|
73
|
+
//# sourceMappingURL=eas-D_6ptL_F.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eas-
|
|
1
|
+
{"version":3,"file":"eas-D_6ptL_F.js","sources":["../../src/eas.ts"],"sourcesContent":["export {\n getItemVersionsFromEas,\n getItemPropertiesFromEas,\n getCanonicalItemPropertiesFromEas,\n getEasSchemaUidBySchemaName,\n getSeedsFromSchemaUids,\n getSeedsBySchemaName,\n getSeedUidsBySchemaName,\n getPublishedByFromEas,\n decodePublishedByData,\n hashPublishedByBatch,\n verifyPublishedByBatch,\n PUBLISHED_BY_SCHEMA_DEF,\n PUBLISHED_BY_SCHEMA_NAME,\n} from '@seedprotocol/eas'\nexport type {\n Attestation,\n EASSchema,\n PublishedByDecoded,\n GetPublishedByFromEasParams,\n} from '@seedprotocol/eas'\n\nimport { toSnakeCase } from '@/helpers'\nimport { withExcludeRevokedFilter } from '@seedprotocol/eas'\nimport { BaseEasClient } from '@seedprotocol/eas'\nimport { BaseQueryClient } from '@seedprotocol/eas'\nimport { GET_SCHEMAS } from '@seedprotocol/eas'\nimport type { EASSchema } from '@seedprotocol/eas'\n\ntype GetModelSchemasFromEas = () => Promise<EASSchema[]>\n\n/** Stays in SDK: depends on local Model registry. */\nexport const getModelSchemasFromEas: GetModelSchemasFromEas = async () => {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const modelMod = await import('./Model/Model')\n const { Model } = modelMod\n const allModels = await Model.all()\n const modelNames = allModels.map((m) => m.modelName).filter((name): name is string => !!name)\n\n if (modelNames.length === 0) {\n return []\n }\n\n const OR: Record<string, unknown>[] = []\n const hasImageModel = modelNames.includes('Image')\n\n for (const modelName of modelNames) {\n const snake = toSnakeCase(modelName)\n OR.push({\n schema: {\n equals: `bytes32 ${snake}`,\n },\n })\n const altSchema = `bytes32 ${modelName}`\n if (altSchema !== `bytes32 ${snake}`) {\n OR.push({\n schema: {\n equals: altSchema,\n },\n })\n }\n }\n\n if (hasImageModel) {\n OR.push({\n schema: {\n equals: `bytes32 image`,\n },\n })\n }\n\n const modelSchemas = await queryClient.fetchQuery({\n queryKey: [`getSchemasAllModels`, [...modelNames].sort()],\n queryFn: async () =>\n easClient.request(GET_SCHEMAS, {\n where: {\n OR,\n },\n }),\n })\n\n if (!modelSchemas?.schemas?.length) {\n return []\n }\n\n return modelSchemas.schemas as EASSchema[]\n}\n"],"names":[],"mappings":"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"}
|