(core) move home server into core

Summary: This moves enough server material into core to run a home server.  The data engine is not yet incorporated (though in manual testing it works when ported).

Test Plan: existing tests pass

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2552
This commit is contained in:
Paul Fitzpatrick
2020-07-21 09:20:51 -04:00
parent c756f663ee
commit 5ef889addd
218 changed files with 33640 additions and 38 deletions

View File

@@ -0,0 +1,49 @@
import {PluginInstance} from 'app/common/PluginInstance';
import {ParseFileAPI} from 'app/plugin/FileParserAPI';
import {checkers} from 'app/plugin/TypeCheckers';
import {FileParser} from 'app/plugin/PluginManifest';
import * as path from 'path';
/**
* Encapsulates together a file parse contribution with its plugin instance and callable stubs for
* `parseFile` implementation provided by the plugin.
*
* Implements as well a `getMatching` static method to get all file parsers matching a filename from
* the list of plugin instances.
*
*/
export class FileParserElement {
/**
* Get all file parser that matches fileName from the list of plugins instances.
*/
public static getMatching(pluginInstances: PluginInstance[], fileName: string): FileParserElement[] {
const fileParserElements: FileParserElement[] = [];
for (const plugin of pluginInstances) {
const fileParsers = plugin.definition.manifest.contributions.fileParsers;
if (fileParsers) {
for (const fileParser of fileParsers) {
if (matchFileParser(fileParser, fileName)) {
fileParserElements.push(new FileParserElement(plugin, fileParser));
}
}
}
}
return fileParserElements;
}
public parseFileStub: ParseFileAPI;
private constructor(public plugin: PluginInstance, public fileParser: FileParser) {
this.parseFileStub = plugin.getStub<ParseFileAPI>(fileParser.parseFile, checkers.ParseFileAPI);
}
}
function matchFileParser(fileParser: FileParser, fileName: string): boolean {
const ext = path.extname(fileName).slice(1),
fileExtensions = fileParser.fileExtensions;
return fileExtensions && fileExtensions.includes(ext);
}