
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
A dynamic markup language with support for directives and plugins. More details on kyoml.com
npm install --save kyoml
const kyoml = require('kyoml');
const json = kyoml.compile(`
key1 = 'value1'
key2 = 'value2'
block {
key3 = [1,2,3]
}
`)
Directives can be added anywhere in the document with an @
prefix. In essence they are functions that allow you to alter your document and create enriched experiences.
const kyoml = require('kyoml');
const json = kyoml.compile(`
key1 = 'value1'
key2 = 'value2'
block {
@uppercase
key3 = [1,2,3]
}
`, {
directives: {
uppercase: (node) => {
const {
root, // The root of the entire document
base, // The direct parent on which element you're operating on is
key, // The key on the base which contains the element
path, // The full path from the root (e.g document.block)
value, // The element itself
set, // A handy replace method
get // A getter allowing you to access anything in the entire document
} = node;
// You can now operate on your node
set(_.mapKeys(value, key => key.toUpperCase()));
}
}
})
Output:
{
"key1": "value1",
"key2": "value2",
"block": {
"KEY3": [1,2,3]
}
}
Directives can also take arguments, e.g
const kyoml = require('kyoml');
const json = kyoml.compile(`
@prefix("foo_")
key1 = 'value1'
key2 = 'value2'
block {
key3 = [1,2,3]
}
`, {
directives: {
prefix: ({ value }, prefix) => {
set(_.mapKeys(value, key => prefix + key));
}
}
})
Output:
{
"foo_key1": "value1",
"foo_key2": "value2",
"foo_block": {
"key3": [1,2,3]
}
}
Mappers are simply directives, which replace the value directly
const kyoml = require('kyoml');
const json = kyoml.compile(`
@addProperty("foo")
key1 = 'value1'
key2 = 'value2'
`, {
mappers: {
addProperty: (value, key) => ({ ...value, [key]: 'bar' })
}
})
Output:
{
"key1": "value1",
"key2": "value2",
"foo": "bar"
}
Values can be piped into directives using the directional |>
or |<
operators
e.g
const kyoml = require('kyoml');
const json = kyoml.compile(`
key1 = 'value1' |> @uppercase
key2 = @uppercase <| 'value2'
`, {
mappers: {
uppercase: (value) => (value.toUpperCase())
}
})
Output:
{
"key1": "VALUE1",
"key2": "VALUE2"
}
String interpolation is supported using ${}
Example
block {
hello = 'hello'
subblock {
array = ["world"]
sentence = "${block.hello} ${block.subblock.array[0]}"
}
}
NOTE: only double quoted strings will be interpolated
FAQs
A pluggable dynamic markup language
The npm package kyoml receives a total of 0 weekly downloads. As such, kyoml popularity was classified as not popular.
We found that kyoml demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.