Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@jsenv/url-meta

Package Overview
Dependencies
Maintainers
2
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jsenv/url-meta

Associate data to urls using patterns.

  • 5.2.3
  • Source
  • npm
  • Socket score

Version published
Maintainers
2
Created
Source

url-meta

Associate data to urls using patterns.

github package npm package github ci codecov coverage

Table of contents

Presentation

@jsenv/url-meta can be used to associate value to urls. You can associate a value to many urls using pattern matching.

import { urlToMeta } from "@jsenv/url-meta"

// note how specifierMetaMap object below associates object to urls
const specifierMetaMap = {
  "http://example.com/*": {
    color: "black",
  },
  "http://example.com/*.js": {
    color: "red",
  },
}

const urlA = "http://example.com/file.json"
const urlAMeta = urlToMeta({ specifierMetaMap, url: urlA }).color
const urlB = "http://example.com/file.js"
const urlBMeta = urlToMeta({ specifierMetaMap, url: urlB }).color

console.log(`${urlA} color is ${urlAMeta.color}`)
console.log(`${urlB} color is ${urlBMeta.color}`)

Code above logs

http://example.com/file.json color is black
http://example.com/file.js color is red

Installation

npm install @jsenv/url-meta

Works with node 13.7.0 and 12.8.0 other versions not tested.

Pattern matching behaviour

The table below gives an idea of how pattern matching behaves.

specifierurlmatches
http://example.com/whateverhttp://example.com/whatever/file.jsfalse
http://example.com/whatever/http://example.com/whatever/file.jstrue
http://example.com/whatever/*.jshttp://example.com/whatever/file.jstrue
http://example.com/whatever/**/*.jshttp://example.com/whatever/file.jstrue
http://example.com/**/*.jshttp://example.com/whatever/file.jstrue
http://example.com/whatever/file.jshttp://example.com/whatever/file.jstrue
http://example.com/whatever/file.jsxhttp://example.com/whatever/file.jsfalse

applySpecifierPatternMatching

applySpecifierPatternMatching is a function returning a matchResult indicating if and how a specifier matches an url.

import { applySpecifierPatternMatching } from "@jsenv/url-meta"

const matchResult = applySpecifierPatternMatching({
  specifier: "file:///**/*",
  url: "file://Users/directory/file.js",
})

matchResult.matched // true

— source code at src/createLogger.js.

specifier

specifier parameter is a string looking like an url but where * and ** can be used so that one specifier can match several url. This parameter is required.

url

url parameter is a string representing a url. This parameter is required.

matchResult

matchResult represents if and how specifier matches url. It is returned by applySpecifierPatternMatching.

const fullMatch = applySpecifierPatternMatching({
  specifier: "file:///**/*",
  url: "file://Users/directory/file.js",
})
fullMatch // { matched: true, index: 31, patternIndex: 12 }

const partialMatch = applySpecifierPatternMatching({
  specifier: "file:///*.js",
  url: "file:///file.jsx",
})
partialMatch // { matched: false, index: 14, patternIndex: 14 }

fullMatch object indicates specifier fully matched url.
partialMatch object indicates specifier matched url until comparing url[14] with specifier[14].

metaMapToSpecifierMetaMap

metaMapToSpecifierMetaMap is a function used to convert a metaMap into a specifierMetaMap.

import { metaMapToSpecifierMetaMap } from "@jsenv/url-meta"

metaMapToSpecifierMetaMap({
  show: {
    "file:///**/*": "yes",
    "file://**/.git/": "no",
  },
  format: {
    "file:///**/*.js": "yes",
    "file:///**/*.json": "yes",
    "file://**/.git/": "no",
  },
})

Returns

{
  "file:///**/*": { show: "yes" },
  "file://**/.git": { show: "no", format: "no" },
  "file:///**/*.js": { show: "yes", format: "yes" },
  "file:///**/*.json": { show: "yes", format: "yes" },
}

— source code at src/metaMapToSpecifierMetaMap.js.

metaMap

metaMap parameter is an object where values are conditionnaly applied by specifiers. This parameter is required.

specifierMetaMap

specifierMetaMap is an object where meta (other objects) are conditionnaly applied by specifier. It is returned by metaMapToSpecifierMetaMap.

normalizeSpecifierMetaMap

normalizeSpecifierMetaMap is a function resolving specifierMetaMap keys against an url.

import { normalizeSpecifierMetaMap } from "@jsenv/url-meta"

const specifierMetaMapNormalized = normalizeSpecifierMetaMap(
  {
    "./**/*/": { visible: true },
    "./**/.git/": { visible: false },
  },
  "file:///Users/directory/",
)

— source code at src/normalizeSpecifierMetaMap.js.

urlCanContainsMetaMatching

urlCanContainsMetaMatching is a function designed to ignore directory content that would never have specific metas.

import { urlCanContainsMetaMatching } from "@jsenv/url-meta"

const specifierMetaMap = {
  "file:///**/*": {
    color: "blue",
  },
  "file:///**/node_modules": {
    color: "green",
  },
}
const bluePredicate = ({ color }) => color === "blue"

const urlA = "file:///src/"
const urlACan = urlCanContainsMetaMatching({
  url: urlA,
  specifierMetaMap,
  predicate: bluePredicate,
})
const urlB = "file:///node_modules/src/"
const urlBCan = urlCanContainsMetaMatching({
  url: urlB,
  specifierMetaMap,
  predicate: bluePredicate,
})

console.log(`${urlA} can contains meta matching blue predicate: ${urlACan}`)
console.log(`${urlB} can contains meta matching blue predicate: ${urlBCan}`)

Console output

file:///src/ can contains meta matching blue predicate: true
file:///node_modules/src/ can contains meta matching blue predicate: false

— source code at src/urlCanContainsMetaMatching.js.

urlToMeta

urlToMeta is a function returning an object being the composition of all object associated with a matching specifier.

import { urlToMeta } from "@jsenv/url-meta"

const specifierMetaMap = {
  "file:///src/": {
    insideSrc: true,
  },
  "file:///**/*.js": {
    extensionIsJs: true,
  },
}

const urlA = "file:///src/file.js"
const urlB = "file:///src/file.json"

console.log(`${urlA}: ${JSON.stringify(urlToMeta({ url: urlA, specifierMetaMap }), null, "  ")}`)
console.log(`${urlB}: ${JSON.stringify(urlToMeta({ url: urlB, specifierMetaMap }), null, "  ")}`)

Console output

file:///src/file.js: {
  "insideSrc": true,
  "extensionIsJs": true,
}
file:///src/file.json: {
  "insideSrc": true
}

— source code at src/urlToMeta.js.

FAQs

Package last updated on 20 Mar 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc