summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json209
-rw-r--r--package.json4
-rw-r--r--src/flatmatter.ts62
3 files changed, 162 insertions, 113 deletions
diff --git a/package-lock.json b/package-lock.json
index 29e12b3..97175f0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,15 +1,15 @@
{
"name": "flatmatter",
- "version": "1.1.2",
+ "version": "2.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "flatmatter",
- "version": "1.1.2",
+ "version": "2.0.0",
"license": "MIT",
"dependencies": {
- "effect": "^3.12.10"
+ "effect": "^3.13.1"
},
"devDependencies": {
"@types/node": "^22.10.10",
@@ -59,13 +59,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz",
- "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+ "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.8"
+ "@babel/types": "^7.26.9"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -75,9 +75,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz",
- "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+ "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -620,9 +620,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz",
- "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz",
+ "integrity": "sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==",
"cpu": [
"arm"
],
@@ -634,9 +634,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz",
- "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.7.tgz",
+ "integrity": "sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==",
"cpu": [
"arm64"
],
@@ -648,9 +648,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz",
- "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz",
+ "integrity": "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==",
"cpu": [
"arm64"
],
@@ -662,9 +662,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz",
- "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.7.tgz",
+ "integrity": "sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==",
"cpu": [
"x64"
],
@@ -676,9 +676,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz",
- "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.7.tgz",
+ "integrity": "sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==",
"cpu": [
"arm64"
],
@@ -690,9 +690,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz",
- "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.7.tgz",
+ "integrity": "sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==",
"cpu": [
"x64"
],
@@ -704,9 +704,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz",
- "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.7.tgz",
+ "integrity": "sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==",
"cpu": [
"arm"
],
@@ -718,9 +718,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz",
- "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.7.tgz",
+ "integrity": "sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==",
"cpu": [
"arm"
],
@@ -732,9 +732,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz",
- "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.7.tgz",
+ "integrity": "sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==",
"cpu": [
"arm64"
],
@@ -746,9 +746,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz",
- "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.7.tgz",
+ "integrity": "sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==",
"cpu": [
"arm64"
],
@@ -760,9 +760,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz",
- "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.7.tgz",
+ "integrity": "sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==",
"cpu": [
"loong64"
],
@@ -774,9 +774,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz",
- "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.7.tgz",
+ "integrity": "sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==",
"cpu": [
"ppc64"
],
@@ -788,9 +788,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz",
- "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.7.tgz",
+ "integrity": "sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==",
"cpu": [
"riscv64"
],
@@ -802,9 +802,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz",
- "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.7.tgz",
+ "integrity": "sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==",
"cpu": [
"s390x"
],
@@ -816,9 +816,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz",
- "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.7.tgz",
+ "integrity": "sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==",
"cpu": [
"x64"
],
@@ -830,9 +830,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz",
- "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.7.tgz",
+ "integrity": "sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==",
"cpu": [
"x64"
],
@@ -844,9 +844,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz",
- "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.7.tgz",
+ "integrity": "sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==",
"cpu": [
"arm64"
],
@@ -858,9 +858,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz",
- "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.7.tgz",
+ "integrity": "sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==",
"cpu": [
"ia32"
],
@@ -872,9 +872,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz",
- "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.7.tgz",
+ "integrity": "sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==",
"cpu": [
"x64"
],
@@ -885,6 +885,12 @@
"win32"
]
},
+ "node_modules/@standard-schema/spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+ "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -893,9 +899,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.13.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz",
- "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==",
+ "version": "22.13.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz",
+ "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1157,9 +1163,9 @@
}
},
"node_modules/chai": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz",
- "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
+ "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1290,11 +1296,12 @@
"license": "MIT"
},
"node_modules/effect": {
- "version": "3.12.11",
- "resolved": "https://registry.npmjs.org/effect/-/effect-3.12.11.tgz",
- "integrity": "sha512-toXTZx8nNuS7By7EcCHmFT/uOVmkhlCFECsCAI+gNgDJhhMK8FJMjAyuqm5YEA58YJFZmMckuwiFs5Fzr8GiYg==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/effect/-/effect-3.13.1.tgz",
+ "integrity": "sha512-YbA45m51eZapqy/ptZvIIZi+XBj13fPCzbiDRLgxZTEUhKuf4xLzuuSsKc61Y3SIscMM2o+VPht2ty+bVEQHQQ==",
"license": "MIT",
"dependencies": {
+ "@standard-schema/spec": "^1.0.0",
"fast-check": "^3.23.1"
}
},
@@ -1944,9 +1951,9 @@
"license": "MIT"
},
"node_modules/readdirp": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
- "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1968,9 +1975,9 @@
}
},
"node_modules/rollup": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz",
- "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.7.tgz",
+ "integrity": "sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1984,25 +1991,25 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.34.6",
- "@rollup/rollup-android-arm64": "4.34.6",
- "@rollup/rollup-darwin-arm64": "4.34.6",
- "@rollup/rollup-darwin-x64": "4.34.6",
- "@rollup/rollup-freebsd-arm64": "4.34.6",
- "@rollup/rollup-freebsd-x64": "4.34.6",
- "@rollup/rollup-linux-arm-gnueabihf": "4.34.6",
- "@rollup/rollup-linux-arm-musleabihf": "4.34.6",
- "@rollup/rollup-linux-arm64-gnu": "4.34.6",
- "@rollup/rollup-linux-arm64-musl": "4.34.6",
- "@rollup/rollup-linux-loongarch64-gnu": "4.34.6",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6",
- "@rollup/rollup-linux-riscv64-gnu": "4.34.6",
- "@rollup/rollup-linux-s390x-gnu": "4.34.6",
- "@rollup/rollup-linux-x64-gnu": "4.34.6",
- "@rollup/rollup-linux-x64-musl": "4.34.6",
- "@rollup/rollup-win32-arm64-msvc": "4.34.6",
- "@rollup/rollup-win32-ia32-msvc": "4.34.6",
- "@rollup/rollup-win32-x64-msvc": "4.34.6",
+ "@rollup/rollup-android-arm-eabi": "4.34.7",
+ "@rollup/rollup-android-arm64": "4.34.7",
+ "@rollup/rollup-darwin-arm64": "4.34.7",
+ "@rollup/rollup-darwin-x64": "4.34.7",
+ "@rollup/rollup-freebsd-arm64": "4.34.7",
+ "@rollup/rollup-freebsd-x64": "4.34.7",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.34.7",
+ "@rollup/rollup-linux-arm-musleabihf": "4.34.7",
+ "@rollup/rollup-linux-arm64-gnu": "4.34.7",
+ "@rollup/rollup-linux-arm64-musl": "4.34.7",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.34.7",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.34.7",
+ "@rollup/rollup-linux-riscv64-gnu": "4.34.7",
+ "@rollup/rollup-linux-s390x-gnu": "4.34.7",
+ "@rollup/rollup-linux-x64-gnu": "4.34.7",
+ "@rollup/rollup-linux-x64-musl": "4.34.7",
+ "@rollup/rollup-win32-arm64-msvc": "4.34.7",
+ "@rollup/rollup-win32-ia32-msvc": "4.34.7",
+ "@rollup/rollup-win32-x64-msvc": "4.34.7",
"fsevents": "~2.3.2"
}
},
diff --git a/package.json b/package.json
index 8baa70a..6d490b4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "flatmatter",
- "version": "1.1.2",
+ "version": "2.0.0",
"description": "A data serialization language, and library, with support for functions.",
"author": "Asko Nõmm <asko@nmm.ee> (https://nmm.ee)",
"main": "dist/index.js",
@@ -39,6 +39,6 @@
"vitest": "^2.1.8"
},
"dependencies": {
- "effect": "^3.12.10"
+ "effect": "^3.13.1"
}
}
diff --git a/src/flatmatter.ts b/src/flatmatter.ts
index e7e5f6e..d764e77 100644
--- a/src/flatmatter.ts
+++ b/src/flatmatter.ts
@@ -21,6 +21,9 @@ type Function = {
compute(...args: unknown[]): unknown;
};
+/**
+ * State for holding functions
+ */
class FunctionsState extends Context.Tag("FunctionsState")<
FunctionsState,
Ref.Ref<Function[]>
@@ -42,6 +45,9 @@ class ConfigState extends Context.Tag("ConfigState")<
Ref.Ref<Record<string, unknown>>
>() {}
+/**
+ * An Effect which validates that the line has a value separator
+ */
const validateLineHasKeyValEffect = (idx: number, line: string) =>
Effect.gen(function* () {
if (!line.includes(":")) {
@@ -52,7 +58,7 @@ const validateLineHasKeyValEffect = (idx: number, line: string) =>
});
/**
- * Validates that the given line has only one value separator.
+ * An Effect which validates that the given line has only one value separator.
*/
const validateLineHasOnlyOneColonCharEffect = (idx: number, line: string) =>
Effect.gen(function* () {
@@ -75,6 +81,9 @@ const validateLineHasOnlyOneColonCharEffect = (idx: number, line: string) =>
}
});
+/**
+ * An Effect which validates line conformance
+ */
const validateLineConformanceEffect = (idx: number, line: string) =>
Effect.gen(function* () {
const validatorEffects = [
@@ -87,6 +96,13 @@ const validateLineConformanceEffect = (idx: number, line: string) =>
}
});
+/**
+ * Checks if `value` is a simple value, e.g any of:
+ *
+ * - a string (value which is between double quotes)
+ * - a boolean (value which is either true or false)
+ * - a number
+ */
const isSimpleValue = (value: string): boolean => {
const isString = value.startsWith('"') && value.endsWith('"');
const isBoolean = value === "true" || value === "false";
@@ -95,6 +111,9 @@ const isSimpleValue = (value: string): boolean => {
return isString || isBoolean || isNumber;
};
+/**
+ * Parses the simple value string into a typed value.
+ */
const parseSimpleValue = (value: string): string | number | boolean => {
if (value === "true" || value === "false") {
return value === "true";
@@ -111,6 +130,9 @@ const parseSimpleValue = (value: string): string | number | boolean => {
return trimChar(value, '"');
};
+/**
+ * Parses the function value args string into an array of args
+ */
const parseFunctionValueArgs = (value: string): unknown[] => {
const parts = value
.substring(1, value.length - 1)
@@ -141,6 +163,9 @@ const parseFunctionValueArgs = (value: string): unknown[] => {
return normalizedParts.map((part) => parseSimpleValue(part));
};
+/**
+ * Parses the function value into a `ComputeAction`
+ */
const parseFunctionValue = (
value: string,
): Schema.Schema.Type<typeof ComputeAction> => {
@@ -162,6 +187,9 @@ const parseFunctionValue = (
});
};
+/**
+ * Composes the piped value parts from the value string
+ */
const composePipedValueParts = (value: string): string[] => {
const parts = value.split(" / ");
const normalizedParts = [parts[0]];
@@ -184,6 +212,9 @@ const composePipedValueParts = (value: string): string[] => {
return normalizedParts;
};
+/**
+ * Parses the value string into a `ParsedValue`
+ */
const parseValueEffect = (value: string) =>
Effect.gen(function* () {
const parts = composePipedValueParts(value);
@@ -201,6 +232,9 @@ const parseValueEffect = (value: string) =>
});
});
+/**
+ * Computes the `ParsedValue` into a final consumable value
+ */
const computeValueEffect = (parsedValue: typeof ParsedValue.Type) =>
Effect.gen(function* () {
let value = parsedValue.value;
@@ -224,6 +258,9 @@ const computeValueEffect = (parsedValue: typeof ParsedValue.Type) =>
return value;
});
+/**
+ * Parses the FlatMatter line
+ */
const parseLineEffect = (idx: number, line: string) =>
Effect.gen(function* () {
yield* validateLineConformanceEffect(idx, line);
@@ -244,6 +281,9 @@ const parseLineEffect = (idx: number, line: string) =>
});
});
+/**
+ * Parses the FlatMatter content
+ */
const parseContentEffect = Effect.gen(function* () {
const content = yield* Ref.get(yield* ContentState);
const lines = content.split(EOL);
@@ -262,8 +302,10 @@ const parseContentEffect = Effect.gen(function* () {
// FlatMatter ends, Markdown begins
yield* Ref.update(yield* ConfigState, (config) => {
- config.content = lines.slice(i).join(EOL).trim();
- return config;
+ return {
+ ...config,
+ content: lines.slice(i).join(EOL).trim(),
+ };
});
break;
@@ -271,18 +313,18 @@ const parseContentEffect = Effect.gen(function* () {
});
/**
- *
+ * Parses the FlatMatter content into a `Record<string, unknown>` object.
*/
-const composeConfigEffect = Effect.gen(function* () {
- yield* parseContentEffect;
-
- return yield* Ref.get(yield* ConfigState);
-});
-
const config = (
content: string,
functions: Function[] = [],
): Record<string, unknown> => {
+ const composeConfigEffect = Effect.gen(function* () {
+ yield* parseContentEffect;
+
+ return yield* Ref.get(yield* ConfigState);
+ });
+
return Effect.runSync(
composeConfigEffect.pipe(
Effect.provideServiceEffect(ContentState, Ref.make(content)),