Simple email application for Android. Original source code: https://framagit.org/dystopia-project/simple-email
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
9.8 KiB

  1. JS-YAML - YAML 1.2 parser / writer for JavaScript
  2. =================================================
  3. [![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml)
  4. [![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml)
  5. __[Online Demo](http://nodeca.github.com/js-yaml/)__
  6. This is an implementation of [YAML](http://yaml.org/), a human-friendly data
  7. serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was
  8. completely rewritten from scratch. Now it's very fast, and supports 1.2 spec.
  9. Installation
  10. ------------
  11. ### YAML module for node.js
  12. ```
  13. npm install js-yaml
  14. ```
  15. ### CLI executable
  16. If you want to inspect your YAML files from CLI, install js-yaml globally:
  17. ```
  18. npm install -g js-yaml
  19. ```
  20. #### Usage
  21. ```
  22. usage: js-yaml [-h] [-v] [-c] [-t] file
  23. Positional arguments:
  24. file File with YAML document(s)
  25. Optional arguments:
  26. -h, --help Show this help message and exit.
  27. -v, --version Show program's version number and exit.
  28. -c, --compact Display errors in compact mode
  29. -t, --trace Show stack trace on error
  30. ```
  31. ### Bundled YAML library for browsers
  32. ``` html
  33. <!-- esprima required only for !!js/function -->
  34. <script src="esprima.js"></script>
  35. <script src="js-yaml.min.js"></script>
  36. <script type="text/javascript">
  37. var doc = jsyaml.load('greeting: hello\nname: world');
  38. </script>
  39. ```
  40. Browser support was done mostly for the online demo. If you find any errors - feel
  41. free to send pull requests with fixes. Also note, that IE and other old browsers
  42. needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate.
  43. Notes:
  44. 1. We have no resources to support browserified version. Don't expect it to be
  45. well tested. Don't expect fast fixes if something goes wrong there.
  46. 2. `!!js/function` in browser bundle will not work by default. If you really need
  47. it - load `esprima` parser first (via amd or directly).
  48. 3. `!!bin` in browser will return `Array`, because browsers do not support
  49. node.js `Buffer` and adding Buffer shims is completely useless on practice.
  50. API
  51. ---
  52. Here we cover the most 'useful' methods. If you need advanced details (creating
  53. your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and
  54. [examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more
  55. info.
  56. ``` javascript
  57. yaml = require('js-yaml');
  58. fs = require('fs');
  59. // Get document, or throw exception on error
  60. try {
  61. var doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8'));
  62. console.log(doc);
  63. } catch (e) {
  64. console.log(e);
  65. }
  66. ```
  67. ### safeLoad (string [ , options ])
  68. **Recommended loading way.** Parses `string` as single YAML document. Returns a JavaScript
  69. object or throws `YAMLException` on error. By default, does not support regexps,
  70. functions and undefined. This method is safe for untrusted data.
  71. options:
  72. - `filename` _(default: null)_ - string to be used as a file path in
  73. error/warning messages.
  74. - `onWarning` _(default: null)_ - function to call on warning messages.
  75. Loader will throw on warnings if this function is not provided.
  76. - `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use.
  77. - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects:
  78. http://www.yaml.org/spec/1.2/spec.html#id2802346
  79. - `JSON_SCHEMA` - all JSON-supported types:
  80. http://www.yaml.org/spec/1.2/spec.html#id2803231
  81. - `CORE_SCHEMA` - same as `JSON_SCHEMA`:
  82. http://www.yaml.org/spec/1.2/spec.html#id2804923
  83. - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones
  84. (`!!js/undefined`, `!!js/regexp` and `!!js/function`):
  85. http://yaml.org/type/
  86. - `DEFAULT_FULL_SCHEMA` - all supported YAML types.
  87. - `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error.
  88. NOTE: This function **does not** understand multi-document sources, it throws
  89. exception on those.
  90. NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions.
  91. So, the JSON schema is not as strictly defined in the YAML specification.
  92. It allows numbers in any notation, use `Null` and `NULL` as `null`, etc.
  93. The core schema also has no such restrictions. It allows binary notation for integers.
  94. ### load (string [ , options ])
  95. **Use with care with untrusted sources**. The same as `safeLoad()` but uses
  96. `DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types:
  97. `!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources, you
  98. must additionally validate object structure to avoid injections:
  99. ``` javascript
  100. var untrusted_code = '"toString": !<tag:yaml.org,2002:js/function> "function (){very_evil_thing();}"';
  101. // I'm just converting that string, what could possibly go wrong?
  102. require('js-yaml').load(untrusted_code) + ''
  103. ```
  104. ### safeLoadAll (string [, iterator] [, options ])
  105. Same as `safeLoad()`, but understands multi-document sources. Applies
  106. `iterator` to each document if specified, or returns array of documents.
  107. ``` javascript
  108. var yaml = require('js-yaml');
  109. yaml.safeLoadAll(data, function (doc) {
  110. console.log(doc);
  111. });
  112. ```
  113. ### loadAll (string [, iterator] [ , options ])
  114. Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default.
  115. ### safeDump (object [ , options ])
  116. Serializes `object` as a YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will
  117. throw an exception if you try to dump regexps or functions. However, you can
  118. disable exceptions by setting the `skipInvalid` option to `true`.
  119. options:
  120. - `indent` _(default: 2)_ - indentation width to use (in spaces).
  121. - `skipInvalid` _(default: false)_ - do not throw on invalid types (like function
  122. in the safe schema) and skip pairs and single values with such types.
  123. - `flowLevel` (default: -1) - specifies level of nesting, when to switch from
  124. block to flow style for collections. -1 means block style everwhere
  125. - `styles` - "tag" => "style" map. Each tag may have own set of styles.
  126. - `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use.
  127. - `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a
  128. function, use the function to sort the keys.
  129. - `lineWidth` _(default: `80`)_ - set max line width.
  130. - `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references
  131. - `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older
  132. yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1
  133. - `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded.
  134. The following table show availlable styles (e.g. "canonical",
  135. "binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml
  136. output is shown on the right side after `=>` (default setting) or `->`:
  137. ``` none
  138. !!null
  139. "canonical" -> "~"
  140. "lowercase" => "null"
  141. "uppercase" -> "NULL"
  142. "camelcase" -> "Null"
  143. !!int
  144. "binary" -> "0b1", "0b101010", "0b1110001111010"
  145. "octal" -> "01", "052", "016172"
  146. "decimal" => "1", "42", "7290"
  147. "hexadecimal" -> "0x1", "0x2A", "0x1C7A"
  148. !!bool
  149. "lowercase" => "true", "false"
  150. "uppercase" -> "TRUE", "FALSE"
  151. "camelcase" -> "True", "False"
  152. !!float
  153. "lowercase" => ".nan", '.inf'
  154. "uppercase" -> ".NAN", '.INF'
  155. "camelcase" -> ".NaN", '.Inf'
  156. ```
  157. Example:
  158. ``` javascript
  159. safeDump (object, {
  160. 'styles': {
  161. '!!null': 'canonical' // dump null as ~
  162. },
  163. 'sortKeys': true // sort object keys
  164. });
  165. ```
  166. ### dump (object [ , options ])
  167. Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default).
  168. Supported YAML types
  169. --------------------
  170. The list of standard YAML tags and corresponding JavaScipt types. See also
  171. [YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and
  172. [YAML types repository](http://yaml.org/type/).
  173. ```
  174. !!null '' # null
  175. !!bool 'yes' # bool
  176. !!int '3...' # number
  177. !!float '3.14...' # number
  178. !!binary '...base64...' # buffer
  179. !!timestamp 'YYYY-...' # date
  180. !!omap [ ... ] # array of key-value pairs
  181. !!pairs [ ... ] # array or array pairs
  182. !!set { ... } # array of objects with given keys and null values
  183. !!str '...' # string
  184. !!seq [ ... ] # array
  185. !!map { ... } # object
  186. ```
  187. **JavaScript-specific tags**
  188. ```
  189. !!js/regexp /pattern/gim # RegExp
  190. !!js/undefined '' # Undefined
  191. !!js/function 'function () {...}' # Function
  192. ```
  193. Caveats
  194. -------
  195. Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects
  196. or arrays as keys, and stringifies (by calling `toString()` method) them at the
  197. moment of adding them.
  198. ``` yaml
  199. ---
  200. ? [ foo, bar ]
  201. : - baz
  202. ? { foo: bar }
  203. : - baz
  204. - baz
  205. ```
  206. ``` javascript
  207. { "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] }
  208. ```
  209. Also, reading of properties on implicit block mapping keys is not supported yet.
  210. So, the following YAML document cannot be loaded.
  211. ``` yaml
  212. &anchor foo:
  213. foo: bar
  214. *anchor: duplicate key
  215. baz: bat
  216. *anchor: duplicate key
  217. ```
  218. Breaking changes in 2.x.x -> 3.x.x
  219. ----------------------------------
  220. If you have not used __custom__ tags or loader classes and not loaded yaml
  221. files via `require()`, no changes are needed. Just upgrade the library.
  222. Otherwise, you should:
  223. 1. Replace all occurrences of `require('xxxx.yml')` by `fs.readFileSync()` +
  224. `yaml.safeLoad()`.
  225. 2. rewrite your custom tags constructors and custom loader
  226. classes, to conform the new API. See
  227. [examples](https://github.com/nodeca/js-yaml/tree/master/examples) and
  228. [wiki](https://github.com/nodeca/js-yaml/wiki) for details.
  229. License
  230. -------
  231. View the [LICENSE](https://github.com/nodeca/js-yaml/blob/master/LICENSE) file
  232. (MIT).