mirror of
https://github.com/PeWu/topola-viewer.git
synced 2026-03-02 05:36:35 +00:00
Upgrade react-scripts, switch from adm-zip to fflate.
adm-zip did not play nice with compiling to the browser after upgrading react-scripts
This commit is contained in:
47982
package-lock.json
generated
47982
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -4,8 +4,8 @@
|
||||
"main": "src/index.tsx",
|
||||
"dependencies": {
|
||||
"@artsy/fresnel": "^1.3.1",
|
||||
"adm-zip": "^0.5.10",
|
||||
"array.prototype.flatmap": "^1.2.4",
|
||||
"buffer": "^6.0.3",
|
||||
"canvas-toBlob": "^1.0.0",
|
||||
"d3-array": "^2.12.1",
|
||||
"d3-interpolate": "^2.0.1",
|
||||
@@ -14,6 +14,7 @@
|
||||
"d3-zoom": "^2.0.0",
|
||||
"debounce": "^1.2.1",
|
||||
"detect-browser": "^5.2.0",
|
||||
"fflate": "^0.8.2",
|
||||
"file-saver": "^2.0.5",
|
||||
"javascript-natural-sort": "^0.7.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
@@ -62,7 +63,7 @@
|
||||
"cypress": "^6.8.0",
|
||||
"gh-pages": "^3.1.0",
|
||||
"prettier": "^2.2.1",
|
||||
"react-scripts": "^4.0.3",
|
||||
"react-scripts": "^5.0.1",
|
||||
"run-script-os": "^1.1.6",
|
||||
"start-server-and-test": "^1.12.1",
|
||||
"tslint-config-prettier": "^1.18.0",
|
||||
@@ -92,9 +93,6 @@
|
||||
"not op_mini all"
|
||||
],
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app"
|
||||
],
|
||||
"rules": {
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"@typescript-eslint/no-use-before-define": "off"
|
||||
|
||||
23
src/datasource/load_data.spec.ts
Normal file
23
src/datasource/load_data.spec.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import {loadFile} from './load_data';
|
||||
import {readFileSync} from 'fs';
|
||||
import {Blob} from 'buffer';
|
||||
|
||||
describe('loadFile', () => {
|
||||
global.URL.createObjectURL = jest.fn();
|
||||
|
||||
it('loads GEDCOM file', async () => {
|
||||
const file = readFileSync('src/datasource/testdata/test.ged');
|
||||
const blob = new Blob([file]);
|
||||
const {gedcom, images} = await loadFile(blob);
|
||||
expect(gedcom.length).toBe(4408);
|
||||
expect(images).toEqual(new Map());
|
||||
});
|
||||
|
||||
it('loads GEDZIP file', async () => {
|
||||
const file = readFileSync('src/datasource/testdata/test.gdz');
|
||||
const blob = new Blob([file]);
|
||||
const {gedcom, images} = await loadFile(blob);
|
||||
expect(gedcom.length).toBe(4408);
|
||||
expect(images.size).toBe(1);
|
||||
});
|
||||
});
|
||||
@@ -3,7 +3,8 @@ import {convertGedcom, getSoftware, TopolaData} from '../util/gedcom_util';
|
||||
import {DataSource, DataSourceEnum, SourceSelection} from './data_source';
|
||||
import {IndiInfo, JsonGedcomData} from 'topola';
|
||||
import {TopolaError} from '../util/error';
|
||||
import AdmZip from 'adm-zip';
|
||||
import {strFromU8, unzip, Unzipped} from 'fflate';
|
||||
import {Buffer} from 'buffer';
|
||||
|
||||
/**
|
||||
* Returns a valid IndiInfo object, either with the given indi and generation
|
||||
@@ -40,24 +41,29 @@ function prepareData(
|
||||
async function loadGedzip(
|
||||
blob: Blob,
|
||||
): Promise<{gedcom: string; images: Map<string, string>}> {
|
||||
const zip = new AdmZip(Buffer.from(await blob.arrayBuffer()));
|
||||
const entries = zip.getEntries();
|
||||
const buffer = Buffer.from(await blob.arrayBuffer());
|
||||
const unzipped: Unzipped = await new Promise((resolve, reject) => {
|
||||
unzip(buffer, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
let gedcom = undefined;
|
||||
const images = new Map<string, string>();
|
||||
for (const entry of entries) {
|
||||
if (entry.entryName.endsWith('.ged')) {
|
||||
for (let fileName of Object.keys(unzipped)) {
|
||||
if (fileName.endsWith('.ged')) {
|
||||
if (gedcom) {
|
||||
console.warn('Multiple GEDCOM files found in zip archive.');
|
||||
} else {
|
||||
gedcom = entry.getData().toString();
|
||||
gedcom = strFromU8(unzipped[fileName]);
|
||||
}
|
||||
} else {
|
||||
// Save image for later.
|
||||
images.set(
|
||||
entry.entryName,
|
||||
URL.createObjectURL(new Blob([entry.getData()])),
|
||||
);
|
||||
images.set(fileName, URL.createObjectURL(new Blob([unzipped[fileName]])));
|
||||
}
|
||||
}
|
||||
if (!gedcom) {
|
||||
|
||||
BIN
src/datasource/testdata/test.gdz
vendored
Normal file
BIN
src/datasource/testdata/test.gdz
vendored
Normal file
Binary file not shown.
357
src/datasource/testdata/test.ged
vendored
Normal file
357
src/datasource/testdata/test.ged
vendored
Normal file
@@ -0,0 +1,357 @@
|
||||
0 HEAD
|
||||
1 SOUR GENJ
|
||||
2 VERS 6789
|
||||
2 NAME GenealogyJ
|
||||
2 CORP Nils Meier
|
||||
3 ADDR http://genj.sourceforge.net
|
||||
1 DEST ANY
|
||||
1 DATE 1 SEP 2018
|
||||
2 TIME 00:45:32
|
||||
1 FILE family.ged
|
||||
1 GEDC
|
||||
2 VERS 5.5.1
|
||||
2 FORM Lineage-Linked
|
||||
1 CHAR UTF-8
|
||||
0 @I1@ INDI
|
||||
1 NAME Bonifacy /Gibbs/
|
||||
1 SEX M
|
||||
1 FAMC @F3@
|
||||
1 FAMS @F1@
|
||||
1 NOTE a random note
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:33:15
|
||||
0 @I2@ INDI
|
||||
1 NAME Jarmila /Valenta/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F6@
|
||||
1 FAMS @F1@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:36:07
|
||||
0 @F1@ FAM
|
||||
1 HUSB @I1@
|
||||
1 WIFE @I2@
|
||||
1 CHIL @I3@
|
||||
1 CHIL @I4@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:15
|
||||
0 @I3@ INDI
|
||||
1 NAME Asim /Gibbs/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F1@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:09
|
||||
0 @I4@ INDI
|
||||
1 NAME Marie /Gibbs/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F1@
|
||||
1 FAMS @F2@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:32
|
||||
0 @I5@ INDI
|
||||
1 NAME Tom /Matsumoto/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F2@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:44
|
||||
0 @F2@ FAM
|
||||
1 HUSB @I5@
|
||||
1 WIFE @I4@
|
||||
1 CHIL @I6@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:53
|
||||
0 @I6@ INDI
|
||||
1 NAME Gandalf /Matsumoto/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F2@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:32:58
|
||||
0 @I7@ INDI
|
||||
1 NAME Mervyn /Gibbs/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F4@
|
||||
1 FAMS @F3@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:34:03
|
||||
0 @F3@ FAM
|
||||
1 HUSB @I7@
|
||||
1 WIFE @I8@
|
||||
1 CHIL @I1@
|
||||
1 CHIL @I19@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:39:39
|
||||
0 @I8@ INDI
|
||||
1 NAME Ahinoam /Barone/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F5@
|
||||
1 FAMS @F3@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:35:00
|
||||
0 @I9@ INDI
|
||||
1 NAME Radobod /Gibbs/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F4@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:34:26
|
||||
0 @F4@ FAM
|
||||
1 HUSB @I9@
|
||||
1 WIFE @I10@
|
||||
1 CHIL @I7@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:34:03
|
||||
0 @I10@ INDI
|
||||
1 NAME Markéta /De Palma/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F4@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:34:40
|
||||
0 @I11@ INDI
|
||||
1 NAME Narayana /Barone/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F5@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:35:13
|
||||
0 @F5@ FAM
|
||||
1 HUSB @I11@
|
||||
1 WIFE @I12@
|
||||
1 CHIL @I8@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:35:00
|
||||
0 @I12@ INDI
|
||||
1 NAME Ülkü /Abram/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F5@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:35:28
|
||||
0 @I13@ INDI
|
||||
1 NAME Temuri /Valenta/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F7@
|
||||
1 FAMS @F6@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:36:42
|
||||
0 @F6@ FAM
|
||||
1 HUSB @I13@
|
||||
1 WIFE @I14@
|
||||
1 CHIL @I2@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:36:07
|
||||
0 @I14@ INDI
|
||||
1 NAME Darby /Varley/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F8@
|
||||
1 FAMS @F6@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:37:20
|
||||
0 @I15@ INDI
|
||||
1 NAME Arcadius /Valenta/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F7@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:36:53
|
||||
0 @F7@ FAM
|
||||
1 HUSB @I15@
|
||||
1 WIFE @I16@
|
||||
1 CHIL @I13@
|
||||
1 CHIL @I22@
|
||||
1 CHIL @I23@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:43:19
|
||||
0 @I16@ INDI
|
||||
1 NAME Sree /Penners/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F7@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:37:05
|
||||
0 @I17@ INDI
|
||||
1 NAME Filip /Varley/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F8@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:37:25
|
||||
0 @F8@ FAM
|
||||
1 HUSB @I17@
|
||||
1 WIFE @I18@
|
||||
1 CHIL @I14@
|
||||
1 CHIL @I26@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:44:38
|
||||
0 @I18@ INDI
|
||||
1 NAME Kornélie /Dempsey/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F8@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:37:38
|
||||
0 @I19@ INDI
|
||||
1 NAME Nilüfer /Gibbs/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F3@
|
||||
1 FAMS @F9@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:40:07
|
||||
0 @I20@ INDI
|
||||
1 NAME Anwar /Cecil/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F9@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:40:18
|
||||
0 @F9@ FAM
|
||||
1 HUSB @I20@
|
||||
1 WIFE @I19@
|
||||
1 CHIL @I21@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:40:28
|
||||
0 @I21@ INDI
|
||||
1 NAME Chike /Cecil/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F9@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:40:52
|
||||
0 @I22@ INDI
|
||||
1 NAME Fikriyya /Valenta/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F7@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:43:12
|
||||
0 @I23@ INDI
|
||||
1 NAME Florianus /Valenta/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F7@
|
||||
1 FAMS @F10@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:43:40
|
||||
0 @I24@ INDI
|
||||
1 NAME Kreszentia /Jeffers/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMS @F10@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:43:51
|
||||
0 @F10@ FAM
|
||||
1 HUSB @I23@
|
||||
1 WIFE @I24@
|
||||
1 CHIL @I25@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:43:58
|
||||
0 @I25@ INDI
|
||||
1 NAME Xuan /Valenta/
|
||||
1 SEX M
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F10@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:44:10
|
||||
0 @I26@ INDI
|
||||
1 NAME Mair /Varley/
|
||||
1 SEX F
|
||||
1 BIRT
|
||||
2 DATE
|
||||
2 PLAC
|
||||
1 FAMC @F8@
|
||||
1 CHAN
|
||||
2 DATE 31 AUG 2018
|
||||
3 TIME 22:44:51
|
||||
0 TRLR
|
||||
Reference in New Issue
Block a user