diff --git a/package-lock.json b/package-lock.json index 7b2cd07d..7f74a256 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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" diff --git a/package.json b/package.json index 9487dca3..57955a72 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/common/optics/notary/index.ts b/src/common/optics/notary/index.ts new file mode 100644 index 00000000..4e9441e2 --- /dev/null +++ b/src/common/optics/notary/index.ts @@ -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()("documents", []); +export const documentFilesLens = Optics.Lens.fromNullableProp()("files", []); +export const fileHashLens = Optics.Lens.fromProp()("hash"); + +/** + * Traversals + */ +export const documentsTraversal = Optics.fromTraversable(Array.Traversable)(); +export const filesTraversal = Optics.fromTraversable(Array.Traversable)(); + +export const folderHashesTraversal = folderDocumentsLens + .composeTraversal(documentsTraversal) + .composeLens(documentFilesLens) + .composeTraversal(filesTraversal) + .composeLens(fileHashLens); + +/** + * Getters + */ +export const getFolderHashes = (folder: OfficeFolder) => Traversal.getAll(folder)(folderHashesTraversal);