+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module 'bl' {
+ import stream = require('stream');
+
+ class BufferList extends stream.Duplex {
+ new (callback?:(err:Error, buffer:Buffer) => void): void;
+
+ append(buffer: Buffer):void;
+ get(index: number): number;
+ slice(start?: number, end?: number): Buffer;
+ copy(dest: Buffer, destStart?: number, srcStart?: number, srcEnd?: number): void;
+ duplicate(): BufferList;
+ consume(bytes?: number): void;
+ toString(encoding?: string, start?: number, end?: number): string;
+ length: number;
+
+ readDoubleBE(offset: number, noAssert?: boolean): Buffer;
+ readDoubleLE(offset: number, noAssert?: boolean): Buffer;
+ readFloatBE(offset: number, noAssert?: boolean): Buffer;
+ readFloatLE(offset: number, noAssert?: boolean): Buffer;
+ readInt32BE(offset: number, noAssert?: boolean): Buffer;
+ readInt32LE(offset: number, noAssert?: boolean): Buffer;
+ readUInt32BE(offset: number, noAssert?: boolean): Buffer;
+ readUInt32LE(offset: number, noAssert?: boolean): Buffer;
+ readInt16BE(offset: number, noAssert?: boolean): Buffer;
+ readInt16LE(offset: number, noAssert?: boolean): Buffer;
+ readUInt16BE(offset: number, noAssert?: boolean): Buffer;
+ readUInt16LE(offset: number, noAssert?: boolean): Buffer;
+ readInt8(offset: number, noAssert?: boolean): Buffer;
+ readUInt8(offset: number, noAssert?: boolean): Buffer;
+ }
+
+ export = BufferList;
+}
diff --git a/elm/elm.d.ts b/elm/elm.d.ts
index 1185394be..dbc330fcb 100644
--- a/elm/elm.d.ts
+++ b/elm/elm.d.ts
@@ -18,11 +18,11 @@ interface ElmComponent {
ports: P;
}
-interface PortToElm {
+interface PortToElm {
send(value: V): void;
}
interface PortFromElm {
subscribe(handler: (value: V) => void): void;
unsubscribe(handler: (value: V) => void): void;
-}
\ No newline at end of file
+}
diff --git a/minimatch/minimatch-tests.ts b/minimatch/minimatch-tests.ts
index a9f4f7e92..a4892ef35 100644
--- a/minimatch/minimatch-tests.ts
+++ b/minimatch/minimatch-tests.ts
@@ -11,3 +11,5 @@ var r = m.makeRe();
var f = ["test.ts"];
mm.match(f, pattern, options);
+
+mm.filter('foo')('bar');
diff --git a/minimatch/minimatch.d.ts b/minimatch/minimatch.d.ts
index baf246394..e83d976a8 100644
--- a/minimatch/minimatch.d.ts
+++ b/minimatch/minimatch.d.ts
@@ -8,7 +8,8 @@ declare module "minimatch" {
function M(target:string, pattern:string, options?:M.IOptions):void;
module M {
- function match(filenames:string[], pattern:string, options:IOptions):string[];
+ function match(filenames:string[], pattern:string, options?:IOptions):string[];
+ function filter(pattern:string, options?:IOptions): (target: string) => boolean;
var Minimatch:IMinimatchStatic;
@@ -27,7 +28,7 @@ declare module "minimatch" {
}
interface IMinimatchStatic {
- new (pattern:string, options:IOptions):IMinimatch;
+ new (pattern:string, options?:IOptions):IMinimatch;
}
interface IMinimatch {
@@ -36,11 +37,11 @@ declare module "minimatch" {
parseNegate():void;
braceExpand(pattern:string, options:IOptions):void;
parse(pattern:string, isSub?:boolean):void;
- makeRe():any; // regexp or boolean
- match(file:string, pattern:string, options:IOptions):boolean;
- matchOne(file:string, pattern:string, partial:any):boolean;
+ makeRe():RegExp; // regexp or boolean
+ match(file:string):boolean;
+ matchOne(files:string[], pattern:string[], partial:any):boolean;
}
}
- export = M;
+export = M;
}
diff --git a/pg/pg-tests.ts b/pg/pg-tests.ts
new file mode 100644
index 000000000..dd9c75378
--- /dev/null
+++ b/pg/pg-tests.ts
@@ -0,0 +1,36 @@
+///
+import pg = require("pg");
+var conString = "postgres://username:password@localhost/database";
+
+// Client pooling
+pg.connect(conString, (err, client, done) => {
+ if (err) {
+ return console.error("Error fetching client from pool", err);
+ }
+ client.query("SELECT $1::int AS number", ["1"], (err, result) => {
+ done();
+ if (err) {
+ return console.error("Error running query", err);
+ }
+ console.log(result.rows[0]["number"]);
+ return null;
+ });
+ return null;
+});
+
+// Simple
+var client = new pg.Client(conString);
+client.connect((err) => {
+ if (err) {
+ return console.error("Could not connect to postgres", err);
+ }
+ client.query("SELECT NOW() AS 'theTime'", (err, result) => {
+ if (err) {
+ return console.error("Error running query", err);
+ }
+ console.log(result.rows[0]["theTime"]);
+ client.end();
+ return null;
+ });
+ return null;
+});
\ No newline at end of file
diff --git a/pg/pg.d.ts b/pg/pg.d.ts
new file mode 100644
index 000000000..efdda0e4a
--- /dev/null
+++ b/pg/pg.d.ts
@@ -0,0 +1,88 @@
+// Type definitions for pg
+// Project: https://github.com/brianc/node-postgres
+// Definitions by: Phips Peter
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "pg" {
+ import events = require("events");
+ import stream = require("stream");
+
+ export function connect(connection: string, callback: (err: Error, client: Client, done: () => void) => void): void;
+ export function connect(config: ClientConfig, callback: (err: Error, client: Client, done: () => void) => void): void;
+ export function end(): void;
+
+ export interface ConnectionConfig {
+ user?: string;
+ database?: string;
+ password?: string;
+ port?: number;
+ host?: string;
+ }
+
+ export interface Defaults extends ConnectionConfig {
+ poolSize?: number;
+ poolIdleTimeout?: number;
+ reapIntervalMillis?: number;
+ binary?: boolean;
+ parseInt8?: boolean;
+ }
+
+ export interface ClientConfig extends ConnectionConfig {
+ ssl?: boolean;
+ }
+
+ export interface QueryConfig {
+ name?: string;
+ text: string;
+ values?: any[];
+ }
+
+ export interface QueryResult {
+ rows: any[];
+ }
+
+ export interface ResultBuilder extends QueryResult {
+ command: string;
+ rowCount: number;
+ oid: number;
+ addRow(row: any): void;
+ }
+
+ export class Client extends events.EventEmitter {
+ constructor(connection: string);
+ constructor(config: ClientConfig);
+
+ connect(callback?: (err:Error) => void): void;
+ end(): void;
+
+ query(queryText: string, callback?: (err: Error, result: QueryResult) => void): Query;
+ query(config: QueryConfig, callback?: (err: Error, result: QueryResult) => void): Query;
+ query(queryText: string, values: any[], callback?: (err: Error, result: QueryResult) => void): Query;
+
+ copyFrom(queryText: string): stream.Writable;
+ copyTo(queryText: string): stream.Readable;
+
+ pauseDrain(): void;
+ resumeDrain(): void;
+
+ public on(event: "drain", listener: () => void): Client;
+ public on(event: "error", listener: (err: Error) => void): Client;
+ public on(event: "notification", listener: (message: any) => void): Client;
+ public on(event: "notice", listener: (message: any) => void): Client;
+ public on(event: string, listener: Function): Client;
+ }
+
+ export class Query extends events.EventEmitter {
+ public on(event: "row", listener: (row: any, result?: ResultBuilder) => void): Query;
+ public on(event: "error", listener: (err: Error) => void): Query;
+ public on(event: "end", listener: (result: ResultBuilder) => void): Query;
+ public on(event: string, listener: Function): Query;
+ }
+
+ export class Events extends events.EventEmitter {
+ public on(event: "error", listener: (err: Error, client: Client) => void): Events;
+ public on(event: string, listener: Function): Events;
+ }
+}
\ No newline at end of file
diff --git a/semver/semver-tests.ts b/semver/semver-tests.ts
index 009a47daf..f339be75b 100644
--- a/semver/semver-tests.ts
+++ b/semver/semver-tests.ts
@@ -10,7 +10,7 @@ var exp:RegExp;
var strArr:string[];
var numArr:string[];
-var mod:typeof SemverModule;
+var mod:typeof SemVerModule;
var v1:string, v2:string;
var version:string;
@@ -42,7 +42,7 @@ bool = mod.gtr(version, str, loose);
bool = mod.ltr(version, str, loose);
bool = mod.outside(version, str, str, loose);
-var ver = new mod.Semver(str, bool);
+var ver = new mod.SemVer(str, bool);
str = ver.raw;
bool = ver.loose;
str = ver.format();
@@ -62,7 +62,7 @@ num = ver.comparePre(ver);
ver = ver.inc(str);
-var comp = new SemverModule.Comparator(str, bool);
+var comp = new SemVerModule.Comparator(str, bool);
str = comp.raw;
bool = comp.loose;
str = comp.format();
@@ -76,7 +76,7 @@ comp.parse(str);
bool = comp.test(ver);
-var range = new SemverModule.Range(str, bool);
+var range = new SemVerModule.Range(str, bool);
str = range.raw;
bool = range.loose;
str = range.format();
@@ -85,8 +85,8 @@ str = range.toString();
bool = range.test(ver);
-var sets:SemverModule.Comparator[][];
-sets = range.set();
+var sets:SemVerModule.Comparator[][];
+sets = range.set;
-var lims:SemverModule.Comparator[];
+var lims:SemVerModule.Comparator[];
lims = range.parseRange(str);
diff --git a/semver/semver.d.ts b/semver/semver.d.ts
index 67f536af5..12909d90e 100644
--- a/semver/semver.d.ts
+++ b/semver/semver.d.ts
@@ -3,7 +3,7 @@
// Definitions by: Bart van der Schoor
// Definitions: https://github.com/borisyankov/DefinitelyTyped
-declare module SemverModule {
+declare module SemVerModule {
function valid(v:string, loose?:boolean):string; // Return the parsed version, or null if it's not valid.
//TODO maybe add an enum for release?
@@ -28,7 +28,7 @@ declare module SemverModule {
function ltr(version:string, range:string, loose?:boolean):boolean; // Return true if version is less than all the versions possible in the range.
function outside(version:string, range:string, hilo:string, loose?:boolean):boolean; // Return true if the version is outside the bounds of the range in either the high or low direction. The hilo argument must be either the string '>' or '<'. (This is the function called by gtr and ltr.)
- class SemverBase {
+ class SemVerBase {
raw:string;
loose:boolean;
format():string;
@@ -36,7 +36,7 @@ declare module SemverModule {
toString():string;
}
- class Semver extends SemverBase {
+ class SemVer extends SemVerBase {
constructor(version:string, loose?:boolean);
major:number;
@@ -46,30 +46,30 @@ declare module SemverModule {
build:string[];
prerelease:string[];
- compare(other:Semver):number;
- compareMain(other:Semver):number;
- comparePre(other:Semver):number;
- inc(release:string):Semver;
+ compare(other:SemVer):number;
+ compareMain(other:SemVer):number;
+ comparePre(other:SemVer):number;
+ inc(release:string):SemVer;
}
- class Comparator extends SemverBase {
+ class Comparator extends SemVerBase {
constructor(comp:string, loose?:boolean);
- semver:Semver;
+ semver:SemVer;
operator:string;
value:boolean;
parse(comp:string) :void;
- test(version:Semver):boolean;
+ test(version:SemVer):boolean;
}
- class Range extends SemverBase {
+ class Range extends SemVerBase {
constructor(range:string, loose?:boolean);
- set():Comparator[][];
+ set:Comparator[][];
parseRange(range:string):Comparator[];
- test(version:Semver):boolean;
+ test(version:SemVer):boolean;
}
}
declare module "semver" {
-export = SemverModule;
+export = SemVerModule;
}
diff --git a/x2js/xml2json-tests.ts b/x2js/xml2json-tests.ts
new file mode 100644
index 000000000..d5a8568e8
--- /dev/null
+++ b/x2js/xml2json-tests.ts
@@ -0,0 +1,300 @@
+///
+
+// Create x2js instance with default config
+var x2js = new X2JS();
+
+// JSON to DOM
+var xmlDoc = x2js.json2xml(
+ {
+ MyRoot: {
+ MyChild: 'my_child_value',
+ MyAnotherChild: 10,
+ MyArray: [ 'test', 'test2' ],
+ MyArrayRecords: [
+ {
+ ttt: 'vvvv'
+ },
+ {
+ ttt: 'vvvv2'
+ }
+ ]
+ }
+ }
+);
+
+
+// JSON to XML string
+var xmlDocStr = x2js.json2xml_str(
+ {
+ MyRoot: {
+ MyChild: 'my_child_value',
+ MyAnotherChild: 10,
+ MyArray: [ 'test', 'test2' ],
+ MyArrayRecords: [
+ {
+ ttt: 'vvvv'
+ },
+ {
+ ttt: 'vvvv2'
+ }
+ ]
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+// JSON arrays to string
+var xmlDocStr = x2js.json2xml_str(
+ {
+ MyRoot: {
+ namedItemArray: {
+ item: [
+ { first: 'success1' } ,
+ { first: 'success2' }
+ ]
+ },
+ namedArray: [
+ { first: 'success1' } ,
+ { first: 'success2' }
+ ],
+ justArray: [ 'just success1', 'just success2' ],
+ arrayWithAttrs: [
+ {
+ _test: 'successAttr',
+ __text: 'success',
+ temp: 'successTemp'
+ },
+ {
+ _test: 'successAttr2',
+ __text: 'success2',
+ temp: 'successTemp2'
+ }
+ ]
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+// XML string to JSON
+var xmlText = "Success- ddsfg
- dsdgfdgfd
";
+var jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.MyOperation.test);
+
+// Array access form examples
+console.log(x2js.asArray(jsonObj.MyOperation.test)[0]);
+// Or old style (1.0.+):
+var x2jsOld = new X2JS({arrayAccessForm: "property"});
+jsonObj = x2jsOld.xml_str2json(xmlText);
+console.log("Old is " + jsonObj.MyOperation.test_asArray[0]);
+
+// XML/DOM to JSON
+var xmlText = " - Success - TestText - ddsfg
TestText2 - dsdgfdgfd
"
+xmlDoc = x2js.parseXmlString(xmlText);
+
+var jsonObj = x2js.xml2json(xmlDoc);
+console.log(jsonObj.MyOperation.test);
+
+// Parsing XML attrs
+var xmlText = "SUCCESS TXTSuccess- ddsfg
- dsdgfdgfd
";
+var jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.MyOperation._myAttr);
+console.log(jsonObj.MyOperation.test2._myAttr);
+console.log(jsonObj.MyOperation.txtAttrChild._sAttr);
+console.log(jsonObj.MyOperation.txtAttrChild.__text);
+console.log(jsonObj.MyOperation.txtAttrChild.toString());
+
+// JSON to XML attrs
+var xmlDocStr = x2js.json2xml_str(
+ {
+ TestAttrRoot: {
+ _myAttr: 'myAttrValue',
+ MyChild: 'my_child_value',
+ MyAnotherChild: 10,
+ MyTextAttrChild: {
+ _myTextAttr: 'myTextAttrValue',
+ __text: 'HelloText'
+ }
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+//Change prefix for attributes
+var x2jsChangedAttrs = new X2JS({
+ // XML attributes. Default is "_"
+ attributePrefix: "$"
+});
+jsonObj = x2jsChangedAttrs.xml_str2json(xmlText);
+console.log(jsonObj.MyOperation.$myAttr);
+console.log(jsonObj.MyOperation.test2.$myAttr);
+console.log(jsonObj.MyOperation.txtAttrChild.$sAttr);
+
+xmlDocStr = x2jsChangedAttrs.json2xml_str({
+ TestAttrRoot: {
+ _myAttr: 'myAttrValue',
+ MyChild: 'my_child_value',
+ MyAnotherChild: 10,
+ MyTextAttrChild: {
+ $myTextAttr: 'myTextAttrValue',
+ __text: 'HelloText'
+ }
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+
+// Parse XML with namespaces
+var xmlText = "Success- ddsfg
- dsdgfdgfd
testArrSize";
+var jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.MyOperation.test);
+if (jsonObj.MyOperation.test2.item.length > 2)
+ console.log("Error! Incorrect array len!");
+
+var testObjC = {
+ 'm:TestAttrRoot': {
+ '_tns:m': 'http://www.example.org',
+ '_tns:cms': 'http://www.example.org',
+ MyChild: 'my_child_value',
+ 'cms:MyAnotherChild': 'vdfd'
+ }
+}
+
+// Parse JSON object with namespaces
+var xmlDocStr = x2js.json2xml_str(
+ testObjC
+);
+
+console.log(xmlDocStr);
+
+// Parse JSON object constructed with another NS-style
+var testObjNew = {
+ TestAttrRoot: {
+ __prefix: 'm',
+ '_tns:m': 'http://www.example.org',
+ '_tns:cms': 'http://www.example.org',
+ MyChild: 'my_child_value',
+ MyAnotherChild: {
+ __prefix: 'cms',
+ __text: 'vdfd'
+ }
+ }
+}
+
+// Parse JSON object with namespaces
+var xmlDocStr = x2js.json2xml_str(
+ testObjNew
+);
+
+console.log(xmlDocStr);
+
+// Parse XML with header
+var xmlText = "\n" +
+ "XML HEADER SUCCESS!";
+
+var jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.test);
+
+// Parse XML with CDATA
+var xmlText = "simple success]]> ";
+
+var jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.test.data.toString());
+console.log(jsonObj.test.data.__cdata);
+console.log(jsonObj.test.simple);
+
+
+// Parse JSON object with CDATA
+var xmlDocStr = x2js.json2xml_str(
+ jsonObj
+);
+console.log(xmlDocStr);
+
+// Parse JSON with emtpy attributes
+var xmlDocStr = x2js.json2xml_str(
+ {
+ MyRoot: {
+ MyNullChild: null,
+ MyNullChild2: undefined,
+ MyAnotherChild: 10,
+ MyEmptyChild: {
+ _attr: "test"
+ },
+ MyEmptyChild2: {
+ _attr: "test",
+ __text: "Empty Nodes Test"
+ }
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+// Escaping XML characters
+xmlDocStr = x2js.json2xml_str(
+ {
+ MyRoot: {
+ MyEscapeXmlChild: " & \" ' / ",
+ MyEscapeXmlChild2: {
+ _attr: "success",
+ __text: " & \" ' / "
+ },
+ MyEscapeXmlChildNonString: false
+ }
+ }
+);
+
+console.log(xmlDocStr);
+
+jsonObj = x2js.xml_str2json(xmlDocStr);
+console.log(jsonObj.MyRoot.MyEscapeXmlChild);
+console.log(jsonObj.MyRoot.MyEscapeXmlChild2.toString());
+
+console.log(x2js.getVersion());
+
+// Array access path demos
+x2js = new X2JS({
+ arrayAccessFormPaths: [
+ "MyArrays.test4.item",
+ /.*\.test3\.item/
+ ]
+});
+
+xmlText = "" +
+ "- success
- second
" +
+ "- success
" +
+ "- success
" +
+ "- success
" +
+ "";
+
+
+jsonObj = x2js.xml_str2json(xmlText);
+console.log(jsonObj.MyArrays.test3.item[0]);
+console.log(jsonObj.MyArrays.test4.item[0]);
+console.log(jsonObj.MyArrays.test5.item);
+
+// Working with datetimes
+x2js = new X2JS({
+ datetimeAccessFormPaths: [
+ "MyDts.testds",
+ /.*\.testdt.*/
+ ]
+});
+
+xmlText = "" +
+ "2002-10-10T12:00:00+04:00" +
+ "2002-10-10T12:00:00Z" +
+ "2002-10-10T12:00:00" +
+ "2002-10-10T12:00:00Z" +
+ "";
+jsonObj = x2js.xml_str2json(xmlText);
+
+console.log(jsonObj.MyDts.testds);
+console.log(jsonObj.MyDts.testdt1);
+console.log(jsonObj.MyDts.testdt2);
+console.log(x2js.asDateTime(jsonObj.MyDts.testdc));
+
diff --git a/x2js/xml2json.d.ts b/x2js/xml2json.d.ts
new file mode 100644
index 000000000..c202eface
--- /dev/null
+++ b/x2js/xml2json.d.ts
@@ -0,0 +1,32 @@
+
+interface IX2JS {
+ new (config?: IX2JSOption): IX2JS;
+
+ getVersion(): string;
+
+ xml2json(dom: Node): T;
+ json2xml(json: T): Node;
+ xml_str2json(xml: string): T;
+ json2xml_str(json: T): string;
+ parseXmlString(xml: string): Node;
+
+ asArray(prop: any): any[];
+ asDateTime(key: string): string;
+ asXmlDateTime(date: Date): string;
+ asXmlDateTime(date: number): string;
+}
+
+interface IX2JSOption {
+ escapeMode?: boolean;
+ attributePrefix?: string;
+ arrayAccessForm?: string;
+ emptyNodeForm?: string;
+ enableToStringFunc?: boolean;
+ arrayAccessFormPaths?: any[];
+ skipEmptyTextNodesForObj?: boolean;
+ stripWhitespaces?: boolean;
+ datetimeAccessFormPaths?: any[];
+}
+
+declare var X2JS: IX2JS;
+