url-meta
@jsenv/url-meta allows to associate value to urls using pattern matching.
import { urlToMeta } from "@jsenv/url-meta"
const structuredMetaMap = {
color: {
"file:///*": "black",
"file:///*.js": "red",
},
}
const urlToColor = (url) => {
return urlToMeta({ url, structuredMetaMap }).color
}
console.log(`file.json color is ${urlToColor("file:///file.json")}`)
console.log(`file.js color is ${urlToColor("file:///file.js")}`)
Code above logs
file.json color is black
file.js color is red
Common pattern example
pattern | Description |
---|
**/ | Everything |
*/**/ | Inside a directory |
**/.*/ | Inside directory starting with a dot |
**/node_modules/ | Inside any node_modules directory |
node_modules/ | Inside root node_modules directory |
**/*.map | Ending with .map |
**/*.test.* | Contains .test. |
* | Inside the root directory only |
*/* | Inside a directory of depth 1 |
Read more at ./docs/pattern_matching.md
metaMap and structuredMetaMap
metaMap and structuredMetaMap below translates into: "files are visible except thoose in .git/ directory"
const metaMap = {
"**/*": { visible: true },
"**/.git/": { visible: false },
}
const structuredMetaMap = {
visible: {
"**/*/": true,
"**/.git/": false,
},
}
structuredMetaMap allows to group patterns per property which are easier to read and compose.
All keys in structuredMetaMap must be resolved against an url, this can be done with normalizeStructuredMetaMap.
normalizeStructuredMetaMap
normalizeStructuredMetaMap is a function resolving structuredMetaMap keys against an url.
import { normalizeStructuredMetaMap } from "@jsenv/url-meta"
const structuredMetaMapNormalized = normalizeStructuredMetaMap(
{
visible: {
"**/*/": true,
"**/.git/": false,
},
},
"file:///Users/directory/",
)
console.log(JSON.stringify(structuredMetaMapNormalized, null, " "))
{
"visible": {
"file:///Users/directory/**/*/": true,
"file:///Users/directory/**/.git/": false
}
}
Installation
npm install @jsenv/url-meta
Can be used in browsers and Node.js.