diff --git a/Scripts/descriptor.js b/Scripts/descriptor.js new file mode 100644 index 0000000..57c8515 --- /dev/null +++ b/Scripts/descriptor.js @@ -0,0 +1,186 @@ +"use strict"; + +const twoAlphaPattern = /^[a-zA-z]{2,3}/; +const processOnlyB = /^[a-zA-z][0-9]{2,4}$/; +// const reactorNumberPattern = /^[0-9]{2}--/; +// const id = /[-]?([QP][0-9]{4,}|[0-9]{5,})[-]?/; +const normal = /^[0-9]{2}[.][0-9]{1}[.]?[0-9]{0,1}/; +const fileSystemSafe = /[\\,\/,\:,\*,\?,\"",\<,\>,\|]/; + +const values = [ + { text: '', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: '12-123456-1234', rds: '123456', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' }, + { text: '12-1234567-1234', rds: '1234567', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' }, + { text: '12-12345678-1234', rds: '12345678', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' }, + { text: '123456', rds: '123456', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: '1T123456', rds: '123456', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: 'MP', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: 'MP', lot: '' }, + { text: '12-123456-1234.2-1', rds: '123456', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '12-1234567-1234.2-1', rds: '1234567', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '12-12345678-1234.2-1', rds: '12345678', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '12-123456-1234.02-1', rds: '123456', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '12-1234567-1234.02-1', rds: '1234567', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '12-12345678-1234.02-1', rds: '12345678', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '20', rds: '', psn: '', reactor: '20', layer: '', zone: '', employee: '', lot: '' }, + { text: '20.2', rds: '', psn: '', reactor: '20', layer: '2', zone: '', employee: '', lot: '' }, + { text: '20.2.1', rds: '', psn: '', reactor: '20', layer: '2', zone: '1', employee: '', lot: '' }, + { text: '20.1.1', rds: '', psn: '', reactor: '20', layer: '1', zone: '1', employee: '', lot: '' }, + { text: 'P2-LOW-RR', rds: '', psn: 'RR', reactor: 'P2', layer: '', zone: '', employee: '', lot: '' }, + { text: 'i171308.1.51', rds: 'i171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: 'o171308.1.51', rds: 'o171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: 'O171308.1.51', rds: 'O171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: '171308.1.51', rds: '171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' }, + { text: '75-QP1414-SPLIT4', rds: '', psn: 'SPLIT4', reactor: '75', layer: '', zone: '', employee: '', lot: '' }, + { text: 'B48', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: 'B48' }, + { text: 'B48', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: 'B48' }, +]; + +function tryParseInt(str, defaultValue) { + const parsedValue = parseInt(str); + return isNaN(parsedValue) ? defaultValue : parsedValue; +} + +function getReactorAndRDS(defaultReactor, defaultRDS, text, formattedText, segments) { + let result = {}; + let rds; + let reactor; + let rdsValue; + if (text == null || text.length === 0 || segments.length === 0 || formattedText == null || formattedText.length === 0) + reactor = defaultReactor; + else + reactor = segments[0]; + if (segments.length <= 1 || !tryParseInt(segments[1], false) || rdsValue < 99) + rds = defaultRDS; + else + rds = segments[1]; + if (reactor.length > 3) { + rds = reactor; + reactor = defaultReactor; + } + result = { reactor: reactor, rds: rds }; + return result; +} + +function getLayerAndPSN(defaultLayer, defaultPSN, segments) { + let result = {}; + let psn; + let layer; + if (segments.length <= 2) { + psn = defaultPSN; + layer = defaultLayer; + } + else { + let segmentsB = segments[2].split('.'); + psn = segmentsB[0]; + if (segmentsB.length <= 1) + layer = defaultLayer; + else { + layer = segmentsB[1]; + if (layer.length > 1 && layer[0] === '0') + layer = layer.substring(1); + } + } + result = { layer: layer, psn: psn }; + return result; +} + +function getZone(segments) { + let result = ''; + if (segments.length <= 3) + result = ''; + else { + result = segments[3]; + if (result.length > 1 && result[0] === '0') + result = result.substring(1); + } + return result; +} + +function getValue(text) { + let result = {}; + let lot = ''; + let psn = ''; + let rds = ''; + let zone = ''; + let layer = ''; + let reactor = ''; + let employee = ''; + let defaultPSN = ''; + let defaultRDS = ''; + let defaultZone = ''; + let defaultLayer = ''; + let defaultReactor = ''; + let defaultEmployee = ''; + if (text.match(processOnlyB)) { + lot = text.toUpperCase(); + psn = defaultPSN; + rds = defaultRDS; + zone = defaultZone; + layer = defaultLayer; + reactor = defaultReactor; + employee = defaultEmployee; + } + else if (text == null || text.length === 0 || (text.length == 2 && text.match(twoAlphaPattern))) { + lot = text; + employee = lot; + psn = defaultPSN; + rds = defaultRDS; + zone = defaultZone; + layer = defaultLayer; + reactor = defaultReactor; + } + else if (text.match(normal)) { + let segments = text.split('.'); + lot = text; + psn = defaultPSN; + rds = defaultRDS; + layer = segments[1]; + reactor = segments[0]; + employee = defaultEmployee; + if (segments.length <= 2) + zone = defaultZone; + else + zone = segments[2]; + } + else { + // Remove illegal characters \/:*?"<>| found in the Lot. + lot = text.replace(fileSystemSafe, "_").split('\r')[0].split('\n')[0]; + if (lot.length > 2 && lot[0] == '1' && (lot[1] == 'T' || lot[1] == 't')) + lot = lot.substring(2); + let segments = lot.split('-'); + // let hasRDS = lot.match(id); + let reactorAndRDS = getReactorAndRDS(defaultReactor, defaultRDS, text, lot, segments); + reactor = reactorAndRDS.reactor; + rds = reactorAndRDS.rds; + let layerAndPSN = getLayerAndPSN(defaultLayer, defaultPSN, segments); + layer = layerAndPSN.layer; + psn = layerAndPSN.psn; + zone = getZone(segments); + if (segments.length <= 4) + employee = defaultEmployee; + else + employee = segments[4]; + } + result = { rds: rds, psn: psn, reactor: reactor, layer: layer, zone: zone, employee: employee, lot: lot }; + return result; +}; + +values.forEach(element => { + let value = getValue(element.text); + if (value.rds !== element.rds) + console.error("RDS doesn't match!"); + else if (value.psn !== element.psn) + console.error("PSN doesn't match!"); + else if (value.reactor !== element.reactor) + console.error("Reactor doesn't match!"); + else if (value.layer !== element.layer) + console.error("Layer doesn't match!"); + else if (value.zone !== element.zone) + console.error("Zone doesn't match!"); + else if (value.employee !== element.employee) + console.error("Employee doesn't match!"); + else if (value.lot !== element.lot) + console.error("Lot doesn't match!"); + else + console.info('Match'); +}); \ No newline at end of file diff --git a/Scripts/hgcv.js b/Scripts/hgcv.js new file mode 100644 index 0000000..2aa6852 --- /dev/null +++ b/Scripts/hgcv.js @@ -0,0 +1,130 @@ +"use strict"; + +function getCollectionParseFloat(collection) { + let result = []; + let value; + for (let i = 0; i < collection.length; i++) { + value = parseFloat(collection[i]); + result.push(value); + } + return result; +} + +function getSum(collection) { + let result = 0; + if (!collection || collection.length === 0) { + result = 0; + } + else { + for (let i = 0; i < collection.length; i++) { + result += collection[i]; + } + } + return result; +} + +function getAverage(collection) { + let result = null; + if (collection == null || collection.length === 0) + result = 0; + else { + let sum = getSum(collection); + result = sum / collection.length; + } + return result; +} + +function getVariance(collection) { + let result = null; + if (collection == null || collection.length === 0) + result = null; + else { + let variance = 0; + let t = collection[0]; + for (let i = 1; i < collection.length; i++) { + t += collection[i]; + const diff = ((i + 1) * collection[i]) - t; + variance += diff * diff / ((i + 1.0) * i); + } + result = variance / (collection.length - 1); + } + return result; +} + +function getNineEdgeMeanDelta(edge4mmRhoPoints, edge10mmRhoPoints) { + let result; + const nine4mmEdgeSum = getSum(edge4mmRhoPoints); + const nine10mmEdgeSum = getSum(edge10mmRhoPoints); + result = (nine4mmEdgeSum - nine10mmEdgeSum) / nine10mmEdgeSum * 100; + return result; +} + +function getMax(collection) { + let result = collection[0]; + for (let i = 1; i < collection.length; i++) { + if (collection[i] > result) { + result = collection[i]; + } + } + return result; +} + +function getMin(collection) { + let result = collection[0]; + for (let i = 1; i < collection.length; i++) { + if (collection[i] < result) { + result = collection[i]; + } + } + return result; +} + +function getNineResRangePercent(criticalRhoPoints) { + let result; + const nineCriticalPointsAverage = getAverage(criticalRhoPoints); + // result = (Math.max(...criticalRhoPoints) - Math.min(...criticalRhoPoints)) / nineCriticalPointsAverage * 100; + // let max = criticalRhoPoints.reduce((a, b) => Math.max(a, b)); + // let min = criticalRhoPoints.reduce((a, b) => Math.min(a, b)); + // result = (max - min) / nineCriticalPointsAverage * 100; + // let max = criticalRhoPoints.sort((a, b) => b - a); + // let min = criticalRhoPoints.sort((a, b) => a - b); + // result = (max[0] - min[0]) / nineCriticalPointsAverage * 100; + let max = getMax(criticalRhoPoints); + let min = getMin(criticalRhoPoints); + result = (max - min) / nineCriticalPointsAverage * 100; + return result; +} + +function getValue(allRhoAvg, index) { + let result = null; + if (index === 8) { + if (allRhoAvg != undefined && allRhoAvg.length > 1) { + let collection = allRhoAvg[0] === '|' ? allRhoAvg.substring(1).split('|') : allRhoAvg.split('|'); + let collectionParseFloat = getCollectionParseFloat(collection); + result = average(collectionParseFloat); + } + } + return result; +} + +// 0 1 2 3 4 5 6 7 8 +// 1 2 3 4 5 6 7 8 9 +const allRhoAvg = getCollectionParseFloat('|2.648|3.076|2.877|2.747|2.821|2.765|2.669|2.814|2.876'.substring(1).split('|')); +const edge4mmRhoPoints = getCollectionParseFloat('|2.877|2.747|2.669|2.814'.substring(1).split('|')); +const edge10mmRhoPoints = getCollectionParseFloat('|3.076|2.821|2.765|2.876'.substring(1).split('|')); +const criticalRhoPoints = getCollectionParseFloat('|2.648|3.076|2.821|2.765|2.876'.substring(1).split('|')); + +// 0 1 2 3 4 5 6 7 8 +// 1 2 3 4 5 6 7 8 9 +const allPhase = getCollectionParseFloat('|88.874|88.999|89.085|89.029|89.018|89.007|89.049|89.024|89.007'.substring(1).split('|')); +const criticalPhasePoints = getCollectionParseFloat('|88.874|88.999|89.018|89.007|89.007'.substring(1).split('|')); + +const nineMean = getAverage(allRhoAvg); +const nine4mmEdgeMean = getAverage(edge4mmRhoPoints); +const nine10mmEdgeMean = getAverage(edge10mmRhoPoints); +const nineCriticalPointsAverage = getAverage(criticalRhoPoints); +const nineResRangePercent = getNineResRangePercent(criticalRhoPoints); +const nineCriticalPointsStdDev = Math.sqrt(getVariance(criticalRhoPoints)); +const nineCriticalPointsPhaseAngleAverage = getAverage(criticalPhasePoints); +const nineEdgeMeanDelta = getNineEdgeMeanDelta(edge4mmRhoPoints, edge10mmRhoPoints); +console.log(nineCriticalPointsStdDev); \ No newline at end of file diff --git a/Scripts/immich.js b/Scripts/immich.js new file mode 100644 index 0000000..0d50d05 --- /dev/null +++ b/Scripts/immich.js @@ -0,0 +1,50 @@ +const axios = require('axios'); + +const url = 'https://immich.bchs.duckdns.org'; + +let config = { + method: 'get', + maxBodyLength: Infinity, + // url: url + '/api/users', + url: url + '/api/assets/f89d0de1-2762-4f9e-b60e-c7eeec93c4e9', + headers: { + 'Accept': 'application/json', + 'x-api-key': 'Pm2CbhJvgStEPAFKRVclW88qrOAy79OeIEcfj3k' + } +}; + + +axios.request(config) + .then((response) => { + console.log(JSON.stringify(response.data)); + }) + .catch((error) => { + console.log(error); + }); + +// let data = JSON.stringify({ +// "avatar": { +// "color": "green" +// } +// }); + +// let configB = { +// method: 'put', +// maxBodyLength: Infinity, +// url: url + '/api/users/me/preferences', +// headers: { +// 'Content-Type': 'application/json', +// 'Accept': 'application/json', +// 'x-api-key': 'Pm2CbhJvgStEPAFKRVclW88qrOAy79OeIEcfj3k' +// }, +// data: data +// }; + +// axios.request(configB) +// .then((response) => { +// console.log(JSON.stringify(response.data)); +// }) +// .catch((error) => { +// console.log(error); +// }); + diff --git a/package-lock.json b/package-lock.json index aed116c..9d05392 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,111 @@ "packages": { "": { "devDependencies": { + "axios": "^1.7.9", "prettier": "3.0.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/prettier": { "version": "3.0.0", "resolved": "http://localhost:4873/prettier/-/prettier-3.0.0.tgz", @@ -22,14 +124,91 @@ "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" } }, "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true + }, + "form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, "prettier": { "version": "3.0.0", "resolved": "http://localhost:4873/prettier/-/prettier-3.0.0.tgz", "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", "dev": true + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true } } } diff --git a/package.json b/package.json index 2aa5568..6289658 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "prettier.write": "prettier . --write" }, "devDependencies": { - "prettier": "3.0.0" + "prettier": "3.0.0", + "axios": "^1.7.9" } } \ No newline at end of file