@composedb/devtools
Version:
Development tools for ComposeDB projects.
47 lines (46 loc) • 1.88 kB
JavaScript
import { createAbstractCompositeDefinition } from './schema/compiler.js';
import { isRelationViewDefinition } from './utils.js';
/** @internal */ export function mockDefinition(definition, providedModels = {}) {
const models = {};
const modelsViews = {};
const modelsIndices = {};
for (const abstractModel of Object.values(definition.models)){
if (abstractModel.action === 'create') {
const definition = abstractModel.model;
if (definition.version !== '1.0') {
definition.implements = definition.implements.map((name)=>`${name}ID`);
}
for (const view of Object.values(definition.views ?? {})){
if (isRelationViewDefinition(view) && view.model !== null) {
view.model = `${view.model}ID`;
}
}
models[`${definition.name}ID`] = definition;
if (abstractModel.indices) {
modelsIndices[`${definition.name}ID`] = abstractModel.indices;
}
} else {
const definition = providedModels[abstractModel.id];
if (definition == null) {
throw new Error(`Missing provided model ${abstractModel.id}`);
}
models[abstractModel.id] = definition;
modelsViews[abstractModel.id] = abstractModel.views;
if (abstractModel.indices) {
modelsIndices[abstractModel.id] = abstractModel.indices;
}
}
}
return {
version: '1.1',
commonEmbeds: definition.commonEmbeds,
models,
views: {
models: modelsViews
},
indices: modelsIndices
};
}
/** @internal */ export function mockDefinitionFromSchema(schema, providedModels) {
return mockDefinition(createAbstractCompositeDefinition(schema), providedModels);
}