UNPKG

@struktoai/mirage-core

Version:

A Unified Virtual Filesystem For AI Agents

53 lines • 2.34 kB
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import { sampleFieldTypes } from "./_sampler.js"; import { getIndexes, getValidator, isView, listCollections } from "./client.js"; import { EntityKind, IndexType, PRIMARY_KEY } from "./types.js"; function indexType(idx) { if ('textIndexVersion' in idx) return IndexType.TEXT; return IndexType.BTREE; } export async function buildDatabaseJson(accessor, database) { const names = await listCollections(accessor, database); const viewNames = new Set(await listCollections(accessor, database, EntityKind.VIEW)); const collections = names.filter((name) => !viewNames.has(name)).map((name) => ({ name })); const views = [...viewNames].map((name) => ({ name })); return { database, collections, views }; } export async function buildCollectionSchemaJson(accessor, database, collection, sampleSize = 100) { const view = await isView(accessor, database, collection); const validator = await getValidator(accessor, database, collection); const fields = await sampleFieldTypes(accessor, database, collection, sampleSize); let enrichedIndexes = []; if (!view) { const indexes = await getIndexes(accessor, database, collection); enrichedIndexes = indexes.map((idx) => ({ name: idx.name, keys: idx.key ?? {}, type: indexType(idx), })); } return { database, name: collection, kind: view ? EntityKind.VIEW : EntityKind.COLLECTION, validator, fields, primary_key: PRIMARY_KEY, indexes: enrichedIndexes, sampled: sampleSize, }; } //# sourceMappingURL=_schema_json.js.map