0.1.0 • Published 1 year ago

@libyo/hexo-util v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@napi-rs/hexo-util · License: MIT https://github.com/liby/hexo-util-rs/actions NPM version

Note

Utilities for Hexo. Generated from napi-rs/package-template.

Warning

This project is in Beta stage. And there may some bugs existed.

Installation

$ npm install @libyo/hexo-util
// or
$ yarn add @libyo/hexo-util
// or
$ pnpm add @libyo/hexo-util

Usage

const util = require('@libyo/hexo-util')
Function nameIs RIIRUsageIs Rename
Cache()NoA simple plain object cache
CacheStream()NoCaches contents piped to the stream
camelCaseKeys(obj, options)NoConvert object keys to camelCase
createSha1Hash()NoReturn SHA1 hash object
decodeUrl(str)YesDecode encoded URL or pathdecodeURL => decodeUrl
deepMerge(target, source)NoMerges the enumerable properties of two objects deeply
encodeUrl(str)YesEncode URL or path into a safe formatencodeURL => encodeUrl
escapeDiacritic(str)YesEscapes diacritic characters in a string
escapeHtml(str)YesEscapes HTML entities in a string.escapeHTML => escapeHtml
escapeRegExp(str)YesEscapes special characters in a regular expressionescapeRegex => escapeRegExp
full_url_for(path)NoReturns a url with the config.url prefixedfull_url_for => fullUrlFor
gravatar(str, [options])NoReturns the gravatar image url from an email
hash(str)NoGenerates SHA1 hash
highlight(str, [options])NoSyntax highlighting for a code block
htmlTag(tag, attrs, text, escape)NoCreates a html tag
isExternalLink(url, sitehost, [exclude])YesReturns if a given url is external link relative to given sitehost and [exclude]
Pattern(rule)NoParses the string and tests if the string matches the rule
Permalink(rule, [options])NoParses a permalink
prettyUrls(url, [options])n/aRewrite urls to pretty URLs
prismHighlight(str, [options])NoSyntax highlighting for a code block using PrismJS
relativeUrl(from, to)NoReturns the relative URL from from to torelative_url => relativeUrl
slugize(str, [options])YesTransforms a string into a clean URL-friendly string
spawn(command, [args], [options])NoLaunches a new process with the given command
stripTags(str)YesRemoves HTML tags in a stringstripHTML => stripTags
stripIndent(str)NoStrip leading whitespace from each line in a string
wordWrap(str, [options])n/aWraps the string no longer than line width
tocObj(str, [options])n/aGenerate a table of contents in JSON format based on the given html string
truncate(str, [options])n/aTruncates a given text after a given length if text is longer than length
unescapeHtml(str)YesUnescapes HTML entities in a stringunescapeHTML => unescapeHtml
urlFor(path, [option])NoReturns a url with the root path prefixedurl_for => urlFor

Note

full_url_for, url_for, relative_url require bind or call to parse the user config when initializing.

Performance

See benchmark for benchmark code.

Hardware info:

System Version: macOS 12.4 (21F79)
Kernel Version: Darwin 21.5.0
Processor Name: 8-Core Intel Core i9
Processor Speed: 2.3 GHz
L2 Cache (per Core): 256 KB
L3 Cache: 16 MB![img.png](img.png)
Memory: 32 GB

Benchmark:

❯ yarn bench
Running "mini fixture" suite...
Progress: 100%

  hexo-util-rs-buffer:
    1 343 399 ops/s, ±0.55%   | 12.9% slower

  hexo-util-rs:
    1 542 449 ops/s, ±0.44%   | fastest

  hexo-util:
    933 979 ops/s, ±1.30%     | 39.45% slower

  striptags:
    466 526 ops/s, ±1.55%     | 69.75% slower

  string-strip-html:
    13 805 ops/s, ±11.48%      | slowest, 99.1% slower

Finished 5 cases!
  Fastest: hexo-util-rs
  Slowest: string-strip-html
Running "large fixture" suite...
Progress: 100%

  hexo-util-rs-buffer:
    816 ops/s, ±2.62%   | fastest

  hexo-util-rs:
    631 ops/s, ±3.68%   | 22.67% slower

  hexo-util:
    285 ops/s, ±4.13%   | 65.07% slower

  striptags:
    141 ops/s, ±1.45%   | 82.72% slower

  string-strip-html:
    7 ops/s, ±8.74%     | slowest, 99.14% slower

Finished 5 cases!
  Fastest: hexo-util-rs-buffer
  Slowest: string-strip-html
❯ yarn bench
Running "slugify and escape diacritic" suite...
Progress: 100%

  hexo-util-rs:
    1 104 153 ops/s, ±0.30%   | fastest

  hexo-util:
    255 709 ops/s, ±0.61%     | slowest, 76.84% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
❯ yarn bench
Running "Internal absolute url" suite...
Progress: 50%

  hexo-util-rs:
    1 038 833 ops/s, ±0.37%
Progress: 100%

  hexo-util-rs:
    1 038 833 ops/s, ±0.37%   | fastest

  hexo-util:
    214 596 ops/s, ±0.30%     | slowest, 79.34% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "External absolute url" suite...
Progress: 50%

  hexo-util-rs:
    953 787 ops/s, ±0.41%
Progress: 100%

  hexo-util-rs:
    953 787 ops/s, ±0.41%   | fastest

  hexo-util:
    203 306 ops/s, ±0.45%   | slowest, 78.68% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Relative absolute url" suite...
Progress: 50%

  hexo-util-rs:
    42 956 520 ops/s, ±0.87%
Progress: 100%

  hexo-util-rs:
    42 956 520 ops/s, ±0.87%   | fastest

  hexo-util:
    18 071 147 ops/s, ±0.63%   | slowest, 57.93% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
❯ yarn bench
Running "Encode URL - auth" suite...
Progress: 50%

  hexo-util-rs:
    1 299 520 ops/s, ±0.86%
Progress: 100%

  hexo-util-rs:
    1 299 520 ops/s, ±0.86%   | fastest

  hexo-util:
    255 364 ops/s, ±0.92%     | slowest, 80.35% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Encode URL - Internationalized domain name" suite...
Progress: 50%

  hexo-util-rs:
    599 196 ops/s, ±0.87%
Progress: 100%

  hexo-util-rs:
    599 196 ops/s, ±0.87%   | fastest

  hexo-util:
    177 869 ops/s, ±1.89%   | slowest, 70.32% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Encode URL - path with unicode" suite...
Progress: 50%

  hexo-util-rs:
    1 348 834 ops/s, ±1.38%
Progress: 100%

  hexo-util-rs:
    1 348 834 ops/s, ±1.38%   | fastest

  hexo-util:
    1 111 192 ops/s, ±7.06%   | slowest, 17.62% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
❯ yarn bench
Running "Decode URL - regular" suite...
Progress: 50%

  hexo-util-rs:
    1 632 744 ops/s, ±0.75%
Progress: 100%

  hexo-util-rs:
    1 632 744 ops/s, ±0.75%   | fastest

  hexo-util:
    272 866 ops/s, ±1.70%     | slowest, 83.29% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Decode URL - path with space" suite...
Progress: 50%

  hexo-util-rs:
    2 630 212 ops/s, ±1.67%
Progress: 100%

  hexo-util-rs:
    2 630 212 ops/s, ±1.67%   | fastest

  hexo-util:
    1 959 248 ops/s, ±0.72%   | slowest, 25.51% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Decode URL - space" suite...
Progress: 50%

  hexo-util-rs:
    1 228 376 ops/s, ±6.64%
Progress: 100%

  hexo-util-rs:
    1 228 376 ops/s, ±6.64%   | fastest

  hexo-util:
    239 213 ops/s, ±1.72%     | slowest, 80.53% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Decode URL - hash and query" suite...
Progress: 50%

  hexo-util-rs:
    781 550 ops/s, ±1.90%
Progress: 100%

  hexo-util-rs:
    781 550 ops/s, ±1.90%   | fastest

  hexo-util:
    166 420 ops/s, ±1.78%   | slowest, 78.71% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "Decode URL - Internationalized domain name" suite...
Progress: 50%

  hexo-util-rs:
    492 862 ops/s, ±6.49%
Progress: 100%

  hexo-util-rs:
    492 862 ops/s, ±6.49%   | fastest

  hexo-util:
    155 205 ops/s, ±1.46%   | slowest, 68.51% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
❯ yarn bench
Running "default" suite...
Progress: 50%

  hexo-util-rs:
    4 152 262 ops/s, ±1.20%
Progress: 100%

  hexo-util-rs:
    4 152 262 ops/s, ±1.20%   | fastest

  hexo-util:
    2 334 729 ops/s, ±1.62%   | slowest, 43.77% slower

Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
❯ yarn bench
Running "mini fixture" suite...
Progress: 33%

  hexo-util-rs-buffer:
    996 155 ops/s, ±1.41%
Progress: 67%

  hexo-util-rs-buffer:
    996 155 ops/s, ±1.41%

  hexo-util-rs:
    1 188 802 ops/s, ±0.36%
Progress: 100%

  hexo-util-rs-buffer:
    996 155 ops/s, ±1.41%     | 16.21% slower

  hexo-util-rs:
    1 188 802 ops/s, ±0.36%   | fastest

  hexo-util:
    677 794 ops/s, ±0.37%     | slowest, 42.99% slower

Finished 3 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "large fixture" suite...
Progress: 33%

  hexo-util-rs-buffer:
    30 402 ops/s, ±0.64%
Progress: 67%

  hexo-util-rs-buffer:
    30 402 ops/s, ±0.64%

  hexo-util-rs:
    27 585 ops/s, ±1.81%
Progress: 100%

  hexo-util-rs-buffer:
    30 402 ops/s, ±0.64%   | fastest

  hexo-util-rs:
    27 585 ops/s, ±1.81%   | 9.27% slower

  hexo-util:
    15 185 ops/s, ±0.58%   | slowest, 50.05% slower

Finished 3 cases!
  Fastest: hexo-util-rs-buffer
  Slowest: hexo-util
❯ yarn bench
Running "mini fixture" suite...
Progress: 33%

  hexo-util-rs-buffer:
    1 406 688 ops/s, ±2.06%
Progress: 67%

  hexo-util-rs-buffer:
    1 406 688 ops/s, ±2.06%

  hexo-util-rs:
    2 013 858 ops/s, ±0.73%
Progress: 100%

  hexo-util-rs-buffer:
    1 406 688 ops/s, ±2.06%   | 30.15% slower

  hexo-util-rs:
    2 013 858 ops/s, ±0.73%   | fastest

  hexo-util:
    954 610 ops/s, ±0.40%     | slowest, 52.6% slower

Finished 3 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util
Running "large fixture" suite...
Progress: 33%

  hexo-util-rs-buffer:
    101 859 ops/s, ±1.56%
Progress: 67%

  hexo-util-rs-buffer:
    101 859 ops/s, ±1.56%

  hexo-util-rs:
    96 883 ops/s, ±2.48%
Progress: 100%

  hexo-util-rs-buffer:
    101 859 ops/s, ±1.56%   | fastest

  hexo-util-rs:
    96 883 ops/s, ±2.48%    | 4.89% slower

  hexo-util:
    32 949 ops/s, ±1.36%    | slowest, 67.65% slower

Finished 3 cases!
  Fastest: hexo-util-rs-buffer
  Slowest: hexo-util
❯ yarn bench
Running "default" suite...
Progress: 50%
  hexo-util-rs:
    4 833 899 ops/s, ±0.47%
Progress: 100%
  hexo-util-rs:
    4 833 899 ops/s, ±0.47%   | fastest
  hexo-util:
    3 128 195 ops/s, ±1.36%   | slowest, 35.29% slower
Finished 2 cases!
  Fastest: hexo-util-rs
  Slowest: hexo-util

License

MIT