UNPKG

boostr

Version:
47 lines 2.25 kB
import { serialize, createAttributeSelectorFromAttributes, removeFromAttributeSelector } from '@layr/component'; import { isStorableClass } from '@layr/storable'; import mri from 'mri'; import fsExtra from 'fs-extra'; import { createRequire } from 'module'; import 'source-map-support/register.js'; const require = createRequire(import.meta.url); async function main() { const { componentGetterFile, databaseURL, outputFile } = mri(process.argv.slice(2)); const componentGetter = require(componentGetterFile).default; const rootComponent = (await componentGetter()); const exportedStorables = []; let stores = new Set(); for (const component of [rootComponent, ...rootComponent.getProvidedComponents({ deep: true })]) { if (isStorableClass(component) && !component.isEmbedded() && component.hasStore()) { const storableClass = component; const store = storableClass.getStore(); if (store.getURL() !== databaseURL) { continue; } let attributeSelector = storableClass.prototype.resolveAttributeSelector(true); const computedAttributes = storableClass.prototype.getStorableComputedAttributes({ attributeSelector }); attributeSelector = removeFromAttributeSelector(attributeSelector, createAttributeSelectorFromAttributes(computedAttributes)); const foundStorables = await store.find(storableClass); for (const foundStorable of foundStorables) { console.log(`Exporting \`${storableClass.getComponentName()}\` instance (id: '${foundStorable .getPrimaryIdentifierAttribute() .getValue()}')`); await store.load(foundStorable, { attributeSelector }); exportedStorables.push(foundStorable); } stores.add(store); } } for (const store of stores) { await store.disconnect(); } const serializedStorables = serialize(exportedStorables); fsExtra.writeJSONSync(outputFile, serializedStorables, { spaces: 2 }); } main().catch((error) => { console.error(error); process.exit(1); }); //# sourceMappingURL=export-database.js.map