mirror of
https://github.com/snachodog/just-the-docs.git
synced 2025-09-12 21:03:32 -06:00
Initial commit
This commit is contained in:
24
node_modules/jsonparse/LICENSE
generated
vendored
Normal file
24
node_modules/jsonparse/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2012 Tim Caswell
|
||||
|
||||
Permission is hereby granted, free of charge,
|
||||
to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify,
|
||||
merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom
|
||||
the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
11
node_modules/jsonparse/README.markdown
generated
vendored
Normal file
11
node_modules/jsonparse/README.markdown
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
This is a streaming JSON parser. For a simpler, sax-based version see this gist: https://gist.github.com/1821394
|
||||
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2011-2012 Tim Caswell
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
26
node_modules/jsonparse/bench.js
generated
vendored
Normal file
26
node_modules/jsonparse/bench.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
var fs = require('fs'),
|
||||
Parser = require('./jsonparse');
|
||||
|
||||
|
||||
var json = fs.readFileSync("samplejson/basic.json");
|
||||
|
||||
|
||||
while (true) {
|
||||
var start = Date.now();
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
JSON.parse(json);
|
||||
}
|
||||
var first = Date.now() - start;
|
||||
|
||||
start = Date.now();
|
||||
var p = new Parser();
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
p.write(json);
|
||||
}
|
||||
var second = Date.now() - start;
|
||||
|
||||
|
||||
console.log("JSON.parse took %s", first);
|
||||
console.log("streaming parser took %s", second);
|
||||
console.log("streaming is %s times slower", second / first);
|
||||
}
|
30
node_modules/jsonparse/examples/twitterfeed.js
generated
vendored
Normal file
30
node_modules/jsonparse/examples/twitterfeed.js
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
var Parser = require('../jsonparse');
|
||||
var Http = require('http');
|
||||
require('./colors');
|
||||
var p = new Parser();
|
||||
var cred = require('./credentials');
|
||||
var client = Http.createClient(80, "stream.twitter.com");
|
||||
var request = client.request("GET", "/1/statuses/sample.json", {
|
||||
"Host": "stream.twitter.com",
|
||||
"Authorization": (new Buffer(cred.username + ":" + cred.password)).toString("base64")
|
||||
});
|
||||
request.on('response', function (response) {
|
||||
console.log(response.statusCode);
|
||||
console.dir(response.headers);
|
||||
response.on('data', function (chunk) {
|
||||
p.write(chunk);
|
||||
});
|
||||
response.on('end', function () {
|
||||
console.log("END");
|
||||
});
|
||||
});
|
||||
request.end();
|
||||
var text = "", name = "";
|
||||
p.onValue = function (value) {
|
||||
if (this.stack.length === 1 && this.key === 'text') { text = value; }
|
||||
if (this.stack.length === 2 && this.key === 'name' && this.stack[1].key === 'user') { name = value; }
|
||||
if (this.stack.length === 0) {
|
||||
console.log(text.blue + " - " + name.yellow);
|
||||
text = name = "";
|
||||
}
|
||||
};
|
401
node_modules/jsonparse/jsonparse.js
generated
vendored
Normal file
401
node_modules/jsonparse/jsonparse.js
generated
vendored
Normal file
@@ -0,0 +1,401 @@
|
||||
/*global Buffer*/
|
||||
// Named constants with unique integer values
|
||||
var C = {};
|
||||
// Tokens
|
||||
var LEFT_BRACE = C.LEFT_BRACE = 0x1;
|
||||
var RIGHT_BRACE = C.RIGHT_BRACE = 0x2;
|
||||
var LEFT_BRACKET = C.LEFT_BRACKET = 0x3;
|
||||
var RIGHT_BRACKET = C.RIGHT_BRACKET = 0x4;
|
||||
var COLON = C.COLON = 0x5;
|
||||
var COMMA = C.COMMA = 0x6;
|
||||
var TRUE = C.TRUE = 0x7;
|
||||
var FALSE = C.FALSE = 0x8;
|
||||
var NULL = C.NULL = 0x9;
|
||||
var STRING = C.STRING = 0xa;
|
||||
var NUMBER = C.NUMBER = 0xb;
|
||||
// Tokenizer States
|
||||
var START = C.START = 0x11;
|
||||
var TRUE1 = C.TRUE1 = 0x21;
|
||||
var TRUE2 = C.TRUE2 = 0x22;
|
||||
var TRUE3 = C.TRUE3 = 0x23;
|
||||
var FALSE1 = C.FALSE1 = 0x31;
|
||||
var FALSE2 = C.FALSE2 = 0x32;
|
||||
var FALSE3 = C.FALSE3 = 0x33;
|
||||
var FALSE4 = C.FALSE4 = 0x34;
|
||||
var NULL1 = C.NULL1 = 0x41;
|
||||
var NULL2 = C.NULL3 = 0x42;
|
||||
var NULL3 = C.NULL2 = 0x43;
|
||||
var NUMBER1 = C.NUMBER1 = 0x51;
|
||||
var NUMBER2 = C.NUMBER2 = 0x52;
|
||||
var NUMBER3 = C.NUMBER3 = 0x53;
|
||||
var NUMBER4 = C.NUMBER4 = 0x54;
|
||||
var NUMBER5 = C.NUMBER5 = 0x55;
|
||||
var NUMBER6 = C.NUMBER6 = 0x56;
|
||||
var NUMBER7 = C.NUMBER7 = 0x57;
|
||||
var NUMBER8 = C.NUMBER8 = 0x58;
|
||||
var STRING1 = C.STRING1 = 0x61;
|
||||
var STRING2 = C.STRING2 = 0x62;
|
||||
var STRING3 = C.STRING3 = 0x63;
|
||||
var STRING4 = C.STRING4 = 0x64;
|
||||
var STRING5 = C.STRING5 = 0x65;
|
||||
var STRING6 = C.STRING6 = 0x66;
|
||||
// Parser States
|
||||
var VALUE = C.VALUE = 0x71;
|
||||
var KEY = C.KEY = 0x72;
|
||||
// Parser Modes
|
||||
var OBJECT = C.OBJECT = 0x81;
|
||||
var ARRAY = C.ARRAY = 0x82;
|
||||
|
||||
// Slow code to string converter (only used when throwing syntax errors)
|
||||
function toknam(code) {
|
||||
var keys = Object.keys(C);
|
||||
for (var i = 0, l = keys.length; i < l; i++) {
|
||||
var key = keys[i];
|
||||
if (C[key] === code) { return key; }
|
||||
}
|
||||
return code && ("0x" + code.toString(16));
|
||||
}
|
||||
|
||||
|
||||
function Parser() {
|
||||
this.tState = START;
|
||||
this.value = undefined;
|
||||
|
||||
this.string = undefined; // string data
|
||||
this.unicode = undefined; // unicode escapes
|
||||
|
||||
// For number parsing
|
||||
this.negative = undefined;
|
||||
this.magnatude = undefined;
|
||||
this.position = undefined;
|
||||
this.exponent = undefined;
|
||||
this.negativeExponent = undefined;
|
||||
|
||||
this.key = undefined;
|
||||
this.mode = undefined;
|
||||
this.stack = [];
|
||||
this.state = VALUE;
|
||||
this.bytes_remaining = 0; // number of bytes remaining in multi byte utf8 char to read after split boundary
|
||||
this.bytes_in_sequence = 0; // bytes in multi byte utf8 char to read
|
||||
this.temp_buffs = { "2": new Buffer(2), "3": new Buffer(3), "4": new Buffer(4) }; // for rebuilding chars split before boundary is reached
|
||||
}
|
||||
var proto = Parser.prototype;
|
||||
proto.charError = function (buffer, i) {
|
||||
this.onError(new Error("Unexpected " + JSON.stringify(String.fromCharCode(buffer[i])) + " at position " + i + " in state " + toknam(this.tState)));
|
||||
};
|
||||
proto.onError = function (err) { throw err; };
|
||||
proto.write = function (buffer) {
|
||||
if (typeof buffer === "string") buffer = new Buffer(buffer);
|
||||
//process.stdout.write("Input: ");
|
||||
//console.dir(buffer.toString());
|
||||
var n;
|
||||
for (var i = 0, l = buffer.length; i < l; i++) {
|
||||
if (this.tState === START){
|
||||
n = buffer[i];
|
||||
if(n === 0x7b){ this.onToken(LEFT_BRACE, "{"); // {
|
||||
}else if(n === 0x7d){ this.onToken(RIGHT_BRACE, "}"); // }
|
||||
}else if(n === 0x5b){ this.onToken(LEFT_BRACKET, "["); // [
|
||||
}else if(n === 0x5d){ this.onToken(RIGHT_BRACKET, "]"); // ]
|
||||
}else if(n === 0x3a){ this.onToken(COLON, ":"); // :
|
||||
}else if(n === 0x2c){ this.onToken(COMMA, ","); // ,
|
||||
}else if(n === 0x74){ this.tState = TRUE1; // t
|
||||
}else if(n === 0x66){ this.tState = FALSE1; // f
|
||||
}else if(n === 0x6e){ this.tState = NULL1; // n
|
||||
}else if(n === 0x22){ this.string = ""; this.tState = STRING1; // "
|
||||
}else if(n === 0x2d){ this.negative = true; this.tState = NUMBER1; // -
|
||||
}else if(n === 0x30){ this.magnatude = 0; this.tState = NUMBER2; // 0
|
||||
}else{
|
||||
if (n > 0x30 && n < 0x40) { // 1-9
|
||||
this.magnatude = n - 0x30; this.tState = NUMBER3;
|
||||
} else if (n === 0x20 || n === 0x09 || n === 0x0a || n === 0x0d) {
|
||||
// whitespace
|
||||
} else { this.charError(buffer, i); }
|
||||
}
|
||||
}else if (this.tState === STRING1){ // After open quote
|
||||
n = buffer[i]; // get current byte from buffer
|
||||
// check for carry over of a multi byte char split between data chunks
|
||||
// & fill temp buffer it with start of this data chunk up to the boundary limit set in the last iteration
|
||||
if (this.bytes_remaining > 0) {
|
||||
for (var j = 0; j < this.bytes_remaining; j++) {
|
||||
this.temp_buffs[this.bytes_in_sequence][this.bytes_in_sequence - this.bytes_remaining + j] = buffer[j];
|
||||
}
|
||||
this.string += this.temp_buffs[this.bytes_in_sequence].toString();
|
||||
this.bytes_in_sequence = this.bytes_remaining = 0;
|
||||
i = i + j - 1;
|
||||
} else if (this.bytes_remaining === 0 && n >= 128) { // else if no remainder bytes carried over, parse multi byte (>=128) chars one at a time
|
||||
if ((n >= 194) && (n <= 223)) this.bytes_in_sequence = 2;
|
||||
if ((n >= 224) && (n <= 239)) this.bytes_in_sequence = 3;
|
||||
if ((n >= 240) && (n <= 244)) this.bytes_in_sequence = 4;
|
||||
if ((this.bytes_in_sequence + i) > buffer.length) { // if bytes needed to complete char fall outside buffer length, we have a boundary split
|
||||
for (var k = 0; k <= (buffer.length - 1 - i); k++) {
|
||||
this.temp_buffs[this.bytes_in_sequence][k] = buffer[i + k]; // fill temp buffer of correct size with bytes available in this chunk
|
||||
}
|
||||
this.bytes_remaining = (i + this.bytes_in_sequence) - buffer.length;
|
||||
i = buffer.length - 1;
|
||||
} else {
|
||||
this.string += buffer.slice(i, (i + this.bytes_in_sequence)).toString();
|
||||
i = i + this.bytes_in_sequence - 1;
|
||||
}
|
||||
} else if (n === 0x22) { this.tState = START; this.onToken(STRING, this.string); this.string = undefined; }
|
||||
else if (n === 0x5c) { this.tState = STRING2; }
|
||||
else if (n >= 0x20) { this.string += String.fromCharCode(n); }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === STRING2){ // After backslash
|
||||
n = buffer[i];
|
||||
if(n === 0x22){ this.string += "\""; this.tState = STRING1;
|
||||
}else if(n === 0x5c){ this.string += "\\"; this.tState = STRING1;
|
||||
}else if(n === 0x2f){ this.string += "\/"; this.tState = STRING1;
|
||||
}else if(n === 0x62){ this.string += "\b"; this.tState = STRING1;
|
||||
}else if(n === 0x66){ this.string += "\f"; this.tState = STRING1;
|
||||
}else if(n === 0x6e){ this.string += "\n"; this.tState = STRING1;
|
||||
}else if(n === 0x72){ this.string += "\r"; this.tState = STRING1;
|
||||
}else if(n === 0x74){ this.string += "\t"; this.tState = STRING1;
|
||||
}else if(n === 0x75){ this.unicode = ""; this.tState = STRING3;
|
||||
}else{
|
||||
this.charError(buffer, i);
|
||||
}
|
||||
}else if (this.tState === STRING3 || this.tState === STRING4 || this.tState === STRING5 || this.tState === STRING6){ // unicode hex codes
|
||||
n = buffer[i];
|
||||
// 0-9 A-F a-f
|
||||
if ((n >= 0x30 && n < 0x40) || (n > 0x40 && n <= 0x46) || (n > 0x60 && n <= 0x66)) {
|
||||
this.unicode += String.fromCharCode(n);
|
||||
if (this.tState++ === STRING6) {
|
||||
this.string += String.fromCharCode(parseInt(this.unicode, 16));
|
||||
this.unicode = undefined;
|
||||
this.tState = STRING1;
|
||||
}
|
||||
} else {
|
||||
this.charError(buffer, i);
|
||||
}
|
||||
}else if (this.tState === NUMBER1){ // after minus
|
||||
n = buffer[i];
|
||||
if (n === 0x30) { this.magnatude = 0; this.tState = NUMBER2; }
|
||||
else if (n > 0x30 && n < 0x40) { this.magnatude = n - 0x30; this.tState = NUMBER3; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NUMBER2){ // * After initial zero
|
||||
n = buffer[i];
|
||||
if(n === 0x2e){ // .
|
||||
this.position = 0.1; this.tState = NUMBER4;
|
||||
}else if(n === 0x65 || n === 0x45){ // e/E
|
||||
this.exponent = 0; this.tState = NUMBER6;
|
||||
}else{
|
||||
this.tState = START;
|
||||
this.onToken(NUMBER, 0);
|
||||
this.magnatude = undefined;
|
||||
this.negative = undefined;
|
||||
i--;
|
||||
}
|
||||
}else if (this.tState === NUMBER3){ // * After digit (before period)
|
||||
n = buffer[i];
|
||||
if(n === 0x2e){ // .
|
||||
this.position = 0.1; this.tState = NUMBER4;
|
||||
}else if(n === 0x65 || n === 0x45){ // e/E
|
||||
this.exponent = 0; this.tState = NUMBER6;
|
||||
}else{
|
||||
if (n >= 0x30 && n < 0x40) { this.magnatude = this.magnatude * 10 + n - 0x30; }
|
||||
else {
|
||||
this.tState = START;
|
||||
if (this.negative) {
|
||||
this.magnatude = -this.magnatude;
|
||||
this.negative = undefined;
|
||||
}
|
||||
this.onToken(NUMBER, this.magnatude);
|
||||
this.magnatude = undefined;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}else if (this.tState === NUMBER4){ // After period
|
||||
n = buffer[i];
|
||||
if (n >= 0x30 && n < 0x40) { // 0-9
|
||||
this.magnatude += this.position * (n - 0x30);
|
||||
this.position /= 10;
|
||||
this.tState = NUMBER5;
|
||||
} else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NUMBER5){ // * After digit (after period)
|
||||
n = buffer[i];
|
||||
if (n >= 0x30 && n < 0x40) { // 0-9
|
||||
this.magnatude += this.position * (n - 0x30);
|
||||
this.position /= 10;
|
||||
}
|
||||
else if (n === 0x65 || n === 0x45) { this.exponent = 0; this.tState = NUMBER6; } // E/e
|
||||
else {
|
||||
this.tState = START;
|
||||
if (this.negative) {
|
||||
this.magnatude = -this.magnatude;
|
||||
this.negative = undefined;
|
||||
}
|
||||
this.onToken(NUMBER, this.negative ? -this.magnatude : this.magnatude);
|
||||
this.magnatude = undefined;
|
||||
this.position = undefined;
|
||||
i--;
|
||||
}
|
||||
}else if (this.tState === NUMBER6){ // After E
|
||||
n = buffer[i];
|
||||
if (n === 0x2b || n === 0x2d) { // +/-
|
||||
if (n === 0x2d) { this.negativeExponent = true; }
|
||||
this.tState = NUMBER7;
|
||||
}
|
||||
else if (n >= 0x30 && n < 0x40) {
|
||||
this.exponent = this.exponent * 10 + (n - 0x30);
|
||||
this.tState = NUMBER8;
|
||||
}
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NUMBER7){ // After +/-
|
||||
n = buffer[i];
|
||||
if (n >= 0x30 && n < 0x40) { // 0-9
|
||||
this.exponent = this.exponent * 10 + (n - 0x30);
|
||||
this.tState = NUMBER8;
|
||||
}
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NUMBER8){ // * After digit (after +/-)
|
||||
n = buffer[i];
|
||||
if (n >= 0x30 && n < 0x40) { // 0-9
|
||||
this.exponent = this.exponent * 10 + (n - 0x30);
|
||||
}
|
||||
else {
|
||||
if (this.negativeExponent) {
|
||||
this.exponent = -this.exponent;
|
||||
this.negativeExponent = undefined;
|
||||
}
|
||||
this.magnatude *= Math.pow(10, this.exponent);
|
||||
this.exponent = undefined;
|
||||
if (this.negative) {
|
||||
this.magnatude = -this.magnatude;
|
||||
this.negative = undefined;
|
||||
}
|
||||
this.tState = START;
|
||||
this.onToken(NUMBER, this.magnatude);
|
||||
this.magnatude = undefined;
|
||||
i--;
|
||||
}
|
||||
}else if (this.tState === TRUE1){ // r
|
||||
if (buffer[i] === 0x72) { this.tState = TRUE2; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === TRUE2){ // u
|
||||
if (buffer[i] === 0x75) { this.tState = TRUE3; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === TRUE3){ // e
|
||||
if (buffer[i] === 0x65) { this.tState = START; this.onToken(TRUE, true); }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === FALSE1){ // a
|
||||
if (buffer[i] === 0x61) { this.tState = FALSE2; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === FALSE2){ // l
|
||||
if (buffer[i] === 0x6c) { this.tState = FALSE3; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === FALSE3){ // s
|
||||
if (buffer[i] === 0x73) { this.tState = FALSE4; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === FALSE4){ // e
|
||||
if (buffer[i] === 0x65) { this.tState = START; this.onToken(FALSE, false); }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NULL1){ // u
|
||||
if (buffer[i] === 0x75) { this.tState = NULL2; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NULL2){ // l
|
||||
if (buffer[i] === 0x6c) { this.tState = NULL3; }
|
||||
else { this.charError(buffer, i); }
|
||||
}else if (this.tState === NULL3){ // l
|
||||
if (buffer[i] === 0x6c) { this.tState = START; this.onToken(NULL, null); }
|
||||
else { this.charError(buffer, i); }
|
||||
}
|
||||
}
|
||||
};
|
||||
proto.onToken = function (token, value) {
|
||||
// Override this to get events
|
||||
};
|
||||
|
||||
proto.parseError = function (token, value) {
|
||||
this.onError(new Error("Unexpected " + toknam(token) + (value ? ("(" + JSON.stringify(value) + ")") : "") + " in state " + toknam(this.state)));
|
||||
};
|
||||
proto.onError = function (err) { throw err; };
|
||||
proto.push = function () {
|
||||
this.stack.push({value: this.value, key: this.key, mode: this.mode});
|
||||
};
|
||||
proto.pop = function () {
|
||||
var value = this.value;
|
||||
var parent = this.stack.pop();
|
||||
this.value = parent.value;
|
||||
this.key = parent.key;
|
||||
this.mode = parent.mode;
|
||||
this.emit(value);
|
||||
if (!this.mode) { this.state = VALUE; }
|
||||
};
|
||||
proto.emit = function (value) {
|
||||
if (this.mode) { this.state = COMMA; }
|
||||
this.onValue(value);
|
||||
};
|
||||
proto.onValue = function (value) {
|
||||
// Override me
|
||||
};
|
||||
proto.onToken = function (token, value) {
|
||||
//console.log("OnToken: state=%s token=%s %s", toknam(this.state), toknam(token), value?JSON.stringify(value):"");
|
||||
if(this.state === VALUE){
|
||||
if(token === STRING || token === NUMBER || token === TRUE || token === FALSE || token === NULL){
|
||||
if (this.value) {
|
||||
this.value[this.key] = value;
|
||||
}
|
||||
this.emit(value);
|
||||
}else if(token === LEFT_BRACE){
|
||||
this.push();
|
||||
if (this.value) {
|
||||
this.value = this.value[this.key] = {};
|
||||
} else {
|
||||
this.value = {};
|
||||
}
|
||||
this.key = undefined;
|
||||
this.state = KEY;
|
||||
this.mode = OBJECT;
|
||||
}else if(token === LEFT_BRACKET){
|
||||
this.push();
|
||||
if (this.value) {
|
||||
this.value = this.value[this.key] = [];
|
||||
} else {
|
||||
this.value = [];
|
||||
}
|
||||
this.key = 0;
|
||||
this.mode = ARRAY;
|
||||
this.state = VALUE;
|
||||
}else if(token === RIGHT_BRACE){
|
||||
if (this.mode === OBJECT) {
|
||||
this.pop();
|
||||
} else {
|
||||
this.parseError(token, value);
|
||||
}
|
||||
}else if(token === RIGHT_BRACKET){
|
||||
if (this.mode === ARRAY) {
|
||||
this.pop();
|
||||
} else {
|
||||
this.parseError(token, value);
|
||||
}
|
||||
}else{
|
||||
this.parseError(token, value);
|
||||
}
|
||||
}else if(this.state === KEY){
|
||||
if (token === STRING) {
|
||||
this.key = value;
|
||||
this.state = COLON;
|
||||
} else if (token === RIGHT_BRACE) {
|
||||
this.pop();
|
||||
} else {
|
||||
this.parseError(token, value);
|
||||
}
|
||||
}else if(this.state === COLON){
|
||||
if (token === COLON) { this.state = VALUE; }
|
||||
else { this.parseError(token, value); }
|
||||
}else if(this.state === COMMA){
|
||||
if (token === COMMA) {
|
||||
if (this.mode === ARRAY) { this.key++; this.state = VALUE; }
|
||||
else if (this.mode === OBJECT) { this.state = KEY; }
|
||||
|
||||
} else if (token === RIGHT_BRACKET && this.mode === ARRAY || token === RIGHT_BRACE && this.mode === OBJECT) {
|
||||
this.pop();
|
||||
} else {
|
||||
this.parseError(token, value);
|
||||
}
|
||||
}else{
|
||||
this.parseError(token, value);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = Parser;
|
84
node_modules/jsonparse/package.json
generated
vendored
Normal file
84
node_modules/jsonparse/package.json
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"jsonparse@0.0.5",
|
||||
"/Users/pmarsceill/_projects/just-the-docs/node_modules/JSONStream"
|
||||
]
|
||||
],
|
||||
"_from": "jsonparse@0.0.5",
|
||||
"_id": "jsonparse@0.0.5",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/jsonparse",
|
||||
"_npmUser": {
|
||||
"email": "tim@creationix.com",
|
||||
"name": "creationix"
|
||||
},
|
||||
"_npmVersion": "1.2.14",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"name": "jsonparse",
|
||||
"raw": "jsonparse@0.0.5",
|
||||
"rawSpec": "0.0.5",
|
||||
"scope": null,
|
||||
"spec": "0.0.5",
|
||||
"type": "version"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/JSONStream"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
|
||||
"_shasum": "330542ad3f0a654665b778f3eb2d9a9fa507ac64",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "jsonparse@0.0.5",
|
||||
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/JSONStream",
|
||||
"author": {
|
||||
"email": "tim@creationix.com",
|
||||
"name": "Tim Caswell"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "http://github.com/creationix/jsonparse/issues"
|
||||
},
|
||||
"dependencies": {},
|
||||
"description": "This is a pure-js JSON streaming parser for node.js",
|
||||
"devDependencies": {
|
||||
"tap": "~0.3.3",
|
||||
"tape": "~0.1.1"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "330542ad3f0a654665b778f3eb2d9a9fa507ac64",
|
||||
"tarball": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
|
||||
},
|
||||
"engines": [
|
||||
"node >= 0.2.0"
|
||||
],
|
||||
"homepage": "https://github.com/creationix/jsonparse#readme",
|
||||
"license": "MIT",
|
||||
"main": "jsonparse.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "creationix",
|
||||
"email": "tim@creationix.com"
|
||||
},
|
||||
{
|
||||
"name": "substack",
|
||||
"email": "mail@substack.net"
|
||||
}
|
||||
],
|
||||
"name": "jsonparse",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/creationix/jsonparse.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tap test/*.js"
|
||||
},
|
||||
"tags": [
|
||||
"json",
|
||||
"stream"
|
||||
],
|
||||
"version": "0.0.5"
|
||||
}
|
167
node_modules/jsonparse/samplejson/basic.json
generated
vendored
Normal file
167
node_modules/jsonparse/samplejson/basic.json
generated
vendored
Normal file
@@ -0,0 +1,167 @@
|
||||
[
|
||||
{
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "rect", "fill": "#333", "stroke": "#999", "x": 0.5e+1, "y": 0.5, "z": 0.8e-0, "w": 0.5e5, "u": 2E10, "foo": 2E+1, "bar": 2E-0, "width": 47, "height": 47}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,47.5],[47.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [1],
|
||||
"3": [2],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,0.5],[47.5,47.5],[0.5,47.5]]}
|
||||
],
|
||||
"solid": {
|
||||
"1": [2],
|
||||
"2": [3],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [3],
|
||||
"7": [4,8],
|
||||
"8": [7],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": false,"3": true,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[0.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [1],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [9],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": false,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,47.5],[0.5,23.5],[24.5,23.5],[24.5,0.5],[47.5,0.5],[47.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [6,2],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [9],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,0.5],[23.5,0.5],[23.5,24.5],[47.5,24.5],[47.5,47.5],[0.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [4,2],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [7],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "circle", "fill": "#ff0", "stroke": "#ff8", "cx": 24, "cy": 24, "r": 18}
|
||||
],
|
||||
"item": true
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#842", "stroke": "#f84", "points": [[4.5,0.5],[14.5,0.5],[14.5,17.5],[34,17.5],[33.5,0.5],[43.5,0.5],[43.5,47.5],[33.5,47.5],[33.5,30.5],[14.5,30.5],[14.5,47.5],[4.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,0.5],[24,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [1],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [3],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": false,"3": false,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "rect", "fill": "#114acb", "x": 0.5, "y": 0.5, "width": 47, "height": 47},
|
||||
{"shape": "polygon", "fill": "rgba(255,255,255,0.30)", "points": [[0.5,0.5],[47.5,0.5],[40,8],[8,8],[8,40],[0.5,47.5]]},
|
||||
{"shape": "polygon", "fill": "rgba(0,0,0,0.30)", "points": [[47.5,0.5],[48,48],[0.5,47.5],[8,40],[40,40],[40,8]]},
|
||||
{"shape": "polygon", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "points": [[24,9],[35,20],[26,29],[26,33],[22,33],[22,27],[29,20],[24,15],[16,23],[13,20]]},
|
||||
{"shape": "rect", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "x": 22, "y":35, "width": 4, "height": 4}
|
||||
]
|
||||
}
|
||||
]
|
180
node_modules/jsonparse/samplejson/basic2.json
generated
vendored
Normal file
180
node_modules/jsonparse/samplejson/basic2.json
generated
vendored
Normal file
@@ -0,0 +1,180 @@
|
||||
[
|
||||
{
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "rect", "fill": "#333", "stroke": "#999", "x": 0.5, "y": 0.5, "width": 47, "height": 47}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,47.5],[47.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [1],
|
||||
"3": [2],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,0.5],[47.5,47.5],[0.5,47.5]]}
|
||||
],
|
||||
"solid": {
|
||||
"1": [2],
|
||||
"2": [3],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [3],
|
||||
"7": [4,8],
|
||||
"8": [7],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": false,"3": true,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[0.5,47.5],[47.5,0.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [1],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [9],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": false,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,47.5],[0.5,23.5],[24.5,23.5],[24.5,0.5],[47.5,0.5],[47.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [6,2],
|
||||
"4": [],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [9],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,0.5],[23.5,0.5],[23.5,24.5],[47.5,24.5],[47.5,47.5],[0.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [4,2],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [7],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "circle", "fill": "#ff0", "stroke": "#ff8", "cx": 24, "cy": 24, "r": 18}
|
||||
],
|
||||
"item": true
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#842", "stroke": "#f84", "points": [[4.5,0.5],[14.5,0.5],[14.5,17.5],[34,17.5],[33.5,0.5],[43.5,0.5],[43.5,47.5],[33.5,47.5],[33.5,30.5],[14.5,30.5],[14.5,47.5],[4.5,47.5]]}
|
||||
],
|
||||
"jumpable": 3
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,0.5],[24,47.5]]}
|
||||
],
|
||||
"jumpable": 3,
|
||||
"solid": {
|
||||
"1": [2,4],
|
||||
"2": [],
|
||||
"3": [2,6],
|
||||
"4": [1],
|
||||
"5": [2,8,1,3,7,9,4,6],
|
||||
"6": [3],
|
||||
"7": [4,8],
|
||||
"8": [],
|
||||
"9": [6,8]
|
||||
},
|
||||
"corners": {"1": false,"3": false,"7": true,"9": true}
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "rect", "fill": "#114acb", "x": 0.5, "y": 0.5, "width": 47, "height": 47},
|
||||
{"shape": "polygon", "fill": "rgba(255,255,255,0.30)", "points": [[0.5,0.5],[47.5,0.5],[40,8],[8,8],[8,40],[0.5,47.5]]},
|
||||
{"shape": "polygon", "fill": "rgba(0,0,0,0.30)", "points": [[47.5,0.5],[48,48],[0.5,47.5],[8,40],[40,40],[40,8]]},
|
||||
{"shape": "polygon", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "points": [[24,9],[35,20],[26,29],[26,33],[22,33],[22,27],[29,20],[24,15],[16,23],[13,20]]},
|
||||
{"shape": "rect", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "x": 22, "y":35, "width": 4, "height": 4}
|
||||
],
|
||||
"item": true
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "circle", "fill": "#80f", "stroke": "#88f", "cx": 24, "cy": 24, "r": 18}
|
||||
],
|
||||
"item": true
|
||||
},
|
||||
{
|
||||
"image": [
|
||||
{"shape": "circle", "fill": "#4f4", "stroke": "#8f8", "cx": 24, "cy": 24, "r": 18}
|
||||
],
|
||||
"item": true
|
||||
}
|
||||
]
|
110
node_modules/jsonparse/test/boundary.js
generated
vendored
Normal file
110
node_modules/jsonparse/test/boundary.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
var test = require('tape');
|
||||
var Parser = require('../');
|
||||
|
||||
test('2 byte utf8 \'De\' character: д', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, 'д');
|
||||
};
|
||||
|
||||
var de_buffer = new Buffer([0xd0, 0xb4]);
|
||||
|
||||
p.write('"');
|
||||
p.write(de_buffer);
|
||||
p.write('"');
|
||||
|
||||
});
|
||||
|
||||
test('3 byte utf8 \'Han\' character: 我', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '我');
|
||||
};
|
||||
|
||||
var han_buffer = new Buffer([0xe6, 0x88, 0x91]);
|
||||
p.write('"');
|
||||
p.write(han_buffer);
|
||||
p.write('"');
|
||||
});
|
||||
|
||||
test('4 byte utf8 character (unicode scalar U+2070E): 𠜎', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '𠜎');
|
||||
};
|
||||
|
||||
var Ux2070E_buffer = new Buffer([0xf0, 0xa0, 0x9c, 0x8e]);
|
||||
p.write('"');
|
||||
p.write(Ux2070E_buffer);
|
||||
p.write('"');
|
||||
});
|
||||
|
||||
test('3 byte utf8 \'Han\' character chunked inbetween 2nd and 3rd byte: 我', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '我');
|
||||
};
|
||||
|
||||
var han_buffer_first = new Buffer([0xe6, 0x88]);
|
||||
var han_buffer_second = new Buffer([0x91]);
|
||||
p.write('"');
|
||||
p.write(han_buffer_first);
|
||||
p.write(han_buffer_second);
|
||||
p.write('"');
|
||||
});
|
||||
|
||||
test('4 byte utf8 character (unicode scalar U+2070E) chunked inbetween 2nd and 3rd byte: 𠜎', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '𠜎');
|
||||
};
|
||||
|
||||
var Ux2070E_buffer_first = new Buffer([0xf0, 0xa0]);
|
||||
var Ux2070E_buffer_second = new Buffer([0x9c, 0x8e]);
|
||||
p.write('"');
|
||||
p.write(Ux2070E_buffer_first);
|
||||
p.write(Ux2070E_buffer_second);
|
||||
p.write('"');
|
||||
});
|
||||
|
||||
test('1-4 byte utf8 character string chunked inbetween random bytes: Aж文𠜱B', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, 'Aж文𠜱B');
|
||||
};
|
||||
|
||||
var eclectic_buffer = new Buffer([0x41, // A
|
||||
0xd0, 0xb6, // ж
|
||||
0xe6, 0x96, 0x87, // 文
|
||||
0xf0, 0xa0, 0x9c, 0xb1, // 𠜱
|
||||
0x42]); // B
|
||||
|
||||
var rand_chunk = Math.floor(Math.random() * (eclectic_buffer.length));
|
||||
var first_buffer = eclectic_buffer.slice(0, rand_chunk);
|
||||
var second_buffer = eclectic_buffer.slice(rand_chunk);
|
||||
|
||||
//console.log('eclectic_buffer: ' + eclectic_buffer)
|
||||
//console.log('sliced from 0 to ' + rand_chunk);
|
||||
//console.log(first_buffer);
|
||||
//console.log('then sliced from ' + rand_chunk + ' to the end');
|
||||
//console.log(second_buffer);
|
||||
|
||||
console.log('chunked after offset ' + rand_chunk);
|
||||
p.write('"');
|
||||
p.write(first_buffer);
|
||||
p.write(second_buffer);
|
||||
p.write('"');
|
||||
|
||||
});
|
54
node_modules/jsonparse/test/primitives.js
generated
vendored
Normal file
54
node_modules/jsonparse/test/primitives.js
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
var test = require('tape');
|
||||
var Parser = require('../');
|
||||
|
||||
var expected = [
|
||||
[ [], '' ],
|
||||
[ [], 'Hello' ],
|
||||
[ [], 'This"is' ],
|
||||
[ [], '\r\n\f\t\\/"' ],
|
||||
[ [], 'Λάμβδα' ],
|
||||
[ [], '\\' ],
|
||||
[ [], '/' ],
|
||||
[ [], '"' ],
|
||||
[ [ 0 ], 0 ],
|
||||
[ [ 1 ], 1 ],
|
||||
[ [ 2 ], -1 ],
|
||||
[ [], [ 0, 1, -1 ] ],
|
||||
[ [ 0 ], 1 ],
|
||||
[ [ 1 ], 1.1 ],
|
||||
[ [ 2 ], -1.1 ],
|
||||
[ [ 3 ], -1 ],
|
||||
[ [], [ 1, 1.1, -1.1, -1 ] ],
|
||||
[ [ 0 ], -1 ],
|
||||
[ [], [ -1 ] ],
|
||||
[ [ 0 ], -0.1 ],
|
||||
[ [], [ -0.1 ] ],
|
||||
[ [ 0 ], 6.019999999999999e+23 ],
|
||||
[ [], [ 6.019999999999999e+23 ] ]
|
||||
];
|
||||
|
||||
test('primitives', function (t) {
|
||||
t.plan(23);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
var keys = this.stack
|
||||
.slice(1)
|
||||
.map(function (item) { return item.key })
|
||||
.concat(this.key !== undefined ? this.key : [])
|
||||
;
|
||||
t.deepEqual(
|
||||
[ keys, value ],
|
||||
expected.shift()
|
||||
);
|
||||
};
|
||||
|
||||
p.write('"""Hello""This\\"is""\\r\\n\\f\\t\\\\\\/\\""');
|
||||
p.write('"\\u039b\\u03ac\\u03bc\\u03b2\\u03b4\\u03b1"');
|
||||
p.write('"\\\\"');
|
||||
p.write('"\\/"');
|
||||
p.write('"\\""');
|
||||
p.write('[0,1,-1]');
|
||||
p.write('[1.0,1.1,-1.1,-1.0][-1][-0.1]');
|
||||
p.write('[6.02e23]');
|
||||
});
|
38
node_modules/jsonparse/test/utf8.js
generated
vendored
Normal file
38
node_modules/jsonparse/test/utf8.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
var test = require('tape');
|
||||
var Parser = require('../');
|
||||
|
||||
test('3 bytes of utf8', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '├──');
|
||||
};
|
||||
|
||||
p.write('"├──"');
|
||||
});
|
||||
|
||||
test('utf8 snowman', function (t) {
|
||||
t.plan(1);
|
||||
|
||||
var p = new Parser();
|
||||
p.onValue = function (value) {
|
||||
t.equal(value, '☃');
|
||||
};
|
||||
|
||||
p.write('"☃"');
|
||||
});
|
||||
|
||||
test('utf8 with regular ascii', function (t) {
|
||||
t.plan(4);
|
||||
|
||||
var p = new Parser();
|
||||
var expected = [ "snow: ☃!", "xyz", "¡que!" ];
|
||||
expected.push(expected.slice());
|
||||
|
||||
p.onValue = function (value) {
|
||||
t.deepEqual(value, expected.shift());
|
||||
};
|
||||
|
||||
p.write('["snow: ☃!","xyz","¡que!"]');
|
||||
});
|
Reference in New Issue
Block a user