mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 16:26:00 +00:00
download fileat first in imports
This commit is contained in:
@@ -2,6 +2,7 @@ const fs = require('fs');
|
|||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const byline = require('byline');
|
const byline = require('byline');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger } = require('dbgate-tools');
|
||||||
|
const download = require('./download');
|
||||||
const logger = getLogger('jsonLinesReader');
|
const logger = getLogger('jsonLinesReader');
|
||||||
|
|
||||||
class ParseStream extends stream.Transform {
|
class ParseStream extends stream.Transform {
|
||||||
@@ -35,8 +36,10 @@ class ParseStream extends stream.Transform {
|
|||||||
async function jsonLinesReader({ fileName, encoding = 'utf-8', limitRows = undefined }) {
|
async function jsonLinesReader({ fileName, encoding = 'utf-8', limitRows = undefined }) {
|
||||||
logger.info(`Reading file ${fileName}`);
|
logger.info(`Reading file ${fileName}`);
|
||||||
|
|
||||||
|
const downloadedFile = await download(fileName);
|
||||||
|
|
||||||
const fileStream = fs.createReadStream(
|
const fileStream = fs.createReadStream(
|
||||||
fileName,
|
downloadedFile,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
encoding
|
encoding
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,16 +6,18 @@ const { parser } = require('stream-json');
|
|||||||
const { pick } = require('stream-json/filters/Pick');
|
const { pick } = require('stream-json/filters/Pick');
|
||||||
const { streamArray } = require('stream-json/streamers/StreamArray');
|
const { streamArray } = require('stream-json/streamers/StreamArray');
|
||||||
const { streamObject } = require('stream-json/streamers/StreamObject');
|
const { streamObject } = require('stream-json/streamers/StreamObject');
|
||||||
|
const download = require('./download');
|
||||||
|
|
||||||
const logger = getLogger('jsonReader');
|
const logger = getLogger('jsonReader');
|
||||||
|
|
||||||
|
|
||||||
class ParseStream extends stream.Transform {
|
class ParseStream extends stream.Transform {
|
||||||
constructor({ limitRows, jsonStyle, keyField }) {
|
constructor({ limitRows, jsonStyle, keyField }) {
|
||||||
super({ objectMode: true });
|
super({ objectMode: true });
|
||||||
this.wasHeader = false;
|
this.wasHeader = false;
|
||||||
this.limitRows = limitRows;
|
this.limitRows = limitRows;
|
||||||
this.jsonStyle = jsonStyle;
|
this.jsonStyle = jsonStyle;
|
||||||
this.keyField = keyField;
|
this.keyField = keyField || '_key';
|
||||||
this.rowsWritten = 0;
|
this.rowsWritten = 0;
|
||||||
}
|
}
|
||||||
_transform(chunk, encoding, done) {
|
_transform(chunk, encoding, done) {
|
||||||
@@ -53,8 +55,9 @@ async function jsonReader({
|
|||||||
}) {
|
}) {
|
||||||
logger.info(`Reading file ${fileName}`);
|
logger.info(`Reading file ${fileName}`);
|
||||||
|
|
||||||
|
const downloadedFile = await download(fileName);
|
||||||
const fileStream = fs.createReadStream(
|
const fileStream = fs.createReadStream(
|
||||||
fileName,
|
downloadedFile,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
encoding
|
encoding
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,12 +11,11 @@ class StringifyStream extends stream.Transform {
|
|||||||
this.wasHeader = false;
|
this.wasHeader = false;
|
||||||
this.wasRecord = false;
|
this.wasRecord = false;
|
||||||
this.jsonStyle = jsonStyle;
|
this.jsonStyle = jsonStyle;
|
||||||
this.keyField = keyField;
|
this.keyField = keyField || '_key';
|
||||||
this.rootField = rootField;
|
this.rootField = rootField;
|
||||||
}
|
}
|
||||||
_transform(chunk, encoding, done) {
|
_transform(chunk, encoding, done) {
|
||||||
let skip = false;
|
let skip = false;
|
||||||
const keyField = this.keyField || '_key';
|
|
||||||
|
|
||||||
if (!this.wasHeader) {
|
if (!this.wasHeader) {
|
||||||
skip = chunk.__isStreamHeader;
|
skip = chunk.__isStreamHeader;
|
||||||
@@ -43,8 +42,8 @@ class StringifyStream extends stream.Transform {
|
|||||||
this.wasRecord = true;
|
this.wasRecord = true;
|
||||||
|
|
||||||
if (this.jsonStyle === 'object') {
|
if (this.jsonStyle === 'object') {
|
||||||
const key = chunk[keyField] ?? chunk[Object.keys(chunk)[0]];
|
const key = chunk[this.keyField] ?? chunk[Object.keys(chunk)[0]];
|
||||||
this.push(`"${key}": ${JSON.stringify(_.omit(chunk, [keyField]))}`);
|
this.push(`"${key}": ${JSON.stringify(_.omit(chunk, [this.keyField]))}`);
|
||||||
} else {
|
} else {
|
||||||
this.push(JSON.stringify(chunk));
|
this.push(JSON.stringify(chunk));
|
||||||
}
|
}
|
||||||
@@ -86,7 +85,7 @@ class StringifyStream extends stream.Transform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function jsonWriter({ fileName, jsonStyle, keyField, rootField, encoding = 'utf-8' }) {
|
async function jsonWriter({ fileName, jsonStyle, keyField = '_key', rootField, encoding = 'utf-8' }) {
|
||||||
logger.info(`Writing file ${fileName}`);
|
logger.info(`Writing file ${fileName}`);
|
||||||
const stringify = new StringifyStream({ jsonStyle, keyField, rootField });
|
const stringify = new StringifyStream({ jsonStyle, keyField, rootField });
|
||||||
const fileStream = fs.createWriteStream(fileName, encoding);
|
const fileStream = fs.createWriteStream(fileName, encoding);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts" context="module">
|
<script lang="ts" context="module">
|
||||||
function extractUrlName(url, values) {
|
function extractUrlName(url, values) {
|
||||||
const match = url.match(/\/([^/]+)($|\?)/);
|
const match = url.match(/\/([^/\?]+)($|\?)/);
|
||||||
if (match) {
|
if (match) {
|
||||||
const res = match[1];
|
const res = match[1];
|
||||||
if (res.includes('.')) {
|
if (res.includes('.')) {
|
||||||
|
|||||||
@@ -46,7 +46,6 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount } from 'svelte';
|
|
||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
import Link from '../elements/Link.svelte';
|
import Link from '../elements/Link.svelte';
|
||||||
import TableControl from '../elements/TableControl.svelte';
|
import TableControl from '../elements/TableControl.svelte';
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
import { closeCurrentModal } from './modalTools';
|
import { closeCurrentModal } from './modalTools';
|
||||||
|
|
||||||
export let onConfirm;
|
export let onConfirm;
|
||||||
|
export let url;
|
||||||
|
|
||||||
const handleSubmit = e => {
|
const handleSubmit = e => {
|
||||||
onConfirm(e.detail.url);
|
onConfirm(e.detail.url);
|
||||||
@@ -15,7 +16,7 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<FormProvider>
|
<FormProvider initialValues={{ url }}>
|
||||||
<ModalBase {...$$restProps}>
|
<ModalBase {...$$restProps}>
|
||||||
<svelte:fragment slot="header">Download imported file from web</svelte:fragment>
|
<svelte:fragment slot="header">Download imported file from web</svelte:fragment>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user