add optics for accessing nested hashes

This commit is contained in:
Loïs Mansot 2023-09-21 15:40:25 +02:00
parent c4dcc16027
commit b448aea01e
No known key found for this signature in database
GPG Key ID: 8CF1F4150DDA726D
3 changed files with 46 additions and 0 deletions

15
package-lock.json generated
View File

@ -18,9 +18,11 @@
"cors": "^2.8.5",
"cron": "^2.3.1",
"express": "^4.18.2",
"fp-ts": "^2.16.1",
"jsonwebtoken": "^9.0.0",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.77",
"module-alias": "^2.2.2",
"monocle-ts": "^2.3.13",
"multer": "^1.4.5-lts.1",
"next": "^13.1.5",
"node-cache": "^5.1.2",
@ -2474,6 +2476,11 @@
"node": ">= 0.6"
}
},
"node_modules/fp-ts": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.1.tgz",
"integrity": "sha512-by7U5W8dkIzcvDofUcO42yl9JbnHTEDBrzu3pt5fKT+Z4Oy85I21K80EYJYdjQGC2qum4Vo55Ag57iiIK4FYuA=="
},
"node_modules/fresh": {
"version": "0.5.2",
"license": "MIT",
@ -3901,6 +3908,14 @@
"version": "2.2.3",
"license": "MIT"
},
"node_modules/monocle-ts": {
"version": "2.3.13",
"resolved": "https://registry.npmjs.org/monocle-ts/-/monocle-ts-2.3.13.tgz",
"integrity": "sha512-D5Ygd3oulEoAm3KuGO0eeJIrhFf1jlQIoEVV2DYsZUMz42j4tGxgct97Aq68+F8w4w4geEnwFa8HayTS/7lpKQ==",
"peerDependencies": {
"fp-ts": "^2.5.0"
}
},
"node_modules/ms": {
"version": "2.0.0",
"license": "MIT"

View File

@ -51,9 +51,11 @@
"cors": "^2.8.5",
"cron": "^2.3.1",
"express": "^4.18.2",
"fp-ts": "^2.16.1",
"jsonwebtoken": "^9.0.0",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.77",
"module-alias": "^2.2.2",
"monocle-ts": "^2.3.13",
"multer": "^1.4.5-lts.1",
"next": "^13.1.5",
"node-cache": "^5.1.2",

View File

@ -0,0 +1,29 @@
import * as Optics from "monocle-ts";
import * as Traversal from "monocle-ts/Traversal";
import * as Array from "fp-ts/Array";
import { Document, File, OfficeFolder } from "le-coffre-resources/dist/Notary";
/**
* Lenses
*/
export const folderDocumentsLens = Optics.Lens.fromNullableProp<OfficeFolder>()("documents", []);
export const documentFilesLens = Optics.Lens.fromNullableProp<Document>()("files", []);
export const fileHashLens = Optics.Lens.fromProp<File>()("hash");
/**
* Traversals
*/
export const documentsTraversal = Optics.fromTraversable(Array.Traversable)<Document>();
export const filesTraversal = Optics.fromTraversable(Array.Traversable)<File>();
export const folderHashesTraversal = folderDocumentsLens
.composeTraversal(documentsTraversal)
.composeLens(documentFilesLens)
.composeTraversal(filesTraversal)
.composeLens(fileHashLens);
/**
* Getters
*/
export const getFolderHashes = (folder: OfficeFolder) => Traversal.getAll(folder)(folderHashesTraversal);