diff --git a/node_backend/controllers/coordinadorGenController.js b/node_backend/controllers/coordinadorGenController.js
index f8210af786308dc8c092798e489357adc427542a..4b40f3dc6f521d94493e1a3ce0a0f43aa0e78c1e 100644
--- a/node_backend/controllers/coordinadorGenController.js
+++ b/node_backend/controllers/coordinadorGenController.js
@@ -221,3 +221,4 @@ module.exports.getTutores = async (req, res) => {
return res.status(500).json({ message: "Error del servidor", error });
}
};
+
diff --git a/node_backend/controllers/historialAcademicoController.js b/node_backend/controllers/historialAcademicoController.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8098355872ae47831563281a1264bcedb2ef04d
--- /dev/null
+++ b/node_backend/controllers/historialAcademicoController.js
@@ -0,0 +1,94 @@
+const path = require('path');
+const fs = require('fs');
+const axios = require('axios');
+const Historial = require('../models/HistorialAcademico');
+const Personal = require('../models/Personal');
+
+const generarHistorial = async (req, res) => {
+ const { semestre, matricula, fecha_generacion } = req.body;
+
+ try {
+ const folderPath = path.join(__dirname, '..', 'exports', semestre);
+ if (!fs.existsSync(folderPath)) {
+ fs.mkdirSync(folderPath, { recursive: true });
+ }
+
+ // Descargar archivos desde las rutas existentes (usando axios)
+ const descargarYGuardar = async (url, outputPath) => {
+ const response = await axios.get(url, { responseType: 'arraybuffer' });
+ fs.writeFileSync(outputPath, response.data);
+ };
+
+ // URLs para descarga
+ const urlAlumnos = 'http://localhost:5000/api/alumnos/exportar-csv';
+ const urlMaterias = 'http://localhost:5000/api/materias/exportar-csv';
+ const urlPersonal = `http://localhost:5000/api/personal/exportar-csv`;
+
+ // Rutas de salida (ahora .csv)
+ const rutaAlumnos = path.join(folderPath, 'alumnos.csv');
+ const rutaMaterias = path.join(folderPath, 'materias.csv');
+ const rutaPersonal = path.join(folderPath, 'personal.csv');
+
+ // Descargar y guardar archivos
+ await Promise.all([
+ descargarYGuardar(urlAlumnos, rutaAlumnos),
+ descargarYGuardar(urlMaterias, rutaMaterias),
+ descargarYGuardar(urlPersonal, rutaPersonal),
+ ]);
+
+ const personal = await Personal.findOne({ matricula });
+ if (!personal) {
+ return res.status(404).json({ message: 'Usuario no encontrado en la colección personal' });
+ }
+
+ // Buscar historial existente y actualizarlo, o crear uno nuevo si no existe
+ let historial = await Historial.findOne({ semestre });
+ if (historial) {
+ historial.fecha_generacion = fecha_generacion || new Date();
+ historial.generado_por = personal._id;
+ historial.archivos = {
+ alumnos: `/descargas/${semestre}/alumnos.csv`,
+ materias: `/descargas/${semestre}/materias.csv`,
+ personal: `/descargas/${semestre}/personal.csv`
+ };
+ await historial.save();
+ } else {
+ historial = new Historial({
+ semestre,
+ fecha_generacion: fecha_generacion || new Date(),
+ generado_por: personal._id,
+ archivos: {
+ alumnos: `/descargas/${semestre}/alumnos.csv`,
+ materias: `/descargas/${semestre}/materias.csv`,
+ personal: `/descargas/${semestre}/personal.csv`
+ }
+ });
+ await historial.save();
+ }
+
+ res.status(200).json(historial);
+
+ } catch (err) {
+ console.error(err);
+ res.status(500).json({ message: 'Error al generar historial académico', error: err.message });
+ }
+};
+
+const listarHistoriales = async (req, res) => {
+ try {
+ const historiales = await Historial.find().populate({
+ path: 'generado_por',
+ model: 'Personal',
+ select: 'nombre matricula'
+ });
+ res.status(200).json(Array.isArray(historiales) ? historiales : []);
+ } catch (err) {
+ console.error(err);
+ res.status(500).json({ message: 'Error al listar historiales académicos', error: err.message });
+ }
+}
+
+module.exports = {
+ generarHistorial,
+ listarHistoriales
+};
\ No newline at end of file
diff --git a/node_backend/exports/2024-2/alumnos.csv b/node_backend/exports/2024-2/alumnos.csv
new file mode 100644
index 0000000000000000000000000000000000000000..07df4caaba3423beed1f43b189ff6ca15b55ce70
--- /dev/null
+++ b/node_backend/exports/2024-2/alumnos.csv
@@ -0,0 +1,9 @@
+"id_carrera","matricula","nombre","telefono","correo","id_carrera"
+"ISftwS","A245","Marco Antonio valdez Soto","4021326555","stimpabo27@gmail.com","ISftwS"
+"ISftwS","A543","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.com","ISftwS"
+"ISftw","A120","Juan","4021326555","stimpabo27@gmail.com","ISftw"
+"ISftw","A101","Alumno 2","4921456666","rzamarripam2001@gmail.com","ISftw"
+"IDsr","A0000","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.como","IDsr"
+"ISftw","A102","Alexis Lopez","4921456666","rogerzma500@gmail.com","ISftw"
+"ISftw","A103","Brayan","4921456666","stimpabo27@gmail.com","ISftw"
+"ICmp","A210","Kevin","4921456666","kevin@gmail.com","ICmp"
\ No newline at end of file
diff --git a/node_backend/exports/2024-2/materias.csv b/node_backend/exports/2024-2/materias.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a193328a4b60f4665b04b4ef92b05514c84da66c
--- /dev/null
+++ b/node_backend/exports/2024-2/materias.csv
@@ -0,0 +1,49 @@
+"id_materia","id_carrera","nombre","salon","grupo","cupo","docente","lunes","martes","miercoles","jueves","viernes","sabado"
+12,"ISftw","geometria 2","23","234",19,"P1233","7:30-9:30","-","-","-","-","-"
+324,"ISftw","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+324,"ISftwS","gemoetria","234","342",23,"P3434","-","-","-","-","14:00-21:00","14:00-21:00"
+324,"ISftwS","ecuaciones diferenciales","234","123",20,"P3434","-","-","-","-","14:00-20:00","15:00-20:00"
+23245,"ISftw","programacion 3","345","234",23,"P3434","12:00-14:00","12:00-14:00","12:00-14:00","-","12:00-14:00","-"
+12,"ISftwS","programacion 1","123","123",23,"P3434","-","-","-","-","14:00-20:00","14:00-20:00"
+234,"ISftw","ecuaciones diferenciales","23","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+234,"ISftw","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+236,"ISftwS","programacion 4","234","342",23,"P3434","-","-","-","-","7:00-15:00","15:00-20:00"
+129,"ISftwS","programacion 2","234","234",23,"P3434","-","-","-","-","7:00-15:00","14:00-20:00"
+232,"ISftwS","programacion 5","235","234",23,"P3434","-","-","-","-","7:00-14:00","7:00-14:00"
+12,"ISftw","geometria 2","23","234",20,"P1001","7:30-9:30","-","-","-","-","-"
+23,"ISftw","geometria 4","23","234",23,"P1003","10:00-12:00","-","-","-","-","-"
+2342,"ISftw","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+2332,"ISftw","programacion 7","23","123",17,"P1001","14:00-16:00","-","-","-","-","-"
+234,"ISftw","programacion 8","23","234",20,"P1003","18:00-20:00","-","-","-","-","-"
+234232,"ISftw","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-"
+234,"IDsr","programacion 1","234","234",21,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+324,"IDsr","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+23,"IDsr","geometria 4","23","234",21,"Sin asignar","10:00-12:00","-","-","-","-","-"
+234232,"IDsr","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-"
+2332,"IDsr","programacion 7","23","123",18,"Sin asignar","14:00-16:00","-","-","-","-","-"
+12,"IDsr","geometria 2","23","234",18,"Sin asignar","7:30-9:30","-","-","-","-","-"
+12,"IDsr","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-"
+2342,"IDsr","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+23245,"IDsr","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+12,"IEIndS","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-"
+2342,"IEIndS","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+234232,"IEIndS","geometria 7","123","123",23,"Sin asignar","16:00-18:00","-","-","-","-","-"
+2332,"IEIndS","programacion 7","23","123",20,"Sin asignar","14:00-16:00","-","-","-","-","-"
+234,"IEIndS","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+23,"IEIndS","geometria 4","23","234",23,"Sin asignar","10:00-12:00","-","-","-","-","-"
+23245,"IEIndS","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+324,"IEIndS","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+209,"ICmp","Paradigmas de programación","111","3A",35,"Sin asignar","7:00-8:30","-","7:00-8:30","-","10:00-11:30","-"
+211,"ICmp","Algebra Lineal","101","1A",34,"Sin asignar","-","14:30-16:00","-","14:30-16:00","11:30-13:00","-"
+207,"ICmp","Bases de datos","111","3A",35,"Sin asignar","-","10:00-11:30","11:30-13:00","-","8:30-10:00","-"
+210,"ICmp","Finanzas empresariales","111","3A",35,"Sin asignar","11:30-13:00","13:00-14:30","-","13:00-14:30","-","-"
+205,"ICmp","Matematicas Discretas","101","1A",35,"Sin asignar","10:00-11:30","11:30-13:00","11:30-13:00","13:00-14:30","-","-"
+204,"ICmp","Circuitos eléctricos","111","3A",35,"Sin asignar","10:00-11:30","-","-","11:30-13:00","13:00-14:30","-"
+206,"ICmp","Fundamentos de programación","101","1A",34,"Sin asignar","7:00-8:30","-","8:30-10:00","-","10:00-11:30","-"
+208,"ICmp","Calculo","101","1A",34,"Sin asignar","8:30-10:00","10:00-11:30","10:00-11:30","-","-","-"
+202,"ICmp","Analisis y diseño de algoritmos","111","3A",35,"Sin asignar","-","-","-","-","-","-"
+212,"ICmp","Estadistica","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-"
+203,"ICmp","Ecuaciones diferenciales","111","3A",35,"Sin asignar","8:30-10:00","11:30-13:00","10:00-11:30","-","-","-"
+201,"ICmp","Fundamentos de diseño digital","111","3A",35,"Sin asignar","-","8:30-10:00","8:30-10:00","-","11:30-13:00","-"
+213,"ICmp","Estadistica II","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-"
+220,"ISftw","Redes de computadoras","101","3B",30,"P1003","12:00-14:00","16:00-18:00","12:00-14:00","16:00-18:00","-","-"
\ No newline at end of file
diff --git a/node_backend/exports/2024-2/personal.csv b/node_backend/exports/2024-2/personal.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0669bb240332235ac5d0125fe858a81879794301
--- /dev/null
+++ b/node_backend/exports/2024-2/personal.csv
@@ -0,0 +1,24 @@
+"matricula","nombre","password","roles","telefono","correo"
+"C022","cord","segura123","C","4921429773","rzamarripam2001@gmail.com"
+"CG001","CordGen","SEGURA123","CG","1231231231","ana@example.com"
+"C982","cordDes","segura123","C","1231231231","correo@gmail.com"
+"CG0000","CordGeneral123","segura123","CG","3245673457","tutor@gmail.com"
+"AG0000","AdminGen","segura123","AG","4920356472","AdinGen@gmail.com"
+"T1234","Tutor","SEGURA123","T","1231231231","ejemplo@gmail.com"
+"C0234","Cordsemi","segura123","C","4922425671","tutor@gmail.com"
+"T2322","tutorSemi","segura123","T","1231231231","tutor@gmail.com"
+"P3434","docenteSemi","segura123","D","5553123344","ejemplo@gmail.com"
+"A0111","Admin1","segura123","A","4921455566","admin@gmail.com"
+"T1111","Juan","segura123","T","4921325678","tutor@gmail.com"
+"T3453","ejemplo","segura123","T","1231231231","tutor@gmail.com"
+"AG0001","AdminGen","segura123","AG","4021326553","stimpabo27@gmail.como"
+"P1233","Stefano","segura123","D","4021326553","stimpabo27@gmail.com"
+"A0002","Admin 2","segura123","A","4922425671","rogerzma500@gmail.com"
+"P3444","Rafa","segura123","D","4922425671","stimpabo27@gmail.com"
+"P3433","Rafa2","segura123","D","4021326553","stimpabo27@gmail.com"
+"C0003","Coordinador computo","segura123","C","4921456666","correo@personal.com"
+"P1000","Damian","segura123","D","4921456666","docente@gmail.com"
+"T0014","Alessandra","segura123","T","4921456666","correo@personal.com"
+"P1001","Maria Carolina Estrada Lopez","segura123","D","4921456666","correo@personal.com"
+"P1002","Sandra Esthela Rios Huerta","segura123","D","4921456666","correo@personal.com"
+"P1003","Jose Daniel Campos","segura123","D","4921456666","correo@personal.com"
\ No newline at end of file
diff --git a/node_backend/exports/2025-1/alumnos.csv b/node_backend/exports/2025-1/alumnos.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d200e3b4a918786d486538c3298391a781c95198
--- /dev/null
+++ b/node_backend/exports/2025-1/alumnos.csv
@@ -0,0 +1,8 @@
+"id_carrera","matricula","nombre","telefono","correo","id_carrera"
+"ISftwS","A543","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.com","ISftwS"
+"ISftw","A120","Juan","4021326555","stimpabo27@gmail.com","ISftw"
+"ISftw","A101","Alumno 2","4921456666","rzamarripam2001@gmail.com","ISftw"
+"IDsr","A0000","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.como","IDsr"
+"ISftw","A102","Alexis Lopez","4921456666","rogerzma500@gmail.com","ISftw"
+"ISftw","A103","Brayan","4921456666","stimpabo27@gmail.com","ISftw"
+"ICmp","A210","Kevin","4921456666","kevin@gmail.com","ICmp"
\ No newline at end of file
diff --git a/node_backend/exports/2025-1/materias.csv b/node_backend/exports/2025-1/materias.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a193328a4b60f4665b04b4ef92b05514c84da66c
--- /dev/null
+++ b/node_backend/exports/2025-1/materias.csv
@@ -0,0 +1,49 @@
+"id_materia","id_carrera","nombre","salon","grupo","cupo","docente","lunes","martes","miercoles","jueves","viernes","sabado"
+12,"ISftw","geometria 2","23","234",19,"P1233","7:30-9:30","-","-","-","-","-"
+324,"ISftw","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+324,"ISftwS","gemoetria","234","342",23,"P3434","-","-","-","-","14:00-21:00","14:00-21:00"
+324,"ISftwS","ecuaciones diferenciales","234","123",20,"P3434","-","-","-","-","14:00-20:00","15:00-20:00"
+23245,"ISftw","programacion 3","345","234",23,"P3434","12:00-14:00","12:00-14:00","12:00-14:00","-","12:00-14:00","-"
+12,"ISftwS","programacion 1","123","123",23,"P3434","-","-","-","-","14:00-20:00","14:00-20:00"
+234,"ISftw","ecuaciones diferenciales","23","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+234,"ISftw","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+236,"ISftwS","programacion 4","234","342",23,"P3434","-","-","-","-","7:00-15:00","15:00-20:00"
+129,"ISftwS","programacion 2","234","234",23,"P3434","-","-","-","-","7:00-15:00","14:00-20:00"
+232,"ISftwS","programacion 5","235","234",23,"P3434","-","-","-","-","7:00-14:00","7:00-14:00"
+12,"ISftw","geometria 2","23","234",20,"P1001","7:30-9:30","-","-","-","-","-"
+23,"ISftw","geometria 4","23","234",23,"P1003","10:00-12:00","-","-","-","-","-"
+2342,"ISftw","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+2332,"ISftw","programacion 7","23","123",17,"P1001","14:00-16:00","-","-","-","-","-"
+234,"ISftw","programacion 8","23","234",20,"P1003","18:00-20:00","-","-","-","-","-"
+234232,"ISftw","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-"
+234,"IDsr","programacion 1","234","234",21,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+324,"IDsr","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+23,"IDsr","geometria 4","23","234",21,"Sin asignar","10:00-12:00","-","-","-","-","-"
+234232,"IDsr","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-"
+2332,"IDsr","programacion 7","23","123",18,"Sin asignar","14:00-16:00","-","-","-","-","-"
+12,"IDsr","geometria 2","23","234",18,"Sin asignar","7:30-9:30","-","-","-","-","-"
+12,"IDsr","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-"
+2342,"IDsr","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+23245,"IDsr","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+12,"IEIndS","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-"
+2342,"IEIndS","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-"
+234232,"IEIndS","geometria 7","123","123",23,"Sin asignar","16:00-18:00","-","-","-","-","-"
+2332,"IEIndS","programacion 7","23","123",20,"Sin asignar","14:00-16:00","-","-","-","-","-"
+234,"IEIndS","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+23,"IEIndS","geometria 4","23","234",23,"Sin asignar","10:00-12:00","-","-","-","-","-"
+23245,"IEIndS","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-"
+324,"IEIndS","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-"
+209,"ICmp","Paradigmas de programación","111","3A",35,"Sin asignar","7:00-8:30","-","7:00-8:30","-","10:00-11:30","-"
+211,"ICmp","Algebra Lineal","101","1A",34,"Sin asignar","-","14:30-16:00","-","14:30-16:00","11:30-13:00","-"
+207,"ICmp","Bases de datos","111","3A",35,"Sin asignar","-","10:00-11:30","11:30-13:00","-","8:30-10:00","-"
+210,"ICmp","Finanzas empresariales","111","3A",35,"Sin asignar","11:30-13:00","13:00-14:30","-","13:00-14:30","-","-"
+205,"ICmp","Matematicas Discretas","101","1A",35,"Sin asignar","10:00-11:30","11:30-13:00","11:30-13:00","13:00-14:30","-","-"
+204,"ICmp","Circuitos eléctricos","111","3A",35,"Sin asignar","10:00-11:30","-","-","11:30-13:00","13:00-14:30","-"
+206,"ICmp","Fundamentos de programación","101","1A",34,"Sin asignar","7:00-8:30","-","8:30-10:00","-","10:00-11:30","-"
+208,"ICmp","Calculo","101","1A",34,"Sin asignar","8:30-10:00","10:00-11:30","10:00-11:30","-","-","-"
+202,"ICmp","Analisis y diseño de algoritmos","111","3A",35,"Sin asignar","-","-","-","-","-","-"
+212,"ICmp","Estadistica","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-"
+203,"ICmp","Ecuaciones diferenciales","111","3A",35,"Sin asignar","8:30-10:00","11:30-13:00","10:00-11:30","-","-","-"
+201,"ICmp","Fundamentos de diseño digital","111","3A",35,"Sin asignar","-","8:30-10:00","8:30-10:00","-","11:30-13:00","-"
+213,"ICmp","Estadistica II","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-"
+220,"ISftw","Redes de computadoras","101","3B",30,"P1003","12:00-14:00","16:00-18:00","12:00-14:00","16:00-18:00","-","-"
\ No newline at end of file
diff --git a/node_backend/exports/2025-1/personal.csv b/node_backend/exports/2025-1/personal.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0669bb240332235ac5d0125fe858a81879794301
--- /dev/null
+++ b/node_backend/exports/2025-1/personal.csv
@@ -0,0 +1,24 @@
+"matricula","nombre","password","roles","telefono","correo"
+"C022","cord","segura123","C","4921429773","rzamarripam2001@gmail.com"
+"CG001","CordGen","SEGURA123","CG","1231231231","ana@example.com"
+"C982","cordDes","segura123","C","1231231231","correo@gmail.com"
+"CG0000","CordGeneral123","segura123","CG","3245673457","tutor@gmail.com"
+"AG0000","AdminGen","segura123","AG","4920356472","AdinGen@gmail.com"
+"T1234","Tutor","SEGURA123","T","1231231231","ejemplo@gmail.com"
+"C0234","Cordsemi","segura123","C","4922425671","tutor@gmail.com"
+"T2322","tutorSemi","segura123","T","1231231231","tutor@gmail.com"
+"P3434","docenteSemi","segura123","D","5553123344","ejemplo@gmail.com"
+"A0111","Admin1","segura123","A","4921455566","admin@gmail.com"
+"T1111","Juan","segura123","T","4921325678","tutor@gmail.com"
+"T3453","ejemplo","segura123","T","1231231231","tutor@gmail.com"
+"AG0001","AdminGen","segura123","AG","4021326553","stimpabo27@gmail.como"
+"P1233","Stefano","segura123","D","4021326553","stimpabo27@gmail.com"
+"A0002","Admin 2","segura123","A","4922425671","rogerzma500@gmail.com"
+"P3444","Rafa","segura123","D","4922425671","stimpabo27@gmail.com"
+"P3433","Rafa2","segura123","D","4021326553","stimpabo27@gmail.com"
+"C0003","Coordinador computo","segura123","C","4921456666","correo@personal.com"
+"P1000","Damian","segura123","D","4921456666","docente@gmail.com"
+"T0014","Alessandra","segura123","T","4921456666","correo@personal.com"
+"P1001","Maria Carolina Estrada Lopez","segura123","D","4921456666","correo@personal.com"
+"P1002","Sandra Esthela Rios Huerta","segura123","D","4921456666","correo@personal.com"
+"P1003","Jose Daniel Campos","segura123","D","4921456666","correo@personal.com"
\ No newline at end of file
diff --git a/node_backend/models/HistorialAcademico.js b/node_backend/models/HistorialAcademico.js
new file mode 100644
index 0000000000000000000000000000000000000000..715c0df00c3130c7839ac17670dd4d7888a52b71
--- /dev/null
+++ b/node_backend/models/HistorialAcademico.js
@@ -0,0 +1,14 @@
+const mongoose = require('mongoose');
+
+const HistorialAcademicoSchema = new mongoose.Schema({
+ semestre: { type: String, required: true },
+ fecha_generacion: { type: Date, default: Date.now },
+ archivos: {
+ personal: String,
+ alumnos: String,
+ materias: String
+ },
+ generado_por: { type: mongoose.Schema.Types.ObjectId, ref: 'Usuario' } // Admin o coordinador
+});
+
+module.exports = mongoose.model('HistorialAcademico', HistorialAcademicoSchema);
\ No newline at end of file
diff --git a/node_backend/node_modules/.bin/crc32 b/node_backend/node_modules/.bin/crc32
new file mode 100644
index 0000000000000000000000000000000000000000..b8e4f8ec6abf345bd713ff44fca518a89a04dbdf
--- /dev/null
+++ b/node_backend/node_modules/.bin/crc32
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../crc-32/bin/crc32.njs" "$@"
+else
+ exec node "$basedir/../crc-32/bin/crc32.njs" "$@"
+fi
diff --git a/node_backend/node_modules/.bin/crc32.cmd b/node_backend/node_modules/.bin/crc32.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..4862b1de3d8f6f31132da6a728e661dc98f9ee93
--- /dev/null
+++ b/node_backend/node_modules/.bin/crc32.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\crc-32\bin\crc32.njs" %*
diff --git a/node_backend/node_modules/.bin/crc32.ps1 b/node_backend/node_modules/.bin/crc32.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..c286187cd73a75c045df3b957093caa47491282a
--- /dev/null
+++ b/node_backend/node_modules/.bin/crc32.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
+ } else {
+ & "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_backend/node_modules/.bin/uuid b/node_backend/node_modules/.bin/uuid
new file mode 100644
index 0000000000000000000000000000000000000000..0c2d46962921ed5023517facaf64937dd5e6bc5c
--- /dev/null
+++ b/node_backend/node_modules/.bin/uuid
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*)
+ if command -v cygpath > /dev/null 2>&1; then
+ basedir=`cygpath -w "$basedir"`
+ fi
+ ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@"
+else
+ exec node "$basedir/../uuid/dist/bin/uuid" "$@"
+fi
diff --git a/node_backend/node_modules/.bin/uuid.cmd b/node_backend/node_modules/.bin/uuid.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..0f2376eaf4dbb387b218cc3dcd7d66fe13b95502
--- /dev/null
+++ b/node_backend/node_modules/.bin/uuid.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\dist\bin\uuid" %*
diff --git a/node_backend/node_modules/.bin/uuid.ps1 b/node_backend/node_modules/.bin/uuid.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..78046284b9366ed44fd3365394fd3696a86f2386
--- /dev/null
+++ b/node_backend/node_modules/.bin/uuid.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ } else {
+ & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_backend/node_modules/.package-lock.json b/node_backend/node_modules/.package-lock.json
index a365bc26017f07ca6b962ff7686d5ea43611be43..3f5e9ca5e00cadb13553cf02959bd58481cfe739 100644
--- a/node_backend/node_modules/.package-lock.json
+++ b/node_backend/node_modules/.package-lock.json
@@ -4,6 +4,35 @@
"lockfileVersion": 3,
"requires": true,
"packages": {
+ "node_modules/@fast-csv/format": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz",
+ "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "^14.0.1",
+ "lodash.escaperegexp": "^4.1.2",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isequal": "^4.5.0",
+ "lodash.isfunction": "^3.0.9",
+ "lodash.isnil": "^4.0.0"
+ }
+ },
+ "node_modules/@fast-csv/parse": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz",
+ "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "^14.0.1",
+ "lodash.escaperegexp": "^4.1.2",
+ "lodash.groupby": "^4.6.0",
+ "lodash.isfunction": "^3.0.9",
+ "lodash.isnil": "^4.0.0",
+ "lodash.isundefined": "^3.0.1",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
"node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
@@ -44,6 +73,12 @@
"tslib": "^2.8.0"
}
},
+ "node_modules/@types/node": {
+ "version": "14.18.63",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz",
+ "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
+ "license": "MIT"
+ },
"node_modules/@types/webidl-conversions": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
@@ -124,6 +159,75 @@
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
},
+ "node_modules/archiver": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz",
+ "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==",
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^3.2.4",
+ "buffer-crc32": "^0.2.1",
+ "readable-stream": "^3.6.0",
+ "readdir-glob": "^1.1.2",
+ "tar-stream": "^2.2.0",
+ "zip-stream": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/archiver-utils/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/are-we-there-yet": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
@@ -142,6 +246,12 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -184,6 +294,45 @@
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ=="
},
+ "node_modules/big-integer": {
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+ "license": "Unlicense",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
+ "license": "MIT",
+ "dependencies": {
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
+ "license": "MIT"
+ },
"node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -232,6 +381,39 @@
"node": ">=16.20.1"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@@ -242,6 +424,23 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
+ "node_modules/buffer-indexof-polyfill": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+ "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==",
+ "engines": {
+ "node": ">=0.2.0"
+ }
+ },
"node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -279,6 +478,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
+ "license": "MIT/X11",
+ "dependencies": {
+ "traverse": ">=0.3.0 <0.4"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@@ -311,6 +522,21 @@
"node": ">= 6"
}
},
+ "node_modules/compress-commons": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz",
+ "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -411,6 +637,31 @@
"node": ">= 0.10"
}
},
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz",
+ "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
+ "license": "MIT",
+ "dependencies": {
+ "crc-32": "^1.2.0",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
@@ -427,6 +678,12 @@
"node": ">= 10"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -497,6 +754,45 @@
"url": "https://dotenvx.com"
}
},
+ "node_modules/duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexer2/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/duplexer2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
@@ -523,6 +819,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -555,6 +860,26 @@
"node": ">= 0.6"
}
},
+ "node_modules/exceljs": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz",
+ "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==",
+ "license": "MIT",
+ "dependencies": {
+ "archiver": "^5.0.0",
+ "dayjs": "^1.8.34",
+ "fast-csv": "^4.3.1",
+ "jszip": "^3.10.1",
+ "readable-stream": "^3.6.0",
+ "saxes": "^5.0.1",
+ "tmp": "^0.2.0",
+ "unzipper": "^0.10.11",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
"node_modules/express": {
"version": "4.21.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
@@ -596,6 +921,19 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/fast-csv": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz",
+ "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==",
+ "license": "MIT",
+ "dependencies": {
+ "@fast-csv/format": "4.3.5",
+ "@fast-csv/parse": "4.3.6"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -650,6 +988,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "license": "MIT"
+ },
"node_modules/fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
@@ -677,6 +1021,47 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
+ "node_modules/fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ },
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/fstream/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/fstream/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -754,6 +1139,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -862,6 +1253,32 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -946,6 +1363,54 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/jszip/node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/jszip/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/jszip/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/jszip/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
@@ -973,6 +1438,57 @@
"node": ">=12.0.0"
}
},
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lazystream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/lazystream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/lazystream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
"node_modules/linebreak": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz",
@@ -990,12 +1506,48 @@
"node": ">= 0.4"
}
},
+ "node_modules/listenercount": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
+ "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==",
+ "license": "ISC"
+ },
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.escaperegexp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
+ "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "license": "MIT"
+ },
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
"deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead."
},
+ "node_modules/lodash.groupby": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
+ "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
+ "license": "MIT"
+ },
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
@@ -1006,11 +1558,30 @@
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "license": "MIT"
+ },
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
},
+ "node_modules/lodash.isnil": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
+ "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==",
+ "license": "MIT"
+ },
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
@@ -1026,11 +1597,29 @@
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
},
+ "node_modules/lodash.isundefined": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
+ "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==",
+ "license": "MIT"
+ },
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
},
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "license": "MIT"
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -1399,6 +1988,15 @@
"node": ">=6"
}
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/npmlog": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
@@ -1566,6 +2164,36 @@
"node": ">= 6"
}
},
+ "node_modules/readdir-glob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
+ "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.1.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/readdir-glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/restructure": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz",
@@ -1610,6 +2238,18 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
+ "node_modules/saxes": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/semver": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -1692,6 +2332,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "license": "MIT"
+ },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -1796,11 +2442,36 @@
"node": ">=10"
}
},
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
},
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -1820,6 +2491,15 @@
"node": ">=14"
}
},
+ "node_modules/traverse": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+ "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==",
+ "license": "MIT/X11",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -1868,6 +2548,54 @@
"node": ">= 0.8"
}
},
+ "node_modules/unzipper": {
+ "version": "0.10.14",
+ "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz",
+ "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==",
+ "license": "MIT",
+ "dependencies": {
+ "big-integer": "^1.6.17",
+ "binary": "~0.3.0",
+ "bluebird": "~3.4.1",
+ "buffer-indexof-polyfill": "~1.0.0",
+ "duplexer2": "~0.1.4",
+ "fstream": "^1.0.12",
+ "graceful-fs": "^4.2.2",
+ "listenercount": "~1.0.1",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "~1.0.4"
+ }
+ },
+ "node_modules/unzipper/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/unzipper/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/unzipper/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -1881,6 +2609,15 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -1922,6 +2659,12 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "license": "MIT"
+ },
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -1934,6 +2677,41 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/zip-stream": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz",
+ "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^3.0.4",
+ "compress-commons": "^4.1.2",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/zip-stream/node_modules/archiver-utils": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz",
+ "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^7.2.3",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
}
}
}
diff --git a/node_backend/node_modules/@fast-csv/format/CHANGELOG.md b/node_backend/node_modules/@fast-csv/format/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..28d9c3c71c7151ad2844750ec2ae2f098b17b8ee
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/CHANGELOG.md
@@ -0,0 +1,73 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## [4.3.5](https://github.com/C2FO/fast-csv/compare/v4.3.4...v4.3.5) (2020-11-03)
+
+
+### Bug Fixes
+
+* **formatting,#446:** Do not quote fields that do not contain a quote ([13e688c](https://github.com/C2FO/fast-csv/commit/13e688cb38dcb67c7182211968c794146be54692)), closes [#446](https://github.com/C2FO/fast-csv/issues/446)
+
+
+
+
+
+## [4.3.4](https://github.com/C2FO/fast-csv/compare/v4.3.3...v4.3.4) (2020-11-03)
+
+
+### Bug Fixes
+
+* **formatter,#503:** Do not ignore rows when headers is false ([1560564](https://github.com/C2FO/fast-csv/commit/1560564819c8b1254ca4ad43487830a4296570f6)), closes [#503](https://github.com/C2FO/fast-csv/issues/503)
+
+
+
+
+
+## [4.3.3](https://github.com/C2FO/fast-csv/compare/v4.3.2...v4.3.3) (2020-10-30)
+
+**Note:** Version bump only for package @fast-csv/format
+
+
+
+
+
+## [4.3.1](https://github.com/C2FO/fast-csv/compare/v4.3.0...v4.3.1) (2020-06-23)
+
+**Note:** Version bump only for package @fast-csv/format
+
+
+
+
+
+# [4.3.0](https://github.com/C2FO/fast-csv/compare/v4.2.0...v4.3.0) (2020-05-27)
+
+**Note:** Version bump only for package @fast-csv/format
+
+
+
+
+
+# [4.2.0](https://github.com/C2FO/fast-csv/compare/v4.1.6...v4.2.0) (2020-05-19)
+
+
+### Features
+
+* **parsing:** Less restrictive row parsing type [#356](https://github.com/C2FO/fast-csv/issues/356) ([87d74ec](https://github.com/C2FO/fast-csv/commit/87d74ecd2cb16f3700b1942ebbbec221afe38790))
+
+
+
+
+
+## [4.1.5](https://github.com/C2FO/fast-csv/compare/v4.1.4...v4.1.5) (2020-05-15)
+
+**Note:** Version bump only for package @fast-csv/format
+
+
+
+
+
+## [4.1.4](https://github.com/C2FO/fast-csv/compare/v4.1.3...v4.1.4) (2020-05-15)
+
+**Note:** Version bump only for package @fast-csv/format
diff --git a/node_backend/node_modules/@fast-csv/format/LICENSE b/node_backend/node_modules/@fast-csv/format/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..34de49d379b6e2066ef384d349dee70de2652975
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2011-2019 C2FO
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/README.md b/node_backend/node_modules/@fast-csv/format/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c02da1173eed96f5f65e4478d5666619ce32e215
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/README.md
@@ -0,0 +1,20 @@
+
+
+
+
+[](https://www.npmjs.org/package/@fast-csv/format)
+[](https://travis-ci.org/C2FO/fast-csv)
+[](https://coveralls.io/github/C2FO/fast-csv?branch=master)
+[](https://snyk.io/test/github/C2FO/fast-csv?targetFile=packages/format/package.json)
+
+# `@fast-csv/format`
+
+`fast-csv` package to format CSVs.
+
+## Installation
+
+[Install Guide](https://c2fo.io/fast-csv/docs/introduction/install)
+
+## Usage
+
+To get started with `@fast-csv/format` [check out the docs](https://c2fo.io/fast-csv/docs/formatting/getting-started)
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2ee8f575750d57c4380c7d177b2f3c6cb23c103d
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts
@@ -0,0 +1,13 @@
+///
+import { Transform, TransformCallback } from 'stream';
+import { FormatterOptions } from './FormatterOptions';
+import { Row, RowTransformFunction } from './types';
+export declare class CsvFormatterStream extends Transform {
+ private formatterOptions;
+ private rowFormatter;
+ private hasWrittenBOM;
+ constructor(formatterOptions: FormatterOptions);
+ transform(transformFunction: RowTransformFunction): CsvFormatterStream;
+ _transform(row: I, encoding: string, cb: TransformCallback): void;
+ _flush(cb: TransformCallback): void;
+}
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js
new file mode 100644
index 0000000000000000000000000000000000000000..d414614eab310e51c075f931860fe5561e055579
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js
@@ -0,0 +1,63 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CsvFormatterStream = void 0;
+const stream_1 = require("stream");
+const formatter_1 = require("./formatter");
+class CsvFormatterStream extends stream_1.Transform {
+ constructor(formatterOptions) {
+ super({ writableObjectMode: formatterOptions.objectMode });
+ this.hasWrittenBOM = false;
+ this.formatterOptions = formatterOptions;
+ this.rowFormatter = new formatter_1.RowFormatter(formatterOptions);
+ // if writeBOM is false then set to true
+ // if writeBOM is true then set to false by default so it is written out
+ this.hasWrittenBOM = !formatterOptions.writeBOM;
+ }
+ transform(transformFunction) {
+ this.rowFormatter.rowTransform = transformFunction;
+ return this;
+ }
+ _transform(row, encoding, cb) {
+ let cbCalled = false;
+ try {
+ if (!this.hasWrittenBOM) {
+ this.push(this.formatterOptions.BOM);
+ this.hasWrittenBOM = true;
+ }
+ this.rowFormatter.format(row, (err, rows) => {
+ if (err) {
+ cbCalled = true;
+ return cb(err);
+ }
+ if (rows) {
+ rows.forEach((r) => {
+ this.push(Buffer.from(r, 'utf8'));
+ });
+ }
+ cbCalled = true;
+ return cb();
+ });
+ }
+ catch (e) {
+ if (cbCalled) {
+ throw e;
+ }
+ cb(e);
+ }
+ }
+ _flush(cb) {
+ this.rowFormatter.finish((err, rows) => {
+ if (err) {
+ return cb(err);
+ }
+ if (rows) {
+ rows.forEach((r) => {
+ this.push(Buffer.from(r, 'utf8'));
+ });
+ }
+ return cb();
+ });
+ }
+}
+exports.CsvFormatterStream = CsvFormatterStream;
+//# sourceMappingURL=CsvFormatterStream.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..1ee124bf8e0dd00b8b43fe61d61ed989e26bc158
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CsvFormatterStream.js","sourceRoot":"","sources":["../../src/CsvFormatterStream.ts"],"names":[],"mappings":";;;AAAA,mCAAsD;AAGtD,2CAA2C;AAE3C,MAAa,kBAAiD,SAAQ,kBAAS;IAO3E,YAAmB,gBAAwC;QACvD,KAAK,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAHvD,kBAAa,GAAG,KAAK,CAAC;QAI1B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,wBAAY,CAAC,gBAAgB,CAAC,CAAC;QACvD,wCAAwC;QACxC,wEAAwE;QACxE,IAAI,CAAC,aAAa,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACpD,CAAC;IAEM,SAAS,CAAC,iBAA6C;QAC1D,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,iBAAiB,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,UAAU,CAAC,GAAM,EAAE,QAAgB,EAAE,EAAqB;QAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC7B;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAQ,EAAE;gBAC9C,IAAI,GAAG,EAAE;oBACL,QAAQ,GAAG,IAAI,CAAC;oBAChB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;iBAClB;gBACD,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAQ,EAAE;wBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;iBACN;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,EAAE,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;SACN;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,QAAQ,EAAE;gBACV,MAAM,CAAC,CAAC;aACX;YACD,EAAE,CAAC,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAEM,MAAM,CAAC,EAAqB;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAQ,EAAE;YACzC,IAAI,GAAG,EAAE;gBACL,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;aAClB;YACD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAQ,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;aACN;YACD,OAAO,EAAE,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA9DD,gDA8DC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b9e1c0e55895ccf026b36f3bd18caf2307fca13b
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts
@@ -0,0 +1,39 @@
+import { Row, RowTransformFunction } from './types';
+interface QuoteColumnMap {
+ [s: string]: boolean;
+}
+declare type QuoteColumns = boolean | boolean[] | QuoteColumnMap;
+export interface FormatterOptionsArgs {
+ objectMode?: boolean;
+ delimiter?: string;
+ rowDelimiter?: string;
+ quote?: string | boolean;
+ escape?: string;
+ quoteColumns?: QuoteColumns;
+ quoteHeaders?: QuoteColumns;
+ headers?: null | boolean | string[];
+ writeHeaders?: boolean;
+ includeEndRowDelimiter?: boolean;
+ writeBOM?: boolean;
+ transform?: RowTransformFunction;
+ alwaysWriteHeaders?: boolean;
+}
+export declare class FormatterOptions {
+ readonly objectMode: boolean;
+ readonly delimiter: string;
+ readonly rowDelimiter: string;
+ readonly quote: string;
+ readonly escape: string;
+ readonly quoteColumns: QuoteColumns;
+ readonly quoteHeaders: QuoteColumns;
+ readonly headers: null | string[];
+ readonly includeEndRowDelimiter: boolean;
+ readonly transform?: RowTransformFunction;
+ readonly shouldWriteHeaders: boolean;
+ readonly writeBOM: boolean;
+ readonly escapedQuote: string;
+ readonly BOM: string;
+ readonly alwaysWriteHeaders: boolean;
+ constructor(opts?: FormatterOptionsArgs);
+}
+export {};
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf9ed98249fa0580b9e93da2ff396a1af096ecd0
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js
@@ -0,0 +1,38 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FormatterOptions = void 0;
+class FormatterOptions {
+ constructor(opts = {}) {
+ var _a;
+ this.objectMode = true;
+ this.delimiter = ',';
+ this.rowDelimiter = '\n';
+ this.quote = '"';
+ this.escape = this.quote;
+ this.quoteColumns = false;
+ this.quoteHeaders = this.quoteColumns;
+ this.headers = null;
+ this.includeEndRowDelimiter = false;
+ this.writeBOM = false;
+ this.BOM = '\ufeff';
+ this.alwaysWriteHeaders = false;
+ Object.assign(this, opts || {});
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {
+ this.quoteHeaders = this.quoteColumns;
+ }
+ if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {
+ this.quote = '"';
+ }
+ else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {
+ this.quote = '';
+ }
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {
+ this.escape = this.quote;
+ }
+ this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);
+ this.headers = Array.isArray(this.headers) ? this.headers : null;
+ this.escapedQuote = `${this.escape}${this.quote}`;
+ }
+}
+exports.FormatterOptions = FormatterOptions;
+//# sourceMappingURL=FormatterOptions.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..da56feef237a791a438917b62fec587e7f0403ee
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FormatterOptions.js","sourceRoot":"","sources":["../../src/FormatterOptions.ts"],"names":[],"mappings":";;;AAwBA,MAAa,gBAAgB;IA+BzB,YAAmB,OAAmC,EAAE;;QA9BxC,eAAU,GAAY,IAAI,CAAC;QAE3B,cAAS,GAAW,GAAG,CAAC;QAExB,iBAAY,GAAW,IAAI,CAAC;QAE5B,UAAK,GAAW,GAAG,CAAC;QAEpB,WAAM,GAAW,IAAI,CAAC,KAAK,CAAC;QAE5B,iBAAY,GAAiB,KAAK,CAAC;QAEnC,iBAAY,GAAiB,IAAI,CAAC,YAAY,CAAC;QAE/C,YAAO,GAAoB,IAAI,CAAC;QAEhC,2BAAsB,GAAY,KAAK,CAAC;QAMxC,aAAQ,GAAY,KAAK,CAAC;QAI1B,QAAG,GAAW,QAAQ,CAAC;QAEvB,uBAAkB,GAAY,KAAK,CAAC;QAGhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAEhC,IAAI,QAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA,KAAK,WAAW,EAAE;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SACzC;QACD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAK,IAAI,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;aAAM,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAK,KAAK,EAAE;YAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QACD,IAAI,QAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;SAC5B;QACD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAC,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;CACJ;AAjDD,4CAiDC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f824b346f91ae77487dc9126d09c0e2586dac0bc
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts
@@ -0,0 +1,13 @@
+import { FormatterOptions } from '../FormatterOptions';
+import { Row } from '../types';
+export declare class FieldFormatter {
+ private readonly formatterOptions;
+ private _headers;
+ private readonly REPLACE_REGEXP;
+ private readonly ESCAPE_REGEXP;
+ constructor(formatterOptions: FormatterOptions);
+ set headers(headers: string[]);
+ private shouldQuote;
+ format(field: string, fieldIndex: number, isHeader: boolean): string;
+ private quoteField;
+}
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c9fd89b58cc8994e94a02d9efc3715cf28b7c2b
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js
@@ -0,0 +1,58 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FieldFormatter = void 0;
+const lodash_isboolean_1 = __importDefault(require("lodash.isboolean"));
+const lodash_isnil_1 = __importDefault(require("lodash.isnil"));
+const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp"));
+class FieldFormatter {
+ constructor(formatterOptions) {
+ this._headers = null;
+ this.formatterOptions = formatterOptions;
+ if (formatterOptions.headers !== null) {
+ this.headers = formatterOptions.headers;
+ }
+ this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');
+ const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\r|\n]`;
+ this.ESCAPE_REGEXP = new RegExp(escapePattern);
+ }
+ set headers(headers) {
+ this._headers = headers;
+ }
+ shouldQuote(fieldIndex, isHeader) {
+ const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;
+ if (lodash_isboolean_1.default(quoteConfig)) {
+ return quoteConfig;
+ }
+ if (Array.isArray(quoteConfig)) {
+ return quoteConfig[fieldIndex];
+ }
+ if (this._headers !== null) {
+ return quoteConfig[this._headers[fieldIndex]];
+ }
+ return false;
+ }
+ format(field, fieldIndex, isHeader) {
+ const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\0/g, '');
+ const { formatterOptions } = this;
+ if (formatterOptions.quote !== '') {
+ const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;
+ if (shouldEscape) {
+ return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));
+ }
+ }
+ const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;
+ if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {
+ return this.quoteField(preparedField);
+ }
+ return preparedField;
+ }
+ quoteField(field) {
+ const { quote } = this.formatterOptions;
+ return `${quote}${field}${quote}`;
+ }
+}
+exports.FieldFormatter = FieldFormatter;
+//# sourceMappingURL=FieldFormatter.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b3a741e373e4aad3c68b13e01276232d0a8cb7ac
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FieldFormatter.js","sourceRoot":"","sources":["../../../src/formatter/FieldFormatter.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAyC;AACzC,gEAAiC;AACjC,8EAA+C;AAI/C,MAAa,cAAc;IASvB,YAAmB,gBAAwC;QANnD,aAAQ,GAAoB,IAAI,CAAC;QAOrC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;SAC3C;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,SAAS,GAAG,6BAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC;QAC5G,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,OAAO,CAAC,OAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAEO,WAAW,CAAC,UAAkB,EAAE,QAAiB;QACrD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACvG,IAAI,0BAAS,CAAC,WAAW,CAAC,EAAE;YACxB,OAAO,WAAW,CAAC;SACtB;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC5B,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;SACjD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,KAAa,EAAE,UAAkB,EAAE,QAAiB;QAC9D,MAAM,aAAa,GAAG,GAAG,sBAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QAClC,IAAI,gBAAgB,CAAC,KAAK,KAAK,EAAE,EAAE;YAC/B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;aACrG;SACJ;QACD,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,IAAI,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;YAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SACzC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,KAAa;QAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxC,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;IACtC,CAAC;CACJ;AAzDD,wCAyDC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe06d3784d0929d2cad6bf733378163a0434a0b7
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts
@@ -0,0 +1,25 @@
+import { FormatterOptions } from '../FormatterOptions';
+import { Row, RowArray, RowTransformFunction } from '../types';
+declare type RowFormatterCallback = (error: Error | null, data?: RowArray) => void;
+export declare class RowFormatter {
+ private static isRowHashArray;
+ private static isRowArray;
+ private static gatherHeaders;
+ private static createTransform;
+ private readonly formatterOptions;
+ private readonly fieldFormatter;
+ private readonly shouldWriteHeaders;
+ private _rowTransform?;
+ private headers;
+ private hasWrittenHeaders;
+ private rowCount;
+ constructor(formatterOptions: FormatterOptions);
+ set rowTransform(transformFunction: RowTransformFunction);
+ format(row: I, cb: RowFormatterCallback): void;
+ finish(cb: RowFormatterCallback): void;
+ private checkHeaders;
+ private gatherColumns;
+ private callTransformer;
+ private formatColumns;
+}
+export {};
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd51bcef3f980061bca42f118fee75b42373ef49
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js
@@ -0,0 +1,168 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RowFormatter = void 0;
+const lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
+const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
+const FieldFormatter_1 = require("./FieldFormatter");
+const types_1 = require("../types");
+class RowFormatter {
+ constructor(formatterOptions) {
+ this.rowCount = 0;
+ this.formatterOptions = formatterOptions;
+ this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);
+ this.headers = formatterOptions.headers;
+ this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;
+ this.hasWrittenHeaders = false;
+ if (this.headers !== null) {
+ this.fieldFormatter.headers = this.headers;
+ }
+ if (formatterOptions.transform) {
+ this.rowTransform = formatterOptions.transform;
+ }
+ }
+ static isRowHashArray(row) {
+ if (Array.isArray(row)) {
+ return Array.isArray(row[0]) && row[0].length === 2;
+ }
+ return false;
+ }
+ static isRowArray(row) {
+ return Array.isArray(row) && !this.isRowHashArray(row);
+ }
+ // get headers from a row item
+ static gatherHeaders(row) {
+ if (RowFormatter.isRowHashArray(row)) {
+ // lets assume a multi-dimesional array with item 0 being the header
+ return row.map((it) => it[0]);
+ }
+ if (Array.isArray(row)) {
+ return row;
+ }
+ return Object.keys(row);
+ }
+ // eslint-disable-next-line @typescript-eslint/no-shadow
+ static createTransform(transformFunction) {
+ if (types_1.isSyncTransform(transformFunction)) {
+ return (row, cb) => {
+ let transformedRow = null;
+ try {
+ transformedRow = transformFunction(row);
+ }
+ catch (e) {
+ return cb(e);
+ }
+ return cb(null, transformedRow);
+ };
+ }
+ return (row, cb) => {
+ transformFunction(row, cb);
+ };
+ }
+ set rowTransform(transformFunction) {
+ if (!lodash_isfunction_1.default(transformFunction)) {
+ throw new TypeError('The transform should be a function');
+ }
+ this._rowTransform = RowFormatter.createTransform(transformFunction);
+ }
+ format(row, cb) {
+ this.callTransformer(row, (err, transformedRow) => {
+ if (err) {
+ return cb(err);
+ }
+ if (!row) {
+ return cb(null);
+ }
+ const rows = [];
+ if (transformedRow) {
+ const { shouldFormatColumns, headers } = this.checkHeaders(transformedRow);
+ if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) {
+ rows.push(this.formatColumns(headers, true));
+ this.hasWrittenHeaders = true;
+ }
+ if (shouldFormatColumns) {
+ const columns = this.gatherColumns(transformedRow);
+ rows.push(this.formatColumns(columns, false));
+ }
+ }
+ return cb(null, rows);
+ });
+ }
+ finish(cb) {
+ const rows = [];
+ // check if we should write headers and we didnt get any rows
+ if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {
+ if (!this.headers) {
+ return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));
+ }
+ rows.push(this.formatColumns(this.headers, true));
+ }
+ if (this.formatterOptions.includeEndRowDelimiter) {
+ rows.push(this.formatterOptions.rowDelimiter);
+ }
+ return cb(null, rows);
+ }
+ // check if we need to write header return true if we should also write a row
+ // could be false if headers is true and the header row(first item) is passed in
+ checkHeaders(row) {
+ if (this.headers) {
+ // either the headers were provided by the user or we have already gathered them.
+ return { shouldFormatColumns: true, headers: this.headers };
+ }
+ const headers = RowFormatter.gatherHeaders(row);
+ this.headers = headers;
+ this.fieldFormatter.headers = headers;
+ if (!this.shouldWriteHeaders) {
+ // if we are not supposed to write the headers then
+ // always format the columns
+ return { shouldFormatColumns: true, headers: null };
+ }
+ // if the row is equal to headers dont format
+ return { shouldFormatColumns: !lodash_isequal_1.default(headers, row), headers };
+ }
+ // todo change this method to unknown[]
+ gatherColumns(row) {
+ if (this.headers === null) {
+ throw new Error('Headers is currently null');
+ }
+ if (!Array.isArray(row)) {
+ return this.headers.map((header) => row[header]);
+ }
+ if (RowFormatter.isRowHashArray(row)) {
+ return this.headers.map((header, i) => {
+ const col = row[i];
+ if (col) {
+ return col[1];
+ }
+ return '';
+ });
+ }
+ // if its a one dimensional array and headers were not provided
+ // then just return the row
+ if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) {
+ return row;
+ }
+ return this.headers.map((header, i) => row[i]);
+ }
+ callTransformer(row, cb) {
+ if (!this._rowTransform) {
+ return cb(null, row);
+ }
+ return this._rowTransform(row, cb);
+ }
+ formatColumns(columns, isHeadersRow) {
+ const formattedCols = columns
+ .map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow))
+ .join(this.formatterOptions.delimiter);
+ const { rowCount } = this;
+ this.rowCount += 1;
+ if (rowCount) {
+ return [this.formatterOptions.rowDelimiter, formattedCols].join('');
+ }
+ return formattedCols;
+ }
+}
+exports.RowFormatter = RowFormatter;
+//# sourceMappingURL=RowFormatter.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..fe18025966aa449ac947a689710962721fa58f20
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RowFormatter.js","sourceRoot":"","sources":["../../../src/formatter/RowFormatter.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1fa760692b416e95100c2f508d6cf524a7bbd063
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts
@@ -0,0 +1,2 @@
+export { RowFormatter } from './RowFormatter';
+export { FieldFormatter } from './FieldFormatter';
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf3c26d8d247817cb5673621c9bf4d5b2af7fb1a
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FieldFormatter = exports.RowFormatter = void 0;
+var RowFormatter_1 = require("./RowFormatter");
+Object.defineProperty(exports, "RowFormatter", { enumerable: true, get: function () { return RowFormatter_1.RowFormatter; } });
+var FieldFormatter_1 = require("./FieldFormatter");
+Object.defineProperty(exports, "FieldFormatter", { enumerable: true, get: function () { return FieldFormatter_1.FieldFormatter; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f36c547a7eb9db866ab68ab71c6e17541dbfccb1
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/formatter/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..235d93f1a8c2ad7e49d19071d2da4d21fe31bd9e
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts
@@ -0,0 +1,14 @@
+///
+import * as fs from 'fs';
+import { Row } from './types';
+import { FormatterOptionsArgs } from './FormatterOptions';
+import { CsvFormatterStream } from './CsvFormatterStream';
+export * from './types';
+export { CsvFormatterStream } from './CsvFormatterStream';
+export { FormatterOptions, FormatterOptionsArgs } from './FormatterOptions';
+export declare const format: (options?: FormatterOptionsArgs | undefined) => CsvFormatterStream;
+export declare const write: (rows: I[], options?: FormatterOptionsArgs | undefined) => CsvFormatterStream;
+export declare const writeToStream: (ws: T, rows: I[], options?: FormatterOptionsArgs | undefined) => T;
+export declare const writeToBuffer: (rows: I[], opts?: FormatterOptionsArgs) => Promise;
+export declare const writeToString: (rows: I[], options?: FormatterOptionsArgs | undefined) => Promise;
+export declare const writeToPath: (path: string, rows: I[], options?: FormatterOptionsArgs | undefined) => fs.WriteStream;
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.js b/node_backend/node_modules/@fast-csv/format/build/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1418b85a379cddedc99f866ab9c3bd8778d1755
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/index.js
@@ -0,0 +1,68 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0;
+const util_1 = require("util");
+const stream_1 = require("stream");
+const fs = __importStar(require("fs"));
+const FormatterOptions_1 = require("./FormatterOptions");
+const CsvFormatterStream_1 = require("./CsvFormatterStream");
+__exportStar(require("./types"), exports);
+var CsvFormatterStream_2 = require("./CsvFormatterStream");
+Object.defineProperty(exports, "CsvFormatterStream", { enumerable: true, get: function () { return CsvFormatterStream_2.CsvFormatterStream; } });
+var FormatterOptions_2 = require("./FormatterOptions");
+Object.defineProperty(exports, "FormatterOptions", { enumerable: true, get: function () { return FormatterOptions_2.FormatterOptions; } });
+exports.format = (options) => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));
+exports.write = (rows, options) => {
+ const csvStream = exports.format(options);
+ const promiseWrite = util_1.promisify((row, cb) => {
+ csvStream.write(row, undefined, cb);
+ });
+ rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve())
+ .then(() => csvStream.end())
+ .catch((err) => {
+ csvStream.emit('error', err);
+ });
+ return csvStream;
+};
+exports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws);
+exports.writeToBuffer = (rows, opts = {}) => {
+ const buffers = [];
+ const ws = new stream_1.Writable({
+ write(data, enc, writeCb) {
+ buffers.push(data);
+ writeCb();
+ },
+ });
+ return new Promise((res, rej) => {
+ ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers)));
+ exports.write(rows, opts).pipe(ws);
+ });
+};
+exports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then((buffer) => buffer.toString());
+exports.writeToPath = (path, rows, options) => {
+ const stream = fs.createWriteStream(path, { encoding: 'utf8' });
+ return exports.write(rows, options).pipe(stream);
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.js.map b/node_backend/node_modules/@fast-csv/format/build/src/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..57efc760fc60bb2a6ed9fe8c68392b86479896c7
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AACjC,mCAAkC;AAClC,uCAAyB;AAEzB,yDAA4E;AAC5E,6DAA0D;AAE1D,0CAAwB;AACxB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,uDAA4E;AAAnE,oHAAA,gBAAgB,OAAA;AAEZ,QAAA,MAAM,GAAG,CAA+B,OAAoC,EAA4B,EAAE,CACnH,IAAI,uCAAkB,CAAC,IAAI,mCAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,QAAA,KAAK,GAAG,CACjB,IAAS,EACT,OAAoC,EACZ,EAAE;IAC1B,MAAM,SAAS,GAAG,cAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,gBAAS,CAAC,CAAC,GAAM,EAAE,EAAkC,EAAQ,EAAE;QAChF,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CACP,CAAC,IAAmB,EAAE,GAAM,EAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAkB,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EACjG,OAAO,CAAC,OAAO,EAAE,CACpB;SACI,IAAI,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;SACjC,KAAK,CAAC,CAAC,GAAG,EAAQ,EAAE;QACjB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACP,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEW,QAAA,aAAa,GAAG,CACzB,EAAK,EACL,IAAS,EACT,OAAoC,EACnC,EAAE,CAAC,aAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEzB,QAAA,aAAa,GAAG,CACzB,IAAS,EACT,OAAmC,EAAE,EACtB,EAAE;IACjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,iBAAQ,CAAC;QACpB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACd,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAQ,EAAE;QAClC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,aAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEW,QAAA,aAAa,GAAG,CACzB,IAAS,EACT,OAAoC,EACrB,EAAE,CAAC,qBAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAElF,QAAA,WAAW,GAAG,CACvB,IAAY,EACZ,IAAS,EACT,OAAoC,EACtB,EAAE;IAChB,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,OAAO,aAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c59e09918c042569085f5048bcec99d24303819c
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts
@@ -0,0 +1,9 @@
+export declare type RowMap = Record;
+export declare type RowHashArray = [string, V][];
+export declare type RowArray = string[];
+export declare type Row = RowArray | RowHashArray | RowMap;
+export declare type RowTransformCallback = (error?: Error | null, row?: R) => void;
+export declare type SyncRowTransform = (row: I) => O;
+export declare type AsyncRowTransform = (row: I, cb: RowTransformCallback) => void;
+export declare type RowTransformFunction = SyncRowTransform | AsyncRowTransform;
+export declare const isSyncTransform: (transform: RowTransformFunction) => transform is SyncRowTransform;
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.js b/node_backend/node_modules/@fast-csv/format/build/src/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..58cdf80bdc7aa02cfa226556c15b992b328697b2
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/types.js
@@ -0,0 +1,6 @@
+"use strict";
+/* eslint-disable @typescript-eslint/no-explicit-any */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isSyncTransform = void 0;
+exports.isSyncTransform = (transform) => transform.length === 1;
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.js.map b/node_backend/node_modules/@fast-csv/format/build/src/types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c706c037dd56c0f241ce7d850ea301c6af6629a0
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/build/src/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAY1C,QAAA,eAAe,GAAG,CAC3B,SAAqC,EACF,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/format/package.json b/node_backend/node_modules/@fast-csv/format/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9eb582656e0bd2f980998469f0b9ce70c878275e
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/format/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "@fast-csv/format",
+ "version": "4.3.5",
+ "description": "fast-csv formatting module",
+ "keywords": [
+ "csv",
+ "format",
+ "write"
+ ],
+ "author": "doug-martin ",
+ "homepage": "http://c2fo.github.com/fast-csv/packages/format",
+ "license": "MIT",
+ "main": "build/src/index.js",
+ "types": "build/src/index.d.ts",
+ "directories": {
+ "lib": "src",
+ "test": "__tests__"
+ },
+ "files": [
+ "build/src/**"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/C2FO/fast-csv.git",
+ "directory": "packages/format"
+ },
+ "scripts": {
+ "prepublishOnly": "npm run build",
+ "build": "npm run clean && npm run compile",
+ "clean": "rm -rf ./build && rm -rf tsconfig.tsbuildinfo",
+ "compile": "tsc"
+ },
+ "bugs": {
+ "url": "https://github.com/C2FO/fast-csv/issues"
+ },
+ "dependencies": {
+ "@types/node": "^14.0.1",
+ "lodash.escaperegexp": "^4.1.2",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isequal": "^4.5.0",
+ "lodash.isfunction": "^3.0.9",
+ "lodash.isnil": "^4.0.0"
+ },
+ "devDependencies": {
+ "@types/lodash.escaperegexp": "4.1.6",
+ "@types/lodash.isboolean": "3.0.6",
+ "@types/lodash.isequal": "4.5.5",
+ "@types/lodash.isfunction": "3.0.6",
+ "@types/lodash.isnil": "4.0.6"
+ },
+ "gitHead": "b908170cb49398ae12847d050af5c8e5b0dc812f"
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md b/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..3763965d80e2231bef30fac16949f6907d1385a0
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md
@@ -0,0 +1,87 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## [4.3.6](https://github.com/C2FO/fast-csv/compare/v4.3.5...v4.3.6) (2020-12-04)
+
+
+### Bug Fixes
+
+* Simplify empty row check by removing complex regex ([4bbd39f](https://github.com/C2FO/fast-csv/commit/4bbd39f26a8cd7382151ab4f5fb102234b2f829e))
+
+
+
+
+
+## [4.3.3](https://github.com/C2FO/fast-csv/compare/v4.3.2...v4.3.3) (2020-10-30)
+
+**Note:** Version bump only for package @fast-csv/parse
+
+
+
+
+
+## [4.3.2](https://github.com/C2FO/fast-csv/compare/v4.3.1...v4.3.2) (2020-09-02)
+
+
+### Bug Fixes
+
+* **parsing, #423:** Prevent callback from being called multiple times ([040febe](https://github.com/C2FO/fast-csv/commit/040febe17f5fe763a00f45b1d83c5acd47bbbe0b)), closes [#423](https://github.com/C2FO/fast-csv/issues/423)
+
+
+
+
+
+## [4.3.1](https://github.com/C2FO/fast-csv/compare/v4.3.0...v4.3.1) (2020-06-23)
+
+
+### Bug Fixes
+
+* **parsing:** Pass errors through callbacks ([84ecdf6](https://github.com/C2FO/fast-csv/commit/84ecdf6ed18b15d68b4ed3e2bfec7eb41b438ad8))
+
+
+
+
+
+# [4.3.0](https://github.com/C2FO/fast-csv/compare/v4.2.0...v4.3.0) (2020-05-27)
+
+**Note:** Version bump only for package @fast-csv/parse
+
+
+
+
+
+# [4.2.0](https://github.com/C2FO/fast-csv/compare/v4.1.6...v4.2.0) (2020-05-19)
+
+
+### Features
+
+* **parsing:** Less restrictive row parsing type [#356](https://github.com/C2FO/fast-csv/issues/356) ([87d74ec](https://github.com/C2FO/fast-csv/commit/87d74ecd2cb16f3700b1942ebbbec221afe38790))
+
+
+
+
+
+## [4.1.6](https://github.com/C2FO/fast-csv/compare/v4.1.5...v4.1.6) (2020-05-15)
+
+
+### Bug Fixes
+
+* **parse:** Handle escaped escape properly [#340](https://github.com/C2FO/fast-csv/issues/340) ([78d9b16](https://github.com/C2FO/fast-csv/commit/78d9b160152ee399f31086cc6b5f66a7ca7f9e24))
+
+
+
+
+
+## [4.1.5](https://github.com/C2FO/fast-csv/compare/v4.1.4...v4.1.5) (2020-05-15)
+
+**Note:** Version bump only for package @fast-csv/parse
+
+
+
+
+
+## [4.1.4](https://github.com/C2FO/fast-csv/compare/v4.1.3...v4.1.4) (2020-05-15)
+
+**Note:** Version bump only for package @fast-csv/parse
diff --git a/node_backend/node_modules/@fast-csv/parse/LICENSE b/node_backend/node_modules/@fast-csv/parse/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..34de49d379b6e2066ef384d349dee70de2652975
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2011-2019 C2FO
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/README.md b/node_backend/node_modules/@fast-csv/parse/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a5fba8882dd23959af86b6a165562e2eaf0bdd4b
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/README.md
@@ -0,0 +1,20 @@
+
+
+
+
+[](https://www.npmjs.org/package/@fast-csv/parse)
+[](https://travis-ci.org/C2FO/fast-csv)
+[](https://coveralls.io/github/C2FO/fast-csv?branch=master)
+[](https://snyk.io/test/github/C2FO/fast-csv?targetFile=packages/parse/package.json)
+
+# `@fast-csv/parse`
+
+`fast-csv` package to parse CSVs.
+
+## Installation
+
+[Install Guide](https://c2fo.io/fast-csv/docs/introduction/install)
+
+## Usage
+
+To get started with `@fast-csv/parse` [check out the docs](https://c2fo.io/fast-csv/docs/parsing/getting-started)
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..757582e97a929cba3de073bc30522ed61c149289
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts
@@ -0,0 +1,33 @@
+///
+import { Transform, TransformCallback } from 'stream';
+import { ParserOptions } from './ParserOptions';
+import { Row, RowTransformFunction, RowValidate } from './types';
+export declare class CsvParserStream extends Transform {
+ private readonly parserOptions;
+ private readonly decoder;
+ private readonly parser;
+ private readonly headerTransformer;
+ private readonly rowTransformerValidator;
+ private lines;
+ private rowCount;
+ private parsedRowCount;
+ private parsedLineCount;
+ private endEmitted;
+ private headersEmitted;
+ constructor(parserOptions: ParserOptions);
+ private get hasHitRowLimit();
+ private get shouldEmitRows();
+ private get shouldSkipLine();
+ transform(transformFunction: RowTransformFunction): CsvParserStream;
+ validate(validateFunction: RowValidate): CsvParserStream;
+ emit(event: string | symbol, ...rest: any[]): boolean;
+ _transform(data: Buffer, encoding: string, done: TransformCallback): void;
+ _flush(done: TransformCallback): void;
+ private parse;
+ private processRows;
+ private transformRow;
+ private checkAndEmitHeaders;
+ private skipRow;
+ private pushRow;
+ private static wrapDoneCallback;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js
new file mode 100644
index 0000000000000000000000000000000000000000..c207a00ab8626d88398813ad1cad4198f7448ae2
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js
@@ -0,0 +1,212 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CsvParserStream = void 0;
+const string_decoder_1 = require("string_decoder");
+const stream_1 = require("stream");
+const transforms_1 = require("./transforms");
+const parser_1 = require("./parser");
+class CsvParserStream extends stream_1.Transform {
+ constructor(parserOptions) {
+ super({ objectMode: parserOptions.objectMode });
+ this.lines = '';
+ this.rowCount = 0;
+ this.parsedRowCount = 0;
+ this.parsedLineCount = 0;
+ this.endEmitted = false;
+ this.headersEmitted = false;
+ this.parserOptions = parserOptions;
+ this.parser = new parser_1.Parser(parserOptions);
+ this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);
+ this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);
+ this.rowTransformerValidator = new transforms_1.RowTransformerValidator();
+ }
+ get hasHitRowLimit() {
+ return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;
+ }
+ get shouldEmitRows() {
+ return this.parsedRowCount > this.parserOptions.skipRows;
+ }
+ get shouldSkipLine() {
+ return this.parsedLineCount <= this.parserOptions.skipLines;
+ }
+ transform(transformFunction) {
+ this.rowTransformerValidator.rowTransform = transformFunction;
+ return this;
+ }
+ validate(validateFunction) {
+ this.rowTransformerValidator.rowValidator = validateFunction;
+ return this;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ emit(event, ...rest) {
+ if (event === 'end') {
+ if (!this.endEmitted) {
+ this.endEmitted = true;
+ super.emit('end', this.rowCount);
+ }
+ return false;
+ }
+ return super.emit(event, ...rest);
+ }
+ _transform(data, encoding, done) {
+ // if we have hit our maxRows parsing limit then skip parsing
+ if (this.hasHitRowLimit) {
+ return done();
+ }
+ const wrappedCallback = CsvParserStream.wrapDoneCallback(done);
+ try {
+ const { lines } = this;
+ const newLine = lines + this.decoder.write(data);
+ const rows = this.parse(newLine, true);
+ return this.processRows(rows, wrappedCallback);
+ }
+ catch (e) {
+ return wrappedCallback(e);
+ }
+ }
+ _flush(done) {
+ const wrappedCallback = CsvParserStream.wrapDoneCallback(done);
+ // if we have hit our maxRows parsing limit then skip parsing
+ if (this.hasHitRowLimit) {
+ return wrappedCallback();
+ }
+ try {
+ const newLine = this.lines + this.decoder.end();
+ const rows = this.parse(newLine, false);
+ return this.processRows(rows, wrappedCallback);
+ }
+ catch (e) {
+ return wrappedCallback(e);
+ }
+ }
+ parse(data, hasMoreData) {
+ if (!data) {
+ return [];
+ }
+ const { line, rows } = this.parser.parse(data, hasMoreData);
+ this.lines = line;
+ return rows;
+ }
+ processRows(rows, cb) {
+ const rowsLength = rows.length;
+ const iterate = (i) => {
+ const callNext = (err) => {
+ if (err) {
+ return cb(err);
+ }
+ if (i % 100 === 0) {
+ // incase the transform are sync insert a next tick to prevent stack overflow
+ setImmediate(() => iterate(i + 1));
+ return undefined;
+ }
+ return iterate(i + 1);
+ };
+ this.checkAndEmitHeaders();
+ // if we have emitted all rows or we have hit the maxRows limit option
+ // then end
+ if (i >= rowsLength || this.hasHitRowLimit) {
+ return cb();
+ }
+ this.parsedLineCount += 1;
+ if (this.shouldSkipLine) {
+ return callNext();
+ }
+ const row = rows[i];
+ this.rowCount += 1;
+ this.parsedRowCount += 1;
+ const nextRowCount = this.rowCount;
+ return this.transformRow(row, (err, transformResult) => {
+ if (err) {
+ this.rowCount -= 1;
+ return callNext(err);
+ }
+ if (!transformResult) {
+ return callNext(new Error('expected transform result'));
+ }
+ if (!transformResult.isValid) {
+ this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);
+ }
+ else if (transformResult.row) {
+ return this.pushRow(transformResult.row, callNext);
+ }
+ return callNext();
+ });
+ };
+ iterate(0);
+ }
+ transformRow(parsedRow, cb) {
+ try {
+ this.headerTransformer.transform(parsedRow, (err, withHeaders) => {
+ if (err) {
+ return cb(err);
+ }
+ if (!withHeaders) {
+ return cb(new Error('Expected result from header transform'));
+ }
+ if (!withHeaders.isValid) {
+ if (this.shouldEmitRows) {
+ return cb(null, { isValid: false, row: parsedRow });
+ }
+ // skipped because of skipRows option remove from total row count
+ return this.skipRow(cb);
+ }
+ if (withHeaders.row) {
+ if (this.shouldEmitRows) {
+ return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);
+ }
+ // skipped because of skipRows option remove from total row count
+ return this.skipRow(cb);
+ }
+ // this is a header row dont include in the rowCount or parsedRowCount
+ this.rowCount -= 1;
+ this.parsedRowCount -= 1;
+ return cb(null, { row: null, isValid: true });
+ });
+ }
+ catch (e) {
+ cb(e);
+ }
+ }
+ checkAndEmitHeaders() {
+ if (!this.headersEmitted && this.headerTransformer.headers) {
+ this.headersEmitted = true;
+ this.emit('headers', this.headerTransformer.headers);
+ }
+ }
+ skipRow(cb) {
+ // skipped because of skipRows option remove from total row count
+ this.rowCount -= 1;
+ return cb(null, { row: null, isValid: true });
+ }
+ pushRow(row, cb) {
+ try {
+ if (!this.parserOptions.objectMode) {
+ this.push(JSON.stringify(row));
+ }
+ else {
+ this.push(row);
+ }
+ cb();
+ }
+ catch (e) {
+ cb(e);
+ }
+ }
+ static wrapDoneCallback(done) {
+ let errorCalled = false;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return (err, ...args) => {
+ if (err) {
+ if (errorCalled) {
+ throw err;
+ }
+ errorCalled = true;
+ done(err);
+ return;
+ }
+ done(...args);
+ };
+ }
+}
+exports.CsvParserStream = CsvParserStream;
+//# sourceMappingURL=CsvParserStream.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..872b48b8f801bee5007cd1d1be09163a2caec4fc
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CsvParserStream.js","sourceRoot":"","sources":["../../src/CsvParserStream.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d1a15c65f3d26a9daff3bef6a94c2b4d1a91a6a6
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts
@@ -0,0 +1,47 @@
+///
+import { HeaderArray, HeaderTransformFunction } from './types';
+export interface ParserOptionsArgs {
+ objectMode?: boolean;
+ delimiter?: string;
+ quote?: string | null;
+ escape?: string;
+ headers?: boolean | HeaderTransformFunction | HeaderArray;
+ renameHeaders?: boolean;
+ ignoreEmpty?: boolean;
+ comment?: string;
+ strictColumnHandling?: boolean;
+ discardUnmappedColumns?: boolean;
+ trim?: boolean;
+ ltrim?: boolean;
+ rtrim?: boolean;
+ encoding?: string;
+ maxRows?: number;
+ skipLines?: number;
+ skipRows?: number;
+}
+export declare class ParserOptions {
+ readonly escapedDelimiter: string;
+ readonly objectMode: boolean;
+ readonly delimiter: string;
+ readonly ignoreEmpty: boolean;
+ readonly quote: string | null;
+ readonly escape: string | null;
+ readonly escapeChar: string | null;
+ readonly comment: string | null;
+ readonly supportsComments: boolean;
+ readonly ltrim: boolean;
+ readonly rtrim: boolean;
+ readonly trim: boolean;
+ readonly headers: boolean | HeaderTransformFunction | HeaderArray | null;
+ readonly renameHeaders: boolean;
+ readonly strictColumnHandling: boolean;
+ readonly discardUnmappedColumns: boolean;
+ readonly carriageReturn: string;
+ readonly NEXT_TOKEN_REGEXP: RegExp;
+ readonly encoding: BufferEncoding;
+ readonly limitRows: boolean;
+ readonly maxRows: number;
+ readonly skipLines: number;
+ readonly skipRows: number;
+ constructor(opts?: ParserOptionsArgs);
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fcbe7407e7dba4ae174aed6c83b41108f725f96
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js
@@ -0,0 +1,47 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ParserOptions = void 0;
+const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp"));
+const lodash_isnil_1 = __importDefault(require("lodash.isnil"));
+class ParserOptions {
+ constructor(opts) {
+ var _a;
+ this.objectMode = true;
+ this.delimiter = ',';
+ this.ignoreEmpty = false;
+ this.quote = '"';
+ this.escape = null;
+ this.escapeChar = this.quote;
+ this.comment = null;
+ this.supportsComments = false;
+ this.ltrim = false;
+ this.rtrim = false;
+ this.trim = false;
+ this.headers = null;
+ this.renameHeaders = false;
+ this.strictColumnHandling = false;
+ this.discardUnmappedColumns = false;
+ this.carriageReturn = '\r';
+ this.encoding = 'utf8';
+ this.limitRows = false;
+ this.maxRows = 0;
+ this.skipLines = 0;
+ this.skipRows = 0;
+ Object.assign(this, opts || {});
+ if (this.delimiter.length > 1) {
+ throw new Error('delimiter option must be one character long');
+ }
+ this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);
+ this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;
+ this.supportsComments = !lodash_isnil_1.default(this.comment);
+ this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`);
+ if (this.maxRows > 0) {
+ this.limitRows = true;
+ }
+ }
+}
+exports.ParserOptions = ParserOptions;
+//# sourceMappingURL=ParserOptions.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..85b1f2e13fd5a1186b737b00165714806dcffb7c
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ParserOptions.js","sourceRoot":"","sources":["../../src/ParserOptions.ts"],"names":[],"mappings":";;;;;;AAAA,8EAA+C;AAC/C,gEAAiC;AAuBjC,MAAa,aAAa;IA+CtB,YAAmB,IAAwB;;QA5C3B,eAAU,GAAY,IAAI,CAAC;QAE3B,cAAS,GAAW,GAAG,CAAC;QAExB,gBAAW,GAAY,KAAK,CAAC;QAE7B,UAAK,GAAkB,GAAG,CAAC;QAE3B,WAAM,GAAkB,IAAI,CAAC;QAE7B,eAAU,GAAkB,IAAI,CAAC,KAAK,CAAC;QAEvC,YAAO,GAAkB,IAAI,CAAC;QAE9B,qBAAgB,GAAY,KAAK,CAAC;QAElC,UAAK,GAAY,KAAK,CAAC;QAEvB,UAAK,GAAY,KAAK,CAAC;QAEvB,SAAI,GAAY,KAAK,CAAC;QAEtB,YAAO,GAA2D,IAAI,CAAC;QAEvE,kBAAa,GAAY,KAAK,CAAC;QAE/B,yBAAoB,GAAY,KAAK,CAAC;QAEtC,2BAAsB,GAAY,KAAK,CAAC;QAExC,mBAAc,GAAW,IAAI,CAAC;QAI9B,aAAQ,GAAmB,MAAM,CAAC;QAElC,cAAS,GAAY,KAAK,CAAC;QAE3B,YAAO,GAAW,CAAC,CAAC;QAEpB,cAAS,GAAW,CAAC,CAAC;QAEtB,aAAQ,GAAW,CAAC,CAAC;QAGjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAClE;QACD,IAAI,CAAC,gBAAgB,GAAG,6BAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,SAAG,IAAI,CAAC,MAAM,mCAAI,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,sBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,MAAM,CAAC,0BAA0B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;CACJ;AA7DD,sCA6DC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0ec5fad0291e7889ab2afc1f12b596d489cac954
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts
@@ -0,0 +1,11 @@
+///
+import { ParserOptionsArgs } from './ParserOptions';
+import { CsvParserStream } from './CsvParserStream';
+import { Row } from './types';
+export * from './types';
+export { CsvParserStream } from './CsvParserStream';
+export { ParserOptions, ParserOptionsArgs } from './ParserOptions';
+export declare const parse: , O extends Row>(args?: ParserOptionsArgs | undefined) => CsvParserStream;
+export declare const parseStream: , O extends Row>(stream: NodeJS.ReadableStream, options?: ParserOptionsArgs | undefined) => CsvParserStream;
+export declare const parseFile: , O extends Row>(location: string, options?: ParserOptionsArgs) => CsvParserStream;
+export declare const parseString: , O extends Row>(string: string, options?: ParserOptionsArgs | undefined) => CsvParserStream;
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a4239ffc0017c740b514c9fa44f542f51ef17e2
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.js
@@ -0,0 +1,44 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0;
+const fs = __importStar(require("fs"));
+const stream_1 = require("stream");
+const ParserOptions_1 = require("./ParserOptions");
+const CsvParserStream_1 = require("./CsvParserStream");
+__exportStar(require("./types"), exports);
+var CsvParserStream_2 = require("./CsvParserStream");
+Object.defineProperty(exports, "CsvParserStream", { enumerable: true, get: function () { return CsvParserStream_2.CsvParserStream; } });
+var ParserOptions_2 = require("./ParserOptions");
+Object.defineProperty(exports, "ParserOptions", { enumerable: true, get: function () { return ParserOptions_2.ParserOptions; } });
+exports.parse = (args) => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));
+exports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
+exports.parseFile = (location, options = {}) => fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
+exports.parseString = (string, options) => {
+ const rs = new stream_1.Readable();
+ rs.push(string);
+ rs.push(null);
+ return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..5fd268a26649a0ccbe03cc0e0237decf5d6febb7
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,mCAAkC;AAClC,mDAAmE;AACnE,uDAAoD;AAGpD,0CAAwB;AACxB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,iDAAmE;AAA1D,8GAAA,aAAa,OAAA;AAET,QAAA,KAAK,GAAG,CAA+B,IAAwB,EAAyB,EAAE,CACnG,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpC,QAAA,WAAW,GAAG,CACvB,MAA6B,EAC7B,OAA2B,EACN,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5E,QAAA,SAAS,GAAG,CACrB,QAAgB,EAChB,UAA6B,EAAE,EACV,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnG,QAAA,WAAW,GAAG,CACvB,MAAc,EACd,OAA2B,EACN,EAAE;IACvB,MAAM,EAAE,GAAG,IAAI,iBAAQ,EAAE,CAAC;IAC1B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..41213324e4e5d7cd7fc67e6414eef4b69cddd6c9
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts
@@ -0,0 +1,15 @@
+import { ParserOptions } from '../ParserOptions';
+export interface ParseResult {
+ line: string;
+ rows: string[][];
+}
+export declare class Parser {
+ private static removeBOM;
+ private readonly parserOptions;
+ private readonly rowParser;
+ constructor(parserOptions: ParserOptions);
+ parse(line: string, hasMoreData: boolean): ParseResult;
+ private parseWithoutComments;
+ private parseWithComments;
+ private parseRow;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b3d23424bd2b3a2f75e85e3c11adaa78d2ce18e
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js
@@ -0,0 +1,76 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Parser = void 0;
+const Scanner_1 = require("./Scanner");
+const RowParser_1 = require("./RowParser");
+const Token_1 = require("./Token");
+class Parser {
+ constructor(parserOptions) {
+ this.parserOptions = parserOptions;
+ this.rowParser = new RowParser_1.RowParser(this.parserOptions);
+ }
+ static removeBOM(line) {
+ // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
+ // conversion translates it to FEFF (UTF-16 BOM)
+ if (line && line.charCodeAt(0) === 0xfeff) {
+ return line.slice(1);
+ }
+ return line;
+ }
+ parse(line, hasMoreData) {
+ const scanner = new Scanner_1.Scanner({
+ line: Parser.removeBOM(line),
+ parserOptions: this.parserOptions,
+ hasMoreData,
+ });
+ if (this.parserOptions.supportsComments) {
+ return this.parseWithComments(scanner);
+ }
+ return this.parseWithoutComments(scanner);
+ }
+ parseWithoutComments(scanner) {
+ const rows = [];
+ let shouldContinue = true;
+ while (shouldContinue) {
+ shouldContinue = this.parseRow(scanner, rows);
+ }
+ return { line: scanner.line, rows };
+ }
+ parseWithComments(scanner) {
+ const { parserOptions } = this;
+ const rows = [];
+ for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {
+ if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {
+ const cursor = scanner.advancePastLine();
+ if (cursor === null) {
+ return { line: scanner.lineFromCursor, rows };
+ }
+ if (!scanner.hasMoreCharacters) {
+ return { line: scanner.lineFromCursor, rows };
+ }
+ scanner.truncateToCursor();
+ }
+ else if (!this.parseRow(scanner, rows)) {
+ break;
+ }
+ }
+ return { line: scanner.line, rows };
+ }
+ parseRow(scanner, rows) {
+ const nextToken = scanner.nextNonSpaceToken;
+ if (!nextToken) {
+ return false;
+ }
+ const row = this.rowParser.parse(scanner);
+ if (row === null) {
+ return false;
+ }
+ if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) {
+ return true;
+ }
+ rows.push(row);
+ return true;
+ }
+}
+exports.Parser = Parser;
+//# sourceMappingURL=Parser.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..db362251026266e429647f2a4c0ff9037c715422
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/parser/Parser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..49c1f60561fb21e792fe90ade7da6b4d429a5a3c
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts
@@ -0,0 +1,12 @@
+import { Scanner } from './Scanner';
+import { ParserOptions } from '../ParserOptions';
+import { RowArray } from '../types';
+export declare class RowParser {
+ static isEmptyRow(row: RowArray): boolean;
+ private readonly parserOptions;
+ private readonly columnParser;
+ constructor(parserOptions: ParserOptions);
+ parse(scanner: Scanner): RowArray | null;
+ private getStartToken;
+ private shouldSkipColumnParse;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js
new file mode 100644
index 0000000000000000000000000000000000000000..98a326ff728571f85df5fd0d335ca3d5a18b4fa5
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js
@@ -0,0 +1,76 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RowParser = void 0;
+const column_1 = require("./column");
+const Token_1 = require("./Token");
+const EMPTY_STRING = '';
+class RowParser {
+ constructor(parserOptions) {
+ this.parserOptions = parserOptions;
+ this.columnParser = new column_1.ColumnParser(parserOptions);
+ }
+ static isEmptyRow(row) {
+ return row.join(EMPTY_STRING).replace(/\s+/g, EMPTY_STRING) === EMPTY_STRING;
+ }
+ parse(scanner) {
+ const { parserOptions } = this;
+ const { hasMoreData } = scanner;
+ const currentScanner = scanner;
+ const columns = [];
+ let currentToken = this.getStartToken(currentScanner, columns);
+ while (currentToken) {
+ if (Token_1.Token.isTokenRowDelimiter(currentToken)) {
+ currentScanner.advancePastToken(currentToken);
+ // if ends with CR and there is more data, keep unparsed due to possible
+ // coming LF in CRLF
+ if (!currentScanner.hasMoreCharacters &&
+ Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) &&
+ hasMoreData) {
+ return null;
+ }
+ currentScanner.truncateToCursor();
+ return columns;
+ }
+ if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {
+ const item = this.columnParser.parse(currentScanner);
+ if (item === null) {
+ return null;
+ }
+ columns.push(item);
+ }
+ currentToken = currentScanner.nextNonSpaceToken;
+ }
+ if (!hasMoreData) {
+ currentScanner.truncateToCursor();
+ return columns;
+ }
+ return null;
+ }
+ getStartToken(scanner, columns) {
+ const currentToken = scanner.nextNonSpaceToken;
+ if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) {
+ columns.push('');
+ return scanner.nextNonSpaceToken;
+ }
+ return currentToken;
+ }
+ shouldSkipColumnParse(scanner, currentToken, columns) {
+ const { parserOptions } = this;
+ if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) {
+ scanner.advancePastToken(currentToken);
+ // if the delimiter is at the end of a line
+ const nextToken = scanner.nextCharacterToken;
+ if (!scanner.hasMoreCharacters || (nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken))) {
+ columns.push('');
+ return true;
+ }
+ if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) {
+ columns.push('');
+ return true;
+ }
+ }
+ return false;
+ }
+}
+exports.RowParser = RowParser;
+//# sourceMappingURL=RowParser.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e6b223e25a80cddf7532d57dd703177625778449
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RowParser.js","sourceRoot":"","sources":["../../../src/parser/RowParser.ts"],"names":[],"mappings":";;;AACA,qCAAwC;AAGxC,mCAA4C;AAE5C,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAa,SAAS;IASlB,YAAmB,aAA4B;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAY,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAXD,MAAM,CAAC,UAAU,CAAC,GAAa;QAC3B,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,YAAY,CAAC;IACjF,CAAC;IAWM,KAAK,CAAC,OAAgB;QACzB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC;QAC/B,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,YAAY,EAAE;YACjB,IAAI,aAAK,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE;gBACzC,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAC9C,wEAAwE;gBACxE,oBAAoB;gBACpB,IACI,CAAC,cAAc,CAAC,iBAAiB;oBACjC,aAAK,CAAC,qBAAqB,CAAC,YAAY,EAAE,aAAa,CAAC;oBACxD,WAAW,EACb;oBACE,OAAO,IAAI,CAAC;iBACf;gBACD,cAAc,CAAC,gBAAgB,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC;aAClB;YACD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;gBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACrD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,OAAO,IAAI,CAAC;iBACf;gBACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,YAAY,GAAG,cAAc,CAAC,iBAAiB,CAAC;SACnD;QACD,IAAI,CAAC,WAAW,EAAE;YACd,cAAc,CAAC,gBAAgB,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;SAClB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,OAAgB,EAAE,OAAiB;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC/C,IAAI,YAAY,KAAK,IAAI,IAAI,aAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YACnF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO,OAAO,CAAC,iBAAiB,CAAC;SACpC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,qBAAqB,CAAC,OAAgB,EAAE,YAAmB,EAAE,OAAiB;QAClF,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,IAAI,aAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;YACrD,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACvC,2CAA2C;YAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,aAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE;gBAC5F,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;aACf;YACD,IAAI,SAAS,KAAK,IAAI,IAAI,aAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;gBACxE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AA7ED,8BA6EC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bbd08020a1e7c11c7b869a8ac4915bfd5665eadf
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts
@@ -0,0 +1,25 @@
+import { ParserOptions } from '../ParserOptions';
+import { MaybeToken, Token } from './Token';
+export interface ScannerArgs {
+ line: string;
+ parserOptions: ParserOptions;
+ hasMoreData: boolean;
+ cursor?: number;
+}
+export declare class Scanner {
+ line: string;
+ private readonly parserOptions;
+ lineLength: number;
+ readonly hasMoreData: boolean;
+ cursor: number;
+ constructor(args: ScannerArgs);
+ get hasMoreCharacters(): boolean;
+ get nextNonSpaceToken(): MaybeToken;
+ get nextCharacterToken(): MaybeToken;
+ get lineFromCursor(): string;
+ advancePastLine(): Scanner | null;
+ advanceTo(cursor: number): Scanner;
+ advanceToToken(token: Token): Scanner;
+ advancePastToken(token: Token): Scanner;
+ truncateToCursor(): Scanner;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js
new file mode 100644
index 0000000000000000000000000000000000000000..f00c9674858fc55c1f3f35a816f5c7a21766f664
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js
@@ -0,0 +1,82 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Scanner = void 0;
+const Token_1 = require("./Token");
+const ROW_DELIMITER = /((?:\r\n)|\n|\r)/;
+class Scanner {
+ constructor(args) {
+ this.cursor = 0;
+ this.line = args.line;
+ this.lineLength = this.line.length;
+ this.parserOptions = args.parserOptions;
+ this.hasMoreData = args.hasMoreData;
+ this.cursor = args.cursor || 0;
+ }
+ get hasMoreCharacters() {
+ return this.lineLength > this.cursor;
+ }
+ get nextNonSpaceToken() {
+ const { lineFromCursor } = this;
+ const regex = this.parserOptions.NEXT_TOKEN_REGEXP;
+ if (lineFromCursor.search(regex) === -1) {
+ return null;
+ }
+ const match = regex.exec(lineFromCursor);
+ if (match == null) {
+ return null;
+ }
+ const token = match[1];
+ const startCursor = this.cursor + (match.index || 0);
+ return new Token_1.Token({
+ token,
+ startCursor,
+ endCursor: startCursor + token.length - 1,
+ });
+ }
+ get nextCharacterToken() {
+ const { cursor, lineLength } = this;
+ if (lineLength <= cursor) {
+ return null;
+ }
+ return new Token_1.Token({
+ token: this.line[cursor],
+ startCursor: cursor,
+ endCursor: cursor,
+ });
+ }
+ get lineFromCursor() {
+ return this.line.substr(this.cursor);
+ }
+ advancePastLine() {
+ const match = ROW_DELIMITER.exec(this.lineFromCursor);
+ if (!match) {
+ if (this.hasMoreData) {
+ return null;
+ }
+ this.cursor = this.lineLength;
+ return this;
+ }
+ this.cursor += (match.index || 0) + match[0].length;
+ return this;
+ }
+ advanceTo(cursor) {
+ this.cursor = cursor;
+ return this;
+ }
+ advanceToToken(token) {
+ this.cursor = token.startCursor;
+ return this;
+ }
+ advancePastToken(token) {
+ this.cursor = token.endCursor + 1;
+ return this;
+ }
+ truncateToCursor() {
+ this.line = this.lineFromCursor;
+ this.lineLength = this.line.length;
+ this.cursor = 0;
+ return this;
+ }
+}
+exports.Scanner = Scanner;
+//# sourceMappingURL=Scanner.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f812311ef26a43b51e0e2493dae8a77117c22c9d
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../../../src/parser/Scanner.ts"],"names":[],"mappings":";;;AACA,mCAA4C;AAE5C,MAAM,aAAa,GAAG,kBAAkB,CAAC;AASzC,MAAa,OAAO;IAWhB,YAAmB,IAAiB;QAF7B,WAAM,GAAG,CAAC,CAAC;QAGd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,CAAC;IAED,IAAW,iBAAiB;QACxB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACnD,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YACrC,OAAO,IAAI,CAAC;SACf;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,OAAO,IAAI,CAAC;SACf;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,aAAK,CAAC;YACb,KAAK;YACL,WAAW;YACX,SAAS,EAAE,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;SAC5C,CAAC,CAAC;IACP,CAAC;IAED,IAAW,kBAAkB;QACzB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACpC,IAAI,UAAU,IAAI,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC;SACf;QACD,OAAO,IAAI,aAAK,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,MAAM;SACpB,CAAC,CAAC;IACP,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEM,eAAe;QAClB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,OAAO,IAAI,CAAC;aACf;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9B,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,SAAS,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,cAAc,CAAC,KAAY;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gBAAgB,CAAC,KAAY;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gBAAgB;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA5FD,0BA4FC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2f2bdf396aeb193c25ec78685c7426d79b555a64
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts
@@ -0,0 +1,19 @@
+import { ParserOptions } from '../ParserOptions';
+export declare type MaybeToken = Token | null;
+export interface TokenArgs {
+ token: string;
+ startCursor: number;
+ endCursor: number;
+}
+export declare class Token {
+ static isTokenRowDelimiter(token: Token): boolean;
+ static isTokenCarriageReturn(token: Token, parserOptions: ParserOptions): boolean;
+ static isTokenComment(token: Token, parserOptions: ParserOptions): boolean;
+ static isTokenEscapeCharacter(token: Token, parserOptions: ParserOptions): boolean;
+ static isTokenQuote(token: Token, parserOptions: ParserOptions): boolean;
+ static isTokenDelimiter(token: Token, parserOptions: ParserOptions): boolean;
+ readonly token: string;
+ readonly startCursor: number;
+ readonly endCursor: number;
+ constructor(tokenArgs: TokenArgs);
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js
new file mode 100644
index 0000000000000000000000000000000000000000..d61b23cac340a070f9cf55e3e939511f3a4c7aaf
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Token = void 0;
+class Token {
+ constructor(tokenArgs) {
+ this.token = tokenArgs.token;
+ this.startCursor = tokenArgs.startCursor;
+ this.endCursor = tokenArgs.endCursor;
+ }
+ static isTokenRowDelimiter(token) {
+ const content = token.token;
+ return content === '\r' || content === '\n' || content === '\r\n';
+ }
+ static isTokenCarriageReturn(token, parserOptions) {
+ return token.token === parserOptions.carriageReturn;
+ }
+ static isTokenComment(token, parserOptions) {
+ return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;
+ }
+ static isTokenEscapeCharacter(token, parserOptions) {
+ return token.token === parserOptions.escapeChar;
+ }
+ static isTokenQuote(token, parserOptions) {
+ return token.token === parserOptions.quote;
+ }
+ static isTokenDelimiter(token, parserOptions) {
+ return token.token === parserOptions.delimiter;
+ }
+}
+exports.Token = Token;
+//# sourceMappingURL=Token.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..403e802de27974c2da260087f5678dec92b3d0ab
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Token.js","sourceRoot":"","sources":["../../../src/parser/Token.ts"],"names":[],"mappings":";;;AAUA,MAAa,KAAK;IAgCd,YAAmB,SAAoB;QACnC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACzC,CAAC;IAnCM,MAAM,CAAC,mBAAmB,CAAC,KAAY;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,KAAY,EAAE,aAA4B;QAC1E,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,cAAc,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAY,EAAE,aAA4B;QACnE,OAAO,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,OAAO,CAAC;IAC9F,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,KAAY,EAAE,aAA4B;QAC3E,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,UAAU,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAY,EAAE,aAA4B;QACjE,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC;IAC/C,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,KAAY,EAAE,aAA4B;QACrE,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,CAAC;IACnD,CAAC;CAaJ;AArCD,sBAqCC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..35be4d97bf859815bf47be080e12e5d9e33245b3
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts
@@ -0,0 +1,5 @@
+import { ParserOptions } from '../../ParserOptions';
+export declare class ColumnFormatter {
+ readonly format: (col: string) => string;
+ constructor(parserOptions: ParserOptions);
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js
new file mode 100644
index 0000000000000000000000000000000000000000..721aa12d3eb6e06a19c59101621c1a4e5ebb2295
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js
@@ -0,0 +1,21 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ColumnFormatter = void 0;
+class ColumnFormatter {
+ constructor(parserOptions) {
+ if (parserOptions.trim) {
+ this.format = (col) => col.trim();
+ }
+ else if (parserOptions.ltrim) {
+ this.format = (col) => col.trimLeft();
+ }
+ else if (parserOptions.rtrim) {
+ this.format = (col) => col.trimRight();
+ }
+ else {
+ this.format = (col) => col;
+ }
+ }
+}
+exports.ColumnFormatter = ColumnFormatter;
+//# sourceMappingURL=ColumnFormatter.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..331d2690553479deff618c695098e4aefabe512c
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ColumnFormatter.js","sourceRoot":"","sources":["../../../../src/parser/column/ColumnFormatter.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAGxB,YAAmB,aAA4B;QAC3C,IAAI,aAAa,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACrD;aAAM,IAAI,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;SACzD;aAAM,IAAI,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;SAC1D;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC;SAC9C;IACL,CAAC;CACJ;AAdD,0CAcC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6dd99cd3f3d49355b81942607105bb8307fef9dd
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts
@@ -0,0 +1,11 @@
+import { ParserOptions } from '../../ParserOptions';
+import { NonQuotedColumnParser } from './NonQuotedColumnParser';
+import { QuotedColumnParser } from './QuotedColumnParser';
+import { Scanner } from '../Scanner';
+export declare class ColumnParser {
+ private readonly parserOptions;
+ readonly nonQuotedColumnParser: NonQuotedColumnParser;
+ readonly quotedColumnParser: QuotedColumnParser;
+ constructor(parserOptions: ParserOptions);
+ parse(scanner: Scanner): string | null;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js
new file mode 100644
index 0000000000000000000000000000000000000000..e811b59e26a839b445dfdad96806f96779b9bcea
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ColumnParser = void 0;
+const NonQuotedColumnParser_1 = require("./NonQuotedColumnParser");
+const QuotedColumnParser_1 = require("./QuotedColumnParser");
+const Token_1 = require("../Token");
+class ColumnParser {
+ constructor(parserOptions) {
+ this.parserOptions = parserOptions;
+ this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);
+ this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);
+ }
+ parse(scanner) {
+ const { nextNonSpaceToken } = scanner;
+ if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {
+ scanner.advanceToToken(nextNonSpaceToken);
+ return this.quotedColumnParser.parse(scanner);
+ }
+ return this.nonQuotedColumnParser.parse(scanner);
+ }
+}
+exports.ColumnParser = ColumnParser;
+//# sourceMappingURL=ColumnParser.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..8f7258ebb93a31671569f0800474fb415d25fd7a
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/ColumnParser.ts"],"names":[],"mappings":";;;AACA,mEAAgE;AAChE,6DAA0D;AAE1D,oCAAiC;AAEjC,MAAa,YAAY;IAOrB,YAAmB,aAA4B;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,qBAAqB,GAAG,IAAI,6CAAqB,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,OAAgB;QACzB,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QACtC,IAAI,iBAAiB,KAAK,IAAI,IAAI,aAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YACzF,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;CACJ;AArBD,oCAqBC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f06f9710b344831bf30eb57d07ea74c3af78082d
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts
@@ -0,0 +1,8 @@
+import { ParserOptions } from '../../ParserOptions';
+import { Scanner } from '../Scanner';
+export declare class NonQuotedColumnParser {
+ private readonly parserOptions;
+ private readonly columnFormatter;
+ constructor(parserOptions: ParserOptions);
+ parse(scanner: Scanner): string | null;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js
new file mode 100644
index 0000000000000000000000000000000000000000..5bc2fe951922f348aa021754282caaf5e6ed3fe0
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.NonQuotedColumnParser = void 0;
+const ColumnFormatter_1 = require("./ColumnFormatter");
+const Token_1 = require("../Token");
+class NonQuotedColumnParser {
+ constructor(parserOptions) {
+ this.parserOptions = parserOptions;
+ this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);
+ }
+ parse(scanner) {
+ if (!scanner.hasMoreCharacters) {
+ return null;
+ }
+ const { parserOptions } = this;
+ const characters = [];
+ let nextToken = scanner.nextCharacterToken;
+ for (; nextToken; nextToken = scanner.nextCharacterToken) {
+ if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) {
+ break;
+ }
+ characters.push(nextToken.token);
+ scanner.advancePastToken(nextToken);
+ }
+ return this.columnFormatter.format(characters.join(''));
+ }
+}
+exports.NonQuotedColumnParser = NonQuotedColumnParser;
+//# sourceMappingURL=NonQuotedColumnParser.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0bb118eabdb052e5ff6e10c89a167c582cc1071a
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"NonQuotedColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/NonQuotedColumnParser.ts"],"names":[],"mappings":";;;AACA,uDAAoD;AAEpD,oCAAiC;AAEjC,MAAa,qBAAqB;IAK9B,YAAmB,aAA4B;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,iCAAe,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC5B,OAAO,IAAI,CAAC;SACf;QACD,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC3C,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE;YACtD,IAAI,aAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,aAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;gBAC1F,MAAM;aACT;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;CACJ;AA1BD,sDA0BC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7983fd907eebf9be376507ae7dc92d55ed100478
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts
@@ -0,0 +1,10 @@
+import { ParserOptions } from '../../ParserOptions';
+import { Scanner } from '../Scanner';
+export declare class QuotedColumnParser {
+ private readonly parserOptions;
+ private readonly columnFormatter;
+ constructor(parserOptions: ParserOptions);
+ parse(scanner: Scanner): string | null;
+ private gatherDataBetweenQuotes;
+ private checkForMalformedColumn;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js
new file mode 100644
index 0000000000000000000000000000000000000000..06ebca12a9cc1fa0daea52e415a109601a40c1c1
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js
@@ -0,0 +1,97 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.QuotedColumnParser = void 0;
+const ColumnFormatter_1 = require("./ColumnFormatter");
+const Token_1 = require("../Token");
+class QuotedColumnParser {
+ constructor(parserOptions) {
+ this.parserOptions = parserOptions;
+ this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);
+ }
+ parse(scanner) {
+ if (!scanner.hasMoreCharacters) {
+ return null;
+ }
+ const originalCursor = scanner.cursor;
+ const { foundClosingQuote, col } = this.gatherDataBetweenQuotes(scanner);
+ if (!foundClosingQuote) {
+ // reset the cursor to the original
+ scanner.advanceTo(originalCursor);
+ // if we didnt find a closing quote but we potentially have more data then skip the parsing
+ // and return the original scanner.
+ if (!scanner.hasMoreData) {
+ throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\r\n]/g, "\\n'")}'`);
+ }
+ return null;
+ }
+ this.checkForMalformedColumn(scanner);
+ return col;
+ }
+ gatherDataBetweenQuotes(scanner) {
+ const { parserOptions } = this;
+ let foundStartingQuote = false;
+ let foundClosingQuote = false;
+ const characters = [];
+ let nextToken = scanner.nextCharacterToken;
+ for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {
+ const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions);
+ // ignore first quote
+ if (!foundStartingQuote && isQuote) {
+ foundStartingQuote = true;
+ }
+ else if (foundStartingQuote) {
+ if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) {
+ // advance past the escape character so we can get the next one in line
+ scanner.advancePastToken(nextToken);
+ const tokenFollowingEscape = scanner.nextCharacterToken;
+ // if the character following the escape is a quote character then just add
+ // the quote and advance to that character
+ if (tokenFollowingEscape !== null &&
+ (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) ||
+ Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {
+ characters.push(tokenFollowingEscape.token);
+ nextToken = tokenFollowingEscape;
+ }
+ else if (isQuote) {
+ // if the escape is also a quote then we found our closing quote and finish early
+ foundClosingQuote = true;
+ }
+ else {
+ // other wise add the escape token to the characters since it wast escaping anything
+ characters.push(nextToken.token);
+ }
+ }
+ else if (isQuote) {
+ // we found our closing quote!
+ foundClosingQuote = true;
+ }
+ else {
+ // add the token to the characters
+ characters.push(nextToken.token);
+ }
+ }
+ scanner.advancePastToken(nextToken);
+ }
+ return { col: this.columnFormatter.format(characters.join('')), foundClosingQuote };
+ }
+ checkForMalformedColumn(scanner) {
+ const { parserOptions } = this;
+ const { nextNonSpaceToken } = scanner;
+ if (nextNonSpaceToken) {
+ const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions);
+ const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken);
+ if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {
+ // if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column
+ // tldr: only part of the column was quoted
+ const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'");
+ throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`);
+ }
+ scanner.advanceToToken(nextNonSpaceToken);
+ }
+ else if (!scanner.hasMoreData) {
+ scanner.advancePastLine();
+ }
+ }
+}
+exports.QuotedColumnParser = QuotedColumnParser;
+//# sourceMappingURL=QuotedColumnParser.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..74eeb40aa21e8185f8dc9d282b308c9ea1edfeb9
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"QuotedColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/QuotedColumnParser.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c574eadb38155d2422f1b79cdaefea7000c9240
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts
@@ -0,0 +1,4 @@
+export { ColumnParser } from './ColumnParser';
+export { NonQuotedColumnParser } from './NonQuotedColumnParser';
+export { QuotedColumnParser } from './QuotedColumnParser';
+export { ColumnFormatter } from './ColumnFormatter';
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d173b45d19f6fcd71f972e56d4708d05702e562d
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0;
+var ColumnParser_1 = require("./ColumnParser");
+Object.defineProperty(exports, "ColumnParser", { enumerable: true, get: function () { return ColumnParser_1.ColumnParser; } });
+var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser");
+Object.defineProperty(exports, "NonQuotedColumnParser", { enumerable: true, get: function () { return NonQuotedColumnParser_1.NonQuotedColumnParser; } });
+var QuotedColumnParser_1 = require("./QuotedColumnParser");
+Object.defineProperty(exports, "QuotedColumnParser", { enumerable: true, get: function () { return QuotedColumnParser_1.QuotedColumnParser; } });
+var ColumnFormatter_1 = require("./ColumnFormatter");
+Object.defineProperty(exports, "ColumnFormatter", { enumerable: true, get: function () { return ColumnFormatter_1.ColumnFormatter; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..87996c1e67e04618d7071f9cab6098182e3cabe9
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/parser/column/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2f64fcb9860336f9bf032b9fb953271c70b3795a
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts
@@ -0,0 +1,5 @@
+export { Parser } from './Parser';
+export { RowParser } from './RowParser';
+export { Scanner } from './Scanner';
+export { Token, MaybeToken } from './Token';
+export { ColumnParser, NonQuotedColumnParser, QuotedColumnParser } from './column';
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..658e7e8c07d192e43eb2c01df2846493f84bd07b
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0;
+var Parser_1 = require("./Parser");
+Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_1.Parser; } });
+var RowParser_1 = require("./RowParser");
+Object.defineProperty(exports, "RowParser", { enumerable: true, get: function () { return RowParser_1.RowParser; } });
+var Scanner_1 = require("./Scanner");
+Object.defineProperty(exports, "Scanner", { enumerable: true, get: function () { return Scanner_1.Scanner; } });
+var Token_1 = require("./Token");
+Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return Token_1.Token; } });
+var column_1 = require("./column");
+Object.defineProperty(exports, "ColumnParser", { enumerable: true, get: function () { return column_1.ColumnParser; } });
+Object.defineProperty(exports, "NonQuotedColumnParser", { enumerable: true, get: function () { return column_1.NonQuotedColumnParser; } });
+Object.defineProperty(exports, "QuotedColumnParser", { enumerable: true, get: function () { return column_1.QuotedColumnParser; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..245bcb6bcb9b76e1e4531916a10cf085c0447277
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parser/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,iCAA4C;AAAnC,8FAAA,KAAK,OAAA;AACd,mCAAmF;AAA1E,sGAAA,YAAY,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,4GAAA,kBAAkB,OAAA"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..433daa1528b2066a86b29e1fc7df2d527d6516a7
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts
@@ -0,0 +1,17 @@
+import { ParserOptions } from '../ParserOptions';
+import { HeaderArray, Row, RowArray, RowValidatorCallback } from '../types';
+export declare class HeaderTransformer {
+ private readonly parserOptions;
+ headers: HeaderArray | null;
+ private receivedHeaders;
+ private readonly shouldUseFirstRow;
+ private processedFirstRow;
+ private headersLength;
+ private readonly headersTransform?;
+ constructor(parserOptions: ParserOptions);
+ transform(row: RowArray, cb: RowValidatorCallback): void;
+ private shouldMapRow;
+ private processRow;
+ private mapHeaders;
+ private setHeaders;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd42491752975a0c0c73f5acb81c7fa3014234af
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js
@@ -0,0 +1,115 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.HeaderTransformer = void 0;
+const lodash_isundefined_1 = __importDefault(require("lodash.isundefined"));
+const lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
+const lodash_uniq_1 = __importDefault(require("lodash.uniq"));
+const lodash_groupby_1 = __importDefault(require("lodash.groupby"));
+class HeaderTransformer {
+ constructor(parserOptions) {
+ this.headers = null;
+ this.receivedHeaders = false;
+ this.shouldUseFirstRow = false;
+ this.processedFirstRow = false;
+ this.headersLength = 0;
+ this.parserOptions = parserOptions;
+ if (parserOptions.headers === true) {
+ this.shouldUseFirstRow = true;
+ }
+ else if (Array.isArray(parserOptions.headers)) {
+ this.setHeaders(parserOptions.headers);
+ }
+ else if (lodash_isfunction_1.default(parserOptions.headers)) {
+ this.headersTransform = parserOptions.headers;
+ }
+ }
+ transform(row, cb) {
+ if (!this.shouldMapRow(row)) {
+ return cb(null, { row: null, isValid: true });
+ }
+ return cb(null, this.processRow(row));
+ }
+ shouldMapRow(row) {
+ const { parserOptions } = this;
+ if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {
+ if (!this.receivedHeaders) {
+ throw new Error('Error renaming headers: new headers must be provided in an array');
+ }
+ this.processedFirstRow = true;
+ return false;
+ }
+ if (!this.receivedHeaders && Array.isArray(row)) {
+ if (this.headersTransform) {
+ this.setHeaders(this.headersTransform(row));
+ }
+ else if (this.shouldUseFirstRow) {
+ this.setHeaders(row);
+ }
+ else {
+ // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.
+ return true;
+ }
+ return false;
+ }
+ return true;
+ }
+ processRow(row) {
+ if (!this.headers) {
+ return { row: row, isValid: true };
+ }
+ const { parserOptions } = this;
+ if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {
+ if (!parserOptions.strictColumnHandling) {
+ throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`);
+ }
+ return {
+ row: row,
+ isValid: false,
+ reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`,
+ };
+ }
+ if (parserOptions.strictColumnHandling && row.length < this.headersLength) {
+ return {
+ row: row,
+ isValid: false,
+ reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`,
+ };
+ }
+ return { row: this.mapHeaders(row), isValid: true };
+ }
+ mapHeaders(row) {
+ const rowMap = {};
+ const { headers, headersLength } = this;
+ for (let i = 0; i < headersLength; i += 1) {
+ const header = headers[i];
+ if (!lodash_isundefined_1.default(header)) {
+ const val = row[i];
+ // eslint-disable-next-line no-param-reassign
+ if (lodash_isundefined_1.default(val)) {
+ rowMap[header] = '';
+ }
+ else {
+ rowMap[header] = val;
+ }
+ }
+ }
+ return rowMap;
+ }
+ setHeaders(headers) {
+ var _a;
+ const filteredHeaders = headers.filter((h) => !!h);
+ if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {
+ const grouped = lodash_groupby_1.default(filteredHeaders);
+ const duplicates = Object.keys(grouped).filter((dup) => grouped[dup].length > 1);
+ throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`);
+ }
+ this.headers = headers;
+ this.receivedHeaders = true;
+ this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;
+ }
+}
+exports.HeaderTransformer = HeaderTransformer;
+//# sourceMappingURL=HeaderTransformer.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..350999d3a57b92fde31beb8b55af27d5764f9707
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"HeaderTransformer.js","sourceRoot":"","sources":["../../../src/transforms/HeaderTransformer.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..55a5173b512ef5ca8f81ea1b97aaf944155ef541
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts
@@ -0,0 +1,12 @@
+import { Row, RowTransformFunction, RowValidatorCallback, RowValidate } from '../types';
+export declare class RowTransformerValidator {
+ private static createTransform;
+ private static createValidator;
+ private _rowTransform;
+ private _rowValidator;
+ set rowTransform(transformFunction: RowTransformFunction);
+ set rowValidator(validateFunction: RowValidate);
+ transformAndValidate(row: I, cb: RowValidatorCallback): void;
+ private callTransformer;
+ private callValidator;
+}
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7c69f881b02664115a41e994957f5a7af7c8bc3
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js
@@ -0,0 +1,93 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.RowTransformerValidator = void 0;
+const lodash_isfunction_1 = __importDefault(require("lodash.isfunction"));
+const types_1 = require("../types");
+class RowTransformerValidator {
+ constructor() {
+ this._rowTransform = null;
+ this._rowValidator = null;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-shadow
+ static createTransform(transformFunction) {
+ if (types_1.isSyncTransform(transformFunction)) {
+ return (row, cb) => {
+ let transformed = null;
+ try {
+ transformed = transformFunction(row);
+ }
+ catch (e) {
+ return cb(e);
+ }
+ return cb(null, transformed);
+ };
+ }
+ return transformFunction;
+ }
+ static createValidator(validateFunction) {
+ if (types_1.isSyncValidate(validateFunction)) {
+ return (row, cb) => {
+ cb(null, { row, isValid: validateFunction(row) });
+ };
+ }
+ return (row, cb) => {
+ validateFunction(row, (err, isValid, reason) => {
+ if (err) {
+ return cb(err);
+ }
+ if (isValid) {
+ return cb(null, { row, isValid, reason });
+ }
+ return cb(null, { row, isValid: false, reason });
+ });
+ };
+ }
+ set rowTransform(transformFunction) {
+ if (!lodash_isfunction_1.default(transformFunction)) {
+ throw new TypeError('The transform should be a function');
+ }
+ this._rowTransform = RowTransformerValidator.createTransform(transformFunction);
+ }
+ set rowValidator(validateFunction) {
+ if (!lodash_isfunction_1.default(validateFunction)) {
+ throw new TypeError('The validate should be a function');
+ }
+ this._rowValidator = RowTransformerValidator.createValidator(validateFunction);
+ }
+ transformAndValidate(row, cb) {
+ return this.callTransformer(row, (transformErr, transformedRow) => {
+ if (transformErr) {
+ return cb(transformErr);
+ }
+ if (!transformedRow) {
+ return cb(null, { row: null, isValid: true });
+ }
+ return this.callValidator(transformedRow, (validateErr, validationResult) => {
+ if (validateErr) {
+ return cb(validateErr);
+ }
+ if (validationResult && !validationResult.isValid) {
+ return cb(null, { row: transformedRow, isValid: false, reason: validationResult.reason });
+ }
+ return cb(null, { row: transformedRow, isValid: true });
+ });
+ });
+ }
+ callTransformer(row, cb) {
+ if (!this._rowTransform) {
+ return cb(null, row);
+ }
+ return this._rowTransform(row, cb);
+ }
+ callValidator(row, cb) {
+ if (!this._rowValidator) {
+ return cb(null, { row, isValid: true });
+ }
+ return this._rowValidator(row, cb);
+ }
+}
+exports.RowTransformerValidator = RowTransformerValidator;
+//# sourceMappingURL=RowTransformerValidator.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..008e02812e203d8a8115044e4bbee4d347ff0005
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RowTransformerValidator.js","sourceRoot":"","sources":["../../../src/transforms/RowTransformerValidator.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26df69bfcce0154e6ff18bb3725d8bcb183021a9
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts
@@ -0,0 +1,2 @@
+export { RowTransformerValidator } from './RowTransformerValidator';
+export { HeaderTransformer } from './HeaderTransformer';
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b8caf4d10c2018f913642d175d2b765356da6c3
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.HeaderTransformer = exports.RowTransformerValidator = void 0;
+var RowTransformerValidator_1 = require("./RowTransformerValidator");
+Object.defineProperty(exports, "RowTransformerValidator", { enumerable: true, get: function () { return RowTransformerValidator_1.RowTransformerValidator; } });
+var HeaderTransformer_1 = require("./HeaderTransformer");
+Object.defineProperty(exports, "HeaderTransformer", { enumerable: true, get: function () { return HeaderTransformer_1.HeaderTransformer; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..dacea918b69eff79acb035a3cb6fa6fa983e25a0
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transforms/index.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..625cb990f43e7570e481f8b0aef9d8fc76e95b36
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts
@@ -0,0 +1,21 @@
+export declare type RowMap = Record;
+export declare type RowArray = V[];
+export declare type Row = RowMap | RowArray;
+export interface RowValidationResult {
+ row: R | null;
+ isValid: boolean;
+ reason?: string;
+}
+export declare type RowValidatorCallback = (error: Error | null, result?: RowValidationResult) => void;
+export declare type RowTransformCallback = (error?: Error | null, row?: R) => void;
+export declare type SyncRowTransform = (row: I) => O;
+export declare type AsyncRowTransform = (row: I, cb: RowTransformCallback) => void;
+export declare type RowTransformFunction = SyncRowTransform | AsyncRowTransform;
+export declare const isSyncTransform: , O extends Row>(transform: RowTransformFunction) => transform is SyncRowTransform;
+export declare type RowValidateCallback = (error?: Error | null, isValid?: boolean, reason?: string) => void;
+export declare type SyncRowValidate = (row: R) => boolean;
+export declare type AsyncRowValidate = (row: R, cb: RowValidateCallback) => void;
+export declare type RowValidate = AsyncRowValidate | SyncRowValidate;
+export declare const isSyncValidate: >(validate: RowValidate) => validate is SyncRowValidate;
+export declare type HeaderArray = (string | undefined | null)[];
+export declare type HeaderTransformFunction = (headers: HeaderArray) => HeaderArray;
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.js b/node_backend/node_modules/@fast-csv/parse/build/src/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..92dc9f76fc363947fabfeb0d7f67a0044137ddaa
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.js
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isSyncValidate = exports.isSyncTransform = void 0;
+exports.isSyncTransform = (transform) => transform.length === 1;
+exports.isSyncValidate = (validate) => validate.length === 1;
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f335163e49faa34810d24a6dea67e583a6bbc154
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAoBa,QAAA,eAAe,GAAG,CAC3B,SAAqC,EACF,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;AAQpD,QAAA,cAAc,GAAG,CAAgB,QAAwB,EAAkC,EAAE,CACtG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_backend/node_modules/@fast-csv/parse/package.json b/node_backend/node_modules/@fast-csv/parse/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1fda641dc0ed7dbcaa8763a79d50100035add663
--- /dev/null
+++ b/node_backend/node_modules/@fast-csv/parse/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "@fast-csv/parse",
+ "version": "4.3.6",
+ "description": "fast-csv parsing package",
+ "keywords": [
+ "csv",
+ "parse",
+ "fast-csv",
+ "parser"
+ ],
+ "author": "doug-martin ",
+ "homepage": "http://c2fo.github.com/fast-csv/packages/parse",
+ "license": "MIT",
+ "main": "build/src/index.js",
+ "types": "build/src/index.d.ts",
+ "directories": {
+ "lib": "src",
+ "test": "__tests__"
+ },
+ "files": [
+ "build/src/**"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/C2FO/fast-csv.git",
+ "directory": "packages/parse"
+ },
+ "scripts": {
+ "prepublishOnly": "npm run build",
+ "build": "npm run clean && npm run compile",
+ "clean": "rm -rf ./build && rm -rf tsconfig.tsbuildinfo",
+ "compile": "tsc"
+ },
+ "bugs": {
+ "url": "https://github.com/C2FO/fast-csv/issues"
+ },
+ "dependencies": {
+ "@types/node": "^14.0.1",
+ "lodash.escaperegexp": "^4.1.2",
+ "lodash.groupby": "^4.6.0",
+ "lodash.isfunction": "^3.0.9",
+ "lodash.isnil": "^4.0.0",
+ "lodash.isundefined": "^3.0.1",
+ "lodash.uniq": "^4.5.0"
+ },
+ "devDependencies": {
+ "@types/lodash.escaperegexp": "4.1.6",
+ "@types/lodash.groupby": "4.6.6",
+ "@types/lodash.isfunction": "3.0.6",
+ "@types/lodash.isnil": "4.0.6",
+ "@types/lodash.isundefined": "3.0.6",
+ "@types/lodash.partition": "4.6.6",
+ "@types/lodash.uniq": "4.5.6",
+ "@types/sinon": "9.0.9",
+ "lodash.partition": "4.6.0",
+ "sinon": "9.2.1"
+ },
+ "gitHead": "3dc859edb19924b315051e4c87d6273808a0de73"
+}
diff --git a/node_backend/node_modules/@types/node/LICENSE b/node_backend/node_modules/@types/node/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/node_backend/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
diff --git a/node_backend/node_modules/@types/node/README.md b/node_backend/node_modules/@types/node/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4685d19bf9612a86b53185e95355dccaa9bedf56
--- /dev/null
+++ b/node_backend/node_modules/@types/node/README.md
@@ -0,0 +1,16 @@
+# Installation
+> `npm install --save @types/node`
+
+# Summary
+This package contains type definitions for Node.js (https://nodejs.org/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v14.
+
+### Additional Details
+ * Last updated: Sat, 23 Sep 2023 20:38:33 GMT
+ * Dependencies: none
+ * Global values: `AbortController`, `AbortSignal`, `Buffer`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout`
+
+# Credits
+These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Hoàng Văn Khải](https://github.com/KSXGitHub), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Seth Westphal](https://github.com/westy92), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [Bond](https://github.com/bondz), and [Linus Unnebäck](https://github.com/LinusU).
diff --git a/node_backend/node_modules/@types/node/assert.d.ts b/node_backend/node_modules/@types/node/assert.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e1d8d92763a56a15c0206e0e0d7fd64966726a58
--- /dev/null
+++ b/node_backend/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,130 @@
+declare module "assert" {
+ /** An alias of `assert.ok()`. */
+ function assert(value: any, message?: string | Error): asserts value;
+ namespace assert {
+ class AssertionError extends Error {
+ actual: any;
+ expected: any;
+ operator: string;
+ generatedMessage: boolean;
+ code: "ERR_ASSERTION";
+
+ constructor(options?: {
+ /** If provided, the error message is set to this value. */
+ message?: string | undefined;
+ /** The `actual` property on the error instance. */
+ actual?: any;
+ /** The `expected` property on the error instance. */
+ expected?: any;
+ /** The `operator` property on the error instance. */
+ operator?: string | undefined;
+ /** If provided, the generated stack trace omits frames before this function. */
+ // tslint:disable-next-line:ban-types
+ stackStartFn?: Function | undefined;
+ });
+ }
+
+ class CallTracker {
+ calls(exact?: number): () => void;
+ calls any>(fn?: Func, exact?: number): Func;
+ report(): CallTrackerReportInformation[];
+ verify(): void;
+ }
+ interface CallTrackerReportInformation {
+ message: string;
+ /** The actual number of times the function was called. */
+ actual: number;
+ /** The number of times the function was expected to be called. */
+ expected: number;
+ /** The name of the function that is wrapped. */
+ operator: string;
+ /** A stack trace of the function. */
+ stack: object;
+ }
+
+ type AssertPredicate = RegExp | (new() => object) | ((thrown: any) => boolean) | object | Error;
+
+ function fail(message?: string | Error): never;
+ /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
+ function fail(
+ actual: any,
+ expected: any,
+ message?: string | Error,
+ operator?: string,
+ // tslint:disable-next-line:ban-types
+ stackStartFn?: Function,
+ ): never;
+ function ok(value: any, message?: string | Error): asserts value;
+ /** @deprecated since v9.9.0 - use strictEqual() instead. */
+ function equal(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notStrictEqual() instead. */
+ function notEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
+ function deepEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
+ function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
+ function strictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T;
+ function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
+ function deepStrictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T;
+ function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+
+ function throws(block: () => any, message?: string | Error): void;
+ function throws(block: () => any, error: AssertPredicate, message?: string | Error): void;
+ function doesNotThrow(block: () => any, message?: string | Error): void;
+ function doesNotThrow(block: () => any, error: AssertPredicate, message?: string | Error): void;
+
+ function ifError(value: any): asserts value is null | undefined;
+
+ function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function rejects(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+ function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function doesNotReject(
+ block: (() => Promise) | Promise,
+ error: AssertPredicate,
+ message?: string | Error,
+ ): Promise;
+
+ function match(value: string, regExp: RegExp, message?: string | Error): void;
+ function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
+
+ const strict:
+ & Omit<
+ typeof assert,
+ | "equal"
+ | "notEqual"
+ | "deepEqual"
+ | "notDeepEqual"
+ | "ok"
+ | "strictEqual"
+ | "deepStrictEqual"
+ | "ifError"
+ | "strict"
+ >
+ & {
+ (value: any, message?: string | Error): asserts value;
+ equal: typeof strictEqual;
+ notEqual: typeof notStrictEqual;
+ deepEqual: typeof deepStrictEqual;
+ notDeepEqual: typeof notDeepStrictEqual;
+
+ // Mapped types and assertion functions are incompatible?
+ // TS2775: Assertions require every name in the call target
+ // to be declared with an explicit type annotation.
+ ok: typeof ok;
+ strictEqual: typeof strictEqual;
+ deepStrictEqual: typeof deepStrictEqual;
+ ifError: typeof ifError;
+ strict: typeof strict;
+ };
+ }
+
+ export = assert;
+}
+declare module "node:assert" {
+ import assert = require("assert");
+ export = assert;
+}
diff --git a/node_backend/node_modules/@types/node/async_hooks.d.ts b/node_backend/node_modules/@types/node/async_hooks.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ec1dad9d8da5decb16587253aa9d7550ac83d0ef
--- /dev/null
+++ b/node_backend/node_modules/@types/node/async_hooks.d.ts
@@ -0,0 +1,237 @@
+/**
+ * Async Hooks module: https://nodejs.org/api/async_hooks.html
+ */
+declare module "async_hooks" {
+ /**
+ * Returns the asyncId of the current execution context.
+ */
+ function executionAsyncId(): number;
+
+ /**
+ * The resource representing the current execution.
+ * Useful to store data within the resource.
+ *
+ * Resource objects returned by `executionAsyncResource()` are most often internal
+ * Node.js handle objects with undocumented APIs. Using any functions or properties
+ * on the object is likely to crash your application and should be avoided.
+ *
+ * Using `executionAsyncResource()` in the top-level execution context will
+ * return an empty object as there is no handle or request object to use,
+ * but having an object representing the top-level can be helpful.
+ */
+ function executionAsyncResource(): object;
+
+ /**
+ * Returns the ID of the resource responsible for calling the callback that is currently being executed.
+ */
+ function triggerAsyncId(): number;
+
+ interface HookCallbacks {
+ /**
+ * Called when a class is constructed that has the possibility to emit an asynchronous event.
+ * @param asyncId a unique ID for the async resource
+ * @param type the type of the async resource
+ * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
+ * @param resource reference to the resource representing the async operation, needs to be released during destroy
+ */
+ init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
+
+ /**
+ * When an asynchronous operation is initiated or completes a callback is called to notify the user.
+ * The before callback is called just before said callback is executed.
+ * @param asyncId the unique identifier assigned to the resource about to execute the callback.
+ */
+ before?(asyncId: number): void;
+
+ /**
+ * Called immediately after the callback specified in before is completed.
+ * @param asyncId the unique identifier assigned to the resource which has executed the callback.
+ */
+ after?(asyncId: number): void;
+
+ /**
+ * Called when a promise has resolve() called. This may not be in the same execution id
+ * as the promise itself.
+ * @param asyncId the unique id for the promise that was resolve()d.
+ */
+ promiseResolve?(asyncId: number): void;
+
+ /**
+ * Called after the resource corresponding to asyncId is destroyed
+ * @param asyncId a unique ID for the async resource
+ */
+ destroy?(asyncId: number): void;
+ }
+
+ interface AsyncHook {
+ /**
+ * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+ */
+ enable(): this;
+
+ /**
+ * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+ */
+ disable(): this;
+ }
+
+ /**
+ * Registers functions to be called for different lifetime events of each async operation.
+ * @param options the callbacks to register
+ * @return an AsyncHooks instance used for disabling and enabling hooks
+ */
+ function createHook(options: HookCallbacks): AsyncHook;
+
+ interface AsyncResourceOptions {
+ /**
+ * The ID of the execution context that created this async event.
+ * @default executionAsyncId()
+ */
+ triggerAsyncId?: number | undefined;
+
+ /**
+ * Disables automatic `emitDestroy` when the object is garbage collected.
+ * This usually does not need to be set (even if `emitDestroy` is called
+ * manually), unless the resource's `asyncId` is retrieved and the
+ * sensitive API's `emitDestroy` is called with it.
+ * @default false
+ */
+ requireManualDestroy?: boolean | undefined;
+ }
+
+ /**
+ * The class AsyncResource was designed to be extended by the embedder's async resources.
+ * Using this users can easily trigger the lifetime events of their own resources.
+ */
+ class AsyncResource {
+ /**
+ * AsyncResource() is meant to be extended. Instantiating a
+ * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+ * async_hook.executionAsyncId() is used.
+ * @param type The type of async event.
+ * @param triggerAsyncId The ID of the execution context that created
+ * this async event (default: `executionAsyncId()`), or an
+ * AsyncResourceOptions object (since v9.3.0)
+ */
+ constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
+
+ /**
+ * Binds the given function to the current execution context.
+ * @param fn The function to bind to the current execution context.
+ * @param type An optional name to associate with the underlying `AsyncResource`.
+ */
+ static bind any>(
+ fn: Func,
+ type?: string,
+ ): Func & { asyncResource: AsyncResource };
+
+ /**
+ * Binds the given function to execute to this `AsyncResource`'s scope.
+ * @param fn The function to bind to the current `AsyncResource`.
+ */
+ bind any>(fn: Func): Func & { asyncResource: AsyncResource };
+
+ /**
+ * Call the provided function with the provided arguments in the
+ * execution context of the async resource. This will establish the
+ * context, trigger the AsyncHooks before callbacks, call the function,
+ * trigger the AsyncHooks after callbacks, and then restore the original
+ * execution context.
+ * @param fn The function to call in the execution context of this
+ * async resource.
+ * @param thisArg The receiver to be used for the function call.
+ * @param args Optional arguments to pass to the function.
+ */
+ runInAsyncScope(
+ fn: (this: This, ...args: any[]) => Result,
+ thisArg?: This,
+ ...args: any[]
+ ): Result;
+
+ /**
+ * Call AsyncHooks destroy callbacks.
+ */
+ emitDestroy(): this;
+
+ /**
+ * @return the unique ID assigned to this AsyncResource instance.
+ */
+ asyncId(): number;
+
+ /**
+ * @return the trigger ID for this AsyncResource instance.
+ */
+ triggerAsyncId(): number;
+ }
+
+ /**
+ * When having multiple instances of `AsyncLocalStorage`, they are independent
+ * from each other. It is safe to instantiate this class multiple times.
+ */
+ class AsyncLocalStorage {
+ /**
+ * This method disables the instance of `AsyncLocalStorage`. All subsequent calls
+ * to `asyncLocalStorage.getStore()` will return `undefined` until
+ * `asyncLocalStorage.run()` is called again.
+ *
+ * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
+ * instance will be exited.
+ *
+ * Calling `asyncLocalStorage.disable()` is required before the
+ * `asyncLocalStorage` can be garbage collected. This does not apply to stores
+ * provided by the `asyncLocalStorage`, as those objects are garbage collected
+ * along with the corresponding async resources.
+ *
+ * This method is to be used when the `asyncLocalStorage` is not in use anymore
+ * in the current process.
+ */
+ disable(): void;
+
+ /**
+ * This method returns the current store. If this method is called outside of an
+ * asynchronous context initialized by calling `asyncLocalStorage.run`, it will
+ * return `undefined`.
+ */
+ getStore(): T | undefined;
+
+ /**
+ * This methods runs a function synchronously within a context and return its
+ * return value. The store is not accessible outside of the callback function or
+ * the asynchronous operations created within the callback.
+ *
+ * Optionally, arguments can be passed to the function. They will be passed to the
+ * callback function.
+ *
+ * I the callback function throws an error, it will be thrown by `run` too. The
+ * stacktrace will not be impacted by this call and the context will be exited.
+ */
+ // TODO: Apply generic vararg once available
+ run(store: T, callback: () => R): R;
+ run(store: T, callback: (...args: any[]) => R, ...args: any[]): R;
+
+ /**
+ * This methods runs a function synchronously outside of a context and return its
+ * return value. The store is not accessible within the callback function or the
+ * asynchronous operations created within the callback.
+ *
+ * Optionally, arguments can be passed to the function. They will be passed to the
+ * callback function.
+ *
+ * If the callback function throws an error, it will be thrown by `exit` too. The
+ * stacktrace will not be impacted by this call and the context will be
+ * re-entered.
+ */
+ // TODO: Apply generic vararg once available
+ exit(callback: (...args: any[]) => R, ...args: any[]): R;
+
+ /**
+ * Calling `asyncLocalStorage.enterWith(store)` will transition into the context
+ * for the remainder of the current synchronous execution and will persist
+ * through any following asynchronous calls.
+ */
+ enterWith(store: T): void;
+ }
+}
+declare module "node:async_hooks" {
+ export * from "async_hooks";
+}
diff --git a/node_backend/node_modules/@types/node/buffer.d.ts b/node_backend/node_modules/@types/node/buffer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..112b034142a4bec11de333a2f9c555e28d00f724
--- /dev/null
+++ b/node_backend/node_modules/@types/node/buffer.d.ts
@@ -0,0 +1,89 @@
+declare module "buffer" {
+ import { BinaryLike } from "node:crypto";
+ export const INSPECT_MAX_BYTES: number;
+ export const kMaxLength: number;
+ export const kStringMaxLength: number;
+ export const constants: {
+ MAX_LENGTH: number;
+ MAX_STRING_LENGTH: number;
+ };
+ const BuffType: typeof Buffer;
+
+ export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary";
+
+ export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer;
+
+ export const SlowBuffer: {
+ /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */
+ new(size: number): Buffer;
+ prototype: Buffer;
+ };
+ /**
+ * @experimental
+ */
+ export interface BlobOptions {
+ /**
+ * @default 'utf8'
+ */
+ encoding?: BufferEncoding | undefined;
+ /**
+ * The Blob content-type. The intent is for `type` to convey
+ * the MIME media type of the data, however no validation of the type format
+ * is performed.
+ */
+ type?: string | undefined;
+ }
+ /**
+ * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across
+ * multiple worker threads.
+ * @since v14.18.0
+ * @experimental
+ */
+ export class Blob {
+ /**
+ * The total size of the `Blob` in bytes.
+ * @since v14.18.0
+ */
+ readonly size: number;
+ /**
+ * The content-type of the `Blob`.
+ * @since v14.18.0
+ */
+ readonly type: string;
+ /**
+ * Creates a new `Blob` object containing a concatenation of the given sources.
+ *
+ * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into
+ * the 'Blob' and can therefore be safely modified after the 'Blob' is created.
+ *
+ * String sources are also copied into the `Blob`.
+ */
+ constructor(sources: Array, options?: BlobOptions);
+ /**
+ * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of
+ * the `Blob` data.
+ * @since v14.18.0
+ */
+ arrayBuffer(): Promise;
+ /**
+ * Creates and returns a new `Blob` containing a subset of this `Blob` objects
+ * data. The original `Blob` is not altered.
+ * @since v14.18.0
+ * @param start The starting index.
+ * @param end The ending index.
+ * @param type The content-type for the new `Blob`
+ */
+ slice(start?: number, end?: number, type?: string): Blob;
+ /**
+ * Returns a promise that fulfills with the contents of the `Blob` decoded as a
+ * UTF-8 string.
+ * @since v14.18.0
+ */
+ text(): Promise;
+ }
+
+ export { BuffType as Buffer };
+}
+declare module "node:buffer" {
+ export * from "buffer";
+}
diff --git a/node_backend/node_modules/@types/node/child_process.d.ts b/node_backend/node_modules/@types/node/child_process.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e86922ba9f090c8635adfa6e1383c40306792c2b
--- /dev/null
+++ b/node_backend/node_modules/@types/node/child_process.d.ts
@@ -0,0 +1,682 @@
+declare module "child_process" {
+ import { BaseEncodingOptions } from "fs";
+ import * as events from "events";
+ import * as net from "net";
+ import { Pipe, Readable, Stream, Writable } from "stream";
+
+ type Serializable = string | object | number | boolean;
+ type SendHandle = net.Socket | net.Server;
+
+ interface ChildProcess extends events.EventEmitter {
+ stdin: Writable | null;
+ stdout: Readable | null;
+ stderr: Readable | null;
+ readonly channel?: Pipe | null | undefined;
+ readonly stdio: [
+ Writable | null, // stdin
+ Readable | null, // stdout
+ Readable | null, // stderr
+ Readable | Writable | null | undefined, // extra
+ Readable | Writable | null | undefined, // extra
+ ];
+ readonly killed: boolean;
+ readonly pid: number;
+ readonly connected: boolean;
+ readonly exitCode: number | null;
+ readonly signalCode: NodeJS.Signals | null;
+ readonly spawnargs: string[];
+ readonly spawnfile: string;
+ kill(signal?: NodeJS.Signals | number): boolean;
+ send(message: Serializable, callback?: (error: Error | null) => void): boolean;
+ send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean;
+ send(
+ message: Serializable,
+ sendHandle?: SendHandle,
+ options?: MessageOptions,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ disconnect(): void;
+ unref(): void;
+ ref(): void;
+
+ /**
+ * events.EventEmitter
+ * 1. close
+ * 2. disconnect
+ * 3. error
+ * 4. exit
+ * 5. message
+ */
+
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ addListener(event: "disconnect", listener: () => void): this;
+ addListener(event: "error", listener: (err: Error) => void): this;
+ addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean;
+ emit(event: "disconnect"): boolean;
+ emit(event: "error", err: Error): boolean;
+ emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean;
+ emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ on(event: "disconnect", listener: () => void): this;
+ on(event: "error", listener: (err: Error) => void): this;
+ on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ once(event: "disconnect", listener: () => void): this;
+ once(event: "error", listener: (err: Error) => void): this;
+ once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependListener(event: "disconnect", listener: () => void): this;
+ prependListener(event: "error", listener: (err: Error) => void): this;
+ prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
+ prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(
+ event: "close",
+ listener: (code: number | null, signal: NodeJS.Signals | null) => void,
+ ): this;
+ prependOnceListener(event: "disconnect", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (err: Error) => void): this;
+ prependOnceListener(
+ event: "exit",
+ listener: (code: number | null, signal: NodeJS.Signals | null) => void,
+ ): this;
+ prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this;
+ }
+
+ // return this object when stdio option is undefined or not specified
+ interface ChildProcessWithoutNullStreams extends ChildProcess {
+ stdin: Writable;
+ stdout: Readable;
+ stderr: Readable;
+ readonly stdio: [
+ Writable, // stdin
+ Readable, // stdout
+ Readable, // stderr
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined, // extra, no modification
+ ];
+ }
+
+ // return this object when stdio option is a tuple of 3
+ interface ChildProcessByStdio<
+ I extends null | Writable,
+ O extends null | Readable,
+ E extends null | Readable,
+ > extends ChildProcess {
+ stdin: I;
+ stdout: O;
+ stderr: E;
+ readonly stdio: [
+ I,
+ O,
+ E,
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined, // extra, no modification
+ ];
+ }
+
+ interface MessageOptions {
+ keepOpen?: boolean | undefined;
+ }
+
+ type StdioOptions =
+ | "pipe"
+ | "ignore"
+ | "inherit"
+ | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>;
+
+ type SerializationType = "json" | "advanced";
+
+ interface MessagingOptions {
+ /**
+ * Specify the kind of serialization used for sending messages between processes.
+ * @default 'json'
+ */
+ serialization?: SerializationType | undefined;
+ }
+
+ interface ProcessEnvOptions {
+ uid?: number | undefined;
+ gid?: number | undefined;
+ cwd?: string | undefined;
+ env?: NodeJS.ProcessEnv | undefined;
+ }
+
+ interface CommonOptions extends ProcessEnvOptions {
+ /**
+ * @default false
+ */
+ windowsHide?: boolean | undefined;
+ /**
+ * @default 0
+ */
+ timeout?: number | undefined;
+ }
+
+ interface CommonSpawnOptions extends CommonOptions, MessagingOptions {
+ argv0?: string | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ shell?: boolean | string | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ }
+
+ interface SpawnOptions extends CommonSpawnOptions {
+ detached?: boolean | undefined;
+ }
+
+ interface SpawnOptionsWithoutStdio extends SpawnOptions {
+ stdio?: "pipe" | Array | undefined;
+ }
+
+ type StdioNull = "inherit" | "ignore" | Stream;
+ type StdioPipe = undefined | null | "pipe";
+
+ interface SpawnOptionsWithStdioTuple<
+ Stdin extends StdioNull | StdioPipe,
+ Stdout extends StdioNull | StdioPipe,
+ Stderr extends StdioNull | StdioPipe,
+ > extends SpawnOptions {
+ stdio: [Stdin, Stdout, Stderr];
+ }
+
+ // overloads of spawn without 'args'
+ function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, options: SpawnOptions): ChildProcess;
+
+ // overloads of spawn with 'args'
+ function spawn(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnOptionsWithoutStdio,
+ ): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess;
+
+ interface ExecOptions extends CommonOptions {
+ shell?: string | undefined;
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ }
+
+ interface ExecOptionsWithStringEncoding extends ExecOptions {
+ encoding: BufferEncoding;
+ }
+
+ interface ExecOptionsWithBufferEncoding extends ExecOptions {
+ encoding: BufferEncoding | null; // specify `null`.
+ }
+
+ interface ExecException extends Error {
+ cmd?: string | undefined;
+ killed?: boolean | undefined;
+ code?: number | undefined;
+ signal?: NodeJS.Signals | undefined;
+ }
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function exec(
+ command: string,
+ callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function exec(
+ command: string,
+ options: { encoding: "buffer" | null } & ExecOptions,
+ callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void,
+ ): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function exec(
+ command: string,
+ options: { encoding: BufferEncoding } & ExecOptions,
+ callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function exec(
+ command: string,
+ options: { encoding: BufferEncoding } & ExecOptions,
+ callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function exec(
+ command: string,
+ options: ExecOptions,
+ callback?: (error: ExecException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function exec(
+ command: string,
+ options: (BaseEncodingOptions & ExecOptions) | undefined | null,
+ callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ interface PromiseWithChild extends Promise {
+ child: ChildProcess;
+ }
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace exec {
+ function __promisify__(command: string): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ command: string,
+ options: { encoding: "buffer" | null } & ExecOptions,
+ ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>;
+ function __promisify__(
+ command: string,
+ options: { encoding: BufferEncoding } & ExecOptions,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ command: string,
+ options: ExecOptions,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ command: string,
+ options?: (BaseEncodingOptions & ExecOptions) | null,
+ ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>;
+ }
+
+ interface ExecFileOptions extends CommonOptions {
+ maxBuffer?: number | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ shell?: boolean | string | undefined;
+ }
+ interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+ encoding: "buffer" | null;
+ }
+ interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {
+ encoding: BufferEncoding;
+ }
+ type ExecFileException =
+ & Omit
+ & Omit
+ & { code?: string | number | undefined | null };
+
+ function execFile(file: string): ChildProcess;
+ function execFile(file: string, options: (BaseEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess;
+ function execFile(file: string, args?: ReadonlyArray | null): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ ): ChildProcess;
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function execFile(
+ file: string,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void,
+ ): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithStringEncoding,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function execFile(
+ file: string,
+ options: ExecFileOptions,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptions,
+ callback: (error: ExecFileException | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function execFile(
+ file: string,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ callback:
+ | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void)
+ | undefined
+ | null,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ callback:
+ | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void)
+ | undefined
+ | null,
+ ): ChildProcess;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace execFile {
+ function __promisify__(file: string): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptionsWithBufferEncoding,
+ ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptionsWithStringEncoding,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptionsWithOtherEncoding,
+ ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithOtherEncoding,
+ ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>;
+ function __promisify__(
+ file: string,
+ options: ExecFileOptions,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptions,
+ ): PromiseWithChild<{ stdout: string; stderr: string }>;
+ function __promisify__(
+ file: string,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>;
+ function __promisify__(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: (BaseEncodingOptions & ExecFileOptions) | undefined | null,
+ ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>;
+ }
+
+ interface ForkOptions extends ProcessEnvOptions, MessagingOptions {
+ execPath?: string | undefined;
+ execArgv?: string[] | undefined;
+ silent?: boolean | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ detached?: boolean | undefined;
+ windowsVerbatimArguments?: boolean | undefined;
+ }
+ function fork(modulePath: string, options?: ForkOptions): ChildProcess;
+ function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess;
+
+ interface SpawnSyncOptions extends CommonSpawnOptions {
+ input?: string | NodeJS.ArrayBufferView | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ maxBuffer?: number | undefined;
+ encoding?: BufferEncoding | "buffer" | null | undefined;
+ }
+ interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+ encoding?: "buffer" | null | undefined;
+ }
+ interface SpawnSyncReturns {
+ pid: number;
+ output: Array;
+ stdout: T;
+ stderr: T;
+ status: number | null;
+ signal: NodeJS.Signals | null;
+ error?: Error | undefined;
+ }
+ function spawnSync(command: string): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnSyncOptionsWithStringEncoding,
+ ): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnSyncOptionsWithBufferEncoding,
+ ): SpawnSyncReturns;
+ function spawnSync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: SpawnSyncOptions,
+ ): SpawnSyncReturns;
+
+ interface ExecSyncOptions extends CommonOptions {
+ input?: string | Uint8Array | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ shell?: string | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ maxBuffer?: number | undefined;
+ encoding?: BufferEncoding | "buffer" | null | undefined;
+ }
+ interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+ encoding?: "buffer" | null | undefined;
+ }
+ function execSync(command: string): Buffer;
+ function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string;
+ function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer;
+ function execSync(command: string, options?: ExecSyncOptions): string | Buffer;
+
+ interface ExecFileSyncOptions extends CommonOptions {
+ input?: string | NodeJS.ArrayBufferView | undefined;
+ /**
+ * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings.
+ * If passed as an array, the first element is used for `stdin`, the second for
+ * `stdout`, and the third for `stderr`. A fourth element can be used to
+ * specify the `stdio` behavior beyond the standard streams. See
+ * {@link ChildProcess.stdio} for more information.
+ *
+ * @default 'pipe'
+ */
+ stdio?: StdioOptions | undefined;
+ killSignal?: NodeJS.Signals | number | undefined;
+ maxBuffer?: number | undefined;
+ encoding?: BufferEncoding | undefined;
+ shell?: boolean | string | undefined;
+ }
+ interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+ encoding: BufferEncoding; // specify `null`.
+ }
+ function execFileSync(command: string): Buffer;
+ function execFileSync(command: string, options: ExecFileSyncOptionsWithStringEncoding): string;
+ function execFileSync(command: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+ function execFileSync(command: string, options?: ExecFileSyncOptions): string | Buffer;
+ function execFileSync(command: string, args: ReadonlyArray): Buffer;
+ function execFileSync(
+ command: string,
+ args: ReadonlyArray,
+ options: ExecFileSyncOptionsWithStringEncoding,
+ ): string;
+ function execFileSync(
+ command: string,
+ args: ReadonlyArray,
+ options: ExecFileSyncOptionsWithBufferEncoding,
+ ): Buffer;
+ function execFileSync(
+ command: string,
+ args?: ReadonlyArray,
+ options?: ExecFileSyncOptions,
+ ): string | Buffer;
+}
+declare module "node:child_process" {
+ export * from "child_process";
+}
diff --git a/node_backend/node_modules/@types/node/cluster.d.ts b/node_backend/node_modules/@types/node/cluster.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..29eb9841a1f12e7a25f932cd35938e99d1b490a6
--- /dev/null
+++ b/node_backend/node_modules/@types/node/cluster.d.ts
@@ -0,0 +1,300 @@
+declare module "cluster" {
+ import * as child from "child_process";
+ import EventEmitter = require("events");
+ import * as net from "net";
+
+ // interfaces
+ type SerializationType = "json" | "advanced";
+ interface ClusterSettings {
+ execArgv?: string[] | undefined; // default: process.execArgv
+ exec?: string | undefined;
+ args?: string[] | undefined;
+ silent?: boolean | undefined;
+ stdio?: any[] | undefined;
+ uid?: number | undefined;
+ gid?: number | undefined;
+ inspectPort?: number | (() => number) | undefined;
+ serialization?: SerializationType | undefined;
+ cwd?: string | undefined;
+ windowsHide?: boolean | undefined;
+ }
+
+ interface Address {
+ address: string;
+ port: number;
+ addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6"
+ }
+
+ class Worker extends EventEmitter {
+ id: number;
+ process: child.ChildProcess;
+ send(
+ message: child.Serializable,
+ sendHandle?: child.SendHandle,
+ callback?: (error: Error | null) => void,
+ ): boolean;
+ kill(signal?: string): void;
+ destroy(signal?: string): void;
+ disconnect(): void;
+ isConnected(): boolean;
+ isDead(): boolean;
+ exitedAfterDisconnect: boolean;
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. error
+ * 3. exit
+ * 4. listening
+ * 5. message
+ * 6. online
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "disconnect", listener: () => void): this;
+ addListener(event: "error", listener: (error: Error) => void): this;
+ addListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ addListener(event: "listening", listener: (address: Address) => void): this;
+ addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ addListener(event: "online", listener: () => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "disconnect"): boolean;
+ emit(event: "error", error: Error): boolean;
+ emit(event: "exit", code: number, signal: string): boolean;
+ emit(event: "listening", address: Address): boolean;
+ emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
+ emit(event: "online"): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "disconnect", listener: () => void): this;
+ on(event: "error", listener: (error: Error) => void): this;
+ on(event: "exit", listener: (code: number, signal: string) => void): this;
+ on(event: "listening", listener: (address: Address) => void): this;
+ on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ on(event: "online", listener: () => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "disconnect", listener: () => void): this;
+ once(event: "error", listener: (error: Error) => void): this;
+ once(event: "exit", listener: (code: number, signal: string) => void): this;
+ once(event: "listening", listener: (address: Address) => void): this;
+ once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ once(event: "online", listener: () => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "disconnect", listener: () => void): this;
+ prependListener(event: "error", listener: (error: Error) => void): this;
+ prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ prependListener(event: "listening", listener: (address: Address) => void): this;
+ prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependListener(event: "online", listener: () => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "disconnect", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (error: Error) => void): this;
+ prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ prependOnceListener(event: "listening", listener: (address: Address) => void): this;
+ prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependOnceListener(event: "online", listener: () => void): this;
+ }
+
+ interface Cluster extends EventEmitter {
+ Worker: Worker;
+ disconnect(callback?: () => void): void;
+ fork(env?: any): Worker;
+ isMaster: boolean;
+ isWorker: boolean;
+ schedulingPolicy: number;
+ settings: ClusterSettings;
+ setupMaster(settings?: ClusterSettings): void;
+ worker?: Worker | undefined;
+ workers?: NodeJS.Dict | undefined;
+
+ readonly SCHED_NONE: number;
+ readonly SCHED_RR: number;
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. exit
+ * 3. fork
+ * 4. listening
+ * 5. message
+ * 6. online
+ * 7. setup
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ addListener(event: "fork", listener: (worker: Worker) => void): this;
+ addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ addListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): this; // the handle is a net.Socket or net.Server object, or undefined.
+ addListener(event: "online", listener: (worker: Worker) => void): this;
+ addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "disconnect", worker: Worker): boolean;
+ emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+ emit(event: "fork", worker: Worker): boolean;
+ emit(event: "listening", worker: Worker, address: Address): boolean;
+ emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+ emit(event: "online", worker: Worker): boolean;
+ emit(event: "setup", settings: ClusterSettings): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "disconnect", listener: (worker: Worker) => void): this;
+ on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ on(event: "fork", listener: (worker: Worker) => void): this;
+ on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ on(event: "online", listener: (worker: Worker) => void): this;
+ on(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "disconnect", listener: (worker: Worker) => void): this;
+ once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ once(event: "fork", listener: (worker: Worker) => void): this;
+ once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ once(event: "online", listener: (worker: Worker) => void): this;
+ once(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ prependListener(event: "fork", listener: (worker: Worker) => void): this;
+ prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ prependListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependListener(event: "online", listener: (worker: Worker) => void): this;
+ prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ prependOnceListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): this;
+ prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+ }
+
+ const SCHED_NONE: number;
+ const SCHED_RR: number;
+
+ function disconnect(callback?: () => void): void;
+ function fork(env?: any): Worker;
+ const isMaster: boolean;
+ const isWorker: boolean;
+ let schedulingPolicy: number;
+ const settings: ClusterSettings;
+ function setupMaster(settings?: ClusterSettings): void;
+ const worker: Worker;
+ const workers: NodeJS.Dict;
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. exit
+ * 3. fork
+ * 4. listening
+ * 5. message
+ * 6. online
+ * 7. setup
+ */
+ function addListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function addListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): Cluster;
+ function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function emit(event: string | symbol, ...args: any[]): boolean;
+ function emit(event: "disconnect", worker: Worker): boolean;
+ function emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+ function emit(event: "fork", worker: Worker): boolean;
+ function emit(event: "listening", worker: Worker, address: Address): boolean;
+ function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+ function emit(event: "online", worker: Worker): boolean;
+ function emit(event: "setup", settings: ClusterSettings): boolean;
+
+ function on(event: string, listener: (...args: any[]) => void): Cluster;
+ function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function on(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ function on(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
+ function on(event: "online", listener: (worker: Worker) => void): Cluster;
+ function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function once(event: string, listener: (...args: any[]) => void): Cluster;
+ function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function once(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ function once(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
+ function once(event: "online", listener: (worker: Worker) => void): Cluster;
+ function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function removeListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function removeAllListeners(event?: string): Cluster;
+ function setMaxListeners(n: number): Cluster;
+ function getMaxListeners(): number;
+ function listeners(event: string): Function[];
+ function listenerCount(type: string): number;
+
+ function prependListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function prependListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): Cluster;
+ function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(
+ event: "exit",
+ listener: (worker: Worker, code: number, signal: string) => void,
+ ): Cluster;
+ function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function prependOnceListener(
+ event: "message",
+ listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void,
+ ): Cluster;
+ function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function eventNames(): string[];
+}
+declare module "node:cluster" {
+ export * from "cluster";
+}
diff --git a/node_backend/node_modules/@types/node/console.d.ts b/node_backend/node_modules/@types/node/console.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..016f64625ddb4a369a2181f91e7c511da355ae27
--- /dev/null
+++ b/node_backend/node_modules/@types/node/console.d.ts
@@ -0,0 +1,142 @@
+declare module "console" {
+ import console = require("node:console");
+ export = console;
+}
+declare module "node:console" {
+ import { InspectOptions } from "util";
+
+ global {
+ // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build
+ interface Console {
+ Console: NodeJS.ConsoleConstructor;
+ /**
+ * A simple assertion test that verifies whether `value` is truthy.
+ * If it is not, an `AssertionError` is thrown.
+ * If provided, the error `message` is formatted using `util.format()` and used as the error message.
+ */
+ assert(value: any, message?: string, ...optionalParams: any[]): void;
+ /**
+ * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY.
+ * When `stdout` is not a TTY, this method does nothing.
+ */
+ clear(): void;
+ /**
+ * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`.
+ */
+ count(label?: string): void;
+ /**
+ * Resets the internal counter specific to `label`.
+ */
+ countReset(label?: string): void;
+ /**
+ * The `console.debug()` function is an alias for {@link console.log}.
+ */
+ debug(message?: any, ...optionalParams: any[]): void;
+ /**
+ * Uses {@link util.inspect} on `obj` and prints the resulting string to `stdout`.
+ * This function bypasses any custom `inspect()` function defined on `obj`.
+ */
+ dir(obj: any, options?: InspectOptions): void;
+ /**
+ * This method calls {@link console.log} passing it the arguments received. Please note that this method does not produce any XML formatting
+ */
+ dirxml(...data: any[]): void;
+ /**
+ * Prints to `stderr` with newline.
+ */
+ error(message?: any, ...optionalParams: any[]): void;
+ /**
+ * Increases indentation of subsequent lines by two spaces.
+ * If one or more `label`s are provided, those are printed first without the additional indentation.
+ */
+ group(...label: any[]): void;
+ /**
+ * The `console.groupCollapsed()` function is an alias for {@link console.group}.
+ */
+ groupCollapsed(...label: any[]): void;
+ /**
+ * Decreases indentation of subsequent lines by two spaces.
+ */
+ groupEnd(): void;
+ /**
+ * The {@link console.info} function is an alias for {@link console.log}.
+ */
+ info(message?: any, ...optionalParams: any[]): void;
+ /**
+ * Prints to `stdout` with newline.
+ */
+ log(message?: any, ...optionalParams: any[]): void;
+ /**
+ * This method does not display anything unless used in the inspector.
+ * Prints to `stdout` the array `array` formatted as a table.
+ */
+ table(tabularData: any, properties?: ReadonlyArray): void;
+ /**
+ * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`.
+ */
+ time(label?: string): void;
+ /**
+ * Stops a timer that was previously started by calling {@link console.time} and prints the result to `stdout`.
+ */
+ timeEnd(label?: string): void;
+ /**
+ * For a timer that was previously started by calling {@link console.time}, prints the elapsed time and other `data` arguments to `stdout`.
+ */
+ timeLog(label?: string, ...data: any[]): void;
+ /**
+ * Prints to `stderr` the string 'Trace :', followed by the {@link util.format} formatted message and stack trace to the current position in the code.
+ */
+ trace(message?: any, ...optionalParams: any[]): void;
+ /**
+ * The {@link console.warn} function is an alias for {@link console.error}.
+ */
+ warn(message?: any, ...optionalParams: any[]): void;
+
+ // --- Inspector mode only ---
+ /**
+ * This method does not display anything unless used in the inspector.
+ * Starts a JavaScript CPU profile with an optional label.
+ */
+ profile(label?: string): void;
+ /**
+ * This method does not display anything unless used in the inspector.
+ * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector.
+ */
+ profileEnd(label?: string): void;
+ /**
+ * This method does not display anything unless used in the inspector.
+ * Adds an event with the label `label` to the Timeline panel of the inspector.
+ */
+ timeStamp(label?: string): void;
+ }
+
+ var console: Console;
+
+ namespace NodeJS {
+ interface ConsoleConstructorOptions {
+ stdout: WritableStream;
+ stderr?: WritableStream | undefined;
+ ignoreErrors?: boolean | undefined;
+ colorMode?: boolean | "auto" | undefined;
+ inspectOptions?: InspectOptions | undefined;
+ /**
+ * Set group indentation
+ * @default 2
+ */
+ groupIndentation?: number | undefined;
+ }
+
+ interface ConsoleConstructor {
+ prototype: Console;
+ new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console;
+ new(options: ConsoleConstructorOptions): Console;
+ }
+
+ interface Global {
+ console: typeof console;
+ }
+ }
+ }
+
+ export = console;
+}
diff --git a/node_backend/node_modules/@types/node/constants.d.ts b/node_backend/node_modules/@types/node/constants.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..879342390bf0fc0e02485512b7016b254158e9a9
--- /dev/null
+++ b/node_backend/node_modules/@types/node/constants.d.ts
@@ -0,0 +1,19 @@
+/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */
+declare module "constants" {
+ import { constants as osConstants, SignalConstants } from "os";
+ import { constants as cryptoConstants } from "crypto";
+ import { constants as fsConstants } from "fs";
+
+ const exp:
+ & typeof osConstants.errno
+ & typeof osConstants.priority
+ & SignalConstants
+ & typeof cryptoConstants
+ & typeof fsConstants;
+ export = exp;
+}
+
+declare module "node:constants" {
+ import constants = require("constants");
+ export = constants;
+}
diff --git a/node_backend/node_modules/@types/node/crypto.d.ts b/node_backend/node_modules/@types/node/crypto.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..96eb3dd7b05d29ba58ad4a5f08377fcc4c8fd68a
--- /dev/null
+++ b/node_backend/node_modules/@types/node/crypto.d.ts
@@ -0,0 +1,1287 @@
+declare module "crypto" {
+ import * as stream from "stream";
+
+ interface Certificate {
+ /**
+ * @param spkac
+ * @returns The challenge component of the `spkac` data structure,
+ * which includes a public key and a challenge.
+ */
+ exportChallenge(spkac: BinaryLike): Buffer;
+ /**
+ * @param spkac
+ * @param encoding The encoding of the spkac string.
+ * @returns The public key component of the `spkac` data structure,
+ * which includes a public key and a challenge.
+ */
+ exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer;
+ /**
+ * @param spkac
+ * @returns `true` if the given `spkac` data structure is valid,
+ * `false` otherwise.
+ */
+ verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
+ }
+ const Certificate: Certificate & {
+ /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */
+ new(): Certificate;
+ /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */
+ (): Certificate;
+ };
+
+ namespace constants {
+ // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants
+ const OPENSSL_VERSION_NUMBER: number;
+
+ /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
+ const SSL_OP_ALL: number;
+ /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+ const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+ /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+ const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+ /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */
+ const SSL_OP_CISCO_ANYCONNECT: number;
+ /** Instructs OpenSSL to turn on cookie exchange. */
+ const SSL_OP_COOKIE_EXCHANGE: number;
+ /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
+ const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+ /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
+ const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+ /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */
+ const SSL_OP_EPHEMERAL_RSA: number;
+ /** Allows initial connection to servers that do not support RI. */
+ const SSL_OP_LEGACY_SERVER_CONNECT: number;
+ const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+ const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+ /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */
+ const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+ const SSL_OP_NETSCAPE_CA_DN_BUG: number;
+ const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+ const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+ const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+ /** Instructs OpenSSL to disable support for SSL/TLS compression. */
+ const SSL_OP_NO_COMPRESSION: number;
+ const SSL_OP_NO_QUERY_MTU: number;
+ /** Instructs OpenSSL to always start a new session when performing renegotiation. */
+ const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+ const SSL_OP_NO_SSLv2: number;
+ const SSL_OP_NO_SSLv3: number;
+ const SSL_OP_NO_TICKET: number;
+ const SSL_OP_NO_TLSv1: number;
+ const SSL_OP_NO_TLSv1_1: number;
+ const SSL_OP_NO_TLSv1_2: number;
+ const SSL_OP_PKCS1_CHECK_1: number;
+ const SSL_OP_PKCS1_CHECK_2: number;
+ /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */
+ const SSL_OP_SINGLE_DH_USE: number;
+ /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */
+ const SSL_OP_SINGLE_ECDH_USE: number;
+ const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+ const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+ const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+ const SSL_OP_TLS_D5_BUG: number;
+ /** Instructs OpenSSL to disable version rollback attack detection. */
+ const SSL_OP_TLS_ROLLBACK_BUG: number;
+
+ const ENGINE_METHOD_RSA: number;
+ const ENGINE_METHOD_DSA: number;
+ const ENGINE_METHOD_DH: number;
+ const ENGINE_METHOD_RAND: number;
+ const ENGINE_METHOD_EC: number;
+ const ENGINE_METHOD_CIPHERS: number;
+ const ENGINE_METHOD_DIGESTS: number;
+ const ENGINE_METHOD_PKEY_METHS: number;
+ const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+ const ENGINE_METHOD_ALL: number;
+ const ENGINE_METHOD_NONE: number;
+
+ const DH_CHECK_P_NOT_SAFE_PRIME: number;
+ const DH_CHECK_P_NOT_PRIME: number;
+ const DH_UNABLE_TO_CHECK_GENERATOR: number;
+ const DH_NOT_SUITABLE_GENERATOR: number;
+
+ const ALPN_ENABLED: number;
+
+ const RSA_PKCS1_PADDING: number;
+ const RSA_SSLV23_PADDING: number;
+ const RSA_NO_PADDING: number;
+ const RSA_PKCS1_OAEP_PADDING: number;
+ const RSA_X931_PADDING: number;
+ const RSA_PKCS1_PSS_PADDING: number;
+ /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
+ const RSA_PSS_SALTLEN_DIGEST: number;
+ /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
+ const RSA_PSS_SALTLEN_MAX_SIGN: number;
+ /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
+ const RSA_PSS_SALTLEN_AUTO: number;
+
+ const POINT_CONVERSION_COMPRESSED: number;
+ const POINT_CONVERSION_UNCOMPRESSED: number;
+ const POINT_CONVERSION_HYBRID: number;
+
+ /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
+ const defaultCoreCipherList: string;
+ /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */
+ const defaultCipherList: string;
+ }
+
+ interface HashOptions extends stream.TransformOptions {
+ /**
+ * For XOF hash functions such as `shake256`, the
+ * outputLength option can be used to specify the desired output length in bytes.
+ */
+ outputLength?: number | undefined;
+ }
+
+ /** @deprecated since v10.0.0 */
+ const fips: boolean;
+
+ function createHash(algorithm: string, options?: HashOptions): Hash;
+ function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac;
+
+ // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings
+ type BinaryToTextEncoding = "base64" | "base64url" | "hex";
+ type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "latin1";
+ type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2";
+
+ type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding;
+
+ type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
+
+ class Hash extends stream.Transform {
+ private constructor();
+ copy(): Hash;
+ update(data: BinaryLike): Hash;
+ update(data: string, input_encoding: Encoding): Hash;
+ digest(): Buffer;
+ digest(encoding: BinaryToTextEncoding): string;
+ }
+ class Hmac extends stream.Transform {
+ private constructor();
+ update(data: BinaryLike): Hmac;
+ update(data: string, input_encoding: Encoding): Hmac;
+ digest(): Buffer;
+ digest(encoding: BinaryToTextEncoding): string;
+ }
+
+ type KeyObjectType = "secret" | "public" | "private";
+
+ interface KeyExportOptions {
+ type: "pkcs1" | "spki" | "pkcs8" | "sec1";
+ format: T;
+ cipher?: string | undefined;
+ passphrase?: string | Buffer | undefined;
+ }
+
+ class KeyObject {
+ private constructor();
+ asymmetricKeyType?: KeyType | undefined;
+ /**
+ * For asymmetric keys, this property represents the size of the embedded key in
+ * bytes. This property is `undefined` for symmetric keys.
+ */
+ asymmetricKeySize?: number | undefined;
+ export(options: KeyExportOptions<"pem">): string | Buffer;
+ export(options?: KeyExportOptions<"der">): Buffer;
+ symmetricKeySize?: number | undefined;
+ type: KeyObjectType;
+ }
+
+ type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm" | "chacha20-poly1305";
+ type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm";
+ type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb";
+
+ type BinaryLike = string | NodeJS.ArrayBufferView;
+
+ type CipherKey = BinaryLike | KeyObject;
+
+ interface CipherCCMOptions extends stream.TransformOptions {
+ authTagLength: number;
+ }
+ interface CipherGCMOptions extends stream.TransformOptions {
+ authTagLength?: number | undefined;
+ }
+ interface CipherOCBOptions extends stream.TransformOptions {
+ authTagLength: number;
+ }
+ /** @deprecated since v10.0.0 use `createCipheriv()` */
+ function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM;
+ /** @deprecated since v10.0.0 use `createCipheriv()` */
+ function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM;
+ /** @deprecated since v10.0.0 use `createCipheriv()` */
+ function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher;
+
+ function createCipheriv(
+ algorithm: CipherCCMTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options: CipherCCMOptions,
+ ): CipherCCM;
+ function createCipheriv(
+ algorithm: CipherOCBTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options: CipherOCBOptions,
+ ): CipherOCB;
+ function createCipheriv(
+ algorithm: CipherGCMTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options?: CipherGCMOptions,
+ ): CipherGCM;
+ function createCipheriv(
+ algorithm: string,
+ key: CipherKey,
+ iv: BinaryLike | null,
+ options?: stream.TransformOptions,
+ ): Cipher;
+
+ class Cipher extends stream.Transform {
+ private constructor();
+ update(data: BinaryLike): Buffer;
+ update(data: string, input_encoding: Encoding): Buffer;
+ update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string;
+ update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string;
+ final(): Buffer;
+ final(output_encoding: BufferEncoding): string;
+ setAutoPadding(auto_padding?: boolean): this;
+ // getAuthTag(): Buffer;
+ // setAAD(buffer: NodeJS.ArrayBufferView): this;
+ }
+ interface CipherCCM extends Cipher {
+ setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this;
+ getAuthTag(): Buffer;
+ }
+ interface CipherGCM extends Cipher {
+ setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
+ getAuthTag(): Buffer;
+ }
+ interface CipherOCB extends Cipher {
+ setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
+ getAuthTag(): Buffer;
+ }
+ /** @deprecated since v10.0.0 use `createDecipheriv()` */
+ function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM;
+ /** @deprecated since v10.0.0 use `createDecipheriv()` */
+ function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM;
+ /** @deprecated since v10.0.0 use `createDecipheriv()` */
+ function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher;
+
+ function createDecipheriv(
+ algorithm: CipherCCMTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options: CipherCCMOptions,
+ ): DecipherCCM;
+ function createDecipheriv(
+ algorithm: CipherOCBTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options: CipherOCBOptions,
+ ): DecipherOCB;
+ function createDecipheriv(
+ algorithm: CipherGCMTypes,
+ key: CipherKey,
+ iv: BinaryLike,
+ options?: CipherGCMOptions,
+ ): DecipherGCM;
+ function createDecipheriv(
+ algorithm: string,
+ key: CipherKey,
+ iv: BinaryLike | null,
+ options?: stream.TransformOptions,
+ ): Decipher;
+
+ class Decipher extends stream.Transform {
+ private constructor();
+ update(data: NodeJS.ArrayBufferView): Buffer;
+ update(data: string, input_encoding: Encoding): Buffer;
+ update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string;
+ update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string;
+ final(): Buffer;
+ final(output_encoding: BufferEncoding): string;
+ setAutoPadding(auto_padding?: boolean): this;
+ // setAuthTag(tag: NodeJS.ArrayBufferView): this;
+ // setAAD(buffer: NodeJS.ArrayBufferView): this;
+ }
+ interface DecipherCCM extends Decipher {
+ setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+ setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this;
+ }
+ interface DecipherGCM extends Decipher {
+ setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+ setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
+ }
+ interface DecipherOCB extends Decipher {
+ setAuthTag(buffer: NodeJS.ArrayBufferView): this;
+ setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this;
+ }
+
+ interface PrivateKeyInput {
+ key: string | Buffer;
+ format?: KeyFormat | undefined;
+ type?: "pkcs1" | "pkcs8" | "sec1" | undefined;
+ passphrase?: string | Buffer | undefined;
+ }
+
+ interface PublicKeyInput {
+ key: string | Buffer;
+ format?: KeyFormat | undefined;
+ type?: "pkcs1" | "spki" | undefined;
+ }
+
+ function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject;
+ function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject;
+ function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject;
+
+ function createSign(algorithm: string, options?: stream.WritableOptions): Sign;
+
+ type DSAEncoding = "der" | "ieee-p1363";
+
+ interface SigningOptions {
+ /**
+ * @see crypto.constants.RSA_PKCS1_PADDING
+ */
+ padding?: number | undefined;
+ saltLength?: number | undefined;
+ dsaEncoding?: DSAEncoding | undefined;
+ }
+
+ interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {}
+ interface SignKeyObjectInput extends SigningOptions {
+ key: KeyObject;
+ }
+ interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {}
+ interface VerifyKeyObjectInput extends SigningOptions {
+ key: KeyObject;
+ }
+
+ type KeyLike = string | Buffer | KeyObject;
+
+ class Sign extends stream.Writable {
+ private constructor();
+
+ update(data: BinaryLike): Sign;
+ update(data: string, input_encoding: Encoding): Sign;
+ sign(private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer;
+ sign(
+ private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput,
+ output_format: BinaryToTextEncoding,
+ ): string;
+ }
+
+ function createVerify(algorithm: string, options?: stream.WritableOptions): Verify;
+ class Verify extends stream.Writable {
+ private constructor();
+
+ update(data: BinaryLike): Verify;
+ update(data: string, input_encoding: Encoding): Verify;
+ verify(
+ object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput,
+ signature: NodeJS.ArrayBufferView,
+ ): boolean;
+ verify(
+ object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput,
+ signature: string,
+ signature_format?: BinaryToTextEncoding,
+ ): boolean;
+ // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format
+ // The signature field accepts a TypedArray type, but it is only available starting ES2017
+ }
+ function createDiffieHellman(prime_length: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman;
+ function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman;
+ function createDiffieHellman(prime: string, prime_encoding: BinaryToTextEncoding): DiffieHellman;
+ function createDiffieHellman(
+ prime: string,
+ prime_encoding: BinaryToTextEncoding,
+ generator: number | NodeJS.ArrayBufferView,
+ ): DiffieHellman;
+ function createDiffieHellman(
+ prime: string,
+ prime_encoding: BinaryToTextEncoding,
+ generator: string,
+ generator_encoding: BinaryToTextEncoding,
+ ): DiffieHellman;
+ class DiffieHellman {
+ private constructor();
+ generateKeys(): Buffer;
+ generateKeys(encoding: BinaryToTextEncoding): string;
+ computeSecret(otherPublicKey: NodeJS.ArrayBufferView, inputEncoding?: null, outputEncoding?: null): Buffer;
+ computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding?: null): Buffer;
+ computeSecret(
+ otherPublicKey: NodeJS.ArrayBufferView,
+ inputEncoding: null,
+ outputEncoding: BinaryToTextEncoding,
+ ): string;
+ computeSecret(
+ other_public_key: string,
+ input_encoding: BinaryToTextEncoding,
+ output_encoding: BinaryToTextEncoding,
+ ): string;
+ getPrime(): Buffer;
+ getPrime(encoding: BinaryToTextEncoding): string;
+ getGenerator(): Buffer;
+ getGenerator(encoding: BinaryToTextEncoding): string;
+ getPublicKey(): Buffer;
+ getPublicKey(encoding: BinaryToTextEncoding): string;
+ getPrivateKey(): Buffer;
+ getPrivateKey(encoding: BinaryToTextEncoding): string;
+ setPublicKey(public_key: NodeJS.ArrayBufferView): void;
+ setPublicKey(public_key: string, encoding: BufferEncoding): void;
+ setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
+ setPrivateKey(private_key: string, encoding: BufferEncoding): void;
+ verifyError: number;
+ }
+ /**
+ * The `DiffieHellmanGroup` class takes a well-known modp group as its argument.
+ * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation.
+ * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods.
+ *
+ * ```js
+ * const { createDiffieHellmanGroup } = await import('node:crypto');
+ * const dh = createDiffieHellmanGroup('modp1');
+ * ```
+ * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt):
+ * ```bash
+ * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h
+ * modp1 # 768 bits
+ * modp2 # 1024 bits
+ * modp5 # 1536 bits
+ * modp14 # 2048 bits
+ * modp15 # etc.
+ * modp16
+ * modp17
+ * modp18
+ * ```
+ * @since v0.7.5
+ */
+ const DiffieHellmanGroup: DiffieHellmanGroupConstructor;
+ interface DiffieHellmanGroupConstructor {
+ new(name: string): DiffieHellmanGroup;
+ (name: string): DiffieHellmanGroup;
+ readonly prototype: DiffieHellmanGroup;
+ }
+ type DiffieHellmanGroup = Omit;
+ function getDiffieHellman(groupName: string): DiffieHellmanGroup;
+ /**
+ * An alias for {@link getDiffieHellman}
+ * @since v0.9.3
+ */
+ function createDiffieHellmanGroup(name: string): DiffieHellmanGroup;
+ function pbkdf2(
+ password: BinaryLike,
+ salt: BinaryLike,
+ iterations: number,
+ keylen: number,
+ digest: string,
+ callback: (err: Error | null, derivedKey: Buffer) => any,
+ ): void;
+ function pbkdf2Sync(
+ password: BinaryLike,
+ salt: BinaryLike,
+ iterations: number,
+ keylen: number,
+ digest: string,
+ ): Buffer;
+
+ function randomBytes(size: number): Buffer;
+ function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+ function pseudoRandomBytes(size: number): Buffer;
+ function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+
+ function randomInt(max: number): number;
+ function randomInt(min: number, max: number): number;
+ function randomInt(max: number, callback: (err: Error | null, value: number) => void): void;
+ function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void;
+
+ function randomFillSync(buffer: T, offset?: number, size?: number): T;
+ function randomFill(
+ buffer: T,
+ callback: (err: Error | null, buf: T) => void,
+ ): void;
+ function randomFill(
+ buffer: T,
+ offset: number,
+ callback: (err: Error | null, buf: T) => void,
+ ): void;
+ function randomFill(
+ buffer: T,
+ offset: number,
+ size: number,
+ callback: (err: Error | null, buf: T) => void,
+ ): void;
+
+ interface RandomUUIDOptions {
+ /**
+ * By default, to improve performance,
+ * Node.js will pre-emptively generate and persistently cache enough
+ * random data to generate up to 128 random UUIDs. To generate a UUID
+ * without using the cache, set `disableEntropyCache` to `true`.
+ *
+ * @default `false`
+ */
+ disableEntropyCache?: boolean | undefined;
+ }
+ type UUID = `${string}-${string}-${string}-${string}-${string}`;
+ function randomUUID(options?: RandomUUIDOptions): UUID;
+
+ interface ScryptOptions {
+ cost?: number | undefined;
+ blockSize?: number | undefined;
+ parallelization?: number | undefined;
+ N?: number | undefined;
+ r?: number | undefined;
+ p?: number | undefined;
+ maxmem?: number | undefined;
+ }
+ function scrypt(
+ password: BinaryLike,
+ salt: BinaryLike,
+ keylen: number,
+ callback: (err: Error | null, derivedKey: Buffer) => void,
+ ): void;
+ function scrypt(
+ password: BinaryLike,
+ salt: BinaryLike,
+ keylen: number,
+ options: ScryptOptions,
+ callback: (err: Error | null, derivedKey: Buffer) => void,
+ ): void;
+ function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer;
+
+ interface RsaPublicKey {
+ key: KeyLike;
+ padding?: number | undefined;
+ }
+ interface RsaPrivateKey {
+ key: KeyLike;
+ passphrase?: string | undefined;
+ /**
+ * @default 'sha1'
+ */
+ oaepHash?: string | undefined;
+ oaepLabel?: NodeJS.TypedArray | undefined;
+ padding?: number | undefined;
+ }
+ function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+ function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+ function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+ function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer;
+ function getCiphers(): string[];
+ function getCurves(): string[];
+ function getFips(): 1 | 0;
+ /**
+ * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. Throws an error if FIPS mode is not available.
+ * @since v10.0.0
+ * @param bool `true` to enable FIPS mode.
+ */
+ function setFips(bool: boolean): void;
+ function getHashes(): string[];
+ class ECDH {
+ private constructor();
+ static convertKey(
+ key: BinaryLike,
+ curve: string,
+ inputEncoding?: BinaryToTextEncoding,
+ outputEncoding?: "latin1" | "hex" | "base64" | "base64url",
+ format?: "uncompressed" | "compressed" | "hybrid",
+ ): Buffer | string;
+ generateKeys(): Buffer;
+ generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string;
+ computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer;
+ computeSecret(other_public_key: string, input_encoding: BinaryToTextEncoding): Buffer;
+ computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: BinaryToTextEncoding): string;
+ computeSecret(
+ other_public_key: string,
+ input_encoding: BinaryToTextEncoding,
+ output_encoding: BinaryToTextEncoding,
+ ): string;
+ getPrivateKey(): Buffer;
+ getPrivateKey(encoding: BinaryToTextEncoding): string;
+ getPublicKey(): Buffer;
+ getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string;
+ setPrivateKey(private_key: NodeJS.ArrayBufferView): void;
+ setPrivateKey(private_key: string, encoding: BinaryToTextEncoding): void;
+ }
+ function createECDH(curve_name: string): ECDH;
+ function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean;
+ /** @deprecated since v10.0.0 */
+ const DEFAULT_ENCODING: BufferEncoding;
+
+ type KeyType = "rsa" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448";
+ type KeyFormat = "pem" | "der";
+
+ interface BasePrivateKeyEncodingOptions {
+ format: T;
+ cipher?: string | undefined;
+ passphrase?: string | undefined;
+ }
+
+ interface KeyPairKeyObjectResult {
+ publicKey: KeyObject;
+ privateKey: KeyObject;
+ }
+
+ interface ED25519KeyPairKeyObjectOptions {
+ /**
+ * No options.
+ */
+ }
+
+ interface ED448KeyPairKeyObjectOptions {
+ /**
+ * No options.
+ */
+ }
+
+ interface X25519KeyPairKeyObjectOptions {
+ /**
+ * No options.
+ */
+ }
+
+ interface X448KeyPairKeyObjectOptions {
+ /**
+ * No options.
+ */
+ }
+
+ interface ECKeyPairKeyObjectOptions {
+ /**
+ * Name of the curve to use.
+ */
+ namedCurve: string;
+ }
+
+ interface RSAKeyPairKeyObjectOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+
+ /**
+ * @default 0x10001
+ */
+ publicExponent?: number | undefined;
+ }
+
+ interface DSAKeyPairKeyObjectOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+
+ /**
+ * Size of q in bits
+ */
+ divisorLength: number;
+ }
+
+ interface RSAKeyPairOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+ /**
+ * @default 0x10001
+ */
+ publicExponent?: number | undefined;
+
+ publicKeyEncoding: {
+ type: "pkcs1" | "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs1" | "pkcs8";
+ };
+ }
+
+ interface DSAKeyPairOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+ /**
+ * Size of q in bits
+ */
+ divisorLength: number;
+
+ publicKeyEncoding: {
+ type: "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs8";
+ };
+ }
+
+ interface ECKeyPairOptions {
+ /**
+ * Name of the curve to use.
+ */
+ namedCurve: string;
+
+ publicKeyEncoding: {
+ type: "pkcs1" | "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "sec1" | "pkcs8";
+ };
+ }
+
+ interface ED25519KeyPairOptions {
+ publicKeyEncoding: {
+ type: "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs8";
+ };
+ }
+
+ interface ED448KeyPairOptions {
+ publicKeyEncoding: {
+ type: "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs8";
+ };
+ }
+
+ interface X25519KeyPairOptions {
+ publicKeyEncoding: {
+ type: "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs8";
+ };
+ }
+
+ interface X448KeyPairOptions {
+ publicKeyEncoding: {
+ type: "spki";
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: "pkcs8";
+ };
+ }
+
+ interface KeyPairSyncResult {
+ publicKey: T1;
+ privateKey: T2;
+ }
+
+ function generateKeyPairSync(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "ec",
+ options: ECKeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ec",
+ options: ECKeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ec",
+ options: ECKeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ec",
+ options: ECKeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "ed448",
+ options: ED448KeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed448",
+ options: ED448KeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed448",
+ options: ED448KeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "ed448",
+ options: ED448KeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "x25519",
+ options: X25519KeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x25519",
+ options: X25519KeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x25519",
+ options: X25519KeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x25519",
+ options: X25519KeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(
+ type: "x448",
+ options: X448KeyPairOptions<"pem", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x448",
+ options: X448KeyPairOptions<"pem", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x448",
+ options: X448KeyPairOptions<"der", "pem">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(
+ type: "x448",
+ options: X448KeyPairOptions<"der", "der">,
+ ): KeyPairSyncResult;
+ function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPair(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "rsa",
+ options: RSAKeyPairKeyObjectOptions,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "dsa",
+ options: DSAKeyPairKeyObjectOptions,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "ec",
+ options: ECKeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ec",
+ options: ECKeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ec",
+ options: ECKeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ec",
+ options: ECKeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ec",
+ options: ECKeyPairKeyObjectOptions,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed25519",
+ options: ED25519KeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed25519",
+ options: ED25519KeyPairKeyObjectOptions | undefined,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "ed448",
+ options: ED448KeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed448",
+ options: ED448KeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed448",
+ options: ED448KeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed448",
+ options: ED448KeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "ed448",
+ options: ED448KeyPairKeyObjectOptions | undefined,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "x25519",
+ options: X25519KeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x25519",
+ options: X25519KeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x25519",
+ options: X25519KeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x25519",
+ options: X25519KeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x25519",
+ options: X25519KeyPairKeyObjectOptions | undefined,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ function generateKeyPair(
+ type: "x448",
+ options: X448KeyPairOptions<"pem", "pem">,
+ callback: (err: Error | null, publicKey: string, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x448",
+ options: X448KeyPairOptions<"pem", "der">,
+ callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x448",
+ options: X448KeyPairOptions<"der", "pem">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x448",
+ options: X448KeyPairOptions<"der", "der">,
+ callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void,
+ ): void;
+ function generateKeyPair(
+ type: "x448",
+ options: X448KeyPairKeyObjectOptions | undefined,
+ callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void,
+ ): void;
+
+ namespace generateKeyPair {
+ function __promisify__(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "pem">,
+ ): Promise<{ publicKey: string; privateKey: string }>;
+ function __promisify__(
+ type: "rsa",
+ options: RSAKeyPairOptions<"pem", "der">,
+ ): Promise<{ publicKey: string; privateKey: Buffer }>;
+ function __promisify__(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "pem">,
+ ): Promise<{ publicKey: Buffer; privateKey: string }>;
+ function __promisify__(
+ type: "rsa",
+ options: RSAKeyPairOptions<"der", "der">,
+ ): Promise<{ publicKey: Buffer; privateKey: Buffer }>;
+ function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise;
+
+ function __promisify__(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "pem">,
+ ): Promise<{ publicKey: string; privateKey: string }>;
+ function __promisify__(
+ type: "dsa",
+ options: DSAKeyPairOptions<"pem", "der">,
+ ): Promise<{ publicKey: string; privateKey: Buffer }>;
+ function __promisify__(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "pem">,
+ ): Promise<{ publicKey: Buffer; privateKey: string }>;
+ function __promisify__(
+ type: "dsa",
+ options: DSAKeyPairOptions<"der", "der">,
+ ): Promise<{ publicKey: Buffer; privateKey: Buffer }>;
+ function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise