Adds GSheet read&write API

This commit is contained in:
forceoranj 2021-10-23 03:34:19 +02:00
parent 3398f4f42d
commit 2616b109d7
17 changed files with 881 additions and 17754 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"eslint.lintTask.enable": true
}

396
gsheetsTest.ts Normal file
View File

@ -0,0 +1,396 @@
import * as _ from "lodash"
import path from "path"
import { promises as fs } from "fs"
import { GoogleSpreadsheet, GoogleSpreadsheetWorksheet } from "google-spreadsheet"
const SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
const CRED_PATH = path.resolve(process.cwd(), "./access/gsheets.json")
// eslint-disable-next-line @typescript-eslint/ban-types
export async function getList<Element extends object>(
sheetName: string,
specimen: Element
): Promise<Element[]> {
type StringifiedElement = Record<keyof Element, string>
const sheet = await getGSheet(sheetName)
// Load sheet into an array of objects
const rows = (await sheet.getRows()) as StringifiedElement[]
const elements: Element[] = []
if (!rows[0]) {
// TODO: Report format error to database maintainers
return []
}
const types = _.pick(rows[0], Object.keys(specimen)) as Record<keyof Element, string>
rows.shift()
rows.forEach((row) => {
const stringifiedElement = _.pick(row, Object.keys(specimen)) as Record<
keyof Element,
string
>
const element = parseElement<Element>(stringifiedElement, types, specimen)
if (element !== undefined) {
elements.push(element)
}
})
return elements
}
// eslint-disable-next-line @typescript-eslint/ban-types
export async function setList<Element extends object>(
sheetName: string,
elements: Element[]
): Promise<true | undefined> {
const sheet = await getGSheet(sheetName)
// Load sheet into an array of objects
const rows = await sheet.getRows()
if (!rows[0]) {
return undefined
}
const types = _.pick(rows[0], Object.keys(elements[0] || {})) as Record<keyof Element, string>
// Update received rows
let rowid = 1
// eslint-disable-next-line no-restricted-syntax
for (const element of elements) {
const row = rows[rowid]
const stringifiedRow = stringifyElement(element, types)
if (stringifiedRow === undefined) {
return undefined
}
if (!row) {
// eslint-disable-next-line no-await-in-loop
await sheet.addRow(stringifiedRow)
} else {
const keys = Object.keys(stringifiedRow)
const sameCells = _.every(
keys,
(key: keyof Element) => row[key as string] === stringifiedRow[key]
)
if (!sameCells) {
keys.forEach((key) => {
row[key] = stringifiedRow[key as keyof Element]
})
// eslint-disable-next-line no-await-in-loop
await row.save()
}
}
rowid += 1
}
// Delete all following rows
for (let rowToDelete = sheet.rowCount - 1; rowToDelete >= rowid; rowToDelete -= 1) {
if (rows[rowToDelete]) {
// eslint-disable-next-line no-await-in-loop
await rows[rowToDelete].delete()
}
}
return true
}
async function getGSheet(sheetName: string): Promise<GoogleSpreadsheetWorksheet> {
const doc = new GoogleSpreadsheet("1pMMKcYx6NXLOqNn6pLHJTPMTOLRYZmSNg2QQcAu7-Pw")
const creds = await fs.readFile(CRED_PATH)
// Authentication
await doc.useServiceAccountAuth(JSON.parse(creds.toString()))
await doc.loadInfo()
return doc.sheetsByTitle[sheetName]
}
// eslint-disable-next-line @typescript-eslint/ban-types
function parseElement<Element extends object>(
rawElement: Record<keyof Element, string>,
types: Record<keyof Element, string>,
specimen: Element
): Element | undefined {
const fullElement = _.reduce(
types,
(element: any, type: string, prop: string) => {
if (element === undefined) {
return undefined
}
const rawProp: string = rawElement[prop as keyof Element]
switch (type) {
case "string":
element[prop] = rawProp
break
case "number":
element[prop] = +rawProp
break
case "boolean":
element[prop] = rawProp !== "0" && rawProp !== ""
break
case "date":
// eslint-disable-next-line no-case-declarations
const matchDate = rawProp.match(/^([0-9]+)\/([0-9]+)\/([0-9]+)$/)
if (matchDate) {
element[prop] = new Date(+matchDate[3], +matchDate[2] - 1, +matchDate[1])
break
}
return undefined // TODO: Report format error to database maintainers
break
default:
// eslint-disable-next-line no-case-declarations
const matchArrayType = type.match(/^(number|string|boolean|date)\[([^\]]+)\]$/)
if (!matchArrayType) {
return undefined
}
if (!rawProp) {
element[prop] = []
} else {
const arrayType = matchArrayType[1]
const delimiter = matchArrayType[2]
switch (arrayType) {
case "string":
element[prop] = rawProp.split(delimiter)
break
case "number":
element[prop] = _.map(rawProp.split(delimiter), (val) => +val)
break
case "boolean":
element[prop] = _.map(
rawProp.split(delimiter),
(val) => val !== "0" && val !== ""
)
break
case "date":
// eslint-disable-next-line no-case-declarations
const rawDates = rawProp.split(delimiter)
element[prop] = []
// eslint-disable-next-line no-case-declarations
const rightFormat = rawDates.every((rawDate) => {
const matchDateArray = rawDate.match(
/^([0-9]+)\/([0-9]+)\/([0-9]+)$/
)
if (!matchDateArray) {
return false
}
element[prop].push(
new Date(
+matchDateArray[3],
+matchDateArray[2] - 1,
+matchDateArray[1]
)
)
return true
})
if (!rightFormat) {
return undefined
}
break
default:
}
}
}
return element
},
JSON.parse(JSON.stringify(specimen))
)
return fullElement
}
// eslint-disable-next-line @typescript-eslint/ban-types
function stringifyElement<Element extends object>(
element: Element,
types: Record<keyof Element, string>
): Record<keyof Element, string> | undefined {
const rawElement: Record<keyof Element, string> | undefined = _.reduce(
types,
(
stringifiedElement: Record<keyof Element, string> | undefined,
type: string,
prop: string
) => {
if (stringifiedElement === undefined) {
return undefined
}
const value = element[prop as keyof Element]
switch (type) {
case "string":
stringifiedElement[prop as keyof Element] = formulaSafe(`${value}`)
break
case "number":
stringifiedElement[prop as keyof Element] = `${value}`
break
case "boolean":
stringifiedElement[prop as keyof Element] = value ? "X" : ""
break
case "date":
if (value instanceof Date) {
stringifiedElement[prop as keyof Element] = `${value.getDate()}/${
value.getMonth() + 1
}/${value.getFullYear()}`
break
} else {
console.error("Wrong date format in stringifyElement")
return undefined // TODO: Report format error to database maintainers
}
default:
// eslint-disable-next-line no-case-declarations
const matchArrayType = type.match(/^(number|string|boolean|date)\[([^\]]+)\]$/)
if (!matchArrayType || !_.isArray(value)) {
console.error("Unknown matchArrayType or not an array in stringifyElement")
return undefined
}
// eslint-disable-next-line no-case-declarations
const arrayType = matchArrayType[1]
// eslint-disable-next-line no-case-declarations
const delimiter = matchArrayType[2]
switch (arrayType) {
case "string":
if (!_.every(value, _.isString)) {
return undefined
}
stringifiedElement[prop as keyof Element] = formulaSafe(
value.join(delimiter)
)
break
case "number":
if (!_.every(value, _.isNumber)) {
return undefined
}
stringifiedElement[prop as keyof Element] = value.join(delimiter)
break
case "boolean":
if (!_.every(value, _.isBoolean)) {
return undefined
}
stringifiedElement[prop as keyof Element] = _.map(value, (val) =>
val ? "X" : ""
).join(delimiter)
break
case "date":
if (!_.every(value, _.isDate)) {
return undefined
}
stringifiedElement[prop as keyof Element] = _.map(
value,
(val) =>
`${val.getDate()}/${val.getMonth() + 1}/${val.getFullYear()}`
).join(delimiter)
break
default:
return undefined
}
}
return stringifiedElement
},
JSON.parse(JSON.stringify(element))
)
return rawElement
}
function formulaSafe(value: string): string {
return value.replace(/^=+/, "")
}
export { SCOPES }
class Test {
envieId = 5
envies = ""
dateAjout: Date = new Date(0)
ignore = false
membres: number[] = []
equipes: string[] = []
datesPossibles: Date[] = []
tictactoe: boolean[] = []
}
// Can't run it on every test, it requires private access to a google sheet
async function testGSheetAPi(): Promise<void> {
const dataset: Test[] = [
{
envieId: 1,
envies: "Présenter le festival et son organisation à un nouveau bénévol au téléphone",
dateAjout: new Date("2021-10-18T22:00:00.000Z"),
ignore: true,
membres: [2, 5, 6, 4, 2, 7],
equipes: ["Accueillir les bénévoles"],
datesPossibles: [
new Date("2021-11-18T23:00:00.000Z"),
new Date("2021-11-19T23:00:00.000Z"),
new Date("2021-11-20T23:00:00.000Z"),
],
tictactoe: [true, false, true, false, false, true],
},
{
envieId: 5,
envies: "Créer de jolies pages webs",
dateAjout: new Date("2021-10-18T22:00:00.000Z"),
ignore: false,
membres: [7],
equipes: ["Site Web Public", "Force Orange"],
datesPossibles: [],
tictactoe: [],
},
{
envieId: 6,
envies: "Modérer un salon Discord",
dateAjout: new Date("2021-10-18T22:00:00.000Z"),
ignore: true,
membres: [],
equipes: [],
datesPossibles: [new Date("2024-10-18T22:00:00.000Z")],
tictactoe: [false, false, false, false, true, true, true, true],
},
]
console.log("Test d'écriture...")
const resultatEcriture = await setList<Test>("Tests de l'API", dataset)
if (!resultatEcriture) {
console.log("ECHEC de l'écriture")
return
}
console.log("Écriture réussie")
console.log("Test de lecture...")
const datasetLu = await getList<Test>("Tests de l'API", new Test())
if (!_.isEqual(datasetLu, dataset)) {
console.log("ECHEC de la lecture", datasetLu, dataset)
return
}
console.log("Lecture réussie")
console.log("Effacement des données...")
const resultatEffacement = await setList<Test>("Tests de l'API", [])
if (!resultatEffacement) {
console.log("ECHEC de l'effacement")
return
}
console.log("Effacement réussi")
}
testGSheetAPi().then(() => console.log("Done"))

15743
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -81,6 +81,8 @@
"cross-env": "^7.0.3",
"express": "^4.17.1",
"fs": "^0.0.1-security",
"google-auth-library": "^7.10.1",
"google-spreadsheet": "^3.1.15",
"googleapis": "^88.2.0",
"helmet": "^4.6.0",
"history": "^4.10.1",
@ -96,7 +98,7 @@
"react-redux": "^7.2.4",
"react-router": "^5.2.0",
"react-router-config": "^5.1.1",
"react-router-dom": "^5.2.0",
"react-router-dom": "^5.3.0",
"readline": "^1.3.0",
"redux-thunk": "^2.3.0",
"serialize-javascript": "^6.0.0",
@ -117,6 +119,7 @@
"@types/compression-webpack-plugin": "^6.0.6",
"@types/css-minimizer-webpack-plugin": "^3.0.2",
"@types/express": "^4.17.13",
"@types/google-spreadsheet": "^3.1.5",
"@types/hpp": "^0.2.1",
"@types/html-minifier": "^4.0.1",
"@types/jest": "^26.0.24",

View File

@ -1,639 +0,0 @@
{
"header": {
"reportVersion": 1,
"event": "Allocation failed - JavaScript heap out of memory",
"trigger": "FatalError",
"filename": "report.20211018.023009.54396.0.001.json",
"dumpEventTime": "2021-10-18T02:30:09Z",
"dumpEventTimeStamp": "1634517009439",
"processId": 54396,
"cwd": "/home/pikiou/forceoranj",
"commandLine": [
"/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"--max-old-space-size=2048",
"/home/pikiou/forceoranj/node_modules/fork-ts-checker-webpack-plugin/lib/eslint-reporter/reporter/EsLintReporterRpcService.js"
],
"nodejsVersion": "v12.13.1",
"glibcVersionRuntime": "2.31",
"glibcVersionCompiler": "2.17",
"wordSize": 64,
"arch": "x64",
"platform": "linux",
"componentVersions": {
"node": "12.13.1",
"v8": "7.7.299.13-node.16",
"uv": "1.33.1",
"zlib": "1.2.11",
"brotli": "1.0.7",
"ares": "1.15.0",
"modules": "72",
"nghttp2": "1.39.2",
"napi": "5",
"llhttp": "1.1.4",
"http_parser": "2.8.0",
"openssl": "1.1.1d",
"cldr": "35.1",
"icu": "64.2",
"tz": "2019c",
"unicode": "12.1"
},
"release": {
"name": "node",
"lts": "Erbium",
"headersUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1-headers.tar.gz",
"sourceUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1.tar.gz"
},
"osName": "Linux",
"osRelease": "5.9.0-050900-generic",
"osVersion": "#202010112230 SMP Sun Oct 11 22:34:01 UTC 2020",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2846,
"user": 19236400,
"nice": 55000,
"sys": 5301200,
"idle": 198669200,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2829,
"user": 19882600,
"nice": 47000,
"sys": 5584600,
"idle": 193235400,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2830,
"user": 20391400,
"nice": 54900,
"sys": 5394100,
"idle": 193552900,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2831,
"user": 20095400,
"nice": 101300,
"sys": 5566400,
"idle": 193778600,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2828,
"user": 19698700,
"nice": 80600,
"sys": 5113400,
"idle": 191051400,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2814,
"user": 19396200,
"nice": 83200,
"sys": 6066300,
"idle": 192610500,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2821,
"user": 19198800,
"nice": 37400,
"sys": 5663000,
"idle": 191755500,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2843,
"user": 19586600,
"nice": 44900,
"sys": 6162900,
"idle": 192789200,
"irq": 0
}
],
"networkInterfaces": [
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4"
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "192.168.1.69",
"netmask": "255.255.255.0",
"family": "IPv4"
},
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"scopeid": 0
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "fe80::d2dc:d4d3:6052:4640",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"scopeid": 3
}
],
"host": "pikiou"
},
"javascriptStack": {
"message": "No stack.",
"stack": ["Unavailable."]
},
"nativeStack": [
{
"pc": "0x0000000000b04935",
"symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::string const&, v8::Local<v8::String>) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x00000000009db9e3",
"symbol": "node::OnFatalError(char const*, char const*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b39f1e",
"symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b3a299",
"symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5635",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5cc6",
"symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf1b5a",
"symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf2a65",
"symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf5478",
"symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cbbda7",
"symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ff1f69",
"symbol": "v8::internal::Runtime_AllocateInOldGeneration(int, unsigned long*, v8::internal::Isolate*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000001374fd9",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
}
],
"javascriptHeap": {
"totalMemory": 2153398272,
"totalCommittedMemory": 2150960248,
"usedMemory": 2145931976,
"availableMemory": 47245672,
"memoryLimit": 2197815296,
"heapSpaces": {
"read_only_space": {
"memorySize": 262144,
"committedMemory": 32568,
"capacity": 261872,
"used": 32296,
"available": 229576
},
"new_space": {
"memorySize": 2097152,
"committedMemory": 391840,
"capacity": 1047488,
"used": 113600,
"available": 933888
},
"old_space": {
"memorySize": 1936830464,
"committedMemory": 1936503408,
"capacity": 1933819760,
"used": 1933202064,
"available": 617696
},
"code_space": {
"memorySize": 1212416,
"committedMemory": 1078432,
"capacity": 890272,
"used": 890272,
"available": 0
},
"map_space": {
"memorySize": 2887680,
"committedMemory": 2845584,
"capacity": 1706160,
"used": 1706160,
"available": 0
},
"large_object_space": {
"memorySize": 209485824,
"committedMemory": 209485824,
"capacity": 209436928,
"used": 209436928,
"available": 0
},
"code_large_object_space": {
"memorySize": 622592,
"committedMemory": 622592,
"capacity": 550656,
"used": 550656,
"available": 0
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 1047488,
"used": 0,
"available": 1047488
}
}
},
"resourceUsage": {
"userCpuSeconds": 150.149,
"kernelCpuSeconds": 5.78535,
"cpuConsumptionPercent": 3.00162,
"maxRss": 2267271168,
"pageFaults": {
"IORequired": 18398,
"IONotRequired": 716678
},
"fsActivity": {
"reads": 1872512,
"writes": 16
}
},
"uvthreadResourceUsage": {
"userCpuSeconds": 50.5906,
"kernelCpuSeconds": 3.82026,
"cpuConsumptionPercent": 1.04737,
"fsActivity": {
"reads": 1382592,
"writes": 16
}
},
"libuv": [],
"environmentVariables": {
"GJS_DEBUG_TOPICS": "JS ERROR;JS LOG",
"LESSOPEN": "| /usr/bin/lesspipe %s",
"npm_package_devDependencies_webpack_hot_middleware": "^2.25.0",
"npm_package_devDependencies_ts_node": "^10.0.0",
"npm_package_devDependencies_identity_obj_proxy": "^3.0.0",
"npm_package_devDependencies__types_compression": "^1.7.1",
"npm_package_dependencies_serve_favicon": "^2.5.0",
"npm_package_dependencies__reduxjs_toolkit": "^1.6.0",
"npm_package_dependencies__babel_runtime": "^7.14.6",
"npm_package_scripts_analyze_server": "cross-env NODE_ENV=analyze webpack --config ./webpack/server.config.ts",
"npm_package_devDependencies_stylelint_config_prettier": "^8.0.2",
"npm_package_devDependencies_react_refresh": "^0.10.0",
"npm_package_devDependencies__types_react_router_dom": "^5.1.7",
"npm_package_dependencies_fs": "^0.0.1-security",
"USER": "pikiou",
"LC_TIME": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack_cli": "^4.7.2",
"npm_package_devDependencies_webpack_bundle_analyzer": "^4.4.2",
"npm_package_devDependencies_redux_mock_store": "^1.5.4",
"npm_package_devDependencies_jest": "^27.0.6",
"npm_package_devDependencies_image_minimizer_webpack_plugin": "^2.2.0",
"npm_package_devDependencies__testing_library_jest_dom": "^5.14.1",
"npm_package_dependencies_autoprefixer": "^10.2.6",
"npm_config_version_commit_hooks": "true",
"npm_config_user_agent": "yarn/1.22.15 npm/? node/v12.13.1 linux x64",
"COMP_WORDBREAKS": " \t\n\"'><;|&(:",
"npm_package_devDependencies__types_loadable__server": "^5.12.6",
"npm_package_bugs_url": "https://github.com/forceoranj/intranet/issues",
"npm_config_bin_links": "true",
"XDG_SESSION_TYPE": "wayland",
"npm_node_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"npm_package_devDependencies_nodemon": "^2.0.9",
"npm_package_devDependencies_compression_webpack_plugin": "^8.0.1",
"npm_package_devDependencies__types_serialize_javascript": "^5.0.1",
"npm_package_devDependencies__types_loadable__webpack_plugin": "^5.7.3",
"npm_config_init_version": "1.0.0",
"SHLVL": "1",
"npm_package_devDependencies_source_map_support": "^0.5.19",
"npm_package_devDependencies_eslint_import_resolver_typescript": "^2.4.0",
"npm_package_devDependencies__types_express": "^4.17.13",
"HOME": "/home/pikiou",
"CONDA_SHLVL": "0",
"OLDPWD": "/home/pikiou",
"npm_package_devDependencies_eslint_plugin_jest_dom": "^3.9.0",
"npm_package_devDependencies__typescript_eslint_parser": "^4.28.2",
"npm_package_scripts_build_server": "cross-env NODE_ENV=production webpack --config ./webpack/server.config.ts",
"DESKTOP_SESSION": "gnome",
"NVM_NODEJS_ORG_MIRROR": "https://nodejs.org/dist",
"NVM_BIN": "/home/pikiou/.nvm/versions/node/v12.13.1/bin",
"npm_package_devDependencies_eslint_config_prettier": "^8.3.0",
"npm_package_devDependencies__types_loadable__component": "^5.13.4",
"npm_package_devDependencies_webpack_manifest_plugin": "^3.1.1",
"npm_package_engines_node": ">=12",
"npm_config_init_license": "MIT",
"GTK_MODULES": "gail:atk-bridge",
"YARN_WRAP_OUTPUT": "false",
"npm_package_devDependencies_terser_webpack_plugin": "^5.1.4",
"npm_package_devDependencies_imagemin_svgo": "^9.0.0",
"npm_config_version_tag_prefix": "v",
"LC_MONETARY": "fr_FR.UTF-8",
"MANAGERPID": "3096",
"npm_package_devDependencies_stylelint_config_standard": "^22.0.0",
"npm_package_devDependencies_imagemin_gifsicle": "^7.0.0",
"npm_package_dependencies_redux_thunk": "^2.3.0",
"npm_package_dependencies_react_router_config": "^5.1.1",
"npm_package_scripts_lint_style": "stylelint --fix \"**/*.{css,ts,tsx}\"",
"DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
"npm_package_devDependencies_husky": "^7.0.1",
"npm_package_devDependencies_eslint_plugin_react_hooks": "^4",
"npm_package_devDependencies_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_devDependencies__types_mini_css_extract_plugin": "^2.0.1",
"npm_package_dependencies_compression": "^1.7.4",
"npm_package_keywords_0": "starter",
"COLORTERM": "truecolor",
"_CE_M": "",
"npm_package_devDependencies_typescript": "^4.3.5",
"npm_package_devDependencies_babel_loader": "^8.2.2",
"npm_package_dependencies_react_router_dom": "^5.2.0",
"npm_package_keywords_1": "boilerplate",
"npm_package_description": "A starter boilerplate for a universal web application with the best development experience and best practices.",
"NVM_PATH": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node",
"NVM_DIR": "/home/pikiou/.nvm",
"npm_package_readmeFilename": "README.md",
"npm_package_devDependencies__types_react_dom": "^17.0.8",
"npm_package_devDependencies__pmmmwh_react_refresh_webpack_plugin": "^0.4.3",
"npm_package_devDependencies__babel_preset_env": "^7.14.7",
"npm_package_scripts_dev_build": "cross-env NODE_ENV=development webpack --config ./webpack/server.config.ts",
"npm_package_keywords_2": "universal",
"npm_package_homepage": "https://github.com/forceoranj/intranet",
"QT_QPA_PLATFORMTHEME": "appmenu-qt5",
"IM_CONFIG_PHASE": "1",
"WAYLAND_DISPLAY": "wayland-0",
"npm_package_devDependencies_prettier": "^2.3.2",
"npm_package_devDependencies__babel_plugin_transform_runtime": "^7.14.5",
"npm_package_dependencies__loadable_server": "^5.15.0",
"npm_package_scripts_dev": "yarn dev:build && nodemon ./public/server",
"npm_package_keywords_3": "react",
"LOGNAME": "pikiou",
"npm_package_devDependencies_eslint_plugin_import": "^2.22.1",
"npm_package_devDependencies__babel_preset_typescript": "^7.14.5",
"npm_package_dependencies_serialize_javascript": "^6.0.0",
"npm_package_dependencies_normalize_css": "^8.0.1",
"npm_package_dependencies_connected_react_router": "^6.9.1",
"npm_package_scripts_analyze_client": "cross-env NODE_ENV=analyze webpack --config ./webpack/client.config.ts",
"npm_package_keywords_4": "react-hooks",
"JOURNAL_STREAM": "8:38694",
"_": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/yarn",
"npm_package_devDependencies_ts_jest": "^27.0.3",
"npm_package_devDependencies_node_sass": "^6.0.1",
"npm_package_devDependencies__types_webpack_bundle_analyzer": "^4.4.1",
"npm_package_devDependencies__types_redux_mock_store": "^1.0.2",
"npm_package_devDependencies__types_jest": "^26.0.24",
"npm_package_devDependencies__babel_preset_react": "^7.14.5",
"npm_package_dependencies_express": "^4.17.1",
"npm_package_scripts_lint_type": "tsc",
"npm_package_scripts_lint_code": "eslint --fix . --ext .js,.jsx,.ts,.tsx",
"npm_package_keywords_5": "redux",
"npm_package_private": "true",
"XDG_SESSION_CLASS": "user",
"npm_package_devDependencies__typescript_eslint_eslint_plugin": "^4.28.2",
"npm_package_scripts_prepare": "husky install",
"npm_package_scripts_lint": "run-s lint:*",
"npm_package_keywords_6": "redux-toolkit",
"npm_config_registry": "https://registry.yarnpkg.com",
"USERNAME": "pikiou",
"TERM": "xterm-256color",
"npm_package_devDependencies_stylelint": "^13.13.1",
"npm_package_devDependencies__types_lodash": "^4.14.175",
"npm_package_devDependencies__types_compression_webpack_plugin": "^6.0.6",
"npm_package_devDependencies__babel_core": "^7.14.6",
"npm_package_dependencies_core_js": "^3.15.2",
"npm_package_dependencies__loadable_component": "^5.15.0",
"npm_package_keywords_7": "react-router",
"GNOME_DESKTOP_SESSION_ID": "this-is-deprecated",
"_CE_CONDA": "",
"npm_package_devDependencies_webpack_node_externals": "^3.0.0",
"npm_package_devDependencies_imagemin_optipng": "^8.0.0",
"npm_package_scripts_start": "node ./public/server",
"npm_package_keywords_8": "express",
"npm_config_ignore_scripts": "",
"npm_package_devDependencies_postcss_loader": "^6.1.1",
"npm_package_devDependencies_eslint_plugin_jest": "^24.3.6",
"npm_package_devDependencies__types_react_helmet": "^6.1.1",
"npm_package_dependencies_axios": "^0.21.1",
"npm_package_scripts_test_cov": "yarn test --coverage",
"npm_package_scripts_lint_format": "prettier -w . -u --loglevel silent",
"npm_package_author_email": "forceoranj@gmail.com",
"npm_package_keywords_9": "webpack",
"PATH": "/tmp/yarn--1634511783311-0.4226621447627794:/home/pikiou/forceoranj/node_modules/.bin:/home/pikiou/.config/yarn/link/node_modules/.bin:/home/pikiou/.nvm/versions/node/v12.13.1/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/bin/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.local/bin:/home/pikiou/miniconda3/condabin:/home/pikiou/.nvm/versions/node/v12.13.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle:/snap/bin:/home/pikiou/Android/Sdk/platform-tools:/home/pikiou/depot_tools:/home/pikiou/depot_tools",
"NODE": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"SESSION_MANAGER": "local/pikiou:@/tmp/.ICE-unix/3357,unix/pikiou:/tmp/.ICE-unix/3357",
"NVM_IOJS_ORG_MIRROR": "https://iojs.org/dist",
"INVOCATION_ID": "5f505b5c98a14ec0aabbd0ae819a3ffe",
"npm_package_dependencies_cross_env": "^7.0.3",
"npm_package_scripts_build_client": "cross-env NODE_ENV=production webpack --config ./webpack/client.config.ts",
"npm_package_keywords_10": "es6+",
"npm_package_repository_type": "git",
"npm_package_name": "intranet",
"XDG_MENU_PREFIX": "gnome-",
"LC_ADDRESS": "fr_FR.UTF-8",
"GNOME_TERMINAL_SCREEN": "/org/gnome/Terminal/screen/6e66cefe_f79c_480a_93e4_352931c60526",
"GNOME_SETUP_DISPLAY": ":1",
"XDG_RUNTIME_DIR": "/run/user/1000",
"npm_package_devDependencies_stylelint_config_sass_guidelines": "^8.0.0",
"npm_package_devDependencies_eslint_plugin_jsx_a11y": "^6.4.1",
"npm_package_devDependencies__types_webpack_manifest_plugin": "^3.0.5",
"npm_package_dependencies_react_redux": "^7.2.4",
"npm_package_lint_staged____js_jsx_ts_tsx_": "eslint --fix",
"npm_package_keywords_20": "best-practices",
"npm_package_keywords_11": "typescript",
"DISPLAY": ":0",
"npm_package_devDependencies_webpack_merge": "^5.8.0",
"npm_package_devDependencies_eslint_config_airbnb": "^18.2.1",
"npm_package_devDependencies__types_terser_webpack_plugin": "^5.0.4",
"npm_package_devDependencies__types_hpp": "^0.2.1",
"npm_package_scripts_test_update": "yarn test -u",
"npm_package_keywords_21": "eslint",
"npm_package_keywords_12": "code-splitting",
"LANG": "en_US.UTF-8",
"XDG_CURRENT_DESKTOP": "GNOME",
"LC_TELEPHONE": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack": "^5.43.0",
"npm_package_devDependencies_react_test_renderer": "^17.0.2",
"npm_package_devDependencies_eslint": "^7.14.0",
"npm_package_dependencies_react_dom": "^17.0.2",
"npm_package_dependencies_history": "^4.10.1",
"npm_package_keywords_22": "stylelint",
"npm_package_keywords_13": "react-refresh",
"XMODIFIERS": "@im=ibus",
"XDG_SESSION_DESKTOP": "gnome",
"XAUTHORITY": "/run/user/1000/.mutter-Xwaylandauth.73MHB1",
"LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:",
"GNOME_TERMINAL_SERVICE": ":1.403",
"npm_lifecycle_script": "yarn dev:build && nodemon ./public/server",
"npm_package_devDependencies__types_html_minifier": "^4.0.1",
"npm_package_devDependencies__types_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_browserslist_0": "> 1%",
"npm_package_keywords_23": "prettier",
"npm_package_keywords_14": "babel",
"SSH_AGENT_LAUNCHER": "gnome-keyring",
"SSH_AUTH_SOCK": "/run/user/1000/keyring/ssh",
"CONDA_PYTHON_EXE": "/home/pikiou/miniconda3/bin/python",
"npm_package_dependencies_react_router": "^5.2.0",
"npm_package_dependencies_chalk": "^4.1.1",
"npm_package_browserslist_1": "last 2 versions",
"npm_package_scripts_test": "cross-env NODE_ENV=test jest --config ./jest/config.js",
"npm_package_keywords_15": "postcss",
"npm_config_version_git_message": "v%s",
"SHELL": "/bin/bash",
"LC_NAME": "fr_FR.UTF-8",
"npm_lifecycle_event": "dev",
"npm_package_devDependencies_webpack_dev_middleware": "^5.0.0",
"npm_package_devDependencies__types_morgan": "^1.9.3",
"npm_package_devDependencies__testing_library_react": "^12.0.0",
"npm_package_keywords_16": "jest",
"npm_package_repository_url": "https://github.com/forceoranj/intranet",
"npm_package_version": "2.0.0",
"QT_ACCESSIBILITY": "1",
"GDMSESSION": "gnome",
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev\"],\"original\":[\"dev\"]}",
"npm_package_devDependencies_lint_staged": "^11.0.0",
"npm_package_devDependencies__types_serve_favicon": "^2.5.3",
"npm_package_scripts_build": "run-s build:*",
"npm_package_keywords_17": "unit-testing",
"LESSCLOSE": "/usr/bin/lesspipe %s %s",
"npm_package_devDependencies_stylelint_order": "^4.1.0",
"npm_package_devDependencies__loadable_webpack_plugin": "^5.15.0",
"npm_package_dependencies_lodash": "^4.17.21",
"npm_package_keywords_18": "react-testing-library",
"LC_MEASUREMENT": "fr_FR.UTF-8",
"npm_package_devDependencies_sass_loader": "^12.1.0",
"npm_package_devDependencies_eslint_plugin_testing_library": "^4.9.0",
"npm_package_keywords_19": "performance-optimization",
"npm_config_version_git_tag": "true",
"npm_config_version_git_sign": "",
"GJS_DEBUG_OUTPUT": "stderr",
"LC_IDENTIFICATION": "fr_FR.UTF-8",
"npm_package_devDependencies_imagemin_jpegtran": "^7.0.0",
"npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^6.2.12",
"npm_package_devDependencies_eslint_plugin_react": "^7.23.2",
"npm_package_dependencies_react_helmet": "^6.1.0",
"npm_package_dependencies_googleapis": "^88.2.0",
"npm_package_license": "MIT",
"npm_config_strict_ssl": "true",
"QT_IM_MODULE": "ibus",
"npm_package_devDependencies__loadable_babel_plugin": "^5.13.2",
"npm_package_scripts_test_watch": "yarn test --watch",
"PWD": "/home/pikiou/forceoranj",
"npm_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/yarn/bin/yarn.js",
"npm_package_devDependencies__types_webpack_node_externals": "^2.5.2",
"npm_package_dependencies_helmet": "^4.6.0",
"XDG_CONFIG_DIRS": "/etc/xdg/xdg-gnome:/etc/xdg",
"CONDA_EXE": "/home/pikiou/miniconda3/bin/conda",
"ANDROID_HOME": "/home/pikiou/Android/Sdk",
"NVM_CD_FLAGS": "",
"XDG_DATA_DIRS": "/home/pikiou/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop",
"npm_package_devDependencies_css_loader": "^5.2.6",
"npm_package_dependencies_hpp": "^0.2.3",
"npm_package_engines_npm": ">=6",
"npm_package_author_url": "https://github.com/forceoranj",
"npm_package_author_name": "Paris est Ludique",
"LC_NUMERIC": "fr_FR.UTF-8",
"npm_package_devDependencies_postcss": "^8.3.5",
"npm_package_dependencies_readline": "^1.3.0",
"npm_package_dependencies_https": "^1.0.0",
"npm_config_save_prefix": "^",
"npm_config_ignore_optional": "",
"LC_PAPER": "fr_FR.UTF-8",
"npm_package_devDependencies_mini_css_extract_plugin": "^2.1.0",
"npm_package_dependencies_html_minifier": "^4.0.0",
"npm_package_lint_staged_____": "prettier -w -u",
"npm_package_lint_staged____css_sass_ts_tsx_": "stylelint --fix",
"MANPATH": "/home/pikiou/.nvm/versions/node/v12.13.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/lib/jvm/java-8-oracle/man:/home/pikiou/depot_tools/man",
"VTE_VERSION": "6003",
"npm_package_devDependencies_npm_run_all": "^4.1.5",
"INIT_CWD": "/home/pikiou/forceoranj",
"npm_package_devDependencies__types_react_test_renderer": "^17.0.1",
"npm_package_devDependencies__types_react_router_config": "^5.0.2",
"npm_package_dependencies_react": "^17.0.2",
"npm_package_dependencies_morgan": "^1.10.0"
},
"userLimits": {
"core_file_size_blocks": {
"soft": 0,
"hard": "unlimited"
},
"data_seg_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"file_size_blocks": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_locked_memory_bytes": {
"soft": 67108864,
"hard": 67108864
},
"max_memory_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"open_files": {
"soft": 1048576,
"hard": 1048576
},
"stack_size_bytes": {
"soft": 8388608,
"hard": "unlimited"
},
"cpu_time_seconds": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_user_processes": {
"soft": 29308,
"hard": 29308
},
"virtual_memory_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
}
},
"sharedObjects": [
"linux-vdso.so.1",
"/lib/x86_64-linux-gnu/libdl.so.2",
"/usr/lib/x86_64-linux-gnu/libstdc++.so.6",
"/lib/x86_64-linux-gnu/libm.so.6",
"/lib/x86_64-linux-gnu/libgcc_s.so.1",
"/lib/x86_64-linux-gnu/libpthread.so.0",
"/lib/x86_64-linux-gnu/libc.so.6",
"/lib64/ld-linux-x86-64.so.2"
]
}

View File

@ -1,641 +0,0 @@
{
"header": {
"reportVersion": 1,
"event": "Allocation failed - JavaScript heap out of memory",
"trigger": "FatalError",
"filename": "report.20211018.100025.89569.0.001.json",
"dumpEventTime": "2021-10-18T10:00:25Z",
"dumpEventTimeStamp": "1634544025367",
"processId": 89569,
"cwd": "/home/pikiou/forceoranj",
"commandLine": [
"/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"--max-old-space-size=2048",
"/home/pikiou/forceoranj/node_modules/fork-ts-checker-webpack-plugin/lib/eslint-reporter/reporter/EsLintReporterRpcService.js"
],
"nodejsVersion": "v12.13.1",
"glibcVersionRuntime": "2.31",
"glibcVersionCompiler": "2.17",
"wordSize": 64,
"arch": "x64",
"platform": "linux",
"componentVersions": {
"node": "12.13.1",
"v8": "7.7.299.13-node.16",
"uv": "1.33.1",
"zlib": "1.2.11",
"brotli": "1.0.7",
"ares": "1.15.0",
"modules": "72",
"nghttp2": "1.39.2",
"napi": "5",
"llhttp": "1.1.4",
"http_parser": "2.8.0",
"openssl": "1.1.1d",
"cldr": "35.1",
"icu": "64.2",
"tz": "2019c",
"unicode": "12.1"
},
"release": {
"name": "node",
"lts": "Erbium",
"headersUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1-headers.tar.gz",
"sourceUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1.tar.gz"
},
"osName": "Linux",
"osRelease": "5.9.0-050900-generic",
"osVersion": "#202010112230 SMP Sun Oct 11 22:34:01 UTC 2020",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2550,
"user": 30482600,
"nice": 60000,
"sys": 5951400,
"idle": 243047400,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2470,
"user": 31999700,
"nice": 66900,
"sys": 6261100,
"idle": 31176900,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2597,
"user": 32154600,
"nice": 75600,
"sys": 6048400,
"idle": 30359500,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2550,
"user": 35330900,
"nice": 107600,
"sys": 6183400,
"idle": 28779100,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2519,
"user": 25022300,
"nice": 112000,
"sys": 5867800,
"idle": 33931000,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2587,
"user": 24602600,
"nice": 111500,
"sys": 6962100,
"idle": 34094100,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2471,
"user": 23670700,
"nice": 79100,
"sys": 6475600,
"idle": 34434100,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 2563,
"user": 24942200,
"nice": 57000,
"sys": 6918800,
"idle": 34309900,
"irq": 0
}
],
"networkInterfaces": [
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4"
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "192.168.1.69",
"netmask": "255.255.255.0",
"family": "IPv4"
},
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"scopeid": 0
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "fe80::d2dc:d4d3:6052:4640",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"scopeid": 3
}
],
"host": "pikiou"
},
"javascriptStack": {
"message": "No stack.",
"stack": ["Unavailable."]
},
"nativeStack": [
{
"pc": "0x0000000000b04935",
"symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::string const&, v8::Local<v8::String>) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x00000000009db9e3",
"symbol": "node::OnFatalError(char const*, char const*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b39f1e",
"symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b3a299",
"symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5635",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5cc6",
"symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf1b5a",
"symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf2a65",
"symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf5478",
"symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cbbda7",
"symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ff1f69",
"symbol": "v8::internal::Runtime_AllocateInOldGeneration(int, unsigned long*, v8::internal::Isolate*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000001374fd9",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
}
],
"javascriptHeap": {
"totalMemory": 2152873984,
"totalCommittedMemory": 2150185184,
"usedMemory": 2145042064,
"availableMemory": 47900368,
"memoryLimit": 2197815296,
"heapSpaces": {
"read_only_space": {
"memorySize": 262144,
"committedMemory": 32568,
"capacity": 261872,
"used": 32296,
"available": 229576
},
"new_space": {
"memorySize": 2097152,
"committedMemory": 181720,
"capacity": 1047488,
"used": 60736,
"available": 986752
},
"old_space": {
"memorySize": 1936568320,
"committedMemory": 1936160272,
"capacity": 1933079808,
"used": 1932384568,
"available": 695240
},
"code_space": {
"memorySize": 950272,
"committedMemory": 919264,
"capacity": 868928,
"used": 868928,
"available": 0
},
"map_space": {
"memorySize": 2887680,
"committedMemory": 2782944,
"capacity": 1707840,
"used": 1707840,
"available": 0
},
"large_object_space": {
"memorySize": 209485824,
"committedMemory": 209485824,
"capacity": 209437040,
"used": 209437040,
"available": 0
},
"code_large_object_space": {
"memorySize": 622592,
"committedMemory": 622592,
"capacity": 550656,
"used": 550656,
"available": 0
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 1047488,
"used": 0,
"available": 1047488
}
}
},
"resourceUsage": {
"userCpuSeconds": 112.993,
"kernelCpuSeconds": 2.28632,
"cpuConsumptionPercent": 83.5356,
"maxRss": 2300715008,
"pageFaults": {
"IORequired": 98,
"IONotRequired": 682652
},
"fsActivity": {
"reads": 63120,
"writes": 16
}
},
"uvthreadResourceUsage": {
"userCpuSeconds": 49.8161,
"kernelCpuSeconds": 1.51771,
"cpuConsumptionPercent": 37.1984,
"fsActivity": {
"reads": 62728,
"writes": 16
}
},
"libuv": [],
"environmentVariables": {
"GJS_DEBUG_TOPICS": "JS ERROR;JS LOG",
"LESSOPEN": "| /usr/bin/lesspipe %s",
"npm_package_devDependencies_webpack_hot_middleware": "^2.25.0",
"npm_package_devDependencies_ts_node": "^10.0.0",
"npm_package_devDependencies_identity_obj_proxy": "^3.0.0",
"npm_package_devDependencies__types_compression": "^1.7.1",
"npm_package_dependencies_serve_favicon": "^2.5.0",
"npm_package_dependencies__reduxjs_toolkit": "^1.6.0",
"npm_package_dependencies__babel_runtime": "^7.14.6",
"npm_package_scripts_analyze_server": "cross-env NODE_ENV=analyze webpack --config ./webpack/server.config.ts",
"npm_package_devDependencies_stylelint_config_prettier": "^8.0.2",
"npm_package_devDependencies_react_refresh": "^0.10.0",
"npm_package_devDependencies__types_react_router_dom": "^5.1.7",
"npm_package_dependencies_fs": "^0.0.1-security",
"USER": "pikiou",
"LC_TIME": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack_cli": "^4.7.2",
"npm_package_devDependencies_webpack_bundle_analyzer": "^4.4.2",
"npm_package_devDependencies_redux_mock_store": "^1.5.4",
"npm_package_devDependencies_jest": "^27.0.6",
"npm_package_devDependencies_image_minimizer_webpack_plugin": "^2.2.0",
"npm_package_devDependencies__testing_library_jest_dom": "^5.14.1",
"npm_package_dependencies_autoprefixer": "^10.2.6",
"npm_config_version_commit_hooks": "true",
"npm_config_user_agent": "yarn/1.22.15 npm/? node/v12.13.1 linux x64",
"COMP_WORDBREAKS": " \t\n\"'><;|&(:",
"npm_package_devDependencies__types_loadable__server": "^5.12.6",
"npm_package_bugs_url": "https://github.com/forceoranj/intranet/issues",
"npm_config_bin_links": "true",
"npm_config_wrap_output": "",
"XDG_SESSION_TYPE": "wayland",
"npm_node_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"npm_package_devDependencies_nodemon": "^2.0.9",
"npm_package_devDependencies_compression_webpack_plugin": "^8.0.1",
"npm_package_devDependencies__types_serialize_javascript": "^5.0.1",
"npm_package_devDependencies__types_loadable__webpack_plugin": "^5.7.3",
"npm_config_init_version": "1.0.0",
"SHLVL": "1",
"npm_package_devDependencies_source_map_support": "^0.5.19",
"npm_package_devDependencies_eslint_import_resolver_typescript": "^2.4.0",
"npm_package_devDependencies__types_express": "^4.17.13",
"HOME": "/home/pikiou",
"CONDA_SHLVL": "0",
"OLDPWD": "/home/pikiou",
"npm_package_devDependencies_eslint_plugin_jest_dom": "^3.9.0",
"npm_package_devDependencies__typescript_eslint_parser": "^4.28.2",
"npm_package_scripts_build_server": "cross-env NODE_ENV=production webpack --config ./webpack/server.config.ts",
"DESKTOP_SESSION": "gnome",
"NVM_NODEJS_ORG_MIRROR": "https://nodejs.org/dist",
"NVM_BIN": "/home/pikiou/.nvm/versions/node/v12.13.1/bin",
"npm_package_devDependencies_eslint_config_prettier": "^8.3.0",
"npm_package_devDependencies__types_loadable__component": "^5.13.4",
"npm_package_devDependencies_webpack_manifest_plugin": "^3.1.1",
"npm_package_engines_node": ">=12",
"npm_config_init_license": "MIT",
"GTK_MODULES": "gail:atk-bridge",
"YARN_WRAP_OUTPUT": "false",
"npm_package_devDependencies_terser_webpack_plugin": "^5.1.4",
"npm_package_devDependencies_imagemin_svgo": "^9.0.0",
"npm_config_version_tag_prefix": "v",
"LC_MONETARY": "fr_FR.UTF-8",
"MANAGERPID": "3096",
"npm_package_devDependencies_stylelint_config_standard": "^22.0.0",
"npm_package_devDependencies_imagemin_gifsicle": "^7.0.0",
"npm_package_dependencies_redux_thunk": "^2.3.0",
"npm_package_dependencies_react_router_config": "^5.1.1",
"npm_package_scripts_lint_style": "stylelint --fix \"**/*.{css,ts,tsx}\"",
"DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
"npm_package_devDependencies_husky": "^7.0.1",
"npm_package_devDependencies_eslint_plugin_react_hooks": "^4",
"npm_package_devDependencies_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_devDependencies__types_mini_css_extract_plugin": "^2.0.1",
"npm_package_dependencies_compression": "^1.7.4",
"npm_package_keywords_0": "starter",
"COLORTERM": "truecolor",
"_CE_M": "",
"npm_package_devDependencies_typescript": "^4.3.5",
"npm_package_devDependencies_babel_loader": "^8.2.2",
"npm_package_dependencies_react_router_dom": "^5.2.0",
"npm_package_keywords_1": "boilerplate",
"npm_package_description": "A starter boilerplate for a universal web application with the best development experience and best practices.",
"NVM_PATH": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node",
"NVM_DIR": "/home/pikiou/.nvm",
"npm_package_readmeFilename": "README.md",
"npm_package_devDependencies__types_react_dom": "^17.0.8",
"npm_package_devDependencies__pmmmwh_react_refresh_webpack_plugin": "^0.4.3",
"npm_package_devDependencies__babel_preset_env": "^7.14.7",
"npm_package_scripts_dev_build": "cross-env NODE_ENV=development webpack --config ./webpack/server.config.ts",
"npm_package_keywords_2": "universal",
"npm_package_homepage": "https://github.com/forceoranj/intranet",
"QT_QPA_PLATFORMTHEME": "appmenu-qt5",
"IM_CONFIG_PHASE": "1",
"WAYLAND_DISPLAY": "wayland-0",
"npm_package_devDependencies_prettier": "^2.3.2",
"npm_package_devDependencies__babel_plugin_transform_runtime": "^7.14.5",
"npm_package_dependencies__loadable_server": "^5.15.0",
"npm_package_scripts_dev": "yarn dev:build && nodemon ./public/server",
"npm_package_keywords_3": "react",
"LOGNAME": "pikiou",
"npm_package_devDependencies_eslint_plugin_import": "^2.22.1",
"npm_package_devDependencies__babel_preset_typescript": "^7.14.5",
"npm_package_dependencies_serialize_javascript": "^6.0.0",
"npm_package_dependencies_normalize_css": "^8.0.1",
"npm_package_dependencies_connected_react_router": "^6.9.1",
"npm_package_scripts_analyze_client": "cross-env NODE_ENV=analyze webpack --config ./webpack/client.config.ts",
"npm_package_keywords_4": "react-hooks",
"JOURNAL_STREAM": "8:38694",
"_": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/yarn",
"npm_package_devDependencies_ts_jest": "^27.0.3",
"npm_package_devDependencies_node_sass": "^6.0.1",
"npm_package_devDependencies__types_webpack_bundle_analyzer": "^4.4.1",
"npm_package_devDependencies__types_redux_mock_store": "^1.0.2",
"npm_package_devDependencies__types_jest": "^26.0.24",
"npm_package_devDependencies__babel_preset_react": "^7.14.5",
"npm_package_dependencies_express": "^4.17.1",
"npm_package_scripts_lint_type": "tsc",
"npm_package_scripts_lint_code": "eslint --fix . --ext .js,.jsx,.ts,.tsx",
"npm_package_keywords_5": "redux",
"npm_package_private": "true",
"XDG_SESSION_CLASS": "user",
"npm_package_devDependencies__typescript_eslint_eslint_plugin": "^4.28.2",
"npm_package_scripts_prepare": "husky install",
"npm_package_scripts_lint": "run-s lint:*",
"npm_package_keywords_6": "redux-toolkit",
"npm_config_registry": "https://registry.yarnpkg.com",
"USERNAME": "pikiou",
"TERM": "xterm-256color",
"npm_package_devDependencies_stylelint": "^13.13.1",
"npm_package_devDependencies__types_lodash": "^4.14.175",
"npm_package_devDependencies__types_compression_webpack_plugin": "^6.0.6",
"npm_package_devDependencies__babel_core": "^7.14.6",
"npm_package_dependencies_core_js": "^3.15.2",
"npm_package_dependencies__loadable_component": "^5.15.0",
"npm_package_keywords_7": "react-router",
"GNOME_DESKTOP_SESSION_ID": "this-is-deprecated",
"_CE_CONDA": "",
"npm_package_devDependencies_webpack_node_externals": "^3.0.0",
"npm_package_devDependencies_imagemin_optipng": "^8.0.0",
"npm_package_scripts_start": "node ./public/server",
"npm_package_keywords_8": "express",
"npm_config_ignore_scripts": "",
"npm_package_devDependencies_postcss_loader": "^6.1.1",
"npm_package_devDependencies_eslint_plugin_jest": "^24.3.6",
"npm_package_devDependencies__types_react_helmet": "^6.1.1",
"npm_package_dependencies_axios": "^0.21.1",
"npm_package_scripts_test_cov": "yarn test --coverage",
"npm_package_scripts_lint_format": "prettier -w . -u --loglevel silent",
"npm_package_author_email": "forceoranj@gmail.com",
"npm_package_keywords_9": "webpack",
"PATH": "/tmp/yarn--1634543881577-0.5793769815238012:/home/pikiou/forceoranj/node_modules/.bin:/home/pikiou/.config/yarn/link/node_modules/.bin:/home/pikiou/.nvm/versions/node/v12.13.1/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/bin/node_modules/npm/bin/node-gyp-bin:/tmp/yarn--1634543881377-0.2454305184035679:/home/pikiou/forceoranj/node_modules/.bin:/home/pikiou/.config/yarn/link/node_modules/.bin:/home/pikiou/.nvm/versions/node/v12.13.1/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/bin/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.local/bin:/home/pikiou/miniconda3/condabin:/home/pikiou/.nvm/versions/node/v12.13.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle:/snap/bin:/home/pikiou/Android/Sdk/platform-tools:/home/pikiou/depot_tools:/home/pikiou/depot_tools",
"NODE": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"SESSION_MANAGER": "local/pikiou:@/tmp/.ICE-unix/3357,unix/pikiou:/tmp/.ICE-unix/3357",
"NVM_IOJS_ORG_MIRROR": "https://iojs.org/dist",
"INVOCATION_ID": "5f505b5c98a14ec0aabbd0ae819a3ffe",
"npm_package_dependencies_cross_env": "^7.0.3",
"npm_package_scripts_build_client": "cross-env NODE_ENV=production webpack --config ./webpack/client.config.ts",
"npm_package_keywords_10": "es6+",
"npm_package_repository_type": "git",
"npm_package_name": "intranet",
"XDG_MENU_PREFIX": "gnome-",
"LC_ADDRESS": "fr_FR.UTF-8",
"GNOME_TERMINAL_SCREEN": "/org/gnome/Terminal/screen/6e66cefe_f79c_480a_93e4_352931c60526",
"GNOME_SETUP_DISPLAY": ":1",
"XDG_RUNTIME_DIR": "/run/user/1000",
"npm_package_devDependencies_stylelint_config_sass_guidelines": "^8.0.0",
"npm_package_devDependencies_eslint_plugin_jsx_a11y": "^6.4.1",
"npm_package_devDependencies__types_webpack_manifest_plugin": "^3.0.5",
"npm_package_dependencies_react_redux": "^7.2.4",
"npm_package_lint_staged____js_jsx_ts_tsx_": "eslint --fix",
"npm_package_keywords_20": "best-practices",
"npm_package_keywords_11": "typescript",
"DISPLAY": ":0",
"npm_package_devDependencies_webpack_merge": "^5.8.0",
"npm_package_devDependencies_eslint_config_airbnb": "^18.2.1",
"npm_package_devDependencies__types_terser_webpack_plugin": "^5.0.4",
"npm_package_devDependencies__types_hpp": "^0.2.1",
"npm_package_scripts_test_update": "yarn test -u",
"npm_package_keywords_21": "eslint",
"npm_package_keywords_12": "code-splitting",
"LANG": "en_US.UTF-8",
"XDG_CURRENT_DESKTOP": "GNOME",
"LC_TELEPHONE": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack": "^5.43.0",
"npm_package_devDependencies_react_test_renderer": "^17.0.2",
"npm_package_devDependencies_eslint": "^7.14.0",
"npm_package_dependencies_react_dom": "^17.0.2",
"npm_package_dependencies_history": "^4.10.1",
"npm_package_keywords_22": "stylelint",
"npm_package_keywords_13": "react-refresh",
"XMODIFIERS": "@im=ibus",
"XDG_SESSION_DESKTOP": "gnome",
"XAUTHORITY": "/run/user/1000/.mutter-Xwaylandauth.73MHB1",
"LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:",
"GNOME_TERMINAL_SERVICE": ":1.403",
"npm_lifecycle_script": "cross-env NODE_ENV=development webpack --config ./webpack/server.config.ts",
"npm_package_devDependencies__types_html_minifier": "^4.0.1",
"npm_package_devDependencies__types_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_browserslist_0": "> 1%",
"npm_package_keywords_23": "prettier",
"npm_package_keywords_14": "babel",
"SSH_AGENT_LAUNCHER": "gnome-keyring",
"SSH_AUTH_SOCK": "/run/user/1000/keyring/ssh",
"CONDA_PYTHON_EXE": "/home/pikiou/miniconda3/bin/python",
"npm_package_dependencies_react_router": "^5.2.0",
"npm_package_dependencies_chalk": "^4.1.1",
"npm_package_browserslist_1": "last 2 versions",
"npm_package_scripts_test": "cross-env NODE_ENV=test jest --config ./jest/config.js",
"npm_package_keywords_15": "postcss",
"npm_config_version_git_message": "v%s",
"SHELL": "/bin/bash",
"LC_NAME": "fr_FR.UTF-8",
"npm_lifecycle_event": "dev:build",
"npm_package_devDependencies_webpack_dev_middleware": "^5.0.0",
"npm_package_devDependencies__types_morgan": "^1.9.3",
"npm_package_devDependencies__testing_library_react": "^12.0.0",
"npm_package_keywords_16": "jest",
"npm_package_repository_url": "https://github.com/forceoranj/intranet",
"npm_package_version": "2.0.0",
"QT_ACCESSIBILITY": "1",
"GDMSESSION": "gnome",
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev\"],\"original\":[\"dev\"]}",
"npm_package_devDependencies_lint_staged": "^11.0.0",
"npm_package_devDependencies__types_serve_favicon": "^2.5.3",
"npm_package_scripts_build": "run-s build:*",
"npm_package_keywords_17": "unit-testing",
"LESSCLOSE": "/usr/bin/lesspipe %s %s",
"npm_package_devDependencies_stylelint_order": "^4.1.0",
"npm_package_devDependencies__loadable_webpack_plugin": "^5.15.0",
"npm_package_dependencies_lodash": "^4.17.21",
"npm_package_keywords_18": "react-testing-library",
"LC_MEASUREMENT": "fr_FR.UTF-8",
"npm_package_devDependencies_sass_loader": "^12.1.0",
"npm_package_devDependencies_eslint_plugin_testing_library": "^4.9.0",
"npm_package_keywords_19": "performance-optimization",
"npm_config_version_git_tag": "true",
"npm_config_version_git_sign": "",
"GJS_DEBUG_OUTPUT": "stderr",
"LC_IDENTIFICATION": "fr_FR.UTF-8",
"npm_package_devDependencies_imagemin_jpegtran": "^7.0.0",
"npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^6.2.12",
"npm_package_devDependencies_eslint_plugin_react": "^7.23.2",
"npm_package_dependencies_react_helmet": "^6.1.0",
"npm_package_dependencies_googleapis": "^88.2.0",
"npm_package_license": "MIT",
"npm_config_strict_ssl": "true",
"QT_IM_MODULE": "ibus",
"npm_package_devDependencies__loadable_babel_plugin": "^5.13.2",
"npm_package_scripts_test_watch": "yarn test --watch",
"PWD": "/home/pikiou/forceoranj",
"npm_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/yarn/bin/yarn.js",
"npm_package_devDependencies__types_webpack_node_externals": "^2.5.2",
"npm_package_dependencies_helmet": "^4.6.0",
"XDG_CONFIG_DIRS": "/etc/xdg/xdg-gnome:/etc/xdg",
"CONDA_EXE": "/home/pikiou/miniconda3/bin/conda",
"ANDROID_HOME": "/home/pikiou/Android/Sdk",
"NVM_CD_FLAGS": "",
"XDG_DATA_DIRS": "/home/pikiou/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop",
"npm_package_devDependencies_css_loader": "^5.2.6",
"npm_package_dependencies_hpp": "^0.2.3",
"npm_package_engines_npm": ">=6",
"npm_package_author_url": "https://github.com/forceoranj",
"npm_package_author_name": "Paris est Ludique",
"LC_NUMERIC": "fr_FR.UTF-8",
"npm_package_devDependencies_postcss": "^8.3.5",
"npm_package_dependencies_readline": "^1.3.0",
"npm_package_dependencies_https": "^1.0.0",
"npm_config_save_prefix": "^",
"npm_config_ignore_optional": "",
"LC_PAPER": "fr_FR.UTF-8",
"npm_package_devDependencies_mini_css_extract_plugin": "^2.1.0",
"npm_package_dependencies_html_minifier": "^4.0.0",
"npm_package_lint_staged_____": "prettier -w -u",
"npm_package_lint_staged____css_sass_ts_tsx_": "stylelint --fix",
"MANPATH": "/home/pikiou/.nvm/versions/node/v12.13.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/lib/jvm/java-8-oracle/man:/home/pikiou/depot_tools/man",
"VTE_VERSION": "6003",
"npm_package_devDependencies_npm_run_all": "^4.1.5",
"NODE_ENV": "development",
"INIT_CWD": "/home/pikiou/forceoranj",
"npm_package_devDependencies__types_react_test_renderer": "^17.0.1",
"npm_package_devDependencies__types_react_router_config": "^5.0.2",
"npm_package_dependencies_react": "^17.0.2",
"npm_package_dependencies_morgan": "^1.10.0"
},
"userLimits": {
"core_file_size_blocks": {
"soft": 0,
"hard": "unlimited"
},
"data_seg_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"file_size_blocks": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_locked_memory_bytes": {
"soft": 67108864,
"hard": 67108864
},
"max_memory_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"open_files": {
"soft": 1048576,
"hard": 1048576
},
"stack_size_bytes": {
"soft": 8388608,
"hard": "unlimited"
},
"cpu_time_seconds": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_user_processes": {
"soft": 29308,
"hard": 29308
},
"virtual_memory_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
}
},
"sharedObjects": [
"linux-vdso.so.1",
"/lib/x86_64-linux-gnu/libdl.so.2",
"/usr/lib/x86_64-linux-gnu/libstdc++.so.6",
"/lib/x86_64-linux-gnu/libm.so.6",
"/lib/x86_64-linux-gnu/libgcc_s.so.1",
"/lib/x86_64-linux-gnu/libpthread.so.0",
"/lib/x86_64-linux-gnu/libc.so.6",
"/lib64/ld-linux-x86-64.so.2"
]
}

View File

@ -1,639 +0,0 @@
{
"header": {
"reportVersion": 1,
"event": "Allocation failed - JavaScript heap out of memory",
"trigger": "FatalError",
"filename": "report.20211018.100127.89742.0.001.json",
"dumpEventTime": "2021-10-18T10:01:27Z",
"dumpEventTimeStamp": "1634544087275",
"processId": 89742,
"cwd": "/home/pikiou/forceoranj",
"commandLine": [
"/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"--max-old-space-size=2048",
"/home/pikiou/forceoranj/node_modules/fork-ts-checker-webpack-plugin/lib/eslint-reporter/reporter/EsLintReporterRpcService.js"
],
"nodejsVersion": "v12.13.1",
"glibcVersionRuntime": "2.31",
"glibcVersionCompiler": "2.17",
"wordSize": 64,
"arch": "x64",
"platform": "linux",
"componentVersions": {
"node": "12.13.1",
"v8": "7.7.299.13-node.16",
"uv": "1.33.1",
"zlib": "1.2.11",
"brotli": "1.0.7",
"ares": "1.15.0",
"modules": "72",
"nghttp2": "1.39.2",
"napi": "5",
"llhttp": "1.1.4",
"http_parser": "2.8.0",
"openssl": "1.1.1d",
"cldr": "35.1",
"icu": "64.2",
"tz": "2019c",
"unicode": "12.1"
},
"release": {
"name": "node",
"lts": "Erbium",
"headersUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1-headers.tar.gz",
"sourceUrl": "https://nodejs.org/download/release/v12.13.1/node-v12.13.1.tar.gz"
},
"osName": "Linux",
"osRelease": "5.9.0-050900-generic",
"osVersion": "#202010112230 SMP Sun Oct 11 22:34:01 UTC 2020",
"osMachine": "x86_64",
"cpus": [
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 30625900,
"nice": 60000,
"sys": 5961600,
"idle": 243496100,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 32113600,
"nice": 67300,
"sys": 6271600,
"idle": 31658300,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 32377500,
"nice": 75700,
"sys": 6058200,
"idle": 30734900,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 35542400,
"nice": 107600,
"sys": 6192200,
"idle": 29160000,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 25266800,
"nice": 112000,
"sys": 5878300,
"idle": 34251000,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 899,
"user": 24799000,
"nice": 111500,
"sys": 6972900,
"idle": 34474700,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 899,
"user": 23771800,
"nice": 79100,
"sys": 6487200,
"idle": 34905800,
"irq": 0
},
{
"model": "Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz",
"speed": 900,
"user": 25154700,
"nice": 57000,
"sys": 6930100,
"idle": 34677100,
"irq": 0
}
],
"networkInterfaces": [
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"family": "IPv4"
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "192.168.1.69",
"netmask": "255.255.255.0",
"family": "IPv4"
},
{
"name": "lo",
"internal": true,
"mac": "00:00:00:00:00:00",
"address": "::1",
"netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
"family": "IPv6",
"scopeid": 0
},
{
"name": "wlp2s0",
"internal": false,
"mac": "dc:53:60:fa:40:d8",
"address": "fe80::d2dc:d4d3:6052:4640",
"netmask": "ffff:ffff:ffff:ffff::",
"family": "IPv6",
"scopeid": 3
}
],
"host": "pikiou"
},
"javascriptStack": {
"message": "No stack.",
"stack": ["Unavailable."]
},
"nativeStack": [
{
"pc": "0x0000000000b04935",
"symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::string const&, v8::Local<v8::String>) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x00000000009db9e3",
"symbol": "node::OnFatalError(char const*, char const*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b39f1e",
"symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000b3a299",
"symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5635",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ce5cc6",
"symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf1b5a",
"symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf2a65",
"symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cf5478",
"symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000cbbda7",
"symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000000ff1e0b",
"symbol": "v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
},
{
"pc": "0x0000000001374fd9",
"symbol": " [/home/pikiou/.nvm/versions/node/v12.13.1/bin/node]"
}
],
"javascriptHeap": {
"totalMemory": 2153922560,
"totalCommittedMemory": 2150510000,
"usedMemory": 2144178624,
"availableMemory": 49831072,
"memoryLimit": 2197815296,
"heapSpaces": {
"read_only_space": {
"memorySize": 262144,
"committedMemory": 32568,
"capacity": 261872,
"used": 32296,
"available": 229576
},
"new_space": {
"memorySize": 4194304,
"committedMemory": 1709096,
"capacity": 2094976,
"used": 722536,
"available": 1372440
},
"old_space": {
"memorySize": 1935257600,
"committedMemory": 1934831440,
"capacity": 1933093104,
"used": 1930851760,
"available": 2241344
},
"code_space": {
"memorySize": 1212416,
"committedMemory": 1092896,
"capacity": 876576,
"used": 876576,
"available": 0
},
"map_space": {
"memorySize": 2887680,
"committedMemory": 2735584,
"capacity": 1707760,
"used": 1707760,
"available": 0
},
"large_object_space": {
"memorySize": 209485824,
"committedMemory": 209485824,
"capacity": 209437040,
"used": 209437040,
"available": 0
},
"code_large_object_space": {
"memorySize": 622592,
"committedMemory": 622592,
"capacity": 550656,
"used": 550656,
"available": 0
},
"new_large_object_space": {
"memorySize": 0,
"committedMemory": 0,
"capacity": 2094976,
"used": 0,
"available": 2094976
}
}
},
"resourceUsage": {
"userCpuSeconds": 95.1999,
"kernelCpuSeconds": 1.76,
"cpuConsumptionPercent": 173.143,
"maxRss": 2319220736,
"pageFaults": {
"IORequired": 1,
"IONotRequired": 672363
},
"fsActivity": {
"reads": 45336,
"writes": 16
}
},
"uvthreadResourceUsage": {
"userCpuSeconds": 38.1993,
"kernelCpuSeconds": 1.01694,
"cpuConsumptionPercent": 70.029,
"fsActivity": {
"reads": 45336,
"writes": 16
}
},
"libuv": [],
"environmentVariables": {
"GJS_DEBUG_TOPICS": "JS ERROR;JS LOG",
"LESSOPEN": "| /usr/bin/lesspipe %s",
"npm_package_devDependencies_webpack_hot_middleware": "^2.25.0",
"npm_package_devDependencies_ts_node": "^10.0.0",
"npm_package_devDependencies_identity_obj_proxy": "^3.0.0",
"npm_package_devDependencies__types_compression": "^1.7.1",
"npm_package_dependencies_serve_favicon": "^2.5.0",
"npm_package_dependencies__reduxjs_toolkit": "^1.6.0",
"npm_package_dependencies__babel_runtime": "^7.14.6",
"npm_package_scripts_analyze_server": "cross-env NODE_ENV=analyze webpack --config ./webpack/server.config.ts",
"npm_package_devDependencies_stylelint_config_prettier": "^8.0.2",
"npm_package_devDependencies_react_refresh": "^0.10.0",
"npm_package_devDependencies__types_react_router_dom": "^5.1.7",
"npm_package_dependencies_fs": "^0.0.1-security",
"USER": "pikiou",
"LC_TIME": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack_cli": "^4.7.2",
"npm_package_devDependencies_webpack_bundle_analyzer": "^4.4.2",
"npm_package_devDependencies_redux_mock_store": "^1.5.4",
"npm_package_devDependencies_jest": "^27.0.6",
"npm_package_devDependencies_image_minimizer_webpack_plugin": "^2.2.0",
"npm_package_devDependencies__testing_library_jest_dom": "^5.14.1",
"npm_package_dependencies_autoprefixer": "^10.2.6",
"npm_config_version_commit_hooks": "true",
"npm_config_user_agent": "yarn/1.22.15 npm/? node/v12.13.1 linux x64",
"COMP_WORDBREAKS": " \t\n\"'><;|&(:",
"npm_package_devDependencies__types_loadable__server": "^5.12.6",
"npm_package_bugs_url": "https://github.com/forceoranj/intranet/issues",
"npm_config_bin_links": "true",
"XDG_SESSION_TYPE": "wayland",
"npm_node_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"npm_package_devDependencies_nodemon": "^2.0.9",
"npm_package_devDependencies_compression_webpack_plugin": "^8.0.1",
"npm_package_devDependencies__types_serialize_javascript": "^5.0.1",
"npm_package_devDependencies__types_loadable__webpack_plugin": "^5.7.3",
"npm_config_init_version": "1.0.0",
"SHLVL": "1",
"npm_package_devDependencies_source_map_support": "^0.5.19",
"npm_package_devDependencies_eslint_import_resolver_typescript": "^2.4.0",
"npm_package_devDependencies__types_express": "^4.17.13",
"HOME": "/home/pikiou",
"CONDA_SHLVL": "0",
"OLDPWD": "/home/pikiou",
"npm_package_devDependencies_eslint_plugin_jest_dom": "^3.9.0",
"npm_package_devDependencies__typescript_eslint_parser": "^4.28.2",
"npm_package_scripts_build_server": "cross-env NODE_ENV=production webpack --config ./webpack/server.config.ts",
"DESKTOP_SESSION": "gnome",
"NVM_NODEJS_ORG_MIRROR": "https://nodejs.org/dist",
"NVM_BIN": "/home/pikiou/.nvm/versions/node/v12.13.1/bin",
"npm_package_devDependencies_eslint_config_prettier": "^8.3.0",
"npm_package_devDependencies__types_loadable__component": "^5.13.4",
"npm_package_devDependencies_webpack_manifest_plugin": "^3.1.1",
"npm_package_engines_node": ">=12",
"npm_config_init_license": "MIT",
"GTK_MODULES": "gail:atk-bridge",
"YARN_WRAP_OUTPUT": "false",
"npm_package_devDependencies_terser_webpack_plugin": "^5.1.4",
"npm_package_devDependencies_imagemin_svgo": "^9.0.0",
"npm_config_version_tag_prefix": "v",
"LC_MONETARY": "fr_FR.UTF-8",
"MANAGERPID": "3096",
"npm_package_devDependencies_stylelint_config_standard": "^22.0.0",
"npm_package_devDependencies_imagemin_gifsicle": "^7.0.0",
"npm_package_dependencies_redux_thunk": "^2.3.0",
"npm_package_dependencies_react_router_config": "^5.1.1",
"npm_package_scripts_lint_style": "stylelint --fix \"**/*.{css,ts,tsx}\"",
"DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
"npm_package_devDependencies_husky": "^7.0.1",
"npm_package_devDependencies_eslint_plugin_react_hooks": "^4",
"npm_package_devDependencies_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_devDependencies__types_mini_css_extract_plugin": "^2.0.1",
"npm_package_dependencies_compression": "^1.7.4",
"npm_package_keywords_0": "starter",
"COLORTERM": "truecolor",
"_CE_M": "",
"npm_package_devDependencies_typescript": "^4.3.5",
"npm_package_devDependencies_babel_loader": "^8.2.2",
"npm_package_dependencies_react_router_dom": "^5.2.0",
"npm_package_keywords_1": "boilerplate",
"npm_package_description": "A starter boilerplate for a universal web application with the best development experience and best practices.",
"NVM_PATH": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node",
"NVM_DIR": "/home/pikiou/.nvm",
"npm_package_readmeFilename": "README.md",
"npm_package_devDependencies__types_react_dom": "^17.0.8",
"npm_package_devDependencies__pmmmwh_react_refresh_webpack_plugin": "^0.4.3",
"npm_package_devDependencies__babel_preset_env": "^7.14.7",
"npm_package_scripts_dev_build": "cross-env NODE_ENV=development webpack --config ./webpack/server.config.ts",
"npm_package_keywords_2": "universal",
"npm_package_homepage": "https://github.com/forceoranj/intranet",
"QT_QPA_PLATFORMTHEME": "appmenu-qt5",
"IM_CONFIG_PHASE": "1",
"WAYLAND_DISPLAY": "wayland-0",
"npm_package_devDependencies_prettier": "^2.3.2",
"npm_package_devDependencies__babel_plugin_transform_runtime": "^7.14.5",
"npm_package_dependencies__loadable_server": "^5.15.0",
"npm_package_scripts_dev": "yarn dev:build && nodemon ./public/server",
"npm_package_keywords_3": "react",
"LOGNAME": "pikiou",
"npm_package_devDependencies_eslint_plugin_import": "^2.22.1",
"npm_package_devDependencies__babel_preset_typescript": "^7.14.5",
"npm_package_dependencies_serialize_javascript": "^6.0.0",
"npm_package_dependencies_normalize_css": "^8.0.1",
"npm_package_dependencies_connected_react_router": "^6.9.1",
"npm_package_scripts_analyze_client": "cross-env NODE_ENV=analyze webpack --config ./webpack/client.config.ts",
"npm_package_keywords_4": "react-hooks",
"JOURNAL_STREAM": "8:38694",
"_": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/yarn",
"npm_package_devDependencies_ts_jest": "^27.0.3",
"npm_package_devDependencies_node_sass": "^6.0.1",
"npm_package_devDependencies__types_webpack_bundle_analyzer": "^4.4.1",
"npm_package_devDependencies__types_redux_mock_store": "^1.0.2",
"npm_package_devDependencies__types_jest": "^26.0.24",
"npm_package_devDependencies__babel_preset_react": "^7.14.5",
"npm_package_dependencies_express": "^4.17.1",
"npm_package_scripts_lint_type": "tsc",
"npm_package_scripts_lint_code": "eslint --fix . --ext .js,.jsx,.ts,.tsx",
"npm_package_keywords_5": "redux",
"npm_package_private": "true",
"XDG_SESSION_CLASS": "user",
"npm_package_devDependencies__typescript_eslint_eslint_plugin": "^4.28.2",
"npm_package_scripts_prepare": "husky install",
"npm_package_scripts_lint": "run-s lint:*",
"npm_package_keywords_6": "redux-toolkit",
"npm_config_registry": "https://registry.yarnpkg.com",
"USERNAME": "pikiou",
"TERM": "xterm-256color",
"npm_package_devDependencies_stylelint": "^13.13.1",
"npm_package_devDependencies__types_lodash": "^4.14.175",
"npm_package_devDependencies__types_compression_webpack_plugin": "^6.0.6",
"npm_package_devDependencies__babel_core": "^7.14.6",
"npm_package_dependencies_core_js": "^3.15.2",
"npm_package_dependencies__loadable_component": "^5.15.0",
"npm_package_keywords_7": "react-router",
"GNOME_DESKTOP_SESSION_ID": "this-is-deprecated",
"_CE_CONDA": "",
"npm_package_devDependencies_webpack_node_externals": "^3.0.0",
"npm_package_devDependencies_imagemin_optipng": "^8.0.0",
"npm_package_scripts_start": "node ./public/server",
"npm_package_keywords_8": "express",
"npm_config_ignore_scripts": "",
"npm_package_devDependencies_postcss_loader": "^6.1.1",
"npm_package_devDependencies_eslint_plugin_jest": "^24.3.6",
"npm_package_devDependencies__types_react_helmet": "^6.1.1",
"npm_package_dependencies_axios": "^0.21.1",
"npm_package_scripts_test_cov": "yarn test --coverage",
"npm_package_scripts_lint_format": "prettier -w . -u --loglevel silent",
"npm_package_author_email": "forceoranj@gmail.com",
"npm_package_keywords_9": "webpack",
"PATH": "/tmp/yarn--1634543881377-0.2454305184035679:/home/pikiou/forceoranj/node_modules/.bin:/home/pikiou/.config/yarn/link/node_modules/.bin:/home/pikiou/.nvm/versions/node/v12.13.1/libexec/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.nvm/versions/node/v12.13.1/bin/node_modules/npm/bin/node-gyp-bin:/home/pikiou/.local/bin:/home/pikiou/miniconda3/condabin:/home/pikiou/.nvm/versions/node/v12.13.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle:/snap/bin:/home/pikiou/Android/Sdk/platform-tools:/home/pikiou/depot_tools:/home/pikiou/depot_tools",
"NODE": "/home/pikiou/.nvm/versions/node/v12.13.1/bin/node",
"SESSION_MANAGER": "local/pikiou:@/tmp/.ICE-unix/3357,unix/pikiou:/tmp/.ICE-unix/3357",
"NVM_IOJS_ORG_MIRROR": "https://iojs.org/dist",
"INVOCATION_ID": "5f505b5c98a14ec0aabbd0ae819a3ffe",
"npm_package_dependencies_cross_env": "^7.0.3",
"npm_package_scripts_build_client": "cross-env NODE_ENV=production webpack --config ./webpack/client.config.ts",
"npm_package_keywords_10": "es6+",
"npm_package_repository_type": "git",
"npm_package_name": "intranet",
"XDG_MENU_PREFIX": "gnome-",
"LC_ADDRESS": "fr_FR.UTF-8",
"GNOME_TERMINAL_SCREEN": "/org/gnome/Terminal/screen/6e66cefe_f79c_480a_93e4_352931c60526",
"GNOME_SETUP_DISPLAY": ":1",
"XDG_RUNTIME_DIR": "/run/user/1000",
"npm_package_devDependencies_stylelint_config_sass_guidelines": "^8.0.0",
"npm_package_devDependencies_eslint_plugin_jsx_a11y": "^6.4.1",
"npm_package_devDependencies__types_webpack_manifest_plugin": "^3.0.5",
"npm_package_dependencies_react_redux": "^7.2.4",
"npm_package_lint_staged____js_jsx_ts_tsx_": "eslint --fix",
"npm_package_keywords_20": "best-practices",
"npm_package_keywords_11": "typescript",
"DISPLAY": ":0",
"npm_package_devDependencies_webpack_merge": "^5.8.0",
"npm_package_devDependencies_eslint_config_airbnb": "^18.2.1",
"npm_package_devDependencies__types_terser_webpack_plugin": "^5.0.4",
"npm_package_devDependencies__types_hpp": "^0.2.1",
"npm_package_scripts_test_update": "yarn test -u",
"npm_package_keywords_21": "eslint",
"npm_package_keywords_12": "code-splitting",
"LANG": "en_US.UTF-8",
"XDG_CURRENT_DESKTOP": "GNOME",
"LC_TELEPHONE": "fr_FR.UTF-8",
"npm_package_devDependencies_webpack": "^5.43.0",
"npm_package_devDependencies_react_test_renderer": "^17.0.2",
"npm_package_devDependencies_eslint": "^7.14.0",
"npm_package_dependencies_react_dom": "^17.0.2",
"npm_package_dependencies_history": "^4.10.1",
"npm_package_keywords_22": "stylelint",
"npm_package_keywords_13": "react-refresh",
"XMODIFIERS": "@im=ibus",
"XDG_SESSION_DESKTOP": "gnome",
"XAUTHORITY": "/run/user/1000/.mutter-Xwaylandauth.73MHB1",
"LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:",
"GNOME_TERMINAL_SERVICE": ":1.403",
"npm_lifecycle_script": "yarn dev:build && nodemon ./public/server",
"npm_package_devDependencies__types_html_minifier": "^4.0.1",
"npm_package_devDependencies__types_css_minimizer_webpack_plugin": "^3.0.2",
"npm_package_browserslist_0": "> 1%",
"npm_package_keywords_23": "prettier",
"npm_package_keywords_14": "babel",
"SSH_AGENT_LAUNCHER": "gnome-keyring",
"SSH_AUTH_SOCK": "/run/user/1000/keyring/ssh",
"CONDA_PYTHON_EXE": "/home/pikiou/miniconda3/bin/python",
"npm_package_dependencies_react_router": "^5.2.0",
"npm_package_dependencies_chalk": "^4.1.1",
"npm_package_browserslist_1": "last 2 versions",
"npm_package_scripts_test": "cross-env NODE_ENV=test jest --config ./jest/config.js",
"npm_package_keywords_15": "postcss",
"npm_config_version_git_message": "v%s",
"SHELL": "/bin/bash",
"LC_NAME": "fr_FR.UTF-8",
"npm_lifecycle_event": "dev",
"npm_package_devDependencies_webpack_dev_middleware": "^5.0.0",
"npm_package_devDependencies__types_morgan": "^1.9.3",
"npm_package_devDependencies__testing_library_react": "^12.0.0",
"npm_package_keywords_16": "jest",
"npm_package_repository_url": "https://github.com/forceoranj/intranet",
"npm_package_version": "2.0.0",
"QT_ACCESSIBILITY": "1",
"GDMSESSION": "gnome",
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev\"],\"original\":[\"dev\"]}",
"npm_package_devDependencies_lint_staged": "^11.0.0",
"npm_package_devDependencies__types_serve_favicon": "^2.5.3",
"npm_package_scripts_build": "run-s build:*",
"npm_package_keywords_17": "unit-testing",
"LESSCLOSE": "/usr/bin/lesspipe %s %s",
"npm_package_devDependencies_stylelint_order": "^4.1.0",
"npm_package_devDependencies__loadable_webpack_plugin": "^5.15.0",
"npm_package_dependencies_lodash": "^4.17.21",
"npm_package_keywords_18": "react-testing-library",
"LC_MEASUREMENT": "fr_FR.UTF-8",
"npm_package_devDependencies_sass_loader": "^12.1.0",
"npm_package_devDependencies_eslint_plugin_testing_library": "^4.9.0",
"npm_package_keywords_19": "performance-optimization",
"npm_config_version_git_tag": "true",
"npm_config_version_git_sign": "",
"GJS_DEBUG_OUTPUT": "stderr",
"LC_IDENTIFICATION": "fr_FR.UTF-8",
"npm_package_devDependencies_imagemin_jpegtran": "^7.0.0",
"npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^6.2.12",
"npm_package_devDependencies_eslint_plugin_react": "^7.23.2",
"npm_package_dependencies_react_helmet": "^6.1.0",
"npm_package_dependencies_googleapis": "^88.2.0",
"npm_package_license": "MIT",
"npm_config_strict_ssl": "true",
"QT_IM_MODULE": "ibus",
"npm_package_devDependencies__loadable_babel_plugin": "^5.13.2",
"npm_package_scripts_test_watch": "yarn test --watch",
"PWD": "/home/pikiou/forceoranj",
"npm_execpath": "/home/pikiou/.nvm/versions/node/v12.13.1/lib/node_modules/yarn/bin/yarn.js",
"npm_package_devDependencies__types_webpack_node_externals": "^2.5.2",
"npm_package_dependencies_helmet": "^4.6.0",
"XDG_CONFIG_DIRS": "/etc/xdg/xdg-gnome:/etc/xdg",
"CONDA_EXE": "/home/pikiou/miniconda3/bin/conda",
"ANDROID_HOME": "/home/pikiou/Android/Sdk",
"NVM_CD_FLAGS": "",
"XDG_DATA_DIRS": "/home/pikiou/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop",
"npm_package_devDependencies_css_loader": "^5.2.6",
"npm_package_dependencies_hpp": "^0.2.3",
"npm_package_engines_npm": ">=6",
"npm_package_author_url": "https://github.com/forceoranj",
"npm_package_author_name": "Paris est Ludique",
"LC_NUMERIC": "fr_FR.UTF-8",
"npm_package_devDependencies_postcss": "^8.3.5",
"npm_package_dependencies_readline": "^1.3.0",
"npm_package_dependencies_https": "^1.0.0",
"npm_config_save_prefix": "^",
"npm_config_ignore_optional": "",
"LC_PAPER": "fr_FR.UTF-8",
"npm_package_devDependencies_mini_css_extract_plugin": "^2.1.0",
"npm_package_dependencies_html_minifier": "^4.0.0",
"npm_package_lint_staged_____": "prettier -w -u",
"npm_package_lint_staged____css_sass_ts_tsx_": "stylelint --fix",
"MANPATH": "/home/pikiou/.nvm/versions/node/v12.13.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/lib/jvm/java-8-oracle/man:/home/pikiou/depot_tools/man",
"VTE_VERSION": "6003",
"npm_package_devDependencies_npm_run_all": "^4.1.5",
"INIT_CWD": "/home/pikiou/forceoranj",
"npm_package_devDependencies__types_react_test_renderer": "^17.0.1",
"npm_package_devDependencies__types_react_router_config": "^5.0.2",
"npm_package_dependencies_react": "^17.0.2",
"npm_package_dependencies_morgan": "^1.10.0"
},
"userLimits": {
"core_file_size_blocks": {
"soft": 0,
"hard": "unlimited"
},
"data_seg_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"file_size_blocks": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_locked_memory_bytes": {
"soft": 67108864,
"hard": 67108864
},
"max_memory_size_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
},
"open_files": {
"soft": 1048576,
"hard": 1048576
},
"stack_size_bytes": {
"soft": 8388608,
"hard": "unlimited"
},
"cpu_time_seconds": {
"soft": "unlimited",
"hard": "unlimited"
},
"max_user_processes": {
"soft": 29308,
"hard": 29308
},
"virtual_memory_kbytes": {
"soft": "unlimited",
"hard": "unlimited"
}
},
"sharedObjects": [
"linux-vdso.so.1",
"/lib/x86_64-linux-gnu/libdl.so.2",
"/usr/lib/x86_64-linux-gnu/libstdc++.so.6",
"/lib/x86_64-linux-gnu/libm.so.6",
"/lib/x86_64-linux-gnu/libgcc_s.so.1",
"/lib/x86_64-linux-gnu/libpthread.so.0",
"/lib/x86_64-linux-gnu/libc.so.6",
"/lib64/ld-linux-x86-64.so.2"
]
}

25
src/gsheets/envies.ts Normal file
View File

@ -0,0 +1,25 @@
import { Request, Response, NextFunction } from "express"
import { getList, setList } from "./utils"
import { Envie } from "../services/envies"
export const getEnvieList = async (
_request: Request,
response: Response,
_next: NextFunction
): Promise<void> => {
const list = await getList<Envie>("Envies d'aider", new Envie())
if (list) {
response.status(200).json(list)
}
}
export const setEnvieList = async (
request: Request,
response: Response,
_next: NextFunction
): Promise<void> => {
const success = await setList<Envie>("Envies d'aider", request.body)
if (success) {
response.status(200).json()
}
}

View File

@ -8,7 +8,7 @@ export const getJeuxJavList = async (
response: Response,
_next: NextFunction
): Promise<void> => {
const list = await getList<JeuxJav>("Jeux JAV")
const list = await getList<JeuxJav>("Jeux JAV", new JeuxJav())
if (list) {
response.status(200).json(list)
}
@ -19,7 +19,7 @@ export const getJeuxJavData = async (
response: Response,
_next: NextFunction
): Promise<void> => {
const list = await getList<JeuxJav>("Jeux JAV")
const list = await getList<JeuxJav>("Jeux JAV", new JeuxJav())
const data = _.find(list, { id: 56 })
if (data) {
response.status(200).json(data)

View File

@ -1,92 +1,312 @@
import path from "path"
import fs from "fs"
import readline from "readline"
import _ from "lodash"
import { google } from "googleapis"
import config from "../config"
import { promises as fs } from "fs"
import { GoogleSpreadsheet, GoogleSpreadsheetWorksheet } from "google-spreadsheet"
const SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
const TOKEN_PATH = path.resolve(process.cwd(), "access/token.json")
const CRED_PATH = path.resolve(process.cwd(), "access/gsheets.json")
export const getList = async <T>(sheetName: string): Promise<T[] | undefined> => {
const auth = await authorize(JSON.parse(fs.readFileSync(CRED_PATH, "utf8")))
const sheets = google.sheets({ version: "v4", auth })
const r = await sheets.spreadsheets.values.get({
spreadsheetId: config.GOOGLE_SHEET_ID,
range: `${sheetName}!A1:Z`,
// eslint-disable-next-line @typescript-eslint/ban-types
export async function getList<Element extends object>(
sheetName: string,
specimen: Element
): Promise<Element[]> {
type StringifiedElement = Record<keyof Element, string>
const sheet = await getGSheet(sheetName)
// Load sheet into an array of objects
const rows = (await sheet.getRows()) as StringifiedElement[]
const elements: Element[] = []
if (!rows[0]) {
// TODO: Report format error to database maintainers
return []
}
const types = _.pick(rows[0], Object.keys(specimen)) as Record<keyof Element, string>
rows.shift()
rows.forEach((row) => {
const stringifiedElement = _.pick(row, Object.keys(specimen)) as Record<
keyof Element,
string
>
const element = parseElement<Element>(stringifiedElement, types, specimen)
if (element !== undefined) {
elements.push(element)
}
})
if (_.isArray(r?.data?.values)) {
const rows = r.data.values as string[][]
const keys: string[] = rows[0]
rows.shift()
const list: T[] = _.map(
rows,
(row) =>
_.reduce(
row,
(game: any, val: any, collumn: number) => {
game[keys[collumn]] = val
return game
},
{}
) as T
)
return list
}
return undefined
return elements
}
async function authorize(cred: any) {
const {
client_secret: clientSecret,
client_id: clientId,
redirect_uris: redirectUris,
} = cred.web
const oAuth2Client = new google.auth.OAuth2(clientId, clientSecret, redirectUris[0])
// eslint-disable-next-line @typescript-eslint/ban-types
export async function setList<Element extends object>(
sheetName: string,
elements: Element[]
): Promise<true | undefined> {
const sheet = await getGSheet(sheetName)
if (fs.existsSync(TOKEN_PATH)) {
oAuth2Client.setCredentials(JSON.parse(fs.readFileSync(TOKEN_PATH, "utf8")))
return oAuth2Client
// Load sheet into an array of objects
const rows = await sheet.getRows()
if (!rows[0]) {
return undefined
}
const types = _.pick(rows[0], Object.keys(elements[0] || {})) as Record<keyof Element, string>
// Update received rows
let rowid = 1
// eslint-disable-next-line no-restricted-syntax
for (const element of elements) {
const row = rows[rowid]
const stringifiedRow = stringifyElement(element, types)
if (stringifiedRow === undefined) {
return undefined
}
if (!row) {
// eslint-disable-next-line no-await-in-loop
await sheet.addRow(stringifiedRow)
} else {
const keys = Object.keys(stringifiedRow)
const sameCells = _.every(
keys,
(key: keyof Element) => row[key as string] === stringifiedRow[key]
)
if (!sameCells) {
keys.forEach((key) => {
row[key] = stringifiedRow[key as keyof Element]
})
// eslint-disable-next-line no-await-in-loop
await row.save()
}
}
rowid += 1
}
return getNewToken<typeof oAuth2Client>(oAuth2Client)
// Delete all following rows
for (let rowToDelete = sheet.rowCount - 1; rowToDelete >= rowid; rowToDelete -= 1) {
if (rows[rowToDelete]) {
// eslint-disable-next-line no-await-in-loop
await rows[rowToDelete].delete()
}
}
return true
}
async function getNewToken<T = any>(oAuth2Client: any): Promise<T> {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: "offline",
scope: SCOPES,
})
console.log("Authorize this app by visiting this url:", authUrl)
const code = await readlineAsync("Enter the code from that page here: ")
const token = await new Promise((resolve, reject) => {
oAuth2Client.getToken(code, (err: any, _token: any) =>
err ? reject(err) : resolve(_token)
)
})
oAuth2Client.setCredentials(token)
// Store the token to disk for later program executions
fs.writeFileSync(TOKEN_PATH, JSON.stringify(token))
console.log("Token stored to", TOKEN_PATH)
return oAuth2Client
async function getGSheet(sheetName: string): Promise<GoogleSpreadsheetWorksheet> {
const doc = new GoogleSpreadsheet("1pMMKcYx6NXLOqNn6pLHJTPMTOLRYZmSNg2QQcAu7-Pw")
const creds = await fs.readFile(CRED_PATH)
// Authentication
await doc.useServiceAccountAuth(JSON.parse(creds.toString()))
await doc.loadInfo()
return doc.sheetsByTitle[sheetName]
}
async function readlineAsync(question: string) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
})
// eslint-disable-next-line @typescript-eslint/ban-types
function parseElement<Element extends object>(
rawElement: Record<keyof Element, string>,
types: Record<keyof Element, string>,
specimen: Element
): Element | undefined {
const fullElement = _.reduce(
types,
(element: any, type: string, prop: string) => {
if (element === undefined) {
return undefined
}
const rawProp: string = rawElement[prop as keyof Element]
switch (type) {
case "string":
element[prop] = rawProp
break
return new Promise((resolve) => {
rl.question(question, (answer) => {
rl.close()
resolve(answer)
})
})
case "number":
element[prop] = +rawProp
break
case "boolean":
element[prop] = rawProp !== "0" && rawProp !== ""
break
case "date":
// eslint-disable-next-line no-case-declarations
const matchDate = rawProp.match(/^([0-9]+)\/([0-9]+)\/([0-9]+)$/)
if (matchDate) {
element[prop] = new Date(+matchDate[3], +matchDate[2] - 1, +matchDate[1])
break
}
return undefined // TODO: Report format error to database maintainers
break
default:
// eslint-disable-next-line no-case-declarations
const matchArrayType = type.match(/^(number|string|boolean|date)\[([^\]]+)\]$/)
if (!matchArrayType) {
return undefined
}
if (!rawProp) {
element[prop] = []
} else {
const arrayType = matchArrayType[1]
const delimiter = matchArrayType[2]
switch (arrayType) {
case "string":
element[prop] = rawProp.split(delimiter)
break
case "number":
element[prop] = _.map(rawProp.split(delimiter), (val) => +val)
break
case "boolean":
element[prop] = _.map(
rawProp.split(delimiter),
(val) => val !== "0" && val !== ""
)
break
case "date":
// eslint-disable-next-line no-case-declarations
const rawDates = rawProp.split(delimiter)
element[prop] = []
// eslint-disable-next-line no-case-declarations
const rightFormat = rawDates.every((rawDate) => {
const matchDateArray = rawDate.match(
/^([0-9]+)\/([0-9]+)\/([0-9]+)$/
)
if (!matchDateArray) {
return false
}
element[prop].push(
new Date(
+matchDateArray[3],
+matchDateArray[2] - 1,
+matchDateArray[1]
)
)
return true
})
if (!rightFormat) {
return undefined
}
break
default:
}
}
}
return element
},
JSON.parse(JSON.stringify(specimen))
)
return fullElement
}
// eslint-disable-next-line @typescript-eslint/ban-types
function stringifyElement<Element extends object>(
element: Element,
types: Record<keyof Element, string>
): Record<keyof Element, string> | undefined {
const rawElement: Record<keyof Element, string> | undefined = _.reduce(
types,
(
stringifiedElement: Record<keyof Element, string> | undefined,
type: string,
prop: string
) => {
if (stringifiedElement === undefined) {
return undefined
}
const value = element[prop as keyof Element]
switch (type) {
case "string":
stringifiedElement[prop as keyof Element] = formulaSafe(`${value}`)
break
case "number":
stringifiedElement[prop as keyof Element] = `${value}`
break
case "boolean":
stringifiedElement[prop as keyof Element] = value ? "X" : ""
break
case "date":
if (value instanceof Date) {
stringifiedElement[prop as keyof Element] = `${value.getDate()}/${
value.getMonth() + 1
}/${value.getFullYear()}`
break
} else {
console.error("Wrong date format in stringifyElement")
return undefined // TODO: Report format error to database maintainers
}
default:
// eslint-disable-next-line no-case-declarations
const matchArrayType = type.match(/^(number|string|boolean|date)\[([^\]]+)\]$/)
if (!matchArrayType || !_.isArray(value)) {
console.error("Unknown matchArrayType or not an array in stringifyElement")
return undefined
}
// eslint-disable-next-line no-case-declarations
const arrayType = matchArrayType[1]
// eslint-disable-next-line no-case-declarations
const delimiter = matchArrayType[2]
switch (arrayType) {
case "string":
if (!_.every(value, _.isString)) {
return undefined
}
stringifiedElement[prop as keyof Element] = formulaSafe(
value.join(delimiter)
)
break
case "number":
if (!_.every(value, _.isNumber)) {
return undefined
}
stringifiedElement[prop as keyof Element] = value.join(delimiter)
break
case "boolean":
if (!_.every(value, _.isBoolean)) {
return undefined
}
stringifiedElement[prop as keyof Element] = _.map(value, (val) =>
val ? "X" : ""
).join(delimiter)
break
case "date":
if (!_.every(value, _.isDate)) {
return undefined
}
stringifiedElement[prop as keyof Element] = _.map(
value,
(val) =>
`${val.getDate()}/${val.getMonth() + 1}/${val.getFullYear()}`
).join(delimiter)
break
default:
return undefined
}
}
return stringifiedElement
},
JSON.parse(JSON.stringify(element))
)
return rawElement
}
function formulaSafe(value: string): string {
return value.replace(/^=+/, "")
}
export { SCOPES }

View File

@ -5,6 +5,7 @@ import { Helmet } from "react-helmet"
import { AppState, AppThunk } from "../../store"
import { fetchJeuxJavListIfNeed } from "../../store/jeuxJavList"
import { fetchEnvieListIfNeed } from "../../store/envieList"
import { JeuxJavList } from "../../components"
import styles from "./styles.module.scss"
@ -33,12 +34,17 @@ function useList(stateToProp: (state: AppState) => any, fetchDataIfNeed: () => A
const Home: FC<Props> = (): JSX.Element => (
<div className={styles.Home}>
<Helmet title="Home" />
{/* {useList((state: AppState) => state.envieList, fetchEnvieListifNeed)()} */}
{useList((state: AppState) => state.jeuxJavList, fetchJeuxJavListIfNeed)()}
{/* <button type="button" onClick={() => setList([{id: 3, joueurs: 4, duree: 5, description: "abcd"}])}>
Set list!
</button> */}
</div>
)
// Fetch server-side data here
export const loadData = (): AppThunk[] => [
fetchEnvieListIfNeed(),
fetchJeuxJavListIfNeed(),
// More pre-fetched actions...
]

View File

@ -11,6 +11,7 @@ import devServer from "./devServer"
import ssr from "./ssr"
import { getJeuxJavList } from "../gsheets/jeuxJav"
import { getEnvieList, setEnvieList } from "../gsheets/envies"
import config from "../config"
const app = express()
@ -32,6 +33,8 @@ if (__DEV__) devServer(app)
// Google Sheets requests
app.get("/JeuxJav", getJeuxJavList)
app.get("/GetList", getEnvieList)
app.post("/SetList", setEnvieList)
// Use React server-side rendering middleware
app.get("*", ssr)

36
src/services/envies.ts Normal file
View File

@ -0,0 +1,36 @@
import axios from "axios"
import config from "../config"
export class Envie {
domaine = ""
envies = ""
precisions = ""
equipes = []
dateAjout = new Date(0)
}
export interface EnviesResponse {
data?: Envie[]
error?: Error
}
export const getEnvieList = async (): Promise<EnviesResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/GetList`)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const setEnvieList = async (list: Envie[]): Promise<EnviesResponse> => {
try {
const { data } = await axios.post(`${config.API_URL}/SetList`, list)
return { data }
} catch (error) {
return { error: error as Error }
}
}

View File

@ -2,22 +2,36 @@ import axios from "axios"
import config from "../config"
export interface JeuxJav {
id: number
titre: string
auteur: string
editeur: string
minJoueurs: number
maxJoueurs: number
duree: number
type: "Ambiance" | "Famille" | "Expert" | ""
poufpaf: string
bggId: number
exemplaires: number // Defaults to 1
dispoPret: number
nonRangee: number
ean: string
bggPhoto: string
export class JeuxJav {
id = 0
titre = ""
auteur = ""
editeur = ""
minJoueurs = 0
maxJoueurs = 0
duree = 0
type: "Ambiance" | "Famille" | "Expert" | "" = ""
poufpaf = ""
bggId = 0
exemplaires = 1
dispoPret = 0
nonRangee = 0
ean = ""
bggPhoto = ""
}
export interface JeuxJavList {

57
src/store/envieList.ts Normal file
View File

@ -0,0 +1,57 @@
import { PayloadAction, createSlice } from "@reduxjs/toolkit"
import { Envie, getEnvieList } from "../services/envies"
import { AppThunk, AppState } from "."
interface EnvieList {
readyStatus: string
items: Envie[]
error: string | null
}
export const initialState: EnvieList = {
readyStatus: "invalid",
items: [],
error: null,
}
const envieList = createSlice({
name: "envieList",
initialState,
reducers: {
getRequesting: (state: EnvieList) => {
state.readyStatus = "request"
},
getSuccess: (state, { payload }: PayloadAction<Envie[]>) => {
state.readyStatus = "success"
state.items = payload
},
getFailure: (state, { payload }: PayloadAction<string>) => {
state.readyStatus = "failure"
state.error = payload
},
},
})
export default envieList.reducer
export const { getRequesting, getSuccess, getFailure } = envieList.actions
export const fetchEnvieList = (): AppThunk => async (dispatch) => {
dispatch(getRequesting())
const { error, data } = await getEnvieList()
if (error) {
dispatch(getFailure(error.message))
} else {
dispatch(getSuccess(data as Envie[]))
}
}
const shouldFetchEnvieList = (state: AppState) => state.envieList.readyStatus !== "success"
export const fetchEnvieListIfNeed = (): AppThunk => (dispatch, getState) => {
if (shouldFetchEnvieList(getState())) return dispatch(fetchEnvieList())
return null
}

View File

@ -4,6 +4,7 @@ import { connectRouter } from "connected-react-router"
import userList from "./userList"
import userData from "./userData"
import jeuxJavList from "./jeuxJavList"
import envieList from "./envieList"
// Use inferred return type for making correctly Redux types
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@ -11,6 +12,7 @@ export default (history: History) => ({
userList,
userData,
jeuxJavList,
envieList,
router: connectRouter(history) as any,
// Register more reducers...
})

View File

@ -5185,7 +5185,22 @@ gonzales-pe@^4.3.0:
dependencies:
minimist "^1.2.5"
google-auth-library@^7.0.2:
google-auth-library@^6.1.3:
version "6.1.6"
resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.6.tgz#deacdcdb883d9ed6bac78bb5d79a078877fdf572"
integrity sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==
dependencies:
arrify "^2.0.0"
base64-js "^1.3.0"
ecdsa-sig-formatter "^1.0.11"
fast-text-encoding "^1.0.0"
gaxios "^4.0.0"
gcp-metadata "^4.2.0"
gtoken "^5.0.4"
jws "^4.0.0"
lru-cache "^6.0.0"
google-auth-library@^7.0.2, google-auth-library@^7.10.1:
version "7.10.1"
resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.10.1.tgz#e44ac923bc3540215aaead6e1fd117ee06883f51"
integrity sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==
@ -5207,6 +5222,15 @@ google-p12-pem@^3.0.3:
dependencies:
node-forge "^0.10.0"
google-spreadsheet@^3.1.15:
version "3.1.15"
resolved "https://registry.yarnpkg.com/google-spreadsheet/-/google-spreadsheet-3.1.15.tgz#e7a86f750d8166faaa3e16929561baceb807bf5a"
integrity sha512-S5477f3Gf3Mz6AXgCw7dbaYnzu5aHou1AX4sDqrGboQWnAytkxqJGKQiXN+zzRTTcYzSTJCe0g7KqCPZO9xiOw==
dependencies:
axios "^0.21.1"
google-auth-library "^6.1.3"
lodash "^4.17.20"
googleapis-common@^5.0.2:
version "5.0.5"
resolved "https://registry.yarnpkg.com/googleapis-common/-/googleapis-common-5.0.5.tgz#4c7160be1ed7e4cc8cdbcdb6eac8a4b3a61dd782"
@ -8743,7 +8767,7 @@ react-router-config@^5.1.1:
dependencies:
"@babel/runtime" "^7.1.2"
react-router-dom@^5.2.0:
react-router-dom@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.0.tgz#da1bfb535a0e89a712a93b97dd76f47ad1f32363"
integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==