async run()

in sqlite/src/store.ts [25:91]


	async run(): Promise<void> {
		return new Promise((resolve, _reject) => {
			const rd = readline.createInterface(this.input);
			rd.on('line', (line) => {
				if (!line) {
					return;
				}
				let element: Edge | Vertex;
				try {
					element = JSON.parse(line);
				} catch (err) {
					console.log(`Parsing failed for line:\n${line}`);
					throw err;
				}
				if (element.type === ElementTypes.vertex && element.label === VertexLabels.metaData) {
					const convertMetaData = (data: CompressorProperty): CompressorPropertyDescription => {
						const result: CompressorPropertyDescription = {
							name: data.name as string,
							index: data.index,
							compressionKind: data.compressionKind
						};
						if (data.shortForm !== undefined) {
							const long: Set<string> = new Set();
							const short: Set<string | number> = new Set();
							result.shortForm = [];
							for (const elem of data.shortForm) {
								const [key, value] = elem;
								if (long.has(key)) {
									throw new Error(`Duplicate key ${key} in short form.`);
								}
								long.add(key);
								if (short.has(value)) {
									throw new Error(`Duplicate value ${value} in short form.`);
								}
								short.add(value);
								result.shortForm.push([key, value]);
							}
						}
						return result;
					};
					const compressors = Compressor.allCompressors();
					if (compressors.length > 0) {
						const compressMetaData: MetaData = element as MetaData;
						compressMetaData.compressors = {
							vertexCompressor: vertexCompressor.id,
							edgeCompressor: edge11Compressor.id,
							itemEdgeCompressor: itemEdgeCompressor.id,
							all: []
						};
						for (let compressor of compressors) {
							compressMetaData.compressors.all.push({
								id: compressor.id,
								parent: compressor.parent !== undefined ? compressor.parent.id : undefined,
								properties: compressor.metaData().map(convertMetaData)
							});
						}
					}
					this.insert(element);
				} else {
					this.insert(element);
				}
			});
			rd.on('close', () => {
				resolve();
			});
		});
	}