包详细信息

keystone-utils

JedWatson4.6kMIT0.4.0

A useful library of utilities used by KeystoneJS, and you!

util, utils, string manipulation, conversion

自述文件

Keystone Utils

A useful library of utilities for node.js used by KeystoneJS and you!

It provides additional functionality for manipulating and converting various types of data, including converting strings between various forms, and lightweight html ← → text conversion.

Usage

npm install keystone-utils --save

... then ...

var utils = require('keystone-utils');
console.log(utils.isObject({})); // true!

Bundled with KeystoneJS

If you're using KeystoneJS, it exposes this library as .utils.

var keystone = require('keystone');
var utils = keystone.utils;

Test utilities

  • isFunction(arg) - determines if arg is a function
  • isObject(arg) - determines if arg is an object
  • isValidObjectId(arg) - determines if arg looks like a valid MongoDB ObjectId
  • isArray(arg) - determines if arg is an array
  • isDate(arg) - determines if arg is a date
  • isString(arg) - determines if arg is a string
  • isNumber(arg) - determines if arg is a number
  • isDataURL(arg) - determines if arg is a base64 encoded data URI
  • isEmail(arg) - make sure arg looks like a valid email address

Option utilities

  • options(defaults, options) - copies and merges options into the defaults
  • optionsMap(arr, property, clone) - creates a map of options
    • Turns an array of objects into an object of objects, with each object under the value of property
    • Performs a deep clone of the objects when clone is set to true

Function utilities

  • noop() - a simple function that does nothing ("no operation")
  • defer(fn, args...) - wraps the function and invokes it in process.nextTick, great for Zalgo containment
  • bindMethods(obj, scope) - recursively binds method properties of obj to scope and returns a new object containing the bound methods.

Random utilities

  • randomString(len, chars) - Generates a 'random' string of characters to the specified length (uses Math.random).
    • len can be an array of [min, max] length to generate
    • chars is a string of characters to include, defaults to 0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz

Conversion utilities

  • number(arg) - converts a string to a number, accepting human-friendly input
    • e.g. 1,432 » 1432, $1432 » 1432, 2.5 » 2.5
  • escapeRegExp(str) - escapes a string to be safely converted to a regular expression
  • escapeString(str) - escapes a string to be safely used as a Javascript string literal
  • stripDiacritics(str) - stips accented characters from a string, replacing them with their simple equivalents
  • transliterate(str) - transliterates Russian and Ukrainian words from cyrillic to latin
  • singular(str) - converts a string to its singular form
  • plural(count, singular, plural) - displays the singular or plural of a string based on a number or number of items in an array.
    • Replaces * in the string with the number
    • Will automatically convert singular to plural when plural is not provided
    • When only given one argument, will return the plural form of a string
    • e.g.
      • plural(1, '* thing') » '1 thing'
      • plural(2, '* thing') » '2 things'
      • plural([1,2], 'single', 'couple') » 'couple'
      • plural('friend') » 'friends'
  • upcase(str) - converts the first letter in a string to Uppercase
  • downcase(str) - converts the first letter in a string to lowercase
  • titlecase(str) - converts a string to Title Case
  • camelcase(str, lowercase) - converts a string to camelCase
    • The lowercase argument causes the first letter to be lowercase, and default to true.
  • decodeHTMLEntities(str) - decodes html entities in a string
  • encodeHTMLEntities(str) - encodes html entities in a string
  • stringify(obj) - safely stringifies an object to JSON for output in JavaScript source (escapes illegal JS but valid JSON unicode characters)
  • textToHTML(str) - lightweight conversion of text to HTML (line breaks to <br>)
  • htmlToText(str) - lightweight conversion to HTML to text
    • Really only useful when you need a lightweight way to remove html from a string before cropping it, so you don't end up with partial tags or an invalid DOM structure.
    • It will convert br, p, div, li, td, th tags to single line-breaks. All other tags are stripped.
    • Multiple line breaks are then compressed to a single line break, and leading / trailing white space is stripped.
    • For a more sophisticated use-case, you should check out the to-markdown and html-to-text packages on npm.
  • cropString(str, length, append, preserveWords) - crops a string to the specified length
    • You can optionally provide a string to append (only appended if the original string was longer than the specified length).
    • If preserveWords is true, the length is extended to the end of the last word that would have been cropped.
  • cropHTMLString(str, length, append, preserveWords) - crops an HTML string safely by converting it to text, cropping it, then converting it back to HTML
  • slug(str, separator) - generates a slug from a string. Word breaks are hyphenated.
    • separator defaults to '-'
  • keyToLabel(str) - converts a key to a label
    • e.g. keyToLabel('myKey') » My Key
  • keyToPath(str, plural) - converts a key to a path
    • Like slug(keyToLabel(str)) but will optionally converts the last word to a plural.
    • e.g. keyToPath('someThing', true) » some-things
  • keyToProperty(str, plural) - Converts a key to a property.
    • Like keyToPath but converts to headlessCamelCase instead of dash-separated
  • calculateDistance(point1 [lat, lng], point2 [lat, lng]) - Returns the distance between two [lat,lng] points in radians
  • kmBetween - Returns the distance between two [lat,lng] points in kilometers
  • milesBetween - Returns the distance between two [lat,lng] points in miles

Credits

Uses the inflect library for singular / plural conversion, see https://github.com/pksunkara/inflect or npm info i

Some utils are borrowed from / inspired by mongoose/utils.js, see https://github.com/LearnBoost/mongoose

HTML Entity encode / decode is based on code in node-html-to-text, see https://github.com/werk85/node-html-to-text

The transliteration code is based on https://www.npmjs.org/package/transliteration.cyr

更新日志

Changelog

v0.4.0 / 2016-05-08

  • fixed; switched slug dependency to speakingurl for Node.js v0.10+ support

Hopefully this is the last of the rapid releases we'll have switching out the slug package. SpeakingURL works with all Node.js versions from v0.10 to 6, and has full feature parity with the slug package we were previously using.

Support for limax is still in place, if you need support for Latin, Cyrillic, Chinese and Japanese characters simply install it in your project.

v0.3.6 / 2016-05-08

  • fixed; switched slug dependency back to slug due to problems in Keystone proper

v0.3.5 / 2016-05-06

  • fixed; switched slug dependency to mollusc (fork of slug) for Node.js v6+ support

v0.3.4 / 2016-02-18

  • added; defer method

v0.3.3 / 2016-02-14

v0.3.2 / 2015-12-05

  • added; noop method
  • fixed; exports.kmBetween was incorrectly pointing at milesBetween

Thanks to Adnan Asani for the fixes in this release

v0.3.1 / 2015-11-29

  • removed; underscore dependency (requied methods are now included in index.js)
  • changed; options now augments and returns the first argument

Thanks to Adnan Asani for the fixes in this release

v0.3.0 / 2015-07-31

  • changed; now shipping with the slug package by default

limax is now an optional package due to ongoing build issues with its dependencies on certain platforms. To use it (if you want support for Latin, Cyrillic, Chinese and Japanese characters) simply install it in your project; it will automatically be detected and used by keystone-utils.slug().

v0.2.3 / 2015-07-15

  • updated; randomString has now been published as its own package randomkey, still available as utils.randomString

v0.2.2 / 2015-07-14

  • updated; limax dependency, previous version was causing some build issues

v0.2.1 / 2015-07-12

  • fixed; issues with htmlToText and decodeHTMLEntities, thanks Armel Larcier
  • improved; options method rewritten for clarity, and tests added

v0.2.0 / 2015-05-31

  • added; happiness linter
  • fixed; all linter warnings :)
  • changed; now using limax to generate slugs, which handles Latin, Cyrillic, Chinese and Japanese

Special thanks to Arthur Chan and Lovell Fuller for their help getting limax integrated and working with our tests!

v0.1.12 / 2014-08-29

  • updated; underscore to ~0.1.7

v0.1.11 / 2014-08-29

  • fixed; String functions now correctly convert anything with a toString() method instead of returning a blank string

v0.1.10 / 2014-05-28

  • fixed; Handle smart apostrophe in slug, thanks Alan Shaw
  • improved; Tests converted to mocha, run with npm test. thanks Stefan Aebischer

v0.1.9 / 2014-04-1

  • added; calculateDistance, kmBetween and milesBetween distance calculation methods

v0.1.8 / 2014-03-27

  • added; support for transliterating Russian and Ukranian words in exports.slug via exports.transliterate, thanks DrMoriarty

v0.1.7 / 2014-03-18

  • added; support for converting accented characters (diacritics) to their simple equivalents in exports.slug via exports.stripDiacritics

v0.1.6 / 2014-01-24

  • added; escapeString method

v0.1.5 / 2014-01-24

  • fixed; better protection for string conversion functions with undefined / non-string arguments

v0.1.4 / 2013-12-23

  • fixed; exports.encodeHTMLEntities was missing, incorrectly overriding exports.decodeHTMLEntities

v0.1.3 / 2013-12-06

  • added; randomString method

v0.1.2 / 2013-12-03

  • improved; support for extended characters in utils.pathToLabel #2, thanks itzaks

v0.1.1 / 2013-11-18

v0.1.0 / 2013-11-06

  • initial release; branched from core KeystoneJS codebase