@speckle/shared
Version:
Shared code between various Speckle JS packages
84 lines • 2.93 kB
JavaScript
import { UnformattableResultsSchemaError, UnformattableTriggerDefinitionSchemaError } from '../errors/index.js';
import { z } from 'zod';
export const TRIGGER_DEFINITIONS_SCHEMA_VERSION = 1.0;
export const RESULTS_SCHEMA_VERSION = 1.0;
export const REDACTED_VALUE = '******';
const versionCreatedTriggerDefinition = z.object({
type: z.literal('VERSION_CREATED'),
modelId: z.string()
});
const triggerDefinitionsSchema = z.object({
version: z.literal(1),
definitions: z.array(versionCreatedTriggerDefinition)
});
const objectResultLevel = z.union([
z.literal('SUCCESS'),
z.literal('INFO'),
z.literal('WARNING'),
z.literal('ERROR')
]);
const objectResultCommon = z.object({
category: z.string(),
level: objectResultLevel,
message: z.string().nullable(),
metadata: z
.intersection(z.object({
gradient: z.boolean().optional(),
gradientValues: z
.record(z.string(), z.object({ gradientValue: z.number() }))
.optional()
}), z.record(z.string(), z.unknown()))
.nullable(),
visualOverrides: z.record(z.string(), z.unknown()).nullable()
});
const objectResultV1 = objectResultCommon.merge(z.object({
objectIds: z.string().array()
}));
export const resultSchemaV1 = z.object({
version: z.literal(1),
values: z.object({
objectResults: objectResultV1.array(),
blobIds: z.string().array().optional()
})
});
const objectResultV2 = objectResultCommon.merge(z.object({
objectAppIds: z.record(z.string(), z.string().nullable())
}));
export const resultSchemaV2 = z.object({
version: z.literal(2),
values: z.object({
objectResults: objectResultV2.array(),
blobIds: z.string().array().optional()
})
});
export const resultSchema = z.discriminatedUnion('version', [
resultSchemaV1,
resultSchemaV2
]);
export const isVersionCreatedTriggerDefinition = (val) => {
const parseResult = versionCreatedTriggerDefinition.safeParse(val);
return parseResult.success;
};
export const isTriggerDefinitionSchema = (val) => {
const parseResult = triggerDefinitionsSchema.safeParse(val);
return parseResult.success;
};
export const formatTriggerDefinitionSchema = (state) => {
const parseResult = triggerDefinitionsSchema.safeParse(state);
if (!parseResult.success) {
throw new UnformattableTriggerDefinitionSchemaError(`Invalid trigger definition schema: ${parseResult.error}`);
}
return parseResult.data;
};
export const isResultsSchema = (val) => {
const parseResult = resultSchema.safeParse(val);
return parseResult.success;
};
export const formatResultsSchema = (state) => {
const parseResult = resultSchema.safeParse(state);
if (!parseResult.success) {
throw new UnformattableResultsSchemaError(`Invalid results schema: ${parseResult.error}`);
}
return parseResult.data;
};
//# sourceMappingURL=types.js.map