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:
Przemek Więch
2025-01-10 23:55:16 +01:00
parent c54c70b874
commit c208452553
6 changed files with 21585 additions and 26811 deletions

47982
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -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"

View 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);
});
});

View File

@@ -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

Binary file not shown.

357
src/datasource/testdata/test.ged vendored Normal file
View 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