├── .gitignore ├── .vscode ├── extensions.json ├── settings.json └── tasks.json ├── LICENSE ├── README.md ├── docs ├── ecmarkup.css ├── ecmarkup.js └── index.html ├── gulpfile.js ├── package-lock.json ├── package.json └── src ├── index.html └── sec-introduction.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "rbuckton.grammarkdown-language", 4 | "rbuckton.ecmarkup-vscode" 5 | ] 6 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[markdown]": { 3 | "files.trimTrailingWhitespace": false 4 | }, 5 | "files.associations": { 6 | "*.html": "ecmarkup" 7 | } 8 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "gulp", 8 | "task": "default", 9 | "group": { 10 | "kind": "build", 11 | "isDefault": true 12 | } 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2017, Ron Buckton, Ecma International 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Reference (`ref`) declarations and expressions for ECMAScript 2 | 3 | This proposal defines new syntax to allow for the declaration and creation of user-defined references to bindings. 4 | 5 | # Motivations 6 | 7 | * Decorators cannot refer to block-scoped declarations that follow them. 8 | * Simplifies capturing references to bindings in one scope and handing it to another scope. 9 | 10 | # Prior Art 11 | * https://github.com/dotnet/roslyn/issues/118 12 | 13 | # Proposal 14 | 15 | This proposal introduces three main concepts: 16 | 17 | * Reference expressions (e.g. `let r = ref x`) 18 | * Reference declarations (e.g. `let ref y = r`, or `function f(ref y) { }`) 19 | * `Reference` objects 20 | 21 | ## Reference expressions 22 | 23 | A Reference expression is a prefix unary expression that creates a `Reference` object that defines a binding to its operand. 24 | 25 | Reference expressions have the following semantics: 26 | * The operand must be a valid simple assignment target. 27 | * When the operand is a property accessor using dot notation, the target of the property accessor is evaluated immediately 28 | and a `Reference` object is created for the actual property access. 29 | * When the operand is a property accessor using bracket notation, the target and the expression of the accessor are evaluated 30 | immediately and a `Reference` object is created for the actual property access. 31 | * When the operand is an identifier, a `Reference` object is created for the binding. 32 | * A Reference expression is unambiguously a reference to a binding. Host engines can leverage this fact to optimize reference passing. 33 | 34 | This behavior can be illustrated by the following syntactic conversion: 35 | 36 | ```js 37 | const x = ref y; 38 | ``` 39 | 40 | is roughly identical in its behavior to: 41 | 42 | ```js 43 | const x = Object.freeze({ 44 | __proto__: Reference.prototype, 45 | get value() { return y; }, 46 | set value(_) { y = _; } 47 | }); 48 | ``` 49 | 50 | ## Reference declarations 51 | 52 | A Reference declaration is the declaration of a parameter or variable that dereferences a `Reference`, creating a binding 53 | in the current scope. 54 | 55 | Reference declarations have the following semantics: 56 | * A Reference declaration is unambiguously a dereference of some Reference expression. Host engines can leverage this fact to optimize away 57 | the `Reference` object if they can statically determine that the only use-sites are arguments to call expressions whose parameters 58 | are declared `ref`. 59 | * A `ref x` parameter introduces a mutable binding to the underlying `Reference`. 60 | * Reading from `x` reads the value of the underlying `Reference`. 61 | * Assigning to `x` assigns to the value of the underlying `Reference`. 62 | * A `let ref x` declaration introduces a mutable binding to the `Reference` supplied as the initializer. 63 | * Reading from `x` reads the value of the underlying `Reference`. 64 | * Assigning to `x` assigns to the value of the underlying `Reference`. 65 | * A `const ref x` declaration introduces an immutable binding. 66 | * Reading from `x` reads the value of the underlying `Reference`. 67 | * Assigning to `x` is an error. 68 | * Taking a `ref` of `x` will result in an immutable `Reference`. 69 | 70 | The behavior of a reference declaration can be illustrated by the following syntactic conversion: 71 | 72 | ```js 73 | function f(ref y) { 74 | y = 1; 75 | } 76 | 77 | let ref x1 = someRef; 78 | x1 = 1; 79 | 80 | const ref x2 = someRef; 81 | console.log(x2); 82 | ``` 83 | 84 | is roughly identical in its behavior to: 85 | 86 | ```js 87 | function f(ref_y) { 88 | ref_y.value = 1; 89 | } 90 | 91 | let ref_x1 = someRef; 92 | ref_x1.value = 1; 93 | 94 | const ref_x2 = ((someRef) => Object.freeze({ 95 | __proto__: Reference.prototype, 96 | get value() { return someRef.value; } 97 | }))(someRef); 98 | console.log(ref_x2.value); 99 | ``` 100 | 101 | ## `Reference` objects 102 | 103 | A `Reference` object is a reified reference that contains a `value` property that can be used to read from and write to a reference. 104 | 105 | Reference objects have the following shape: 106 | 107 | ```ts 108 | interface Reference { 109 | value: T; 110 | [Symbol.toStringTag]: "Reference"; 111 | } 112 | ``` 113 | 114 | # Examples 115 | 116 | Take a reference to a variable: 117 | ```js 118 | let x = 1; 119 | const r = ref x; 120 | print(r.value); // 1 121 | r.value = 2; 122 | print(x); // 2; 123 | ``` 124 | 125 | Take a reference to a property: 126 | ```js 127 | let o = { x: 1 }; 128 | const r = ref o.x; 129 | print(r.value); // 1 130 | r.value = 2; 131 | print(o); // { x: 2 } 132 | ``` 133 | 134 | Take a reference to an element: 135 | ```js 136 | let ar = [1]; 137 | const r = ref ar[0]; 138 | print(r.value); // 1 139 | r.value = 2; 140 | print(ar); // [2] 141 | ``` 142 | 143 | Object Binding Patterns: 144 | ```js 145 | let o = { x: 1 }; 146 | const { ref x } = o; 147 | // or: 148 | // const { x: ref x } = 0; 149 | print(x.value); // 1 150 | x.value = 2; 151 | print(o); // { x: 2 } 152 | ``` 153 | 154 | Array Binding Patterns: 155 | ```js 156 | // NOTE: If an Array Binding Pattern has a `ref` declaration, array indexing is used 157 | // instead of Symbol.iterator and rest elements are not allowed. 158 | let ar = [1]; 159 | const [ref r] = ar; 160 | print(r.value); // 1 161 | r.value = 2; 162 | print(ar); // [2] 163 | ``` 164 | 165 | Dereferencing: 166 | ```js 167 | // dereference a binding 168 | let x = 1; 169 | let ref y = ref x; // 'y' effectively points to 'x' 170 | print(y); // 1 171 | y = 2; 172 | print(x); // 2 173 | ``` 174 | 175 | Dereferencing a non-Reference (other than `undefined`) is a **ReferenceError**: 176 | ```js 177 | let x = 1; 178 | let ref y = x; // TypeError: Value is not a Reference. 179 | ``` 180 | 181 | Dereferencing `undefined` is ok, but accessing its value is a **ReferenceError** (`typeof` can still be used to test the reference): 182 | ```js 183 | function f(ref y) { 184 | typeof y; // ok, type is 'undefined' 185 | y; // ReferenceError: y is not defined. 186 | } 187 | f(undefined); // ok 188 | 189 | let x; 190 | function g(ref y = ref x) {} 191 | g(); // ok, parameter initialization will check whether the *argument* is undefined, not the binding. 192 | ``` 193 | 194 | Dereferencing an immutable Reference into a mutable Reference does not make it mutable: 195 | ```js 196 | let x = 1; 197 | const ref y = ref x; // ok, `x` is mutable 198 | let ref z = ref y; // ok, but `z` is actually immutable 199 | z = 2; // error 200 | ``` 201 | 202 | Reference passing: 203 | ```js 204 | function update(ref r) { 205 | r = 2; 206 | } 207 | 208 | let x = 1; 209 | update(ref x); 210 | print(x); // 2 211 | ``` 212 | 213 | Referencing a local declaration creates a closure: 214 | ```js 215 | function f() { 216 | let x = 1; 217 | return [ref x, () => print(x)]; 218 | } 219 | 220 | const [r, p] = f(); 221 | print(r.value); // 1 222 | r.value = 2; 223 | p(); // 2 224 | ``` 225 | 226 | Combining reference expressions, reference parameters, and reference variables: 227 | ```js 228 | function max(ref first, ref second, ref third) { 229 | const ref max = first > second ? ref first : ref second; 230 | return max > third ? ref max : ref third; 231 | } 232 | 233 | let x = 1, y = 2, z = 3; 234 | let ref w = max(ref x, ref y, ref z); 235 | w = 4; 236 | print(x); // 1 237 | print(y); // 2 238 | print(z); // 4 239 | ``` 240 | 241 | Forward reference to a block-scoped variable and TDZ: 242 | ```js 243 | let ref a_ = ref a; // ok, no error from TDZ 244 | let a = 1; 245 | 246 | let ref b_ = ref b; 247 | b_ = 1; // error due to TDZ 248 | let b; 249 | ``` 250 | 251 | Forward reference to member of block-scoped variable: 252 | ```js 253 | let ref b_ = ref b.x; // error, TDZ for `b` 254 | let b = { x: 1 }; 255 | ``` 256 | 257 | Forward reference to `var`: 258 | ```js 259 | let ref d_ = ref d; // ok, no TDZ 260 | d_ = 2; // ok 261 | var d = 1; 262 | ``` 263 | 264 | Forward references for decorators: 265 | ```js 266 | class Node { 267 | @Type(ref Container) // ok, no error due to TDZ 268 | get parent() { /*...*/ } 269 | @Type(ref Node) 270 | get nextSibling() { /*...*/ } 271 | } 272 | class Container extends Node { 273 | @Type(ref Node) 274 | get firstChild() { /*...*/ } 275 | } 276 | ``` 277 | 278 | Side effects: 279 | ```js 280 | let count = 0; 281 | let e = [0, 1, 2]; 282 | let ref e_ = ref e[count++]; // `count++` evaluated when reference is taken. 283 | print(e_); // 0 284 | print(e_); // 0 285 | print(count); // 1 286 | ``` 287 | 288 | # Grammar 289 | 290 | ```grammarkdown 291 | UpdateExpression[Yield, Await]: 292 | `ref` LeftHandSideExpression[?Yield, ?Await] 293 | 294 | RefBinding[Yield, Await]: 295 | `ref` BindingIdentifier[?Yield, ?Await] 296 | 297 | LexicalBinding[In, Yield, Await]: 298 | RefBinding[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]? 299 | 300 | VariableDeclaration[In, Yield, Await]: 301 | RefBinding[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]? 302 | 303 | ForBinding[Yield, Await]: 304 | RefBinding[?Yield, ?Await] 305 | 306 | SingleNameBinding[Yield, ?Await]: 307 | RefBinding[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]? 308 | ``` 309 | 310 | # Desugaring 311 | 312 | The following is an approximate desugaring for this proposal: 313 | 314 | ```js 315 | // proposed syntax 316 | function max(ref first, ref second, ref third) { 317 | const ref max = first > second ? ref first : ref second; 318 | return max > third ? ref max : ref third; 319 | } 320 | 321 | let x = 1, y = 2, z = 3; 322 | let ref w = max(ref x, ref y, ref z); 323 | w = 4; 324 | print(x); // 1 325 | print(y); // 2 326 | print(z); // 4 327 | 328 | // desugaring 329 | const __ref = (get, set) => Object.freeze(Object.create(null, { value: { get, set } })); 330 | 331 | function max(ref_first, ref_second, ref_third) { 332 | const ref_max = ref_first.value > ref_second.value ? ref_first : ref_second; 333 | return ref_max.value > ref_third.value ? ref_max : ref_third; 334 | } 335 | 336 | let x = 1, y = 2, z = 3; 337 | const ref_x = __ref(() => x, _ => x = _); 338 | const ref_y = __ref(() => y, _ => y = _); 339 | const ref_z = __ref(() => z, _ => z = _); 340 | const ref_w = max(ref_x, ref_y, ref_z); 341 | ref_w.value = 4; 342 | print(x); // 1 343 | print(y); // 2 344 | print(z); // 4 345 | ``` 346 | 347 | And here's the same example using an array: 348 | 349 | ```js 350 | // proposed syntax 351 | function max(ref first, ref second, ref third) { 352 | const ref max = first > second ? ref first : ref second; 353 | return max > third ? ref max : ref third; 354 | } 355 | 356 | // arrays 357 | let ar = [1, 2, 3]; 358 | let ref w = max(ref ar[0], ref ar[1], ref ar[2]); 359 | w = 4; 360 | print(ar[0]); // 1; 361 | print(ar[1]); // 2; 362 | print(ar[2]); // 4; 363 | 364 | // desugaring 365 | const __ref = (get, set) => Object.freeze(Object.create(null, { value: { get, set } })); 366 | const __elemRef = (o, p) => __ref(() => o[p], _ => o[p] = _); 367 | 368 | function max(ref_first, ref_second, ref_third) { 369 | const ref_max = ref_first.value > ref_second.value ? ref_first : ref_second; 370 | return ref_max.value > ref_third.value ? ref_max : ref_third; 371 | } 372 | 373 | let ar = [1, 2, 3]; 374 | const ref_ar0 = __elemRef(ar, 0); 375 | const ref_ar1 = __elemRef(ar, 1); 376 | const ref_ar2 = __elemRef(ar, 2); 377 | const ref_w = max(ref_x, ref_y, ref_z); 378 | ref_w.value = 4; 379 | print(ar[0]); // 1; 380 | print(ar[1]); // 2; 381 | print(ar[2]); // 4; 382 | ``` 383 | 384 | Here's an example using private names: 385 | 386 | ```js 387 | // proposed syntax 388 | class C { 389 | #counter = 0; 390 | get count() { return this.#counter; } 391 | provideCounter(cb) { 392 | cb(ref this.#counter); 393 | } 394 | } 395 | 396 | function increment(ref counter) { 397 | counter++; 398 | } 399 | 400 | const c = new C(); 401 | c.provideCounter(increment); 402 | c.provideCounter(increment); 403 | print(c.count); // 2 404 | 405 | // desugared 406 | const __ref = (get, set) => Object.freeze(Object.create(null, { value: { get, set } })); 407 | class C { 408 | #counter = 0; 409 | get count() { return this.#counter; } 410 | provideCounter(cb) { 411 | cb(__ref(() => this.#counter, _ => this.#counter = _)); 412 | } 413 | } 414 | 415 | function increment(ref_counter) { 416 | ref_counter.value++; 417 | } 418 | 419 | const c = new C(); 420 | c.provideCounter(increment); 421 | c.provideCounter(increment); 422 | print(c.count); // 2 423 | ``` 424 | 425 | # Future Considerations 426 | 427 | We may want to make it possible to revoke a reference, for example: 428 | ```js 429 | let a = 1; 430 | let { ref reference: b, revoke } = Reference.revocable(ref a); 431 | b = 2; 432 | console.log(a); // 2 433 | revoke(); 434 | b = 3; // ReferenceError 435 | ``` 436 | 437 | However, it may be possible to do this in userland (though engines may not be able to optimize away a userland type): 438 | ```js 439 | function revocableReference(ref_value) { 440 | const reference = Object.create(Reference.prototype, { 441 | value: { 442 | get() { 443 | if (ref_value === null) throw new ReferenceError(); 444 | return ref_value.value; 445 | }, 446 | set(v) { 447 | if (ref_value === null) throw new ReferenceError(); 448 | ref_value.value = v; 449 | } 450 | } 451 | }); 452 | function revoke() { 453 | ref_value = null; 454 | } 455 | return { reference, revoke }; 456 | } 457 | 458 | let a = 1; 459 | let { ref reference: b, revoke } = revocableReference(ref a); 460 | b = 2; 461 | console.log(a); // 2 462 | revoke(); 463 | b = 3; // ReferenceError 464 | ``` 465 | 466 | -------------------------------------------------------------------------------- /docs/ecmarkup.css: -------------------------------------------------------------------------------- 1 | body { 2 | display: flex; 3 | font-size: 18px; 4 | line-height: 1.5; 5 | font-family: Cambria, Palatino Linotype, Palatino, Liberation Serif, serif; 6 | padding: 0; 7 | margin: 0; 8 | color: #111; 9 | } 10 | 11 | #spec-container { 12 | padding: 0 20px; 13 | flex-grow: 1; 14 | flex-basis: 66%; 15 | box-sizing: border-box; 16 | overflow: hidden; 17 | } 18 | 19 | body.oldtoc { 20 | margin: 0 auto; 21 | } 22 | 23 | a { 24 | text-decoration: none; 25 | color: #206ca7; 26 | } 27 | 28 | a:visited { 29 | color: #206ca7; 30 | } 31 | 32 | a:hover { 33 | text-decoration: underline; 34 | color: #239dee; 35 | } 36 | 37 | 38 | code { 39 | font-weight: bold; 40 | font-family: Consolas, Monaco, monospace; 41 | white-space: pre; 42 | } 43 | 44 | pre code { 45 | font-weight: inherit; 46 | } 47 | 48 | pre code.hljs { 49 | background-color: #fff; 50 | margin: 0; 51 | padding: 0; 52 | } 53 | 54 | ol.toc { 55 | list-style: none; 56 | padding-left: 0; 57 | } 58 | 59 | ol.toc ol.toc { 60 | padding-left: 2ex; 61 | list-style: none; 62 | } 63 | 64 | var { 65 | color: #2aa198; 66 | transition: background-color 0.25s ease; 67 | cursor: pointer; 68 | } 69 | 70 | var.referenced { 71 | background-color: #ffff33; 72 | } 73 | 74 | emu-const { 75 | font-family: sans-serif; 76 | } 77 | 78 | emu-val { 79 | font-weight: bold; 80 | } 81 | emu-alg ol, emu-alg ol ol ol ol { 82 | list-style-type: decimal; 83 | } 84 | 85 | emu-alg ol ol, emu-alg ol ol ol ol ol { 86 | list-style-type: lower-alpha; 87 | } 88 | 89 | emu-alg ol ol ol, ol ol ol ol ol ol { 90 | list-style-type: lower-roman; 91 | } 92 | 93 | emu-eqn { 94 | display: block; 95 | margin-left: 4em; 96 | } 97 | 98 | emu-eqn.inline { 99 | display: inline; 100 | margin: 0; 101 | } 102 | 103 | emu-eqn div:first-child { 104 | margin-left: -2em; 105 | } 106 | 107 | emu-note { 108 | margin: 1em 0; 109 | color: #666; 110 | border-left: 5px solid #ccc; 111 | display: flex; 112 | flex-direction: row; 113 | } 114 | 115 | emu-note > span.note { 116 | flex-basis: 100px; 117 | min-width: 100px; 118 | flex-grow: 0; 119 | flex-shrink: 1; 120 | text-transform: uppercase; 121 | padding-left: 5px; 122 | } 123 | 124 | emu-note[type=editor] { 125 | border-left-color: #faa; 126 | } 127 | 128 | emu-note > div.note-contents { 129 | flex-grow: 1; 130 | flex-shrink: 1; 131 | } 132 | 133 | emu-note > div.note-contents > p:first-child { 134 | margin-top: 0; 135 | } 136 | 137 | emu-note > div.note-contents > p:last-child { 138 | margin-bottom: 0; 139 | } 140 | 141 | emu-figure { 142 | display: block; 143 | } 144 | 145 | emu-example { 146 | display: block; 147 | margin: 1em 3em; 148 | } 149 | 150 | emu-example figure figcaption { 151 | margin-top: 0.5em; 152 | text-align: left; 153 | } 154 | 155 | emu-figure figure, 156 | emu-example figure, 157 | emu-table figure { 158 | display: flex; 159 | flex-direction: column; 160 | align-items: center; 161 | } 162 | 163 | emu-production { 164 | display: block; 165 | margin-top: 1em; 166 | margin-bottom: 1em; 167 | margin-left: 5ex; 168 | } 169 | 170 | emu-grammar.inline, emu-production.inline, 171 | emu-grammar.inline emu-production emu-rhs, emu-production.inline emu-rhs, 172 | emu-grammar[collapsed] emu-production emu-rhs, emu-production[collapsed] emu-rhs { 173 | display: inline; 174 | padding-left: 1ex; 175 | margin-left: 0; 176 | } 177 | 178 | emu-grammar[collapsed] emu-production, emu-production[collapsed] { 179 | margin: 0; 180 | } 181 | 182 | emu-constraints { 183 | font-size: .75em; 184 | margin-right: 1ex; 185 | } 186 | 187 | emu-gann { 188 | margin-right: 1ex; 189 | } 190 | 191 | emu-gann emu-t:last-child, 192 | emu-gann emu-nt:last-child { 193 | margin-right: 0; 194 | } 195 | 196 | emu-geq { 197 | margin-left: 1ex; 198 | font-weight: bold; 199 | } 200 | 201 | emu-oneof { 202 | font-weight: bold; 203 | margin-left: 1ex; 204 | } 205 | 206 | emu-nt { 207 | display: inline-block; 208 | font-style: italic; 209 | white-space: nowrap; 210 | text-indent: 0; 211 | } 212 | 213 | emu-nt a, emu-nt a:visited { 214 | color: #333; 215 | } 216 | 217 | emu-rhs emu-nt { 218 | margin-right: 1ex; 219 | } 220 | 221 | emu-t { 222 | display: inline-block; 223 | font-family: monospace; 224 | font-weight: bold; 225 | white-space: nowrap; 226 | text-indent: 0; 227 | } 228 | 229 | emu-production emu-t { 230 | margin-right: 1ex; 231 | } 232 | 233 | emu-rhs { 234 | display: block; 235 | padding-left: 75px; 236 | text-indent: -25px; 237 | } 238 | 239 | emu-mods { 240 | font-size: .85em; 241 | vertical-align: sub; 242 | font-style: normal; 243 | font-weight: normal; 244 | } 245 | 246 | emu-production[collapsed] emu-mods { 247 | display: none; 248 | } 249 | 250 | emu-params, emu-opt { 251 | margin-right: 1ex; 252 | font-family: monospace; 253 | } 254 | 255 | emu-params, emu-constraints { 256 | color: #2aa198; 257 | } 258 | 259 | emu-opt { 260 | color: #b58900; 261 | } 262 | 263 | emu-gprose { 264 | font-size: 0.9em; 265 | font-family: Helvetica, Arial, sans-serif; 266 | } 267 | 268 | h1.shortname { 269 | color: #f60; 270 | font-size: 1.5em; 271 | margin: 0; 272 | } 273 | 274 | h1.version { 275 | color: #f60; 276 | font-size: 1.5em; 277 | margin: 0; 278 | } 279 | 280 | h1.title { 281 | margin-top: 0; 282 | color: #f60; 283 | } 284 | 285 | h1.first { 286 | margin-top: 0; 287 | } 288 | 289 | h1, h2, h3, h4, h5, h6 { 290 | position: relative; 291 | } 292 | 293 | h1 .secnum { 294 | text-decoration: none; 295 | margin-right: 10px; 296 | } 297 | 298 | h1 span.title { 299 | order: 2; 300 | } 301 | 302 | 303 | h1 { font-size: 2.67em; margin-top: 2em; margin-bottom: 0; line-height: 1em;} 304 | h2 { font-size: 2em; } 305 | h3 { font-size: 1.56em; } 306 | h4 { font-size: 1.25em; } 307 | h5 { font-size: 1.11em; } 308 | h6 { font-size: 1em; } 309 | 310 | h1:hover span.utils { 311 | display: block; 312 | } 313 | 314 | span.utils { 315 | font-size: 18px; 316 | line-height: 18px; 317 | display: none; 318 | position: absolute; 319 | top: 100%; 320 | left: 0; 321 | right: 0; 322 | font-weight: normal; 323 | } 324 | 325 | span.utils:before { 326 | content: "⤷"; 327 | display: inline-block; 328 | padding: 0 5px; 329 | } 330 | 331 | span.utils > * { 332 | display: inline-block; 333 | margin-right: 20px; 334 | } 335 | 336 | h1 span.utils span.anchor a, 337 | h2 span.utils span.anchor a, 338 | h3 span.utils span.anchor a, 339 | h4 span.utils span.anchor a, 340 | h5 span.utils span.anchor a, 341 | h6 span.utils span.anchor a { 342 | text-decoration: none; 343 | font-variant: small-caps; 344 | } 345 | 346 | h1 span.utils span.anchor a:hover, 347 | h2 span.utils span.anchor a:hover, 348 | h3 span.utils span.anchor a:hover, 349 | h4 span.utils span.anchor a:hover, 350 | h5 span.utils span.anchor a:hover, 351 | h6 span.utils span.anchor a:hover { 352 | color: #333; 353 | } 354 | 355 | emu-intro h1, emu-clause h1, emu-annex h1 { font-size: 2em; } 356 | emu-intro h2, emu-clause h2, emu-annex h2 { font-size: 1.56em; } 357 | emu-intro h3, emu-clause h3, emu-annex h3 { font-size: 1.25em; } 358 | emu-intro h4, emu-clause h4, emu-annex h4 { font-size: 1.11em; } 359 | emu-intro h5, emu-clause h5, emu-annex h5 { font-size: 1em; } 360 | emu-intro h6, emu-clause h6, emu-annex h6 { font-size: 0.9em; } 361 | emu-intro emu-intro h1, emu-clause emu-clause h1, emu-annex emu-annex h1 { font-size: 1.56em; } 362 | emu-intro emu-intro h2, emu-clause emu-clause h2, emu-annex emu-annex h2 { font-size: 1.25em; } 363 | emu-intro emu-intro h3, emu-clause emu-clause h3, emu-annex emu-annex h3 { font-size: 1.11em; } 364 | emu-intro emu-intro h4, emu-clause emu-clause h4, emu-annex emu-annex h4 { font-size: 1em; } 365 | emu-intro emu-intro h5, emu-clause emu-clause h5, emu-annex emu-annex h5 { font-size: 0.9em; } 366 | emu-intro emu-intro emu-intro h1, emu-clause emu-clause emu-clause h1, emu-annex emu-annex emu-annex h1 { font-size: 1.25em; } 367 | emu-intro emu-intro emu-intro h2, emu-clause emu-clause emu-clause h2, emu-annex emu-annex emu-annex h2 { font-size: 1.11em; } 368 | emu-intro emu-intro emu-intro h3, emu-clause emu-clause emu-clause h3, emu-annex emu-annex emu-annex h3 { font-size: 1em; } 369 | emu-intro emu-intro emu-intro h4, emu-clause emu-clause emu-clause h4, emu-annex emu-annex emu-annex h4 { font-size: 0.9em; } 370 | emu-intro emu-intro emu-intro emu-intro h1, emu-clause emu-clause emu-clause emu-clause h1, emu-annex emu-annex emu-annex emu-annex h1 { font-size: 1.11em; } 371 | emu-intro emu-intro emu-intro emu-intro h2, emu-clause emu-clause emu-clause emu-clause h2, emu-annex emu-annex emu-annex emu-annex h2 { font-size: 1em; } 372 | emu-intro emu-intro emu-intro emu-intro h3, emu-clause emu-clause emu-clause emu-clause h3, emu-annex emu-annex emu-annex emu-annex h3 { font-size: 0.9em; } 373 | emu-intro emu-intro emu-intro emu-intro emu-intro h1, emu-clause emu-clause emu-clause emu-clause emu-clause h1, emu-annex emu-annex emu-annex emu-annex emu-annex h1 { font-size: 1em; } 374 | emu-intro emu-intro emu-intro emu-intro emu-intro h2, emu-clause emu-clause emu-clause emu-clause emu-clause h2, emu-annex emu-annex emu-annex emu-annex emu-annex h2 { font-size: 0.9em; } 375 | emu-intro emu-intro emu-intro emu-intro emu-intro emu-intro h1, emu-clause emu-clause emu-clause emu-clause emu-clause emu-clause h1, emu-annex emu-annex emu-annex emu-annex emu-annex emu-annex h1 { font-size: 0.9em } 376 | 377 | emu-clause, emu-intro, emu-annex { 378 | display: block; 379 | } 380 | 381 | /* Figures and tables */ 382 | figure { display: block; margin: 1em 0 3em 0; } 383 | figure object { display: block; margin: 0 auto; } 384 | figure table.real-table { margin: 0 auto; } 385 | figure figcaption { 386 | display: block; 387 | color: #555555; 388 | font-weight: bold; 389 | text-align: center; 390 | } 391 | 392 | emu-table table { 393 | margin: 0 auto; 394 | } 395 | 396 | emu-table table, table.real-table { 397 | border-collapse: collapse; 398 | } 399 | 400 | emu-table td, emu-table th, table.real-table td, table.real-table th { 401 | border: 1px solid black; 402 | padding: 0.4em; 403 | vertical-align: baseline; 404 | } 405 | emu-table th, emu-table thead td, table.real-table th { 406 | background-color: #eeeeee; 407 | } 408 | 409 | /* Note: the left content edges of table.lightweight-table >tbody >tr >td 410 | and div.display line up. */ 411 | table.lightweight-table { 412 | border-collapse: collapse; 413 | margin: 0 0 0 1.5em; 414 | } 415 | table.lightweight-table td, table.lightweight-table th { 416 | border: none; 417 | padding: 0 0.5em; 418 | vertical-align: baseline; 419 | } 420 | 421 | /* diff styles */ 422 | ins { 423 | background-color: #e0f8e0; 424 | text-decoration: none; 425 | border-bottom: 1px solid #396; 426 | } 427 | 428 | del { 429 | background-color: #fee; 430 | } 431 | 432 | ins.block, del.block, 433 | emu-production > ins, emu-production > del, 434 | emu-grammar > ins, emu-grammar > del { 435 | display: block; 436 | } 437 | 438 | tr.ins > td > ins { 439 | border-bottom: none; 440 | } 441 | 442 | tr.ins > td { 443 | background-color: #e0f8e0; 444 | } 445 | 446 | tr.del > td { 447 | background-color: #fee; 448 | } 449 | 450 | /* Menu Styles */ 451 | #menu-toggle { 452 | font-size: 2em; 453 | 454 | position: fixed; 455 | top: 0; 456 | left: 0; 457 | width: 1.5em; 458 | height: 1.5em; 459 | z-index: 3; 460 | visibility: hidden; 461 | color: #1567a2; 462 | background-color: #fff; 463 | 464 | line-height: 1.5em; 465 | text-align: center; 466 | -webkit-touch-callout: none; 467 | -webkit-user-select: none; 468 | -khtml-user-select: none; 469 | -moz-user-select: none; 470 | -ms-user-select: none; 471 | user-select: none;; 472 | 473 | cursor: pointer; 474 | } 475 | 476 | #menu { 477 | display: flex; 478 | flex-direction: column; 479 | width: 33%; height: 100vh; 480 | max-width: 500px; 481 | box-sizing: border-box; 482 | background-color: #ddd; 483 | overflow: hidden; 484 | transition: opacity 0.1s linear; 485 | padding: 0 5px; 486 | position: fixed; 487 | left: 0; top: 0; 488 | border-right: 2px solid #bbb; 489 | 490 | z-index: 2; 491 | } 492 | 493 | #menu-spacer { 494 | flex-basis: 33%; 495 | max-width: 500px; 496 | flex-grow: 0; 497 | flex-shrink: 0; 498 | } 499 | 500 | #menu a { 501 | color: #1567a2; 502 | } 503 | 504 | #menu.active { 505 | display: flex; 506 | opacity: 1; 507 | z-index: 2; 508 | } 509 | 510 | #menu-pins { 511 | flex-grow: 1; 512 | display: none; 513 | } 514 | 515 | #menu-pins.active { 516 | display: block; 517 | } 518 | 519 | #menu-pins-list { 520 | margin: 0; 521 | padding: 0; 522 | counter-reset: pins-counter; 523 | } 524 | 525 | #menu-pins-list > li:before { 526 | content: counter(pins-counter); 527 | counter-increment: pins-counter; 528 | display: inline-block; 529 | width: 25px; 530 | text-align: center; 531 | border: 1px solid #bbb; 532 | padding: 2px; 533 | margin: 4px; 534 | box-sizing: border-box; 535 | line-height: 1em; 536 | background-color: #ccc; 537 | border-radius: 4px; 538 | } 539 | #menu-toc > ol { 540 | padding: 0; 541 | flex-grow: 1; 542 | } 543 | 544 | #menu-toc > ol li { 545 | padding: 0; 546 | } 547 | 548 | #menu-toc > ol , #menu-toc > ol ol { 549 | list-style-type: none; 550 | margin: 0; 551 | padding: 0; 552 | } 553 | 554 | #menu-toc > ol ol { 555 | padding-left: 0.75em; 556 | } 557 | 558 | #menu-toc li { 559 | text-overflow: ellipsis; 560 | overflow: hidden; 561 | white-space: nowrap; 562 | } 563 | 564 | #menu-toc .item-toggle { 565 | display: inline-block; 566 | transform: rotate(-45deg) translate(-5px, -5px); 567 | transition: transform 0.1s ease; 568 | text-align: center; 569 | width: 20px; 570 | 571 | color: #aab; 572 | 573 | -webkit-touch-callout: none; 574 | -webkit-user-select: none; 575 | -khtml-user-select: none; 576 | -moz-user-select: none; 577 | -ms-user-select: none; 578 | user-select: none;; 579 | 580 | cursor: pointer; 581 | } 582 | 583 | #menu-toc .item-toggle-none { 584 | display: inline-block; 585 | width: 20px; 586 | } 587 | 588 | #menu-toc li.active > .item-toggle { 589 | transform: rotate(45deg) translate(-5px, -5px); 590 | } 591 | 592 | #menu-toc li > ol { 593 | display: none; 594 | } 595 | 596 | #menu-toc li.active > ol { 597 | display: block; 598 | } 599 | 600 | #menu-toc li.revealed > a { 601 | background-color: #bbb; 602 | font-weight: bold; 603 | /* 604 | background-color: #222; 605 | color: #c6d8e4; 606 | */ 607 | } 608 | 609 | #menu-toc li.revealed-leaf> a { 610 | color: #206ca7; 611 | /* 612 | background-color: #222; 613 | color: #c6d8e4; 614 | */ 615 | } 616 | 617 | #menu-toc li.revealed > .item-toggle { 618 | transform: rotate(45deg) translate(-5px, -5px); 619 | } 620 | 621 | #menu-toc li.revealed > ol { 622 | display: block; 623 | } 624 | 625 | #menu-toc li > a { 626 | padding: 2px 5px; 627 | } 628 | 629 | #menu > * { 630 | margin-bottom: 5px; 631 | } 632 | 633 | .menu-pane-header { 634 | padding: 0 5px; 635 | text-transform: uppercase; 636 | background-color: #aaa; 637 | color: #335; 638 | font-weight: bold; 639 | letter-spacing: 2px; 640 | flex-grow: 0; 641 | flex-shrink: 0; 642 | font-size: 0.8em; 643 | } 644 | 645 | #menu-toc { 646 | display: flex; 647 | flex-direction: column; 648 | width: 100%; 649 | overflow: hidden; 650 | flex-grow: 1; 651 | } 652 | 653 | #menu-toc ol.toc { 654 | overflow-x: hidden; 655 | overflow-y: auto; 656 | } 657 | 658 | #menu-search { 659 | position: relative; 660 | flex-grow: 0; 661 | flex-shrink: 0; 662 | width: 100%; 663 | 664 | display: flex; 665 | flex-direction: column; 666 | 667 | max-height: 300px; 668 | } 669 | 670 | #menu-trace-list { 671 | display: none; 672 | } 673 | 674 | #menu-search-box { 675 | box-sizing: border-box; 676 | display: block; 677 | width: 100%; 678 | margin: 5px 0 0 0; 679 | font-size: 1em; 680 | padding: 2px; 681 | background-color: #bbb; 682 | border: 1px solid #999; 683 | } 684 | 685 | #menu-search-results { 686 | overflow-x: hidden; 687 | overflow-y: auto; 688 | } 689 | 690 | li.menu-search-result-clause:before { 691 | content: 'clause'; 692 | width: 40px; 693 | display: inline-block; 694 | text-align: right; 695 | padding-right: 1ex; 696 | color: #666; 697 | font-size: 75%; 698 | } 699 | li.menu-search-result-op:before { 700 | content: 'op'; 701 | width: 40px; 702 | display: inline-block; 703 | text-align: right; 704 | padding-right: 1ex; 705 | color: #666; 706 | font-size: 75%; 707 | } 708 | 709 | li.menu-search-result-prod:before { 710 | content: 'prod'; 711 | width: 40px; 712 | display: inline-block; 713 | text-align: right; 714 | padding-right: 1ex; 715 | color: #666; 716 | font-size: 75% 717 | } 718 | 719 | 720 | li.menu-search-result-term:before { 721 | content: 'term'; 722 | width: 40px; 723 | display: inline-block; 724 | text-align: right; 725 | padding-right: 1ex; 726 | color: #666; 727 | font-size: 75% 728 | } 729 | 730 | #menu-search-results ul { 731 | padding: 0 5px; 732 | margin: 0; 733 | } 734 | 735 | #menu-search-results li { 736 | white-space: nowrap; 737 | text-overflow: ellipsis; 738 | } 739 | 740 | 741 | #menu-trace-list { 742 | counter-reset: item; 743 | margin: 0 0 0 20px; 744 | padding: 0; 745 | } 746 | #menu-trace-list li { 747 | display: block; 748 | white-space: nowrap; 749 | } 750 | 751 | #menu-trace-list li .secnum:after { 752 | content: " "; 753 | } 754 | #menu-trace-list li:before { 755 | content: counter(item) " "; 756 | background-color: #222; 757 | counter-increment: item; 758 | color: #999; 759 | width: 20px; 760 | height: 20px; 761 | line-height: 20px; 762 | display: inline-block; 763 | text-align: center; 764 | margin: 2px 4px 2px 0; 765 | } 766 | 767 | @media (max-width: 1000px) { 768 | body { 769 | margin: 0; 770 | display: block; 771 | } 772 | 773 | #menu { 774 | display: none; 775 | padding-top: 3em; 776 | width: 450px; 777 | } 778 | 779 | #menu.active { 780 | position: fixed; 781 | height: 100%; 782 | left: 0; 783 | top: 0; 784 | right: 300px; 785 | } 786 | 787 | #menu-toggle { 788 | visibility: visible; 789 | } 790 | 791 | #spec-container { 792 | padding: 0 5px; 793 | } 794 | 795 | #references-pane-spacer { 796 | display: none; 797 | } 798 | } 799 | 800 | @media only screen and (max-width: 800px) { 801 | #menu { 802 | width: 100%; 803 | } 804 | 805 | h1 .secnum:empty { 806 | margin: 0; padding: 0; 807 | } 808 | } 809 | 810 | 811 | /* Toolbox */ 812 | .toolbox { 813 | position: absolute; 814 | background: #ddd; 815 | border: 1px solid #aaa; 816 | display: none; 817 | color: #eee; 818 | padding: 5px; 819 | border-radius: 3px; 820 | } 821 | 822 | .toolbox.active { 823 | display: inline-block; 824 | } 825 | 826 | .toolbox a { 827 | text-decoration: none; 828 | padding: 0 5px; 829 | } 830 | 831 | .toolbox a:hover { 832 | text-decoration: underline; 833 | } 834 | 835 | .toolbox:after, .toolbox:before { 836 | top: 100%; 837 | left: 15px; 838 | border: solid transparent; 839 | content: " "; 840 | height: 0; 841 | width: 0; 842 | position: absolute; 843 | pointer-events: none; 844 | } 845 | 846 | .toolbox:after { 847 | border-color: rgba(0, 0, 0, 0); 848 | border-top-color: #ddd; 849 | border-width: 10px; 850 | margin-left: -10px; 851 | } 852 | .toolbox:before { 853 | border-color: rgba(204, 204, 204, 0); 854 | border-top-color: #aaa; 855 | border-width: 12px; 856 | margin-left: -12px; 857 | } 858 | 859 | #references-pane-container { 860 | position: fixed; 861 | bottom: 0; 862 | left: 0; 863 | right: 0; 864 | height: 250px; 865 | display: none; 866 | background-color: #ddd; 867 | z-index: 1; 868 | } 869 | 870 | #references-pane-table-container { 871 | overflow-x: hidden; 872 | overflow-y: auto; 873 | } 874 | 875 | #references-pane-spacer { 876 | flex-basis: 33%; 877 | max-width: 500px; 878 | } 879 | 880 | #references-pane { 881 | flex-grow: 1; 882 | overflow: hidden; 883 | display: flex; 884 | flex-direction: column; 885 | } 886 | 887 | #references-pane-container.active { 888 | display: flex; 889 | } 890 | 891 | #references-pane-close:after { 892 | content: '✖'; 893 | float: right; 894 | cursor: pointer; 895 | } 896 | 897 | #references-pane table tr td:first-child { 898 | text-align: right; 899 | padding-right: 5px; 900 | } 901 | -------------------------------------------------------------------------------- /docs/ecmarkup.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | function Search(menu) { 4 | this.menu = menu; 5 | this.$search = document.getElementById('menu-search'); 6 | this.$searchBox = document.getElementById('menu-search-box'); 7 | this.$searchResults = document.getElementById('menu-search-results'); 8 | 9 | this.loadBiblio(); 10 | 11 | document.addEventListener('keydown', this.documentKeydown.bind(this)); 12 | 13 | this.$searchBox.addEventListener('keydown', debounce(this.searchBoxKeydown.bind(this), { stopPropagation: true })); 14 | this.$searchBox.addEventListener('keyup', debounce(this.searchBoxKeyup.bind(this), { stopPropagation: true })); 15 | } 16 | 17 | Search.prototype.loadBiblio = function () { 18 | var $biblio = document.getElementById('menu-search-biblio'); 19 | if (!$biblio) { 20 | this.biblio = []; 21 | } else { 22 | this.biblio = JSON.parse($biblio.textContent); 23 | this.biblio.clauses = this.biblio.filter(function (e) { return e.type === 'clause' }); 24 | this.biblio.byId = this.biblio.reduce(function (map, entry) { 25 | map[entry.id] = entry; 26 | return map; 27 | }, {}); 28 | } 29 | } 30 | 31 | Search.prototype.documentKeydown = function (e) { 32 | if (e.keyCode === 191) { 33 | e.preventDefault(); 34 | e.stopPropagation(); 35 | this.triggerSearch(); 36 | } 37 | } 38 | 39 | Search.prototype.searchBoxKeydown = function (e) { 40 | e.stopPropagation(); 41 | e.preventDefault(); 42 | if (e.keyCode === 191 && e.target.value.length === 0) { 43 | e.preventDefault(); 44 | } else if (e.keyCode === 13) { 45 | e.preventDefault(); 46 | this.selectResult(); 47 | } 48 | } 49 | 50 | Search.prototype.searchBoxKeyup = function (e) { 51 | if (e.keyCode === 13 || e.keyCode === 9) { 52 | return; 53 | } 54 | 55 | this.search(e.target.value); 56 | } 57 | 58 | 59 | Search.prototype.triggerSearch = function (e) { 60 | if (this.menu.isVisible()) { 61 | this._closeAfterSearch = false; 62 | } else { 63 | this._closeAfterSearch = true; 64 | this.menu.show(); 65 | } 66 | 67 | this.$searchBox.focus(); 68 | this.$searchBox.select(); 69 | } 70 | // bit 12 - Set if the result starts with searchString 71 | // bits 8-11: 8 - number of chunks multiplied by 2 if cases match, otherwise 1. 72 | // bits 1-7: 127 - length of the entry 73 | // General scheme: prefer case sensitive matches with fewer chunks, and otherwise 74 | // prefer shorter matches. 75 | function relevance(result, searchString) { 76 | var relevance = 0; 77 | 78 | relevance = Math.max(0, 8 - result.match.chunks) << 7; 79 | 80 | if (result.match.caseMatch) { 81 | relevance *= 2; 82 | } 83 | 84 | if (result.match.prefix) { 85 | relevance += 2048 86 | } 87 | 88 | relevance += Math.max(0, 255 - result.entry.key.length); 89 | 90 | return relevance; 91 | } 92 | 93 | Search.prototype.search = function (searchString) { 94 | var s = Date.now(); 95 | 96 | if (searchString === '') { 97 | this.displayResults([]); 98 | this.hideSearch(); 99 | return; 100 | } else { 101 | this.showSearch(); 102 | } 103 | 104 | if (searchString.length === 1) { 105 | this.displayResults([]); 106 | return; 107 | } 108 | 109 | var results; 110 | 111 | if (/^[\d\.]*$/.test(searchString)) { 112 | results = this.biblio.clauses.filter(function (clause) { 113 | return clause.number.substring(0, searchString.length) === searchString; 114 | }).map(function (clause) { 115 | return { entry: clause }; 116 | }); 117 | } else { 118 | results = []; 119 | 120 | for (var i = 0; i < this.biblio.length; i++) { 121 | var entry = this.biblio[i]; 122 | 123 | var match = fuzzysearch(searchString, entry.key); 124 | if (match) { 125 | results.push({ entry: entry, match: match }); 126 | } 127 | } 128 | 129 | results.forEach(function (result) { 130 | result.relevance = relevance(result, searchString); 131 | }); 132 | 133 | results = results.sort(function (a, b) { return b.relevance - a.relevance }); 134 | 135 | } 136 | 137 | if (results.length > 50) { 138 | results = results.slice(0, 50); 139 | } 140 | 141 | this.displayResults(results); 142 | } 143 | Search.prototype.hideSearch = function () { 144 | this.$search.classList.remove('active'); 145 | } 146 | 147 | Search.prototype.showSearch = function () { 148 | this.$search.classList.add('active'); 149 | } 150 | 151 | Search.prototype.selectResult = function () { 152 | var $first = this.$searchResults.querySelector('li:first-child a'); 153 | 154 | if ($first) { 155 | document.location = $first.getAttribute('href'); 156 | } 157 | 158 | this.$searchBox.value = ''; 159 | this.$searchBox.blur(); 160 | this.displayResults([]); 161 | this.hideSearch(); 162 | 163 | if (this._closeAfterSearch) { 164 | this.menu.hide(); 165 | } 166 | } 167 | 168 | Search.prototype.displayResults = function (results) { 169 | if (results.length > 0) { 170 | this.$searchResults.classList.remove('no-results'); 171 | 172 | var html = '' 205 | 206 | this.$searchResults.innerHTML = html; 207 | } else { 208 | this.$searchResults.innerHTML = ''; 209 | this.$searchResults.classList.add('no-results'); 210 | } 211 | } 212 | 213 | 214 | function Menu() { 215 | this.$toggle = document.getElementById('menu-toggle'); 216 | this.$menu = document.getElementById('menu'); 217 | this.$toc = document.querySelector('menu-toc > ol'); 218 | this.$pins = document.querySelector('#menu-pins'); 219 | this.$pinList = document.getElementById('menu-pins-list'); 220 | this.$toc = document.querySelector('#menu-toc > ol'); 221 | this.$specContainer = document.getElementById('spec-container'); 222 | this.search = new Search(this); 223 | 224 | this._pinnedIds = {}; 225 | this.loadPinEntries(); 226 | 227 | // toggle menu 228 | this.$toggle.addEventListener('click', this.toggle.bind(this)); 229 | 230 | // keydown events for pinned clauses 231 | document.addEventListener('keydown', this.documentKeydown.bind(this)); 232 | 233 | // toc expansion 234 | var tocItems = this.$menu.querySelectorAll('#menu-toc li'); 235 | for (var i = 0; i < tocItems.length; i++) { 236 | var $item = tocItems[i]; 237 | $item.addEventListener('click', function($item, event) { 238 | $item.classList.toggle('active'); 239 | event.stopPropagation(); 240 | }.bind(null, $item)); 241 | } 242 | 243 | // close toc on toc item selection 244 | var tocLinks = this.$menu.querySelectorAll('#menu-toc li > a'); 245 | for (var i = 0; i < tocLinks.length; i++) { 246 | var $link = tocLinks[i]; 247 | $link.addEventListener('click', function(event) { 248 | this.toggle(); 249 | event.stopPropagation(); 250 | }.bind(this)); 251 | } 252 | 253 | // update active clause on scroll 254 | window.addEventListener('scroll', debounce(this.updateActiveClause.bind(this))); 255 | this.updateActiveClause(); 256 | 257 | // prevent menu scrolling from scrolling the body 258 | this.$toc.addEventListener('wheel', function (e) { 259 | var target = e.currentTarget; 260 | var offTop = e.deltaY < 0 && target.scrollTop === 0; 261 | if (offTop) { 262 | e.preventDefault(); 263 | } 264 | var offBottom = e.deltaY > 0 265 | && target.offsetHeight + target.scrollTop >= target.scrollHeight; 266 | 267 | if (offBottom) { 268 | e.preventDefault(); 269 | } 270 | }) 271 | } 272 | 273 | Menu.prototype.documentKeydown = function (e) { 274 | e.stopPropagation(); 275 | if (e.keyCode === 80) { 276 | this.togglePinEntry(); 277 | } else if (e.keyCode > 48 && e.keyCode < 58) { 278 | this.selectPin(e.keyCode - 49); 279 | } 280 | } 281 | 282 | Menu.prototype.updateActiveClause = function () { 283 | this.setActiveClause(findActiveClause(this.$specContainer)) 284 | } 285 | 286 | Menu.prototype.setActiveClause = function (clause) { 287 | this.$activeClause = clause; 288 | this.revealInToc(this.$activeClause); 289 | } 290 | 291 | Menu.prototype.revealInToc = function (path) { 292 | var current = this.$toc.querySelectorAll('li.revealed'); 293 | for (var i = 0; i < current.length; i++) { 294 | current[i].classList.remove('revealed'); 295 | current[i].classList.remove('revealed-leaf'); 296 | } 297 | 298 | var current = this.$toc; 299 | var index = 0; 300 | while (index < path.length) { 301 | var children = current.children; 302 | for (var i = 0; i < children.length; i++) { 303 | if ('#' + path[index].id === children[i].children[1].getAttribute('href') ) { 304 | children[i].classList.add('revealed'); 305 | if (index === path.length - 1) { 306 | children[i].classList.add('revealed-leaf'); 307 | var rect = children[i].getBoundingClientRect(); 308 | this.$toc.getBoundingClientRect().top 309 | var tocRect = this.$toc.getBoundingClientRect(); 310 | if (rect.top + 10 > tocRect.bottom) { 311 | this.$toc.scrollTop = this.$toc.scrollTop + (rect.top - tocRect.bottom) + (rect.bottom - rect.top); 312 | } else if (rect.top < tocRect.top) { 313 | this.$toc.scrollTop = this.$toc.scrollTop - (tocRect.top - rect.top); 314 | } 315 | } 316 | current = children[i].querySelector('ol'); 317 | index++; 318 | break; 319 | } 320 | } 321 | 322 | } 323 | } 324 | 325 | function findActiveClause(root, path) { 326 | var clauses = new ClauseWalker(root); 327 | var $clause; 328 | var found = false; 329 | var path = path || []; 330 | 331 | while ($clause = clauses.nextNode()) { 332 | var rect = $clause.getBoundingClientRect(); 333 | var $header = $clause.children[0]; 334 | var marginTop = parseInt(getComputedStyle($header)["margin-top"]); 335 | 336 | if ((rect.top - marginTop) <= 0 && rect.bottom > 0) { 337 | found = true; 338 | return findActiveClause($clause, path.concat($clause)) || path; 339 | } 340 | } 341 | 342 | return path; 343 | } 344 | 345 | function ClauseWalker(root) { 346 | var previous; 347 | var treeWalker = document.createTreeWalker( 348 | root, 349 | NodeFilter.SHOW_ELEMENT, 350 | { 351 | acceptNode: function (node) { 352 | if (previous === node.parentNode) { 353 | return NodeFilter.FILTER_REJECT; 354 | } else { 355 | previous = node; 356 | } 357 | if (node.nodeName === 'EMU-CLAUSE' || node.nodeName === 'EMU-INTRO' || node.nodeName === 'EMU-ANNEX') { 358 | return NodeFilter.FILTER_ACCEPT; 359 | } else { 360 | return NodeFilter.FILTER_SKIP; 361 | } 362 | } 363 | }, 364 | false 365 | ); 366 | 367 | return treeWalker; 368 | } 369 | 370 | Menu.prototype.toggle = function () { 371 | this.$menu.classList.toggle('active'); 372 | } 373 | 374 | Menu.prototype.show = function () { 375 | this.$menu.classList.add('active'); 376 | } 377 | 378 | Menu.prototype.hide = function () { 379 | this.$menu.classList.remove('active'); 380 | } 381 | 382 | Menu.prototype.isVisible = function() { 383 | return this.$menu.classList.contains('active'); 384 | } 385 | 386 | Menu.prototype.showPins = function () { 387 | this.$pins.classList.add('active'); 388 | } 389 | 390 | Menu.prototype.hidePins = function () { 391 | this.$pins.classList.remove('active'); 392 | } 393 | 394 | Menu.prototype.addPinEntry = function (id) { 395 | var entry = this.search.biblio.byId[id]; 396 | if (!entry) { 397 | // id was deleted after pin (or something) so remove it 398 | delete this._pinnedIds[id]; 399 | this.persistPinEntries(); 400 | return; 401 | } 402 | 403 | if (entry.type === 'clause') { 404 | var prefix; 405 | if (entry.number) { 406 | prefix = entry.number + ' '; 407 | } else { 408 | prefix = ''; 409 | } 410 | this.$pinList.innerHTML += '
  • ' + prefix + entry.titleHTML + '
  • '; 411 | } else { 412 | this.$pinList.innerHTML += '
  • ' + entry.key + '
  • '; 413 | } 414 | 415 | if (Object.keys(this._pinnedIds).length === 0) { 416 | this.showPins(); 417 | } 418 | this._pinnedIds[id] = true; 419 | this.persistPinEntries(); 420 | } 421 | 422 | Menu.prototype.removePinEntry = function (id) { 423 | var item = this.$pinList.querySelector('a[href="#' + id + '"]').parentNode; 424 | this.$pinList.removeChild(item); 425 | delete this._pinnedIds[id]; 426 | if (Object.keys(this._pinnedIds).length === 0) { 427 | this.hidePins(); 428 | } 429 | 430 | this.persistPinEntries(); 431 | } 432 | 433 | Menu.prototype.persistPinEntries = function () { 434 | try { 435 | if (!window.localStorage) return; 436 | } catch (e) { 437 | return; 438 | } 439 | 440 | localStorage.pinEntries = JSON.stringify(Object.keys(this._pinnedIds)); 441 | } 442 | 443 | Menu.prototype.loadPinEntries = function () { 444 | try { 445 | if (!window.localStorage) return; 446 | } catch (e) { 447 | return; 448 | } 449 | 450 | var pinsString = window.localStorage.pinEntries; 451 | if (!pinsString) return; 452 | var pins = JSON.parse(pinsString); 453 | for(var i = 0; i < pins.length; i++) { 454 | this.addPinEntry(pins[i]); 455 | } 456 | } 457 | 458 | Menu.prototype.togglePinEntry = function (id) { 459 | if (!id) { 460 | id = this.$activeClause[this.$activeClause.length - 1].id; 461 | } 462 | 463 | if (this._pinnedIds[id]) { 464 | this.removePinEntry(id); 465 | } else { 466 | this.addPinEntry(id); 467 | } 468 | } 469 | 470 | Menu.prototype.selectPin = function (num) { 471 | document.location = this.$pinList.children[num].children[0].href; 472 | } 473 | 474 | var menu; 475 | function init() { 476 | menu = new Menu(); 477 | var $container = document.getElementById('spec-container'); 478 | $container.addEventListener('mouseover', debounce(function (e) { 479 | Toolbox.activateIfMouseOver(e); 480 | })); 481 | } 482 | 483 | document.addEventListener('DOMContentLoaded', init); 484 | 485 | function debounce(fn, opts) { 486 | opts = opts || {}; 487 | var timeout; 488 | return function(e) { 489 | if (opts.stopPropagation) { 490 | e.stopPropagation(); 491 | } 492 | var args = arguments; 493 | if (timeout) { 494 | clearTimeout(timeout); 495 | } 496 | timeout = setTimeout(function() { 497 | timeout = null; 498 | fn.apply(this, args); 499 | }.bind(this), 150); 500 | } 501 | } 502 | 503 | var CLAUSE_NODES = ['EMU-CLAUSE', 'EMU-INTRO', 'EMU-ANNEX']; 504 | function findLocalReferences ($elem) { 505 | var name = $elem.innerHTML; 506 | var references = []; 507 | 508 | var parentClause = $elem.parentNode; 509 | while (parentClause && CLAUSE_NODES.indexOf(parentClause.nodeName) === -1) { 510 | parentClause = parentClause.parentNode; 511 | } 512 | 513 | if(!parentClause) return; 514 | 515 | var vars = parentClause.querySelectorAll('var'); 516 | 517 | for (var i = 0; i < vars.length; i++) { 518 | var $var = vars[i]; 519 | 520 | if ($var.innerHTML === name) { 521 | references.push($var); 522 | } 523 | } 524 | 525 | return references; 526 | } 527 | 528 | function toggleFindLocalReferences($elem) { 529 | var references = findLocalReferences($elem); 530 | if ($elem.classList.contains('referenced')) { 531 | references.forEach(function ($reference) { 532 | $reference.classList.remove('referenced'); 533 | }); 534 | } else { 535 | references.forEach(function ($reference) { 536 | $reference.classList.add('referenced'); 537 | }); 538 | } 539 | } 540 | 541 | function installFindLocalReferences () { 542 | document.addEventListener('click', function (e) { 543 | if (e.target.nodeName === 'VAR') { 544 | toggleFindLocalReferences(e.target); 545 | } 546 | }); 547 | } 548 | 549 | document.addEventListener('DOMContentLoaded', installFindLocalReferences); 550 | 551 | 552 | 553 | 554 | // The following license applies to the fuzzysearch function 555 | // The MIT License (MIT) 556 | // Copyright © 2015 Nicolas Bevacqua 557 | // Copyright © 2016 Brian Terlson 558 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 559 | // this software and associated documentation files (the "Software"), to deal in 560 | // the Software without restriction, including without limitation the rights to 561 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 562 | // the Software, and to permit persons to whom the Software is furnished to do so, 563 | // subject to the following conditions: 564 | 565 | // The above copyright notice and this permission notice shall be included in all 566 | // copies or substantial portions of the Software. 567 | 568 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 569 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 570 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 571 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 572 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 573 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 574 | function fuzzysearch (searchString, haystack, caseInsensitive) { 575 | var tlen = haystack.length; 576 | var qlen = searchString.length; 577 | var chunks = 1; 578 | var finding = false; 579 | var prefix = true; 580 | 581 | if (qlen > tlen) { 582 | return false; 583 | } 584 | 585 | if (qlen === tlen) { 586 | if (searchString === haystack) { 587 | return { caseMatch: true, chunks: 1, prefix: true }; 588 | } else if (searchString.toLowerCase() === haystack.toLowerCase()) { 589 | return { caseMatch: false, chunks: 1, prefix: true }; 590 | } else { 591 | return false; 592 | } 593 | } 594 | 595 | outer: for (var i = 0, j = 0; i < qlen; i++) { 596 | var nch = searchString[i]; 597 | while (j < tlen) { 598 | var targetChar = haystack[j++]; 599 | if (targetChar === nch) { 600 | finding = true; 601 | continue outer; 602 | } 603 | if (finding) { 604 | chunks++; 605 | finding = false; 606 | } 607 | } 608 | 609 | if (caseInsensitive) { return false } 610 | 611 | return fuzzysearch(searchString.toLowerCase(), haystack.toLowerCase(), true); 612 | } 613 | 614 | return { caseMatch: !caseInsensitive, chunks: chunks, prefix: j <= qlen }; 615 | } 616 | 617 | var Toolbox = { 618 | init: function () { 619 | this.$container = document.createElement('div'); 620 | this.$container.classList.add('toolbox'); 621 | this.$permalink = document.createElement('a'); 622 | this.$permalink.textContent = 'Permalink'; 623 | this.$pinLink = document.createElement('a'); 624 | this.$pinLink.textContent = 'Pin'; 625 | this.$pinLink.setAttribute('href', '#'); 626 | this.$pinLink.addEventListener('click', function (e) { 627 | e.preventDefault(); 628 | e.stopPropagation(); 629 | menu.togglePinEntry(this.entry.id); 630 | }.bind(this)); 631 | 632 | this.$refsLink = document.createElement('a'); 633 | this.$refsLink.setAttribute('href', '#'); 634 | this.$refsLink.addEventListener('click', function (e) { 635 | e.preventDefault(); 636 | e.stopPropagation(); 637 | referencePane.showReferencesFor(this.entry); 638 | }.bind(this)); 639 | this.$container.appendChild(this.$permalink); 640 | this.$container.appendChild(this.$pinLink); 641 | this.$container.appendChild(this.$refsLink); 642 | document.body.appendChild(this.$container); 643 | }, 644 | 645 | activate: function (el, entry, target) { 646 | if (el === this._activeEl) return; 647 | this.active = true; 648 | this.entry = entry; 649 | this.$container.classList.add('active'); 650 | this.top = el.offsetTop - this.$container.offsetHeight - 10; 651 | this.left = el.offsetLeft; 652 | this.$container.setAttribute('style', 'left: ' + this.left + 'px; top: ' + this.top + 'px'); 653 | this.updatePermalink(); 654 | this.updateReferences(); 655 | this._activeEl = el; 656 | if (this.top < document.body.scrollTop && el === target) { 657 | // don't scroll unless it's a small thing (< 200px) 658 | this.$container.scrollIntoView(); 659 | } 660 | }, 661 | 662 | updatePermalink: function () { 663 | this.$permalink.setAttribute('href', '#' + this.entry.id); 664 | }, 665 | 666 | updateReferences: function () { 667 | this.$refsLink.textContent = 'References (' + this.entry.referencingIds.length + ')'; 668 | }, 669 | 670 | activateIfMouseOver: function (e) { 671 | var ref = this.findReferenceUnder(e.target); 672 | if (ref && (!this.active || e.pageY > this._activeEl.offsetTop)) { 673 | var entry = menu.search.biblio.byId[ref.id]; 674 | this.activate(ref.element, entry, e.target); 675 | } else if (this.active && ((e.pageY < this.top) || e.pageY > (this._activeEl.offsetTop + this._activeEl.offsetHeight))) { 676 | this.deactivate(); 677 | } 678 | }, 679 | 680 | findReferenceUnder: function (el) { 681 | while (el) { 682 | var parent = el.parentNode; 683 | if (el.nodeName === 'H1' && parent.nodeName.match(/EMU-CLAUSE|EMU-ANNEX|EMU-INTRO/) && parent.id) { 684 | return { element: el, id: parent.id }; 685 | } else if (el.nodeName.match(/EMU-(?!CLAUSE|XREF|ANNEX|INTRO)|DFN/) && 686 | el.id && el.id[0] !== '_') { 687 | if (el.nodeName === 'EMU-FIGURE' || el.nodeName === 'EMU-TABLE' || el.nodeName === 'EMU-EXAMPLE') { 688 | // return the figcaption element 689 | return { element: el.children[0].children[0], id: el.id }; 690 | } else if (el.nodeName === 'EMU-PRODUCTION') { 691 | // return the LHS non-terminal element 692 | return { element: el.children[0], id: el.id }; 693 | } else { 694 | return { element: el, id: el.id }; 695 | } 696 | } 697 | el = parent; 698 | } 699 | }, 700 | 701 | deactivate: function () { 702 | this.$container.classList.remove('active'); 703 | this._activeEl = null; 704 | this.activeElBounds = null; 705 | this.active = false; 706 | } 707 | } 708 | 709 | var referencePane = { 710 | init: function() { 711 | this.$container = document.createElement('div'); 712 | this.$container.setAttribute('id', 'references-pane-container'); 713 | 714 | var $spacer = document.createElement('div'); 715 | $spacer.setAttribute('id', 'references-pane-spacer'); 716 | 717 | this.$pane = document.createElement('div'); 718 | this.$pane.setAttribute('id', 'references-pane'); 719 | 720 | this.$container.appendChild($spacer); 721 | this.$container.appendChild(this.$pane); 722 | 723 | this.$header = document.createElement('div'); 724 | this.$header.classList.add('menu-pane-header'); 725 | this.$header.textContent = 'References to '; 726 | this.$headerRefId = document.createElement('a'); 727 | this.$header.appendChild(this.$headerRefId); 728 | this.$closeButton = document.createElement('span'); 729 | this.$closeButton.setAttribute('id', 'references-pane-close'); 730 | this.$closeButton.addEventListener('click', function (e) { 731 | this.deactivate(); 732 | }.bind(this)); 733 | this.$header.appendChild(this.$closeButton); 734 | 735 | this.$pane.appendChild(this.$header); 736 | var tableContainer = document.createElement('div'); 737 | tableContainer.setAttribute('id', 'references-pane-table-container'); 738 | 739 | this.$table = document.createElement('table'); 740 | this.$table.setAttribute('id', 'references-pane-table'); 741 | 742 | this.$tableBody = this.$table.createTBody(); 743 | 744 | tableContainer.appendChild(this.$table); 745 | this.$pane.appendChild(tableContainer); 746 | 747 | menu.$specContainer.appendChild(this.$container); 748 | }, 749 | 750 | activate: function () { 751 | this.$container.classList.add('active'); 752 | }, 753 | 754 | deactivate: function () { 755 | this.$container.classList.remove('active'); 756 | }, 757 | 758 | showReferencesFor(entry) { 759 | this.activate(); 760 | var newBody = document.createElement('tbody'); 761 | var previousId; 762 | var previousCell; 763 | var dupCount = 0; 764 | this.$headerRefId.textContent = '#' + entry.id; 765 | this.$headerRefId.setAttribute('href', '#' + entry.id); 766 | entry.referencingIds.map(function (id) { 767 | var target = document.getElementById(id); 768 | var cid = findParentClauseId(target); 769 | var clause = menu.search.biblio.byId[cid]; 770 | var dupCount = 0; 771 | return { id: id, clause: clause } 772 | }).sort(function (a, b) { 773 | return sortByClauseNumber(a.clause, b.clause); 774 | }).forEach(function (record, i) { 775 | if (previousId === record.clause.id) { 776 | previousCell.innerHTML += ' (' + (dupCount + 2) + ')'; 777 | dupCount++; 778 | } else { 779 | var row = newBody.insertRow(); 780 | var cell = row.insertCell(); 781 | cell.innerHTML = record.clause.number; 782 | cell = row.insertCell(); 783 | cell.innerHTML = '' + record.clause.titleHTML + ''; 784 | previousCell = cell; 785 | previousId = record.clause.id; 786 | dupCount = 0; 787 | } 788 | }, this); 789 | this.$table.removeChild(this.$tableBody); 790 | this.$tableBody = newBody; 791 | this.$table.appendChild(this.$tableBody); 792 | } 793 | } 794 | function findParentClauseId(node) { 795 | while (node && node.nodeName !== 'EMU-CLAUSE' && node.nodeName !== 'EMU-INTRO' && node.nodeName !== 'EMU-ANNEX') { 796 | node = node.parentNode; 797 | } 798 | if (!node) return null; 799 | return node.getAttribute('id'); 800 | } 801 | 802 | function sortByClauseNumber(c1, c2) { 803 | var c1c = c1.number.split('.'); 804 | var c2c = c2.number.split('.'); 805 | 806 | for (var i = 0; i < c1c.length; i++) { 807 | if (i >= c2c.length) { 808 | return 1; 809 | } 810 | 811 | var c1 = c1c[i]; 812 | var c2 = c2c[i]; 813 | var c1cn = Number(c1); 814 | var c2cn = Number(c2); 815 | 816 | if (Number.isNaN(c1cn) && Number.isNaN(c2cn)) { 817 | if (c1 > c2) { 818 | return 1; 819 | } else if (c1 < c2) { 820 | return -1; 821 | } 822 | } else if (!Number.isNaN(c1cn) && Number.isNaN(c2cn)) { 823 | return -1; 824 | } else if (Number.isNaN(c1cn) && !Number.isNaN(c2cn)) { 825 | return 1; 826 | } else if(c1cn > c2cn) { 827 | return 1; 828 | } else if (c1cn < c2cn) { 829 | return -1; 830 | } 831 | } 832 | 833 | if (c1c.length === c2c.length) { 834 | return 0; 835 | } 836 | return -1; 837 | } 838 | 839 | document.addEventListener('DOMContentLoaded', function () { 840 | Toolbox.init(); 841 | referencePane.init(); 842 | }) 843 | var CLAUSE_NODES = ['EMU-CLAUSE', 'EMU-INTRO', 'EMU-ANNEX']; 844 | function findLocalReferences ($elem) { 845 | var name = $elem.innerHTML; 846 | var references = []; 847 | 848 | var parentClause = $elem.parentNode; 849 | while (parentClause && CLAUSE_NODES.indexOf(parentClause.nodeName) === -1) { 850 | parentClause = parentClause.parentNode; 851 | } 852 | 853 | if(!parentClause) return; 854 | 855 | var vars = parentClause.querySelectorAll('var'); 856 | 857 | for (var i = 0; i < vars.length; i++) { 858 | var $var = vars[i]; 859 | 860 | if ($var.innerHTML === name) { 861 | references.push($var); 862 | } 863 | } 864 | 865 | return references; 866 | } 867 | 868 | function toggleFindLocalReferences($elem) { 869 | var references = findLocalReferences($elem); 870 | if ($elem.classList.contains('referenced')) { 871 | references.forEach(function ($reference) { 872 | $reference.classList.remove('referenced'); 873 | }); 874 | } else { 875 | references.forEach(function ($reference) { 876 | $reference.classList.add('referenced'); 877 | }); 878 | } 879 | } 880 | 881 | function installFindLocalReferences () { 882 | document.addEventListener('click', function (e) { 883 | if (e.target.nodeName === 'VAR') { 884 | toggleFindLocalReferences(e.target); 885 | } 886 | }); 887 | } 888 | 889 | document.addEventListener('DOMContentLoaded', installFindLocalReferences); 890 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ECMAScript Ref expressions

    Stage 0 Draft / July 19, 2017

    ECMAScript Ref expressions

    8 | 9 | 10 |

    Introduction

    11 |

    Forthcoming

    12 |

    See the proposal repository for background material and discussion.

    13 |
    14 | 15 | 16 |

    ACopyright & Software License

    17 | 18 |

    Copyright Notice

    19 |

    © 2017 Ron Buckton, Ecma International

    20 | 21 |

    Software License

    22 |

    All Software contained in this document ("Software") is protected by copyright and is being made available under the "BSD License", included below. This Software may be subject to third party rights (rights from parties other than Ecma International), including patent rights, and no licenses under such third party rights are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT http://www.ecma-international.org/memento/codeofconduct.htm FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS.

    23 | 24 |

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    25 | 26 |
      27 |
    1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    2. 28 |
    3. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    4. 29 |
    5. Neither the name of the authors nor Ecma International may be used to endorse or promote products derived from this software without specific prior written permission.
    6. 30 |
    31 | 32 |

    THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

    33 | 34 |
    -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const del = require("del"); 2 | const gulp = require("gulp"); 3 | const emu = require("gulp-emu"); 4 | const gls = require("gulp-live-server"); 5 | const spawn = require("child_process").spawn; 6 | 7 | gulp.task("clean", () => del("docs/**/*")); 8 | 9 | gulp.task("build", () => gulp 10 | .src(["src/index.html"]) 11 | .pipe(emu({ js: "ecmarkup.js", css: "ecmarkup.css", assets: "none" })) 12 | .pipe(gulp.dest("docs"))); 13 | 14 | gulp.task("watch", () => gulp 15 | .watch(["src/**/*"], ["build"])); 16 | 17 | gulp.task("start", ["watch"], () => { 18 | const server = gls.static("docs", 8080); 19 | const promise = server.start(); 20 | gulp.watch(["docs/**/*"], file => server.notify(file)); 21 | return promise; 22 | }); 23 | 24 | gulp.task("default", ["build"]); -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ecmascript-ref", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/node": { 8 | "version": "6.0.84", 9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.84.tgz", 10 | "integrity": "sha512-1SvEazClhUBRNroJM3oB3xf3u2r6xGmHDGbdigqNPHvNKLl8/BtATgO9eC04ZLuovpSh0B20BF1QJxdi+qmTlg==", 11 | "dev": true 12 | }, 13 | "abab": { 14 | "version": "1.0.3", 15 | "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", 16 | "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", 17 | "dev": true 18 | }, 19 | "abbrev": { 20 | "version": "1.1.0", 21 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 22 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", 23 | "dev": true 24 | }, 25 | "acorn": { 26 | "version": "4.0.13", 27 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 28 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 29 | "dev": true 30 | }, 31 | "acorn-globals": { 32 | "version": "3.1.0", 33 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 34 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 35 | "dev": true, 36 | "requires": { 37 | "acorn": "4.0.13" 38 | } 39 | }, 40 | "ajv": { 41 | "version": "4.11.8", 42 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 43 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 44 | "dev": true, 45 | "requires": { 46 | "co": "4.6.0", 47 | "json-stable-stringify": "1.0.1" 48 | } 49 | }, 50 | "amdefine": { 51 | "version": "1.0.1", 52 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 53 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 54 | "dev": true, 55 | "optional": true 56 | }, 57 | "ansi-regex": { 58 | "version": "2.1.1", 59 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 60 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 61 | "dev": true 62 | }, 63 | "ansi-styles": { 64 | "version": "2.2.1", 65 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 66 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 67 | "dev": true 68 | }, 69 | "archy": { 70 | "version": "1.0.0", 71 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 72 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", 73 | "dev": true 74 | }, 75 | "argparse": { 76 | "version": "1.0.9", 77 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 78 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 79 | "dev": true, 80 | "requires": { 81 | "sprintf-js": "1.0.3" 82 | } 83 | }, 84 | "arr-diff": { 85 | "version": "2.0.0", 86 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 87 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 88 | "dev": true, 89 | "requires": { 90 | "arr-flatten": "1.1.0" 91 | } 92 | }, 93 | "arr-flatten": { 94 | "version": "1.1.0", 95 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 96 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 97 | "dev": true 98 | }, 99 | "array-differ": { 100 | "version": "1.0.0", 101 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 102 | "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", 103 | "dev": true 104 | }, 105 | "array-each": { 106 | "version": "1.0.1", 107 | "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", 108 | "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", 109 | "dev": true 110 | }, 111 | "array-equal": { 112 | "version": "1.0.0", 113 | "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", 114 | "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", 115 | "dev": true 116 | }, 117 | "array-slice": { 118 | "version": "1.0.0", 119 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", 120 | "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", 121 | "dev": true 122 | }, 123 | "array-union": { 124 | "version": "1.0.2", 125 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 126 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 127 | "dev": true, 128 | "requires": { 129 | "array-uniq": "1.0.3" 130 | } 131 | }, 132 | "array-uniq": { 133 | "version": "1.0.3", 134 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 135 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 136 | "dev": true 137 | }, 138 | "array-unique": { 139 | "version": "0.2.1", 140 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 141 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 142 | "dev": true 143 | }, 144 | "arrify": { 145 | "version": "1.0.1", 146 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 147 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 148 | "dev": true 149 | }, 150 | "asn1": { 151 | "version": "0.2.3", 152 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 153 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 154 | "dev": true 155 | }, 156 | "assert-plus": { 157 | "version": "0.2.0", 158 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 159 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 160 | "dev": true 161 | }, 162 | "asynckit": { 163 | "version": "0.4.0", 164 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 165 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 166 | "dev": true 167 | }, 168 | "aws-sign2": { 169 | "version": "0.6.0", 170 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 171 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 172 | "dev": true 173 | }, 174 | "aws4": { 175 | "version": "1.6.0", 176 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 177 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", 178 | "dev": true 179 | }, 180 | "balanced-match": { 181 | "version": "1.0.0", 182 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 183 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 184 | "dev": true 185 | }, 186 | "bcrypt-pbkdf": { 187 | "version": "1.0.1", 188 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 189 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 190 | "dev": true, 191 | "optional": true, 192 | "requires": { 193 | "tweetnacl": "0.14.5" 194 | } 195 | }, 196 | "beeper": { 197 | "version": "1.1.1", 198 | "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", 199 | "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", 200 | "dev": true 201 | }, 202 | "bluebird": { 203 | "version": "3.5.0", 204 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 205 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", 206 | "dev": true 207 | }, 208 | "body-parser": { 209 | "version": "1.17.2", 210 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", 211 | "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", 212 | "dev": true, 213 | "requires": { 214 | "bytes": "2.4.0", 215 | "content-type": "1.0.2", 216 | "debug": "2.6.7", 217 | "depd": "1.1.0", 218 | "http-errors": "1.6.1", 219 | "iconv-lite": "0.4.15", 220 | "on-finished": "2.3.0", 221 | "qs": "6.4.0", 222 | "raw-body": "2.2.0", 223 | "type-is": "1.6.15" 224 | }, 225 | "dependencies": { 226 | "debug": { 227 | "version": "2.6.7", 228 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 229 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 230 | "dev": true, 231 | "requires": { 232 | "ms": "2.0.0" 233 | } 234 | }, 235 | "iconv-lite": { 236 | "version": "0.4.15", 237 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 238 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", 239 | "dev": true 240 | } 241 | } 242 | }, 243 | "boom": { 244 | "version": "2.10.1", 245 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 246 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 247 | "dev": true, 248 | "requires": { 249 | "hoek": "2.16.3" 250 | } 251 | }, 252 | "brace-expansion": { 253 | "version": "1.1.8", 254 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 255 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 256 | "dev": true, 257 | "requires": { 258 | "balanced-match": "1.0.0", 259 | "concat-map": "0.0.1" 260 | } 261 | }, 262 | "braces": { 263 | "version": "1.8.5", 264 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 265 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 266 | "dev": true, 267 | "requires": { 268 | "expand-range": "1.8.2", 269 | "preserve": "0.2.0", 270 | "repeat-element": "1.1.2" 271 | } 272 | }, 273 | "bytes": { 274 | "version": "2.4.0", 275 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", 276 | "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", 277 | "dev": true 278 | }, 279 | "caseless": { 280 | "version": "0.12.0", 281 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 282 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 283 | "dev": true 284 | }, 285 | "chalk": { 286 | "version": "1.1.3", 287 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 288 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 289 | "dev": true, 290 | "requires": { 291 | "ansi-styles": "2.2.1", 292 | "escape-string-regexp": "1.0.5", 293 | "has-ansi": "2.0.0", 294 | "strip-ansi": "3.0.1", 295 | "supports-color": "2.0.0" 296 | } 297 | }, 298 | "clone": { 299 | "version": "1.0.2", 300 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", 301 | "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", 302 | "dev": true 303 | }, 304 | "clone-stats": { 305 | "version": "0.0.1", 306 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", 307 | "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", 308 | "dev": true 309 | }, 310 | "co": { 311 | "version": "4.6.0", 312 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 313 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 314 | "dev": true 315 | }, 316 | "combined-stream": { 317 | "version": "1.0.5", 318 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 319 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 320 | "dev": true, 321 | "requires": { 322 | "delayed-stream": "1.0.0" 323 | } 324 | }, 325 | "concat-map": { 326 | "version": "0.0.1", 327 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 328 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 329 | "dev": true 330 | }, 331 | "connect": { 332 | "version": "3.6.2", 333 | "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", 334 | "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", 335 | "dev": true, 336 | "requires": { 337 | "debug": "2.6.7", 338 | "finalhandler": "1.0.3", 339 | "parseurl": "1.3.1", 340 | "utils-merge": "1.0.0" 341 | }, 342 | "dependencies": { 343 | "debug": { 344 | "version": "2.6.7", 345 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 346 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 347 | "dev": true, 348 | "requires": { 349 | "ms": "2.0.0" 350 | } 351 | } 352 | } 353 | }, 354 | "connect-livereload": { 355 | "version": "0.5.4", 356 | "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", 357 | "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=", 358 | "dev": true 359 | }, 360 | "content-type": { 361 | "version": "1.0.2", 362 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", 363 | "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", 364 | "dev": true 365 | }, 366 | "content-type-parser": { 367 | "version": "1.0.1", 368 | "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", 369 | "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", 370 | "dev": true 371 | }, 372 | "core-util-is": { 373 | "version": "1.0.2", 374 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 375 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 376 | "dev": true 377 | }, 378 | "cryptiles": { 379 | "version": "2.0.5", 380 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 381 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 382 | "dev": true, 383 | "requires": { 384 | "boom": "2.10.1" 385 | } 386 | }, 387 | "cssom": { 388 | "version": "0.3.2", 389 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", 390 | "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", 391 | "dev": true 392 | }, 393 | "cssstyle": { 394 | "version": "0.2.37", 395 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", 396 | "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", 397 | "dev": true, 398 | "requires": { 399 | "cssom": "0.3.2" 400 | } 401 | }, 402 | "dashdash": { 403 | "version": "1.14.1", 404 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 405 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 406 | "dev": true, 407 | "requires": { 408 | "assert-plus": "1.0.0" 409 | }, 410 | "dependencies": { 411 | "assert-plus": { 412 | "version": "1.0.0", 413 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 414 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 415 | "dev": true 416 | } 417 | } 418 | }, 419 | "dateformat": { 420 | "version": "2.0.0", 421 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", 422 | "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", 423 | "dev": true 424 | }, 425 | "debug": { 426 | "version": "2.6.8", 427 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 428 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 429 | "dev": true, 430 | "requires": { 431 | "ms": "2.0.0" 432 | } 433 | }, 434 | "deep-is": { 435 | "version": "0.1.3", 436 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 437 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 438 | "dev": true 439 | }, 440 | "deepmerge": { 441 | "version": "0.2.10", 442 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-0.2.10.tgz", 443 | "integrity": "sha1-iQa/nlJaT78bIDsq/LRkAkmCEhk=", 444 | "dev": true 445 | }, 446 | "defaults": { 447 | "version": "1.0.3", 448 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 449 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 450 | "dev": true, 451 | "requires": { 452 | "clone": "1.0.2" 453 | } 454 | }, 455 | "del": { 456 | "version": "2.2.2", 457 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 458 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 459 | "dev": true, 460 | "requires": { 461 | "globby": "5.0.0", 462 | "is-path-cwd": "1.0.0", 463 | "is-path-in-cwd": "1.0.0", 464 | "object-assign": "4.1.1", 465 | "pify": "2.3.0", 466 | "pinkie-promise": "2.0.1", 467 | "rimraf": "2.6.1" 468 | } 469 | }, 470 | "delayed-stream": { 471 | "version": "1.0.0", 472 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 473 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 474 | "dev": true 475 | }, 476 | "depd": { 477 | "version": "1.1.0", 478 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", 479 | "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", 480 | "dev": true 481 | }, 482 | "deprecated": { 483 | "version": "0.0.1", 484 | "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", 485 | "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", 486 | "dev": true 487 | }, 488 | "destroy": { 489 | "version": "1.0.4", 490 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 491 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", 492 | "dev": true 493 | }, 494 | "detect-file": { 495 | "version": "0.1.0", 496 | "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", 497 | "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", 498 | "dev": true, 499 | "requires": { 500 | "fs-exists-sync": "0.1.0" 501 | } 502 | }, 503 | "duplexer": { 504 | "version": "0.1.1", 505 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 506 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 507 | "dev": true 508 | }, 509 | "duplexer2": { 510 | "version": "0.0.2", 511 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", 512 | "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", 513 | "dev": true, 514 | "requires": { 515 | "readable-stream": "1.1.14" 516 | } 517 | }, 518 | "ecc-jsbn": { 519 | "version": "0.1.1", 520 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 521 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 522 | "dev": true, 523 | "optional": true, 524 | "requires": { 525 | "jsbn": "0.1.1" 526 | } 527 | }, 528 | "ecmarkdown": { 529 | "version": "3.0.9", 530 | "resolved": "https://registry.npmjs.org/ecmarkdown/-/ecmarkdown-3.0.9.tgz", 531 | "integrity": "sha1-Pl5oc7SO9YRHN8s4jMq9hQYaevE=", 532 | "dev": true, 533 | "requires": { 534 | "escape-html": "1.0.3" 535 | } 536 | }, 537 | "ecmarkup": { 538 | "version": "3.11.5", 539 | "resolved": "https://registry.npmjs.org/ecmarkup/-/ecmarkup-3.11.5.tgz", 540 | "integrity": "sha1-Vx3piTmVbHceYeAW9w/VuHr+Gj4=", 541 | "dev": true, 542 | "requires": { 543 | "bluebird": "3.5.0", 544 | "chalk": "1.1.3", 545 | "ecmarkdown": "3.0.9", 546 | "grammarkdown": "1.0.7", 547 | "he": "1.1.1", 548 | "highlight.js": "9.12.0", 549 | "html-escape": "1.0.2", 550 | "js-yaml": "3.9.0", 551 | "jsdom": "11.1.0", 552 | "nomnom": "1.8.1", 553 | "prex": "0.2.0", 554 | "promise-debounce": "1.0.1" 555 | } 556 | }, 557 | "ee-first": { 558 | "version": "1.1.1", 559 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 560 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 561 | "dev": true 562 | }, 563 | "encodeurl": { 564 | "version": "1.0.1", 565 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 566 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", 567 | "dev": true 568 | }, 569 | "end-of-stream": { 570 | "version": "0.1.5", 571 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", 572 | "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", 573 | "dev": true, 574 | "requires": { 575 | "once": "1.3.3" 576 | }, 577 | "dependencies": { 578 | "once": { 579 | "version": "1.3.3", 580 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 581 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 582 | "dev": true, 583 | "requires": { 584 | "wrappy": "1.0.2" 585 | } 586 | } 587 | } 588 | }, 589 | "escape-html": { 590 | "version": "1.0.3", 591 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 592 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 593 | "dev": true 594 | }, 595 | "escape-string-regexp": { 596 | "version": "1.0.5", 597 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 598 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 599 | "dev": true 600 | }, 601 | "escodegen": { 602 | "version": "1.8.1", 603 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", 604 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 605 | "dev": true, 606 | "requires": { 607 | "esprima": "2.7.3", 608 | "estraverse": "1.9.3", 609 | "esutils": "2.0.2", 610 | "optionator": "0.8.2", 611 | "source-map": "0.2.0" 612 | }, 613 | "dependencies": { 614 | "esprima": { 615 | "version": "2.7.3", 616 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 617 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 618 | "dev": true 619 | } 620 | } 621 | }, 622 | "esprima": { 623 | "version": "4.0.0", 624 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 625 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 626 | "dev": true 627 | }, 628 | "estraverse": { 629 | "version": "1.9.3", 630 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", 631 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 632 | "dev": true 633 | }, 634 | "esutils": { 635 | "version": "2.0.2", 636 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 637 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 638 | "dev": true 639 | }, 640 | "etag": { 641 | "version": "1.8.0", 642 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", 643 | "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", 644 | "dev": true 645 | }, 646 | "event-stream": { 647 | "version": "3.2.2", 648 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.2.2.tgz", 649 | "integrity": "sha1-95+ZhMB+4/2bRP+zzQQisT4kCE0=", 650 | "dev": true, 651 | "requires": { 652 | "duplexer": "0.1.1", 653 | "from": "0.1.7", 654 | "map-stream": "0.1.0", 655 | "pause-stream": "0.0.11", 656 | "split": "0.3.3", 657 | "stream-combiner": "0.0.4", 658 | "through": "2.3.8" 659 | } 660 | }, 661 | "expand-brackets": { 662 | "version": "0.1.5", 663 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 664 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 665 | "dev": true, 666 | "requires": { 667 | "is-posix-bracket": "0.1.1" 668 | } 669 | }, 670 | "expand-range": { 671 | "version": "1.8.2", 672 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 673 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 674 | "dev": true, 675 | "requires": { 676 | "fill-range": "2.2.3" 677 | } 678 | }, 679 | "expand-tilde": { 680 | "version": "1.2.2", 681 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", 682 | "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", 683 | "dev": true, 684 | "requires": { 685 | "os-homedir": "1.0.2" 686 | } 687 | }, 688 | "extend": { 689 | "version": "3.0.1", 690 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 691 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 692 | "dev": true 693 | }, 694 | "extglob": { 695 | "version": "0.3.2", 696 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 697 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 698 | "dev": true, 699 | "requires": { 700 | "is-extglob": "1.0.0" 701 | } 702 | }, 703 | "extsprintf": { 704 | "version": "1.0.2", 705 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", 706 | "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", 707 | "dev": true 708 | }, 709 | "fancy-log": { 710 | "version": "1.3.0", 711 | "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", 712 | "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", 713 | "dev": true, 714 | "requires": { 715 | "chalk": "1.1.3", 716 | "time-stamp": "1.1.0" 717 | } 718 | }, 719 | "fast-levenshtein": { 720 | "version": "2.0.6", 721 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 722 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 723 | "dev": true 724 | }, 725 | "faye-websocket": { 726 | "version": "0.7.3", 727 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.7.3.tgz", 728 | "integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=", 729 | "dev": true, 730 | "requires": { 731 | "websocket-driver": "0.6.5" 732 | } 733 | }, 734 | "filename-regex": { 735 | "version": "2.0.1", 736 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 737 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 738 | "dev": true 739 | }, 740 | "fill-range": { 741 | "version": "2.2.3", 742 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 743 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 744 | "dev": true, 745 | "requires": { 746 | "is-number": "2.1.0", 747 | "isobject": "2.1.0", 748 | "randomatic": "1.1.7", 749 | "repeat-element": "1.1.2", 750 | "repeat-string": "1.6.1" 751 | } 752 | }, 753 | "finalhandler": { 754 | "version": "1.0.3", 755 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", 756 | "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", 757 | "dev": true, 758 | "requires": { 759 | "debug": "2.6.7", 760 | "encodeurl": "1.0.1", 761 | "escape-html": "1.0.3", 762 | "on-finished": "2.3.0", 763 | "parseurl": "1.3.1", 764 | "statuses": "1.3.1", 765 | "unpipe": "1.0.0" 766 | }, 767 | "dependencies": { 768 | "debug": { 769 | "version": "2.6.7", 770 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 771 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 772 | "dev": true, 773 | "requires": { 774 | "ms": "2.0.0" 775 | } 776 | } 777 | } 778 | }, 779 | "find-index": { 780 | "version": "0.1.1", 781 | "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", 782 | "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", 783 | "dev": true 784 | }, 785 | "findup-sync": { 786 | "version": "0.4.3", 787 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", 788 | "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", 789 | "dev": true, 790 | "requires": { 791 | "detect-file": "0.1.0", 792 | "is-glob": "2.0.1", 793 | "micromatch": "2.3.11", 794 | "resolve-dir": "0.1.1" 795 | } 796 | }, 797 | "fined": { 798 | "version": "1.1.0", 799 | "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", 800 | "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", 801 | "dev": true, 802 | "requires": { 803 | "expand-tilde": "2.0.2", 804 | "is-plain-object": "2.0.4", 805 | "object.defaults": "1.1.0", 806 | "object.pick": "1.2.0", 807 | "parse-filepath": "1.0.1" 808 | }, 809 | "dependencies": { 810 | "expand-tilde": { 811 | "version": "2.0.2", 812 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", 813 | "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", 814 | "dev": true, 815 | "requires": { 816 | "homedir-polyfill": "1.0.1" 817 | } 818 | } 819 | } 820 | }, 821 | "first-chunk-stream": { 822 | "version": "1.0.0", 823 | "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", 824 | "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", 825 | "dev": true 826 | }, 827 | "flagged-respawn": { 828 | "version": "0.3.2", 829 | "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", 830 | "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", 831 | "dev": true 832 | }, 833 | "for-in": { 834 | "version": "1.0.2", 835 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 836 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 837 | "dev": true 838 | }, 839 | "for-own": { 840 | "version": "0.1.5", 841 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 842 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 843 | "dev": true, 844 | "requires": { 845 | "for-in": "1.0.2" 846 | } 847 | }, 848 | "forever-agent": { 849 | "version": "0.6.1", 850 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 851 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 852 | "dev": true 853 | }, 854 | "form-data": { 855 | "version": "2.1.4", 856 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 857 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 858 | "dev": true, 859 | "requires": { 860 | "asynckit": "0.4.0", 861 | "combined-stream": "1.0.5", 862 | "mime-types": "2.1.15" 863 | } 864 | }, 865 | "fresh": { 866 | "version": "0.5.0", 867 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", 868 | "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", 869 | "dev": true 870 | }, 871 | "from": { 872 | "version": "0.1.7", 873 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 874 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 875 | "dev": true 876 | }, 877 | "fs-exists-sync": { 878 | "version": "0.1.0", 879 | "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", 880 | "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", 881 | "dev": true 882 | }, 883 | "fs.realpath": { 884 | "version": "1.0.0", 885 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 886 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 887 | "dev": true 888 | }, 889 | "gaze": { 890 | "version": "0.5.2", 891 | "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", 892 | "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", 893 | "dev": true, 894 | "requires": { 895 | "globule": "0.1.0" 896 | } 897 | }, 898 | "getpass": { 899 | "version": "0.1.7", 900 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 901 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 902 | "dev": true, 903 | "requires": { 904 | "assert-plus": "1.0.0" 905 | }, 906 | "dependencies": { 907 | "assert-plus": { 908 | "version": "1.0.0", 909 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 910 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 911 | "dev": true 912 | } 913 | } 914 | }, 915 | "glob": { 916 | "version": "7.1.2", 917 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 918 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 919 | "dev": true, 920 | "requires": { 921 | "fs.realpath": "1.0.0", 922 | "inflight": "1.0.6", 923 | "inherits": "2.0.3", 924 | "minimatch": "3.0.4", 925 | "once": "1.4.0", 926 | "path-is-absolute": "1.0.1" 927 | } 928 | }, 929 | "glob-base": { 930 | "version": "0.3.0", 931 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 932 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 933 | "dev": true, 934 | "requires": { 935 | "glob-parent": "2.0.0", 936 | "is-glob": "2.0.1" 937 | } 938 | }, 939 | "glob-parent": { 940 | "version": "2.0.0", 941 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 942 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 943 | "dev": true, 944 | "requires": { 945 | "is-glob": "2.0.1" 946 | } 947 | }, 948 | "glob-stream": { 949 | "version": "3.1.18", 950 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", 951 | "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", 952 | "dev": true, 953 | "requires": { 954 | "glob": "4.5.3", 955 | "glob2base": "0.0.12", 956 | "minimatch": "2.0.10", 957 | "ordered-read-streams": "0.1.0", 958 | "through2": "0.6.5", 959 | "unique-stream": "1.0.0" 960 | }, 961 | "dependencies": { 962 | "glob": { 963 | "version": "4.5.3", 964 | "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 965 | "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", 966 | "dev": true, 967 | "requires": { 968 | "inflight": "1.0.6", 969 | "inherits": "2.0.3", 970 | "minimatch": "2.0.10", 971 | "once": "1.4.0" 972 | } 973 | }, 974 | "minimatch": { 975 | "version": "2.0.10", 976 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 977 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 978 | "dev": true, 979 | "requires": { 980 | "brace-expansion": "1.1.8" 981 | } 982 | }, 983 | "readable-stream": { 984 | "version": "1.0.34", 985 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 986 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 987 | "dev": true, 988 | "requires": { 989 | "core-util-is": "1.0.2", 990 | "inherits": "2.0.3", 991 | "isarray": "0.0.1", 992 | "string_decoder": "0.10.31" 993 | } 994 | }, 995 | "through2": { 996 | "version": "0.6.5", 997 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 998 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 999 | "dev": true, 1000 | "requires": { 1001 | "readable-stream": "1.0.34", 1002 | "xtend": "4.0.1" 1003 | } 1004 | } 1005 | } 1006 | }, 1007 | "glob-watcher": { 1008 | "version": "0.0.6", 1009 | "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", 1010 | "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", 1011 | "dev": true, 1012 | "requires": { 1013 | "gaze": "0.5.2" 1014 | } 1015 | }, 1016 | "glob2base": { 1017 | "version": "0.0.12", 1018 | "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", 1019 | "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", 1020 | "dev": true, 1021 | "requires": { 1022 | "find-index": "0.1.1" 1023 | } 1024 | }, 1025 | "global-modules": { 1026 | "version": "0.2.3", 1027 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", 1028 | "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", 1029 | "dev": true, 1030 | "requires": { 1031 | "global-prefix": "0.1.5", 1032 | "is-windows": "0.2.0" 1033 | } 1034 | }, 1035 | "global-prefix": { 1036 | "version": "0.1.5", 1037 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", 1038 | "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", 1039 | "dev": true, 1040 | "requires": { 1041 | "homedir-polyfill": "1.0.1", 1042 | "ini": "1.3.4", 1043 | "is-windows": "0.2.0", 1044 | "which": "1.2.14" 1045 | } 1046 | }, 1047 | "globby": { 1048 | "version": "5.0.0", 1049 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 1050 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 1051 | "dev": true, 1052 | "requires": { 1053 | "array-union": "1.0.2", 1054 | "arrify": "1.0.1", 1055 | "glob": "7.1.2", 1056 | "object-assign": "4.1.1", 1057 | "pify": "2.3.0", 1058 | "pinkie-promise": "2.0.1" 1059 | } 1060 | }, 1061 | "globule": { 1062 | "version": "0.1.0", 1063 | "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", 1064 | "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", 1065 | "dev": true, 1066 | "requires": { 1067 | "glob": "3.1.21", 1068 | "lodash": "1.0.2", 1069 | "minimatch": "0.2.14" 1070 | }, 1071 | "dependencies": { 1072 | "glob": { 1073 | "version": "3.1.21", 1074 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", 1075 | "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", 1076 | "dev": true, 1077 | "requires": { 1078 | "graceful-fs": "1.2.3", 1079 | "inherits": "1.0.2", 1080 | "minimatch": "0.2.14" 1081 | } 1082 | }, 1083 | "graceful-fs": { 1084 | "version": "1.2.3", 1085 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", 1086 | "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", 1087 | "dev": true 1088 | }, 1089 | "inherits": { 1090 | "version": "1.0.2", 1091 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", 1092 | "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", 1093 | "dev": true 1094 | }, 1095 | "lodash": { 1096 | "version": "1.0.2", 1097 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", 1098 | "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", 1099 | "dev": true 1100 | }, 1101 | "minimatch": { 1102 | "version": "0.2.14", 1103 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 1104 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 1105 | "dev": true, 1106 | "requires": { 1107 | "lru-cache": "2.7.3", 1108 | "sigmund": "1.0.1" 1109 | } 1110 | } 1111 | } 1112 | }, 1113 | "glogg": { 1114 | "version": "1.0.0", 1115 | "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", 1116 | "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", 1117 | "dev": true, 1118 | "requires": { 1119 | "sparkles": "1.0.0" 1120 | } 1121 | }, 1122 | "graceful-fs": { 1123 | "version": "3.0.11", 1124 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", 1125 | "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", 1126 | "dev": true, 1127 | "requires": { 1128 | "natives": "1.1.0" 1129 | } 1130 | }, 1131 | "grammarkdown": { 1132 | "version": "1.0.7", 1133 | "resolved": "https://registry.npmjs.org/grammarkdown/-/grammarkdown-1.0.7.tgz", 1134 | "integrity": "sha1-NxO5ybqk9XDztqyJpH36ALNGWxs=", 1135 | "dev": true, 1136 | "requires": { 1137 | "prex": "0.2.0" 1138 | } 1139 | }, 1140 | "gulp": { 1141 | "version": "3.9.1", 1142 | "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", 1143 | "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", 1144 | "dev": true, 1145 | "requires": { 1146 | "archy": "1.0.0", 1147 | "chalk": "1.1.3", 1148 | "deprecated": "0.0.1", 1149 | "gulp-util": "3.0.8", 1150 | "interpret": "1.0.3", 1151 | "liftoff": "2.3.0", 1152 | "minimist": "1.2.0", 1153 | "orchestrator": "0.3.8", 1154 | "pretty-hrtime": "1.0.3", 1155 | "semver": "4.3.6", 1156 | "tildify": "1.2.0", 1157 | "v8flags": "2.1.1", 1158 | "vinyl-fs": "0.3.14" 1159 | } 1160 | }, 1161 | "gulp-emu": { 1162 | "version": "1.1.0", 1163 | "resolved": "https://registry.npmjs.org/gulp-emu/-/gulp-emu-1.1.0.tgz", 1164 | "integrity": "sha1-p4R5sLTw6QdzTz0zmZLEqueLbAE=", 1165 | "dev": true, 1166 | "requires": { 1167 | "prex": "0.2.0" 1168 | } 1169 | }, 1170 | "gulp-live-server": { 1171 | "version": "0.0.30", 1172 | "resolved": "https://registry.npmjs.org/gulp-live-server/-/gulp-live-server-0.0.30.tgz", 1173 | "integrity": "sha1-xMMSi9HDJJqg608FDA9xvuh3B94=", 1174 | "dev": true, 1175 | "requires": { 1176 | "chalk": "1.1.3", 1177 | "connect": "3.6.2", 1178 | "connect-livereload": "0.5.4", 1179 | "debug": "2.6.8", 1180 | "deepmerge": "0.2.10", 1181 | "event-stream": "3.2.2", 1182 | "q": "1.5.0", 1183 | "serve-static": "1.12.3", 1184 | "tiny-lr": "0.0.9" 1185 | } 1186 | }, 1187 | "gulp-util": { 1188 | "version": "3.0.8", 1189 | "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", 1190 | "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", 1191 | "dev": true, 1192 | "requires": { 1193 | "array-differ": "1.0.0", 1194 | "array-uniq": "1.0.3", 1195 | "beeper": "1.1.1", 1196 | "chalk": "1.1.3", 1197 | "dateformat": "2.0.0", 1198 | "fancy-log": "1.3.0", 1199 | "gulplog": "1.0.0", 1200 | "has-gulplog": "0.1.0", 1201 | "lodash._reescape": "3.0.0", 1202 | "lodash._reevaluate": "3.0.0", 1203 | "lodash._reinterpolate": "3.0.0", 1204 | "lodash.template": "3.6.2", 1205 | "minimist": "1.2.0", 1206 | "multipipe": "0.1.2", 1207 | "object-assign": "3.0.0", 1208 | "replace-ext": "0.0.1", 1209 | "through2": "2.0.3", 1210 | "vinyl": "0.5.3" 1211 | }, 1212 | "dependencies": { 1213 | "object-assign": { 1214 | "version": "3.0.0", 1215 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 1216 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", 1217 | "dev": true 1218 | } 1219 | } 1220 | }, 1221 | "gulplog": { 1222 | "version": "1.0.0", 1223 | "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", 1224 | "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", 1225 | "dev": true, 1226 | "requires": { 1227 | "glogg": "1.0.0" 1228 | } 1229 | }, 1230 | "har-schema": { 1231 | "version": "1.0.5", 1232 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1233 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", 1234 | "dev": true 1235 | }, 1236 | "har-validator": { 1237 | "version": "4.2.1", 1238 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1239 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1240 | "dev": true, 1241 | "requires": { 1242 | "ajv": "4.11.8", 1243 | "har-schema": "1.0.5" 1244 | } 1245 | }, 1246 | "has-ansi": { 1247 | "version": "2.0.0", 1248 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1249 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1250 | "dev": true, 1251 | "requires": { 1252 | "ansi-regex": "2.1.1" 1253 | } 1254 | }, 1255 | "has-color": { 1256 | "version": "0.1.7", 1257 | "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", 1258 | "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", 1259 | "dev": true 1260 | }, 1261 | "has-gulplog": { 1262 | "version": "0.1.0", 1263 | "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", 1264 | "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", 1265 | "dev": true, 1266 | "requires": { 1267 | "sparkles": "1.0.0" 1268 | } 1269 | }, 1270 | "hawk": { 1271 | "version": "3.1.3", 1272 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1273 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1274 | "dev": true, 1275 | "requires": { 1276 | "boom": "2.10.1", 1277 | "cryptiles": "2.0.5", 1278 | "hoek": "2.16.3", 1279 | "sntp": "1.0.9" 1280 | } 1281 | }, 1282 | "he": { 1283 | "version": "1.1.1", 1284 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 1285 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 1286 | "dev": true 1287 | }, 1288 | "highlight.js": { 1289 | "version": "9.12.0", 1290 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", 1291 | "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", 1292 | "dev": true 1293 | }, 1294 | "hoek": { 1295 | "version": "2.16.3", 1296 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1297 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", 1298 | "dev": true 1299 | }, 1300 | "homedir-polyfill": { 1301 | "version": "1.0.1", 1302 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", 1303 | "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", 1304 | "dev": true, 1305 | "requires": { 1306 | "parse-passwd": "1.0.0" 1307 | } 1308 | }, 1309 | "html-encoding-sniffer": { 1310 | "version": "1.0.1", 1311 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", 1312 | "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", 1313 | "dev": true, 1314 | "requires": { 1315 | "whatwg-encoding": "1.0.1" 1316 | } 1317 | }, 1318 | "html-escape": { 1319 | "version": "1.0.2", 1320 | "resolved": "https://registry.npmjs.org/html-escape/-/html-escape-1.0.2.tgz", 1321 | "integrity": "sha1-X6eHwFaAkP4zLtWzz0qk9kZCGnQ=", 1322 | "dev": true 1323 | }, 1324 | "http-errors": { 1325 | "version": "1.6.1", 1326 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", 1327 | "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", 1328 | "dev": true, 1329 | "requires": { 1330 | "depd": "1.1.0", 1331 | "inherits": "2.0.3", 1332 | "setprototypeof": "1.0.3", 1333 | "statuses": "1.3.1" 1334 | } 1335 | }, 1336 | "http-signature": { 1337 | "version": "1.1.1", 1338 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1339 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1340 | "dev": true, 1341 | "requires": { 1342 | "assert-plus": "0.2.0", 1343 | "jsprim": "1.4.0", 1344 | "sshpk": "1.13.1" 1345 | } 1346 | }, 1347 | "iconv-lite": { 1348 | "version": "0.4.13", 1349 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", 1350 | "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", 1351 | "dev": true 1352 | }, 1353 | "inflight": { 1354 | "version": "1.0.6", 1355 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1356 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1357 | "dev": true, 1358 | "requires": { 1359 | "once": "1.4.0", 1360 | "wrappy": "1.0.2" 1361 | } 1362 | }, 1363 | "inherits": { 1364 | "version": "2.0.3", 1365 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1366 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1367 | "dev": true 1368 | }, 1369 | "ini": { 1370 | "version": "1.3.4", 1371 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 1372 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", 1373 | "dev": true 1374 | }, 1375 | "interpret": { 1376 | "version": "1.0.3", 1377 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", 1378 | "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", 1379 | "dev": true 1380 | }, 1381 | "is-absolute": { 1382 | "version": "0.2.6", 1383 | "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", 1384 | "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", 1385 | "dev": true, 1386 | "requires": { 1387 | "is-relative": "0.2.1", 1388 | "is-windows": "0.2.0" 1389 | } 1390 | }, 1391 | "is-buffer": { 1392 | "version": "1.1.5", 1393 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 1394 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", 1395 | "dev": true 1396 | }, 1397 | "is-dotfile": { 1398 | "version": "1.0.3", 1399 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 1400 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 1401 | "dev": true 1402 | }, 1403 | "is-equal-shallow": { 1404 | "version": "0.1.3", 1405 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 1406 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 1407 | "dev": true, 1408 | "requires": { 1409 | "is-primitive": "2.0.0" 1410 | } 1411 | }, 1412 | "is-extendable": { 1413 | "version": "0.1.1", 1414 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1415 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1416 | "dev": true 1417 | }, 1418 | "is-extglob": { 1419 | "version": "1.0.0", 1420 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1421 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 1422 | "dev": true 1423 | }, 1424 | "is-glob": { 1425 | "version": "2.0.1", 1426 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1427 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1428 | "dev": true, 1429 | "requires": { 1430 | "is-extglob": "1.0.0" 1431 | } 1432 | }, 1433 | "is-number": { 1434 | "version": "2.1.0", 1435 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 1436 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 1437 | "dev": true, 1438 | "requires": { 1439 | "kind-of": "3.2.2" 1440 | } 1441 | }, 1442 | "is-path-cwd": { 1443 | "version": "1.0.0", 1444 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 1445 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 1446 | "dev": true 1447 | }, 1448 | "is-path-in-cwd": { 1449 | "version": "1.0.0", 1450 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 1451 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 1452 | "dev": true, 1453 | "requires": { 1454 | "is-path-inside": "1.0.0" 1455 | } 1456 | }, 1457 | "is-path-inside": { 1458 | "version": "1.0.0", 1459 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 1460 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 1461 | "dev": true, 1462 | "requires": { 1463 | "path-is-inside": "1.0.2" 1464 | } 1465 | }, 1466 | "is-plain-object": { 1467 | "version": "2.0.4", 1468 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1469 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1470 | "dev": true, 1471 | "requires": { 1472 | "isobject": "3.0.1" 1473 | }, 1474 | "dependencies": { 1475 | "isobject": { 1476 | "version": "3.0.1", 1477 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1478 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 1479 | "dev": true 1480 | } 1481 | } 1482 | }, 1483 | "is-posix-bracket": { 1484 | "version": "0.1.1", 1485 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 1486 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 1487 | "dev": true 1488 | }, 1489 | "is-primitive": { 1490 | "version": "2.0.0", 1491 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 1492 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 1493 | "dev": true 1494 | }, 1495 | "is-relative": { 1496 | "version": "0.2.1", 1497 | "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", 1498 | "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", 1499 | "dev": true, 1500 | "requires": { 1501 | "is-unc-path": "0.1.2" 1502 | } 1503 | }, 1504 | "is-typedarray": { 1505 | "version": "1.0.0", 1506 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1507 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1508 | "dev": true 1509 | }, 1510 | "is-unc-path": { 1511 | "version": "0.1.2", 1512 | "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", 1513 | "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", 1514 | "dev": true, 1515 | "requires": { 1516 | "unc-path-regex": "0.1.2" 1517 | } 1518 | }, 1519 | "is-utf8": { 1520 | "version": "0.2.1", 1521 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1522 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 1523 | "dev": true 1524 | }, 1525 | "is-windows": { 1526 | "version": "0.2.0", 1527 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", 1528 | "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", 1529 | "dev": true 1530 | }, 1531 | "isarray": { 1532 | "version": "0.0.1", 1533 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1534 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1535 | "dev": true 1536 | }, 1537 | "isexe": { 1538 | "version": "2.0.0", 1539 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1540 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1541 | "dev": true 1542 | }, 1543 | "isobject": { 1544 | "version": "2.1.0", 1545 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1546 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1547 | "dev": true, 1548 | "requires": { 1549 | "isarray": "1.0.0" 1550 | }, 1551 | "dependencies": { 1552 | "isarray": { 1553 | "version": "1.0.0", 1554 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1555 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1556 | "dev": true 1557 | } 1558 | } 1559 | }, 1560 | "isstream": { 1561 | "version": "0.1.2", 1562 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1563 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1564 | "dev": true 1565 | }, 1566 | "js-yaml": { 1567 | "version": "3.9.0", 1568 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", 1569 | "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", 1570 | "dev": true, 1571 | "requires": { 1572 | "argparse": "1.0.9", 1573 | "esprima": "4.0.0" 1574 | } 1575 | }, 1576 | "jsbn": { 1577 | "version": "0.1.1", 1578 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1579 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1580 | "dev": true, 1581 | "optional": true 1582 | }, 1583 | "jsdom": { 1584 | "version": "11.1.0", 1585 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.1.0.tgz", 1586 | "integrity": "sha512-vKKDU+Xh9O6VgzdOYf5Rmqbgp+Yz4YTBC19gaLtctXch33EmNucA395KJGGboldafPW1vv9XLuiprO4+wXfl0g==", 1587 | "dev": true, 1588 | "requires": { 1589 | "abab": "1.0.3", 1590 | "acorn": "4.0.13", 1591 | "acorn-globals": "3.1.0", 1592 | "array-equal": "1.0.0", 1593 | "content-type-parser": "1.0.1", 1594 | "cssom": "0.3.2", 1595 | "cssstyle": "0.2.37", 1596 | "escodegen": "1.8.1", 1597 | "html-encoding-sniffer": "1.0.1", 1598 | "nwmatcher": "1.4.1", 1599 | "parse5": "3.0.2", 1600 | "pn": "1.0.0", 1601 | "request": "2.81.0", 1602 | "request-promise-native": "1.0.4", 1603 | "sax": "1.2.4", 1604 | "symbol-tree": "3.2.2", 1605 | "tough-cookie": "2.3.2", 1606 | "webidl-conversions": "4.0.1", 1607 | "whatwg-encoding": "1.0.1", 1608 | "whatwg-url": "6.1.0", 1609 | "xml-name-validator": "2.0.1" 1610 | } 1611 | }, 1612 | "json-schema": { 1613 | "version": "0.2.3", 1614 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1615 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1616 | "dev": true 1617 | }, 1618 | "json-stable-stringify": { 1619 | "version": "1.0.1", 1620 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1621 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1622 | "dev": true, 1623 | "requires": { 1624 | "jsonify": "0.0.0" 1625 | } 1626 | }, 1627 | "json-stringify-safe": { 1628 | "version": "5.0.1", 1629 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1630 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1631 | "dev": true 1632 | }, 1633 | "jsonify": { 1634 | "version": "0.0.0", 1635 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1636 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1637 | "dev": true 1638 | }, 1639 | "jsprim": { 1640 | "version": "1.4.0", 1641 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", 1642 | "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", 1643 | "dev": true, 1644 | "requires": { 1645 | "assert-plus": "1.0.0", 1646 | "extsprintf": "1.0.2", 1647 | "json-schema": "0.2.3", 1648 | "verror": "1.3.6" 1649 | }, 1650 | "dependencies": { 1651 | "assert-plus": { 1652 | "version": "1.0.0", 1653 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1654 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1655 | "dev": true 1656 | } 1657 | } 1658 | }, 1659 | "kind-of": { 1660 | "version": "3.2.2", 1661 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1662 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1663 | "dev": true, 1664 | "requires": { 1665 | "is-buffer": "1.1.5" 1666 | } 1667 | }, 1668 | "levn": { 1669 | "version": "0.3.0", 1670 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1671 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1672 | "dev": true, 1673 | "requires": { 1674 | "prelude-ls": "1.1.2", 1675 | "type-check": "0.3.2" 1676 | } 1677 | }, 1678 | "liftoff": { 1679 | "version": "2.3.0", 1680 | "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", 1681 | "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", 1682 | "dev": true, 1683 | "requires": { 1684 | "extend": "3.0.1", 1685 | "findup-sync": "0.4.3", 1686 | "fined": "1.1.0", 1687 | "flagged-respawn": "0.3.2", 1688 | "lodash.isplainobject": "4.0.6", 1689 | "lodash.isstring": "4.0.1", 1690 | "lodash.mapvalues": "4.6.0", 1691 | "rechoir": "0.6.2", 1692 | "resolve": "1.3.3" 1693 | } 1694 | }, 1695 | "lodash": { 1696 | "version": "4.17.4", 1697 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 1698 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 1699 | "dev": true 1700 | }, 1701 | "lodash._basecopy": { 1702 | "version": "3.0.1", 1703 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 1704 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 1705 | "dev": true 1706 | }, 1707 | "lodash._basetostring": { 1708 | "version": "3.0.1", 1709 | "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", 1710 | "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", 1711 | "dev": true 1712 | }, 1713 | "lodash._basevalues": { 1714 | "version": "3.0.0", 1715 | "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", 1716 | "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", 1717 | "dev": true 1718 | }, 1719 | "lodash._getnative": { 1720 | "version": "3.9.1", 1721 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1722 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 1723 | "dev": true 1724 | }, 1725 | "lodash._isiterateecall": { 1726 | "version": "3.0.9", 1727 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1728 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 1729 | "dev": true 1730 | }, 1731 | "lodash._reescape": { 1732 | "version": "3.0.0", 1733 | "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", 1734 | "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", 1735 | "dev": true 1736 | }, 1737 | "lodash._reevaluate": { 1738 | "version": "3.0.0", 1739 | "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", 1740 | "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", 1741 | "dev": true 1742 | }, 1743 | "lodash._reinterpolate": { 1744 | "version": "3.0.0", 1745 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 1746 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", 1747 | "dev": true 1748 | }, 1749 | "lodash._root": { 1750 | "version": "3.0.1", 1751 | "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 1752 | "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", 1753 | "dev": true 1754 | }, 1755 | "lodash.escape": { 1756 | "version": "3.2.0", 1757 | "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", 1758 | "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", 1759 | "dev": true, 1760 | "requires": { 1761 | "lodash._root": "3.0.1" 1762 | } 1763 | }, 1764 | "lodash.isarguments": { 1765 | "version": "3.1.0", 1766 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1767 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 1768 | "dev": true 1769 | }, 1770 | "lodash.isarray": { 1771 | "version": "3.0.4", 1772 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1773 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 1774 | "dev": true 1775 | }, 1776 | "lodash.isplainobject": { 1777 | "version": "4.0.6", 1778 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1779 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", 1780 | "dev": true 1781 | }, 1782 | "lodash.isstring": { 1783 | "version": "4.0.1", 1784 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1785 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", 1786 | "dev": true 1787 | }, 1788 | "lodash.keys": { 1789 | "version": "3.1.2", 1790 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1791 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1792 | "dev": true, 1793 | "requires": { 1794 | "lodash._getnative": "3.9.1", 1795 | "lodash.isarguments": "3.1.0", 1796 | "lodash.isarray": "3.0.4" 1797 | } 1798 | }, 1799 | "lodash.mapvalues": { 1800 | "version": "4.6.0", 1801 | "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", 1802 | "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", 1803 | "dev": true 1804 | }, 1805 | "lodash.restparam": { 1806 | "version": "3.6.1", 1807 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1808 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", 1809 | "dev": true 1810 | }, 1811 | "lodash.sortby": { 1812 | "version": "4.7.0", 1813 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1814 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", 1815 | "dev": true 1816 | }, 1817 | "lodash.template": { 1818 | "version": "3.6.2", 1819 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", 1820 | "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", 1821 | "dev": true, 1822 | "requires": { 1823 | "lodash._basecopy": "3.0.1", 1824 | "lodash._basetostring": "3.0.1", 1825 | "lodash._basevalues": "3.0.0", 1826 | "lodash._isiterateecall": "3.0.9", 1827 | "lodash._reinterpolate": "3.0.0", 1828 | "lodash.escape": "3.2.0", 1829 | "lodash.keys": "3.1.2", 1830 | "lodash.restparam": "3.6.1", 1831 | "lodash.templatesettings": "3.1.1" 1832 | } 1833 | }, 1834 | "lodash.templatesettings": { 1835 | "version": "3.1.1", 1836 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", 1837 | "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", 1838 | "dev": true, 1839 | "requires": { 1840 | "lodash._reinterpolate": "3.0.0", 1841 | "lodash.escape": "3.2.0" 1842 | } 1843 | }, 1844 | "lru-cache": { 1845 | "version": "2.7.3", 1846 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1847 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 1848 | "dev": true 1849 | }, 1850 | "map-cache": { 1851 | "version": "0.2.2", 1852 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1853 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 1854 | "dev": true 1855 | }, 1856 | "map-stream": { 1857 | "version": "0.1.0", 1858 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1859 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 1860 | "dev": true 1861 | }, 1862 | "media-typer": { 1863 | "version": "0.3.0", 1864 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1865 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 1866 | "dev": true 1867 | }, 1868 | "micromatch": { 1869 | "version": "2.3.11", 1870 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 1871 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 1872 | "dev": true, 1873 | "requires": { 1874 | "arr-diff": "2.0.0", 1875 | "array-unique": "0.2.1", 1876 | "braces": "1.8.5", 1877 | "expand-brackets": "0.1.5", 1878 | "extglob": "0.3.2", 1879 | "filename-regex": "2.0.1", 1880 | "is-extglob": "1.0.0", 1881 | "is-glob": "2.0.1", 1882 | "kind-of": "3.2.2", 1883 | "normalize-path": "2.1.1", 1884 | "object.omit": "2.0.1", 1885 | "parse-glob": "3.0.4", 1886 | "regex-cache": "0.4.3" 1887 | } 1888 | }, 1889 | "mime": { 1890 | "version": "1.3.4", 1891 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", 1892 | "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", 1893 | "dev": true 1894 | }, 1895 | "mime-db": { 1896 | "version": "1.27.0", 1897 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", 1898 | "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", 1899 | "dev": true 1900 | }, 1901 | "mime-types": { 1902 | "version": "2.1.15", 1903 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", 1904 | "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", 1905 | "dev": true, 1906 | "requires": { 1907 | "mime-db": "1.27.0" 1908 | } 1909 | }, 1910 | "minimatch": { 1911 | "version": "3.0.4", 1912 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1913 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1914 | "dev": true, 1915 | "requires": { 1916 | "brace-expansion": "1.1.8" 1917 | } 1918 | }, 1919 | "minimist": { 1920 | "version": "1.2.0", 1921 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1922 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1923 | "dev": true 1924 | }, 1925 | "mkdirp": { 1926 | "version": "0.5.1", 1927 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1928 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1929 | "dev": true, 1930 | "requires": { 1931 | "minimist": "0.0.8" 1932 | }, 1933 | "dependencies": { 1934 | "minimist": { 1935 | "version": "0.0.8", 1936 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1937 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1938 | "dev": true 1939 | } 1940 | } 1941 | }, 1942 | "ms": { 1943 | "version": "2.0.0", 1944 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1945 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1946 | "dev": true 1947 | }, 1948 | "multipipe": { 1949 | "version": "0.1.2", 1950 | "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", 1951 | "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", 1952 | "dev": true, 1953 | "requires": { 1954 | "duplexer2": "0.0.2" 1955 | } 1956 | }, 1957 | "natives": { 1958 | "version": "1.1.0", 1959 | "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", 1960 | "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", 1961 | "dev": true 1962 | }, 1963 | "nomnom": { 1964 | "version": "1.8.1", 1965 | "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", 1966 | "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", 1967 | "dev": true, 1968 | "requires": { 1969 | "chalk": "0.4.0", 1970 | "underscore": "1.6.0" 1971 | }, 1972 | "dependencies": { 1973 | "ansi-styles": { 1974 | "version": "1.0.0", 1975 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", 1976 | "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", 1977 | "dev": true 1978 | }, 1979 | "chalk": { 1980 | "version": "0.4.0", 1981 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", 1982 | "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", 1983 | "dev": true, 1984 | "requires": { 1985 | "ansi-styles": "1.0.0", 1986 | "has-color": "0.1.7", 1987 | "strip-ansi": "0.1.1" 1988 | } 1989 | }, 1990 | "strip-ansi": { 1991 | "version": "0.1.1", 1992 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", 1993 | "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", 1994 | "dev": true 1995 | } 1996 | } 1997 | }, 1998 | "nopt": { 1999 | "version": "2.0.0", 2000 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", 2001 | "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", 2002 | "dev": true, 2003 | "requires": { 2004 | "abbrev": "1.1.0" 2005 | } 2006 | }, 2007 | "noptify": { 2008 | "version": "0.0.3", 2009 | "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", 2010 | "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", 2011 | "dev": true, 2012 | "requires": { 2013 | "nopt": "2.0.0" 2014 | } 2015 | }, 2016 | "normalize-path": { 2017 | "version": "2.1.1", 2018 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2019 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2020 | "dev": true, 2021 | "requires": { 2022 | "remove-trailing-separator": "1.0.2" 2023 | } 2024 | }, 2025 | "nwmatcher": { 2026 | "version": "1.4.1", 2027 | "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", 2028 | "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", 2029 | "dev": true 2030 | }, 2031 | "oauth-sign": { 2032 | "version": "0.8.2", 2033 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2034 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 2035 | "dev": true 2036 | }, 2037 | "object-assign": { 2038 | "version": "4.1.1", 2039 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2040 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2041 | "dev": true 2042 | }, 2043 | "object.defaults": { 2044 | "version": "1.1.0", 2045 | "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", 2046 | "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", 2047 | "dev": true, 2048 | "requires": { 2049 | "array-each": "1.0.1", 2050 | "array-slice": "1.0.0", 2051 | "for-own": "1.0.0", 2052 | "isobject": "3.0.1" 2053 | }, 2054 | "dependencies": { 2055 | "for-own": { 2056 | "version": "1.0.0", 2057 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 2058 | "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", 2059 | "dev": true, 2060 | "requires": { 2061 | "for-in": "1.0.2" 2062 | } 2063 | }, 2064 | "isobject": { 2065 | "version": "3.0.1", 2066 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2067 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 2068 | "dev": true 2069 | } 2070 | } 2071 | }, 2072 | "object.omit": { 2073 | "version": "2.0.1", 2074 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 2075 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 2076 | "dev": true, 2077 | "requires": { 2078 | "for-own": "0.1.5", 2079 | "is-extendable": "0.1.1" 2080 | } 2081 | }, 2082 | "object.pick": { 2083 | "version": "1.2.0", 2084 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", 2085 | "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", 2086 | "dev": true, 2087 | "requires": { 2088 | "isobject": "2.1.0" 2089 | } 2090 | }, 2091 | "on-finished": { 2092 | "version": "2.3.0", 2093 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2094 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2095 | "dev": true, 2096 | "requires": { 2097 | "ee-first": "1.1.1" 2098 | } 2099 | }, 2100 | "once": { 2101 | "version": "1.4.0", 2102 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2103 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2104 | "dev": true, 2105 | "requires": { 2106 | "wrappy": "1.0.2" 2107 | } 2108 | }, 2109 | "optionator": { 2110 | "version": "0.8.2", 2111 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2112 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2113 | "dev": true, 2114 | "requires": { 2115 | "deep-is": "0.1.3", 2116 | "fast-levenshtein": "2.0.6", 2117 | "levn": "0.3.0", 2118 | "prelude-ls": "1.1.2", 2119 | "type-check": "0.3.2", 2120 | "wordwrap": "1.0.0" 2121 | } 2122 | }, 2123 | "orchestrator": { 2124 | "version": "0.3.8", 2125 | "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", 2126 | "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", 2127 | "dev": true, 2128 | "requires": { 2129 | "end-of-stream": "0.1.5", 2130 | "sequencify": "0.0.7", 2131 | "stream-consume": "0.1.0" 2132 | } 2133 | }, 2134 | "ordered-read-streams": { 2135 | "version": "0.1.0", 2136 | "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", 2137 | "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", 2138 | "dev": true 2139 | }, 2140 | "os-homedir": { 2141 | "version": "1.0.2", 2142 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2143 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2144 | "dev": true 2145 | }, 2146 | "parse-filepath": { 2147 | "version": "1.0.1", 2148 | "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", 2149 | "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", 2150 | "dev": true, 2151 | "requires": { 2152 | "is-absolute": "0.2.6", 2153 | "map-cache": "0.2.2", 2154 | "path-root": "0.1.1" 2155 | } 2156 | }, 2157 | "parse-glob": { 2158 | "version": "3.0.4", 2159 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 2160 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 2161 | "dev": true, 2162 | "requires": { 2163 | "glob-base": "0.3.0", 2164 | "is-dotfile": "1.0.3", 2165 | "is-extglob": "1.0.0", 2166 | "is-glob": "2.0.1" 2167 | } 2168 | }, 2169 | "parse-passwd": { 2170 | "version": "1.0.0", 2171 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 2172 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 2173 | "dev": true 2174 | }, 2175 | "parse5": { 2176 | "version": "3.0.2", 2177 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", 2178 | "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", 2179 | "dev": true, 2180 | "requires": { 2181 | "@types/node": "6.0.84" 2182 | } 2183 | }, 2184 | "parseurl": { 2185 | "version": "1.3.1", 2186 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", 2187 | "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", 2188 | "dev": true 2189 | }, 2190 | "path-is-absolute": { 2191 | "version": "1.0.1", 2192 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2193 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2194 | "dev": true 2195 | }, 2196 | "path-is-inside": { 2197 | "version": "1.0.2", 2198 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2199 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2200 | "dev": true 2201 | }, 2202 | "path-parse": { 2203 | "version": "1.0.5", 2204 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 2205 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 2206 | "dev": true 2207 | }, 2208 | "path-root": { 2209 | "version": "0.1.1", 2210 | "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", 2211 | "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", 2212 | "dev": true, 2213 | "requires": { 2214 | "path-root-regex": "0.1.2" 2215 | } 2216 | }, 2217 | "path-root-regex": { 2218 | "version": "0.1.2", 2219 | "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", 2220 | "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", 2221 | "dev": true 2222 | }, 2223 | "pause-stream": { 2224 | "version": "0.0.11", 2225 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 2226 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 2227 | "dev": true, 2228 | "requires": { 2229 | "through": "2.3.8" 2230 | } 2231 | }, 2232 | "performance-now": { 2233 | "version": "0.2.0", 2234 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 2235 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", 2236 | "dev": true 2237 | }, 2238 | "pify": { 2239 | "version": "2.3.0", 2240 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2241 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2242 | "dev": true 2243 | }, 2244 | "pinkie": { 2245 | "version": "2.0.4", 2246 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2247 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2248 | "dev": true 2249 | }, 2250 | "pinkie-promise": { 2251 | "version": "2.0.1", 2252 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2253 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2254 | "dev": true, 2255 | "requires": { 2256 | "pinkie": "2.0.4" 2257 | } 2258 | }, 2259 | "pn": { 2260 | "version": "1.0.0", 2261 | "resolved": "https://registry.npmjs.org/pn/-/pn-1.0.0.tgz", 2262 | "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=", 2263 | "dev": true 2264 | }, 2265 | "prelude-ls": { 2266 | "version": "1.1.2", 2267 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2268 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2269 | "dev": true 2270 | }, 2271 | "preserve": { 2272 | "version": "0.2.0", 2273 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 2274 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 2275 | "dev": true 2276 | }, 2277 | "pretty-hrtime": { 2278 | "version": "1.0.3", 2279 | "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 2280 | "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", 2281 | "dev": true 2282 | }, 2283 | "prex": { 2284 | "version": "0.2.0", 2285 | "resolved": "https://registry.npmjs.org/prex/-/prex-0.2.0.tgz", 2286 | "integrity": "sha1-uIwvpNMhgrAcGjN3WjJ0bU4zp8U=", 2287 | "dev": true 2288 | }, 2289 | "process-nextick-args": { 2290 | "version": "1.0.7", 2291 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2292 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2293 | "dev": true 2294 | }, 2295 | "promise-debounce": { 2296 | "version": "1.0.1", 2297 | "resolved": "https://registry.npmjs.org/promise-debounce/-/promise-debounce-1.0.1.tgz", 2298 | "integrity": "sha1-btdvj3nQFE/b0BzBVYnOV/nXHng=", 2299 | "dev": true 2300 | }, 2301 | "punycode": { 2302 | "version": "1.4.1", 2303 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2304 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2305 | "dev": true 2306 | }, 2307 | "q": { 2308 | "version": "1.5.0", 2309 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", 2310 | "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", 2311 | "dev": true 2312 | }, 2313 | "qs": { 2314 | "version": "6.4.0", 2315 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 2316 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", 2317 | "dev": true 2318 | }, 2319 | "randomatic": { 2320 | "version": "1.1.7", 2321 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 2322 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 2323 | "dev": true, 2324 | "requires": { 2325 | "is-number": "3.0.0", 2326 | "kind-of": "4.0.0" 2327 | }, 2328 | "dependencies": { 2329 | "is-number": { 2330 | "version": "3.0.0", 2331 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2332 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2333 | "dev": true, 2334 | "requires": { 2335 | "kind-of": "3.2.2" 2336 | }, 2337 | "dependencies": { 2338 | "kind-of": { 2339 | "version": "3.2.2", 2340 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2341 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2342 | "dev": true, 2343 | "requires": { 2344 | "is-buffer": "1.1.5" 2345 | } 2346 | } 2347 | } 2348 | }, 2349 | "kind-of": { 2350 | "version": "4.0.0", 2351 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2352 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2353 | "dev": true, 2354 | "requires": { 2355 | "is-buffer": "1.1.5" 2356 | } 2357 | } 2358 | } 2359 | }, 2360 | "range-parser": { 2361 | "version": "1.2.0", 2362 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2363 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", 2364 | "dev": true 2365 | }, 2366 | "raw-body": { 2367 | "version": "2.2.0", 2368 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", 2369 | "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", 2370 | "dev": true, 2371 | "requires": { 2372 | "bytes": "2.4.0", 2373 | "iconv-lite": "0.4.15", 2374 | "unpipe": "1.0.0" 2375 | }, 2376 | "dependencies": { 2377 | "iconv-lite": { 2378 | "version": "0.4.15", 2379 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 2380 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", 2381 | "dev": true 2382 | } 2383 | } 2384 | }, 2385 | "readable-stream": { 2386 | "version": "1.1.14", 2387 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 2388 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 2389 | "dev": true, 2390 | "requires": { 2391 | "core-util-is": "1.0.2", 2392 | "inherits": "2.0.3", 2393 | "isarray": "0.0.1", 2394 | "string_decoder": "0.10.31" 2395 | } 2396 | }, 2397 | "rechoir": { 2398 | "version": "0.6.2", 2399 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 2400 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 2401 | "dev": true, 2402 | "requires": { 2403 | "resolve": "1.3.3" 2404 | } 2405 | }, 2406 | "regex-cache": { 2407 | "version": "0.4.3", 2408 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", 2409 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", 2410 | "dev": true, 2411 | "requires": { 2412 | "is-equal-shallow": "0.1.3", 2413 | "is-primitive": "2.0.0" 2414 | } 2415 | }, 2416 | "remove-trailing-separator": { 2417 | "version": "1.0.2", 2418 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", 2419 | "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", 2420 | "dev": true 2421 | }, 2422 | "repeat-element": { 2423 | "version": "1.1.2", 2424 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 2425 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 2426 | "dev": true 2427 | }, 2428 | "repeat-string": { 2429 | "version": "1.6.1", 2430 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2431 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2432 | "dev": true 2433 | }, 2434 | "replace-ext": { 2435 | "version": "0.0.1", 2436 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 2437 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", 2438 | "dev": true 2439 | }, 2440 | "request": { 2441 | "version": "2.81.0", 2442 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 2443 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 2444 | "dev": true, 2445 | "requires": { 2446 | "aws-sign2": "0.6.0", 2447 | "aws4": "1.6.0", 2448 | "caseless": "0.12.0", 2449 | "combined-stream": "1.0.5", 2450 | "extend": "3.0.1", 2451 | "forever-agent": "0.6.1", 2452 | "form-data": "2.1.4", 2453 | "har-validator": "4.2.1", 2454 | "hawk": "3.1.3", 2455 | "http-signature": "1.1.1", 2456 | "is-typedarray": "1.0.0", 2457 | "isstream": "0.1.2", 2458 | "json-stringify-safe": "5.0.1", 2459 | "mime-types": "2.1.15", 2460 | "oauth-sign": "0.8.2", 2461 | "performance-now": "0.2.0", 2462 | "qs": "6.4.0", 2463 | "safe-buffer": "5.1.1", 2464 | "stringstream": "0.0.5", 2465 | "tough-cookie": "2.3.2", 2466 | "tunnel-agent": "0.6.0", 2467 | "uuid": "3.1.0" 2468 | } 2469 | }, 2470 | "request-promise-core": { 2471 | "version": "1.1.1", 2472 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", 2473 | "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", 2474 | "dev": true, 2475 | "requires": { 2476 | "lodash": "4.17.4" 2477 | } 2478 | }, 2479 | "request-promise-native": { 2480 | "version": "1.0.4", 2481 | "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.4.tgz", 2482 | "integrity": "sha1-hpiOyO7kCORVefzoO/0Fs635oVU=", 2483 | "dev": true, 2484 | "requires": { 2485 | "request-promise-core": "1.1.1", 2486 | "stealthy-require": "1.1.1", 2487 | "tough-cookie": "2.3.2" 2488 | } 2489 | }, 2490 | "resolve": { 2491 | "version": "1.3.3", 2492 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", 2493 | "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", 2494 | "dev": true, 2495 | "requires": { 2496 | "path-parse": "1.0.5" 2497 | } 2498 | }, 2499 | "resolve-dir": { 2500 | "version": "0.1.1", 2501 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", 2502 | "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", 2503 | "dev": true, 2504 | "requires": { 2505 | "expand-tilde": "1.2.2", 2506 | "global-modules": "0.2.3" 2507 | } 2508 | }, 2509 | "rimraf": { 2510 | "version": "2.6.1", 2511 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", 2512 | "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", 2513 | "dev": true, 2514 | "requires": { 2515 | "glob": "7.1.2" 2516 | } 2517 | }, 2518 | "safe-buffer": { 2519 | "version": "5.1.1", 2520 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2521 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 2522 | "dev": true 2523 | }, 2524 | "sax": { 2525 | "version": "1.2.4", 2526 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2527 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 2528 | "dev": true 2529 | }, 2530 | "semver": { 2531 | "version": "4.3.6", 2532 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 2533 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 2534 | "dev": true 2535 | }, 2536 | "send": { 2537 | "version": "0.15.3", 2538 | "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", 2539 | "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", 2540 | "dev": true, 2541 | "requires": { 2542 | "debug": "2.6.7", 2543 | "depd": "1.1.0", 2544 | "destroy": "1.0.4", 2545 | "encodeurl": "1.0.1", 2546 | "escape-html": "1.0.3", 2547 | "etag": "1.8.0", 2548 | "fresh": "0.5.0", 2549 | "http-errors": "1.6.1", 2550 | "mime": "1.3.4", 2551 | "ms": "2.0.0", 2552 | "on-finished": "2.3.0", 2553 | "range-parser": "1.2.0", 2554 | "statuses": "1.3.1" 2555 | }, 2556 | "dependencies": { 2557 | "debug": { 2558 | "version": "2.6.7", 2559 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 2560 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 2561 | "dev": true, 2562 | "requires": { 2563 | "ms": "2.0.0" 2564 | } 2565 | } 2566 | } 2567 | }, 2568 | "sequencify": { 2569 | "version": "0.0.7", 2570 | "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", 2571 | "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", 2572 | "dev": true 2573 | }, 2574 | "serve-static": { 2575 | "version": "1.12.3", 2576 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", 2577 | "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", 2578 | "dev": true, 2579 | "requires": { 2580 | "encodeurl": "1.0.1", 2581 | "escape-html": "1.0.3", 2582 | "parseurl": "1.3.1", 2583 | "send": "0.15.3" 2584 | } 2585 | }, 2586 | "setprototypeof": { 2587 | "version": "1.0.3", 2588 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 2589 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", 2590 | "dev": true 2591 | }, 2592 | "sigmund": { 2593 | "version": "1.0.1", 2594 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 2595 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 2596 | "dev": true 2597 | }, 2598 | "sntp": { 2599 | "version": "1.0.9", 2600 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 2601 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 2602 | "dev": true, 2603 | "requires": { 2604 | "hoek": "2.16.3" 2605 | } 2606 | }, 2607 | "source-map": { 2608 | "version": "0.2.0", 2609 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", 2610 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 2611 | "dev": true, 2612 | "optional": true, 2613 | "requires": { 2614 | "amdefine": "1.0.1" 2615 | } 2616 | }, 2617 | "sparkles": { 2618 | "version": "1.0.0", 2619 | "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", 2620 | "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", 2621 | "dev": true 2622 | }, 2623 | "split": { 2624 | "version": "0.3.3", 2625 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 2626 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 2627 | "dev": true, 2628 | "requires": { 2629 | "through": "2.3.8" 2630 | } 2631 | }, 2632 | "sprintf-js": { 2633 | "version": "1.0.3", 2634 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2635 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2636 | "dev": true 2637 | }, 2638 | "sshpk": { 2639 | "version": "1.13.1", 2640 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 2641 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 2642 | "dev": true, 2643 | "requires": { 2644 | "asn1": "0.2.3", 2645 | "assert-plus": "1.0.0", 2646 | "bcrypt-pbkdf": "1.0.1", 2647 | "dashdash": "1.14.1", 2648 | "ecc-jsbn": "0.1.1", 2649 | "getpass": "0.1.7", 2650 | "jsbn": "0.1.1", 2651 | "tweetnacl": "0.14.5" 2652 | }, 2653 | "dependencies": { 2654 | "assert-plus": { 2655 | "version": "1.0.0", 2656 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 2657 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 2658 | "dev": true 2659 | } 2660 | } 2661 | }, 2662 | "statuses": { 2663 | "version": "1.3.1", 2664 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 2665 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", 2666 | "dev": true 2667 | }, 2668 | "stealthy-require": { 2669 | "version": "1.1.1", 2670 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 2671 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", 2672 | "dev": true 2673 | }, 2674 | "stream-combiner": { 2675 | "version": "0.0.4", 2676 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 2677 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 2678 | "dev": true, 2679 | "requires": { 2680 | "duplexer": "0.1.1" 2681 | } 2682 | }, 2683 | "stream-consume": { 2684 | "version": "0.1.0", 2685 | "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", 2686 | "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", 2687 | "dev": true 2688 | }, 2689 | "string_decoder": { 2690 | "version": "0.10.31", 2691 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2692 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 2693 | "dev": true 2694 | }, 2695 | "stringstream": { 2696 | "version": "0.0.5", 2697 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 2698 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 2699 | "dev": true 2700 | }, 2701 | "strip-ansi": { 2702 | "version": "3.0.1", 2703 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2704 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2705 | "dev": true, 2706 | "requires": { 2707 | "ansi-regex": "2.1.1" 2708 | } 2709 | }, 2710 | "strip-bom": { 2711 | "version": "1.0.0", 2712 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", 2713 | "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", 2714 | "dev": true, 2715 | "requires": { 2716 | "first-chunk-stream": "1.0.0", 2717 | "is-utf8": "0.2.1" 2718 | } 2719 | }, 2720 | "supports-color": { 2721 | "version": "2.0.0", 2722 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2723 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 2724 | "dev": true 2725 | }, 2726 | "symbol-tree": { 2727 | "version": "3.2.2", 2728 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", 2729 | "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", 2730 | "dev": true 2731 | }, 2732 | "through": { 2733 | "version": "2.3.8", 2734 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2735 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2736 | "dev": true 2737 | }, 2738 | "through2": { 2739 | "version": "2.0.3", 2740 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 2741 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 2742 | "dev": true, 2743 | "requires": { 2744 | "readable-stream": "2.3.3", 2745 | "xtend": "4.0.1" 2746 | }, 2747 | "dependencies": { 2748 | "isarray": { 2749 | "version": "1.0.0", 2750 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2751 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2752 | "dev": true 2753 | }, 2754 | "readable-stream": { 2755 | "version": "2.3.3", 2756 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2757 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2758 | "dev": true, 2759 | "requires": { 2760 | "core-util-is": "1.0.2", 2761 | "inherits": "2.0.3", 2762 | "isarray": "1.0.0", 2763 | "process-nextick-args": "1.0.7", 2764 | "safe-buffer": "5.1.1", 2765 | "string_decoder": "1.0.3", 2766 | "util-deprecate": "1.0.2" 2767 | } 2768 | }, 2769 | "string_decoder": { 2770 | "version": "1.0.3", 2771 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2772 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2773 | "dev": true, 2774 | "requires": { 2775 | "safe-buffer": "5.1.1" 2776 | } 2777 | } 2778 | } 2779 | }, 2780 | "tildify": { 2781 | "version": "1.2.0", 2782 | "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", 2783 | "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", 2784 | "dev": true, 2785 | "requires": { 2786 | "os-homedir": "1.0.2" 2787 | } 2788 | }, 2789 | "time-stamp": { 2790 | "version": "1.1.0", 2791 | "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", 2792 | "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", 2793 | "dev": true 2794 | }, 2795 | "tiny-lr": { 2796 | "version": "0.0.9", 2797 | "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.9.tgz", 2798 | "integrity": "sha1-U5c/rjT4wYwHyCW0snD3guXrsVI=", 2799 | "dev": true, 2800 | "requires": { 2801 | "body-parser": "1.17.2", 2802 | "debug": "0.8.1", 2803 | "faye-websocket": "0.7.3", 2804 | "noptify": "0.0.3", 2805 | "parseurl": "1.3.1", 2806 | "qs": "0.6.6" 2807 | }, 2808 | "dependencies": { 2809 | "debug": { 2810 | "version": "0.8.1", 2811 | "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", 2812 | "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=", 2813 | "dev": true 2814 | }, 2815 | "qs": { 2816 | "version": "0.6.6", 2817 | "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", 2818 | "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", 2819 | "dev": true 2820 | } 2821 | } 2822 | }, 2823 | "tough-cookie": { 2824 | "version": "2.3.2", 2825 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", 2826 | "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", 2827 | "dev": true, 2828 | "requires": { 2829 | "punycode": "1.4.1" 2830 | } 2831 | }, 2832 | "tr46": { 2833 | "version": "0.0.3", 2834 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2835 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", 2836 | "dev": true 2837 | }, 2838 | "tunnel-agent": { 2839 | "version": "0.6.0", 2840 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2841 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2842 | "dev": true, 2843 | "requires": { 2844 | "safe-buffer": "5.1.1" 2845 | } 2846 | }, 2847 | "tweetnacl": { 2848 | "version": "0.14.5", 2849 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2850 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2851 | "dev": true, 2852 | "optional": true 2853 | }, 2854 | "type-check": { 2855 | "version": "0.3.2", 2856 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2857 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2858 | "dev": true, 2859 | "requires": { 2860 | "prelude-ls": "1.1.2" 2861 | } 2862 | }, 2863 | "type-is": { 2864 | "version": "1.6.15", 2865 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 2866 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 2867 | "dev": true, 2868 | "requires": { 2869 | "media-typer": "0.3.0", 2870 | "mime-types": "2.1.15" 2871 | } 2872 | }, 2873 | "unc-path-regex": { 2874 | "version": "0.1.2", 2875 | "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 2876 | "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", 2877 | "dev": true 2878 | }, 2879 | "underscore": { 2880 | "version": "1.6.0", 2881 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", 2882 | "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", 2883 | "dev": true 2884 | }, 2885 | "unique-stream": { 2886 | "version": "1.0.0", 2887 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", 2888 | "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", 2889 | "dev": true 2890 | }, 2891 | "unpipe": { 2892 | "version": "1.0.0", 2893 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2894 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 2895 | "dev": true 2896 | }, 2897 | "user-home": { 2898 | "version": "1.1.1", 2899 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", 2900 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", 2901 | "dev": true 2902 | }, 2903 | "util-deprecate": { 2904 | "version": "1.0.2", 2905 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2906 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2907 | "dev": true 2908 | }, 2909 | "utils-merge": { 2910 | "version": "1.0.0", 2911 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 2912 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", 2913 | "dev": true 2914 | }, 2915 | "uuid": { 2916 | "version": "3.1.0", 2917 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 2918 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", 2919 | "dev": true 2920 | }, 2921 | "v8flags": { 2922 | "version": "2.1.1", 2923 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", 2924 | "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", 2925 | "dev": true, 2926 | "requires": { 2927 | "user-home": "1.1.1" 2928 | } 2929 | }, 2930 | "verror": { 2931 | "version": "1.3.6", 2932 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", 2933 | "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", 2934 | "dev": true, 2935 | "requires": { 2936 | "extsprintf": "1.0.2" 2937 | } 2938 | }, 2939 | "vinyl": { 2940 | "version": "0.5.3", 2941 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", 2942 | "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", 2943 | "dev": true, 2944 | "requires": { 2945 | "clone": "1.0.2", 2946 | "clone-stats": "0.0.1", 2947 | "replace-ext": "0.0.1" 2948 | } 2949 | }, 2950 | "vinyl-fs": { 2951 | "version": "0.3.14", 2952 | "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", 2953 | "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", 2954 | "dev": true, 2955 | "requires": { 2956 | "defaults": "1.0.3", 2957 | "glob-stream": "3.1.18", 2958 | "glob-watcher": "0.0.6", 2959 | "graceful-fs": "3.0.11", 2960 | "mkdirp": "0.5.1", 2961 | "strip-bom": "1.0.0", 2962 | "through2": "0.6.5", 2963 | "vinyl": "0.4.6" 2964 | }, 2965 | "dependencies": { 2966 | "clone": { 2967 | "version": "0.2.0", 2968 | "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 2969 | "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", 2970 | "dev": true 2971 | }, 2972 | "readable-stream": { 2973 | "version": "1.0.34", 2974 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 2975 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 2976 | "dev": true, 2977 | "requires": { 2978 | "core-util-is": "1.0.2", 2979 | "inherits": "2.0.3", 2980 | "isarray": "0.0.1", 2981 | "string_decoder": "0.10.31" 2982 | } 2983 | }, 2984 | "through2": { 2985 | "version": "0.6.5", 2986 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 2987 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 2988 | "dev": true, 2989 | "requires": { 2990 | "readable-stream": "1.0.34", 2991 | "xtend": "4.0.1" 2992 | } 2993 | }, 2994 | "vinyl": { 2995 | "version": "0.4.6", 2996 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", 2997 | "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", 2998 | "dev": true, 2999 | "requires": { 3000 | "clone": "0.2.0", 3001 | "clone-stats": "0.0.1" 3002 | } 3003 | } 3004 | } 3005 | }, 3006 | "webidl-conversions": { 3007 | "version": "4.0.1", 3008 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.1.tgz", 3009 | "integrity": "sha1-gBWherg+fhsxFjhIas6B2mziBqA=", 3010 | "dev": true 3011 | }, 3012 | "websocket-driver": { 3013 | "version": "0.6.5", 3014 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", 3015 | "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", 3016 | "dev": true, 3017 | "requires": { 3018 | "websocket-extensions": "0.1.1" 3019 | } 3020 | }, 3021 | "websocket-extensions": { 3022 | "version": "0.1.1", 3023 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", 3024 | "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", 3025 | "dev": true 3026 | }, 3027 | "whatwg-encoding": { 3028 | "version": "1.0.1", 3029 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", 3030 | "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", 3031 | "dev": true, 3032 | "requires": { 3033 | "iconv-lite": "0.4.13" 3034 | } 3035 | }, 3036 | "whatwg-url": { 3037 | "version": "6.1.0", 3038 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.1.0.tgz", 3039 | "integrity": "sha1-X8gnm5PXVIO5ztiyYjmFSEehhXg=", 3040 | "dev": true, 3041 | "requires": { 3042 | "lodash.sortby": "4.7.0", 3043 | "tr46": "0.0.3", 3044 | "webidl-conversions": "4.0.1" 3045 | } 3046 | }, 3047 | "which": { 3048 | "version": "1.2.14", 3049 | "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", 3050 | "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", 3051 | "dev": true, 3052 | "requires": { 3053 | "isexe": "2.0.0" 3054 | } 3055 | }, 3056 | "wordwrap": { 3057 | "version": "1.0.0", 3058 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3059 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 3060 | "dev": true 3061 | }, 3062 | "wrappy": { 3063 | "version": "1.0.2", 3064 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3065 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3066 | "dev": true 3067 | }, 3068 | "xml-name-validator": { 3069 | "version": "2.0.1", 3070 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", 3071 | "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", 3072 | "dev": true 3073 | }, 3074 | "xtend": { 3075 | "version": "4.0.1", 3076 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3077 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3078 | "dev": true 3079 | } 3080 | } 3081 | } 3082 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ecmascript-ref", 3 | "version": "1.0.0", 4 | "description": "Ref declarations and expressions for ECMAScript", 5 | "private": true, 6 | "scripts": { 7 | "compile": "gulp build", 8 | "start": "gulp start" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/rbuckton/ecmascript-ref.git" 13 | }, 14 | "keywords": [ 15 | "javascript", 16 | "ecmascript" 17 | ], 18 | "author": "Ron Buckton (rbuckton@microsoft.com)", 19 | "license": "SEE LICENSE IN https://tc39.github.io/ecma262/#sec-copyright-and-software-license", 20 | "bugs": { 21 | "url": "https://github.com/rbuckton/ecmascript-ref/issues" 22 | }, 23 | "homepage": "https://github.com/rbuckton/ecmascript-ref#readme", 24 | "devDependencies": { 25 | "del": "^2.2.2", 26 | "ecmarkup": "^3.11.2", 27 | "gulp": "^3.9.1", 28 | "gulp-emu": "^1.1.0", 29 | "gulp-live-server": "0.0.30" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
     8 |     title: ECMAScript Ref expressions
     9 |     stage: 0
    10 |     grammar: strict
    11 |     contributors: Ron Buckton, Ecma International
    12 | 
    13 | 14 | 15 |

    Introduction

    16 | 17 |
    18 | 19 | -------------------------------------------------------------------------------- /src/sec-introduction.html: -------------------------------------------------------------------------------- 1 |

    Forthcoming

    2 |

    See the proposal repository for background material and discussion.

    --------------------------------------------------------------------------------