boostr
Version:
Build and deploy your Layr apps
47 lines • 2.25 kB
JavaScript
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