From 1336cf61f0c5eb51e1aefcb78ab59cc672552492 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 02:47:45 +0100 Subject: [PATCH 01/18] Distinguish Backbone.View EventsHash from Backbone.Events EventMap The Backbone.Events.on eventMap parameter doesn't accept the same type of callback functions as the Backbone.View.events hash. This change rectifies this. Affects backbone, backbone-relational, backbone.marionette, backbone.radio. --- types/backbone-relational/index.d.ts | 4 ++-- types/backbone.marionette/index.d.ts | 3 ++- types/backbone.radio/index.d.ts | 3 ++- types/backbone/backbone-tests.ts | 2 +- types/backbone/index.d.ts | 20 +++++++++++++++++--- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index f19cfa8daa..a90668828c 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -7,7 +7,7 @@ /// -import { Events, EventsHash, Model as BModel, Collection } from 'backbone'; +import { Events, EventMap, Model as BModel, Collection } from 'backbone'; declare module 'backbone-relational' { class Model extends BModel { @@ -125,7 +125,7 @@ declare module 'backbone-relational' { export class Store implements Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventsHash): any; + on(eventMap: EventMap): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts index 1025940214..e9f54e5569 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -6,6 +6,7 @@ // Volker Nauruhn , // Ard Timmerman , // J. Joe Koullas +// Julian Gonggrijp // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -411,7 +412,7 @@ export class Object implements CommonMixin, RadioMixin, Backbone.Events { constructor(options?: ObjectOptions); on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventsHash): any; + on(eventMap: Backbone.EventMap): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index ac953aa00b..b3d333f586 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -1,6 +1,7 @@ // Type definitions for Backbone.Radio v0.8.3 // Project: https://github.com/marionettejs/backbone.radio // Definitions by: Peter Palotas +// Julian Gonggrijp // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -73,7 +74,7 @@ declare module "backbone" { class Channel implements Commands, Requests, Backbone.Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventsHash): any; + on(eventMap: EventMap): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone/backbone-tests.ts b/types/backbone/backbone-tests.ts index 563c21634c..bdcd94da52 100644 --- a/types/backbone/backbone-tests.ts +++ b/types/backbone/backbone-tests.ts @@ -398,7 +398,7 @@ namespace v1Changes { namespace Collection { function test_fetch() { var collection = new EmployeeCollection; - collection.fetch({ + collection.fetch({ reset: true, remove: false }); diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index a881284c8f..187a2c29a8 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -4,6 +4,7 @@ // Natan Vivo // kenjiru // jjoekoullas +// Julian Gonggrijp // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -91,14 +92,27 @@ declare namespace Backbone { [routePattern: string]: string | {(...urlParts: string[]): void}; } + /** + * DOM events (used in the events property of a View) + */ interface EventsHash { [selector: string]: string | {(eventObject: JQuery.TriggeredEvent): void}; } + /** + * JavaScript events (used in the methods of the Events interface) + */ + interface EventHandler { + (...args: any[]): void; + } + interface EventMap { + [event: string]: EventHandler; + } + export const Events: Events; interface Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventsHash): any; + on(eventMap: EventMap): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; @@ -112,7 +126,7 @@ declare namespace Backbone { class ModelBase implements Events { on(eventName: string, callback?: Function, context?: any): any; - on(eventMap: EventsHash): any; + on(eventMap: EventMap): any; on(eventName: any, callback?: any, context?: any): any off(eventName?: string, callback?: Function, context?: any): any trigger(eventName: string, ...args: any[]): any @@ -492,7 +506,7 @@ declare namespace Backbone { */ declare abstract class EventSignatures implements Backbone.Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: Backbone.EventsHash): any; + on(eventMap: Backbone.EventMap): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; From b5528b7e885f1eb1ae88ee8970f2598b12470ead Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 02:51:59 +0100 Subject: [PATCH 02/18] Add context parameter to the Backbone.Events.on eventMap variant Affects backbone, backbone-relational, backbone.marionette, backbone.radio. --- types/backbone-relational/index.d.ts | 2 +- types/backbone.marionette/index.d.ts | 2 +- types/backbone.radio/index.d.ts | 2 +- types/backbone/index.d.ts | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index a90668828c..a1a56088d4 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -125,7 +125,7 @@ declare module 'backbone-relational' { export class Store implements Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventMap): any; + on(eventMap: EventMap, context?: any): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts index e9f54e5569..8b7db7543f 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -412,7 +412,7 @@ export class Object implements CommonMixin, RadioMixin, Backbone.Events { constructor(options?: ObjectOptions); on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: Backbone.EventMap): any; + on(eventMap: Backbone.EventMap, context?: any): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index b3d333f586..d39956cf72 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -74,7 +74,7 @@ declare module "backbone" { class Channel implements Commands, Requests, Backbone.Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventMap): any; + on(eventMap: EventMap, context?: any): any; on(eventName: any, callback?: any, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 187a2c29a8..b25c08b62c 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -112,7 +112,7 @@ declare namespace Backbone { export const Events: Events; interface Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventMap): any; + on(eventMap: EventMap, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; @@ -126,7 +126,7 @@ declare namespace Backbone { class ModelBase implements Events { on(eventName: string, callback?: Function, context?: any): any; - on(eventMap: EventMap): any; + on(eventMap: EventMap, context?: any): any; on(eventName: any, callback?: any, context?: any): any off(eventName?: string, callback?: Function, context?: any): any trigger(eventName: string, ...args: any[]): any @@ -506,7 +506,7 @@ declare namespace Backbone { */ declare abstract class EventSignatures implements Backbone.Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: Backbone.EventMap): any; + on(eventMap: Backbone.EventMap, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; From 754bd43c20a592fc69f434cb7d6eac4fe16378bf Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 02:59:33 +0100 Subject: [PATCH 03/18] Add eventMap variants of Backbone.Events.{once,listenTo,listenToOnce} Fixes #22156. Affects backbone, backbone-relational, backbone.marionette, backbone.radio. --- types/backbone-relational/index.d.ts | 3 +++ types/backbone.marionette/index.d.ts | 4 ++++ types/backbone.radio/index.d.ts | 4 ++++ types/backbone/backbone-tests.ts | 4 ++++ types/backbone/index.d.ts | 9 +++++++++ 5 files changed, 24 insertions(+) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index a1a56088d4..f237f27ea1 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -132,8 +132,11 @@ declare module 'backbone-relational' { bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; initializeRelation(model, relation, options); diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts index 8b7db7543f..42ab3ecc35 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -418,9 +418,13 @@ export class Object implements CommonMixin, RadioMixin, Backbone.Events { trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: Backbone.EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: Backbone.EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: Backbone.EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; /** diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index d39956cf72..a0901b6b49 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -80,9 +80,13 @@ declare module "backbone" { trigger(eventName: string, ...args: any[]): any; bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; channelName: string; reset(): Channel; diff --git a/types/backbone/backbone-tests.ts b/types/backbone/backbone-tests.ts index bdcd94da52..96d447c1b3 100644 --- a/types/backbone/backbone-tests.ts +++ b/types/backbone/backbone-tests.ts @@ -272,18 +272,22 @@ namespace v1Changes { var model = new Employee; model.once('invalid', () => { }, this); model.once('invalid', () => { }); + model.once({invalid: () => { }, success: () => { }}, this); + model.once({invalid: () => { }, success: () => { }}); } function test_listenTo() { var model = new Employee; var view = new Backbone.View(); view.listenTo(model, 'invalid', () => { }); + view.listenTo(model, {invalid: () => { }, success: () => { }}); } function test_listenToOnce() { var model = new Employee; var view = new Backbone.View(); view.listenToOnce(model, 'invalid', () => { }); + view.listenToOnce(model, {invalid: () => { }, success: () => { }}); } function test_stopListening() { diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index b25c08b62c..ee469bf9eb 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -119,8 +119,11 @@ declare namespace Backbone { unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; } @@ -133,8 +136,11 @@ declare namespace Backbone { bind(eventName: string, callback: Function, context?: any): any unbind(eventName?: string, callback?: Function, context?: any): any once(events: string, callback: Function, context?: any): any + once(eventMap: EventMap, context?: any): any; listenTo(object: any, events: string, callback: Function):any + listenTo(object: any, eventMap: EventMap): any; listenToOnce(object: any, events: string, callback: Function): any + listenToOnce(object: any, eventMap: EventMap): any; stopListening(object?: any, events?: string, callback?: Function): any parse(response: any, options?: any): any; @@ -513,7 +519,10 @@ declare abstract class EventSignatures implements Backbone.Events { unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: Backbone.EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: Backbone.EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: Backbone.EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; } \ No newline at end of file From 97f4c98b766ff51c607c154a5eb5d3e68bc374b4 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 15:46:13 +0100 Subject: [PATCH 04/18] Update giraffe as well --- types/giraffe/index.d.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/types/giraffe/index.d.ts b/types/giraffe/index.d.ts index abce777c20..5911301460 100644 --- a/types/giraffe/index.d.ts +++ b/types/giraffe/index.d.ts @@ -147,15 +147,19 @@ declare namespace Giraffe { class Controller implements GiraffeObject, Backbone.Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any); - on(eventMap: Backbone.EventsHash); + on(eventMap: Backbone.EventMap, context?: any): any; on(eventName: any, callback?: any, context?: any) - off(eventName?: string, callback?: (...args: any[]) => void, context?: any) - trigger(eventName: string, ...args: any[]) - bind(eventName: string, callback: (...args: any[]) => void, context?: any) - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any) + off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + trigger(eventName: string, ...args: any[]): any; + bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; + unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(eventMap: Backbone.EventMap, context?: any): any; listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, eventMap: Backbone.EventMap): any; listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, eventMap: Backbone.EventMap): any; stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; app: App; From 21a9d44fca9c9ef47ddd765ac7ecc84b798035d5 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 17:12:21 +0100 Subject: [PATCH 05/18] Use Backbone.EventsMixin to reduce repetition Affects backbone, backbone-relational, backbone.radio, backbone.marionette, giraffe. Respects #1066. --- types/backbone-relational/index.d.ts | 19 +-------- types/backbone.marionette/index.d.ts | 20 +++------ types/backbone.radio/index.d.ts | 20 +++------ types/backbone/index.d.ts | 61 ++++++++-------------------- types/giraffe/index.d.ts | 20 +++------ 5 files changed, 35 insertions(+), 105 deletions(-) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index f237f27ea1..5d66ebfef9 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -7,7 +7,7 @@ /// -import { Events, EventMap, Model as BModel, Collection } from 'backbone'; +import { EventsMixin, Events, Model as BModel, Collection } from 'backbone'; declare module 'backbone-relational' { class Model extends BModel { @@ -123,22 +123,7 @@ declare module 'backbone-relational' { } - export class Store implements Events { - on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventMap, context?: any): any; - on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - once(events: string, callback: (...args: any[]) => void, context?: any): any; - once(eventMap: EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; - listenTo(object: any, eventMap: EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; - listenToOnce(object: any, eventMap: EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; - + export class Store extends EventsMixin implements Events { initializeRelation(model, relation, options); addModelScope(scope:any):void; diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts index 42ab3ecc35..f24d80ff4d 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -408,24 +408,14 @@ export interface ObjectOptions extends RadioMixinOptions { * A base class which other classes can extend from. Object incorporates many * backbone conventions and utilities like initialize and Backbone.Events. */ -export class Object implements CommonMixin, RadioMixin, Backbone.Events { +export class Object extends Backbone.EventsMixin implements CommonMixin, RadioMixin, Backbone.Events { constructor(options?: ObjectOptions); - on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: Backbone.EventMap, context?: any): any; + /** + * Faulty overgeneralization of Backbone.Events.on, for historical + * reasons. + */ on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - - once(events: string, callback: (...args: any[]) => void, context?: any): any; - once(eventMap: Backbone.EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; - listenTo(object: any, eventMap: Backbone.EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; - listenToOnce(object: any, eventMap: Backbone.EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; /** * Receives a hash of event names and functions and/or function names, diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index a0901b6b49..e6682bd52e 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -72,22 +72,12 @@ declare module "backbone" { stopReplying(commandName?: string, callback?: (...args: any[]) => any, context?: any): Requests; } - class Channel implements Commands, Requests, Backbone.Events { - on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: EventMap, context?: any): any; + class Channel extends Backbone.EventsMixin implements Commands, Requests, Backbone.Events { + /** + * Faulty overgeneralization of Backbone.Events.on, for historical + * reasons. + */ on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - - once(events: string, callback: (...args: any[]) => void, context?: any): any; - once(eventMap: EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; - listenTo(object: any, eventMap: EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; - listenToOnce(object: any, eventMap: EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; channelName: string; reset(): Channel; diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index ee469bf9eb..1171dac918 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -109,8 +109,16 @@ declare namespace Backbone { [event: string]: EventHandler; } - export const Events: Events; - interface Events { + /** + * Helper to avoid code repetition. Backbone.Events cannot be extended, + * hence a separate abstract class with a different name. + * Both classes and interfaces can extend from this helper class to + * reuse the signatures, but only in type declarations. + * Classes that already extend another base class can still + * `implements Events`, but in this case, unfortunately you have to + * repeat all signatures below. + */ + abstract class EventsMixin implements Events { on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: EventMap, context?: any): any; off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; @@ -127,28 +135,16 @@ declare namespace Backbone { stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; } - class ModelBase implements Events { - on(eventName: string, callback?: Function, context?: any): any; - on(eventMap: EventMap, context?: any): any; - on(eventName: any, callback?: any, context?: any): any - off(eventName?: string, callback?: Function, context?: any): any - trigger(eventName: string, ...args: any[]): any - bind(eventName: string, callback: Function, context?: any): any - unbind(eventName?: string, callback?: Function, context?: any): any - once(events: string, callback: Function, context?: any): any - once(eventMap: EventMap, context?: any): any; - listenTo(object: any, events: string, callback: Function):any - listenTo(object: any, eventMap: EventMap): any; - listenToOnce(object: any, events: string, callback: Function): any - listenToOnce(object: any, eventMap: EventMap): any; - stopListening(object?: any, events?: string, callback?: Function): any + export const Events: Events; + interface Events extends EventsMixin { } + class ModelBase extends EventsMixin { parse(response: any, options?: any): any; toJSON(options?: any): any; sync(...arg: any[]): JQueryXHR; } - class Model extends ModelBase { + class Model extends ModelBase implements Events { /** * Do not use, prefer TypeScript's extend functionality. @@ -249,7 +245,7 @@ declare namespace Backbone { matches(attrs: any): boolean; } - class Collection extends ModelBase { + class Collection extends ModelBase implements Events { /** * Do not use, prefer TypeScript's extend functionality. @@ -387,7 +383,7 @@ declare namespace Backbone { without(...values: TModel[]): TModel[]; } - class Router extends EventSignatures { + class Router extends EventsMixin implements Events { /** * Do not use, prefer TypeScript's extend functionality. @@ -416,7 +412,7 @@ declare namespace Backbone { var history: History; - class History extends EventSignatures { + class History extends EventsMixin implements Events { handlers: any[]; interval: number; @@ -453,7 +449,7 @@ declare namespace Backbone { attributes?: {[id: string]: any}; } - class View extends EventSignatures { + class View extends EventsMixin implements Events { /** * Do not use, prefer TypeScript's extend functionality. @@ -505,24 +501,3 @@ declare namespace Backbone { function noConflict(): typeof Backbone; var $: JQueryStatic; } - -/** - * This is not for external use and is only here as a convenient way to - * specify signatures for internal implementers of Backbone.Events - */ -declare abstract class EventSignatures implements Backbone.Events { - on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; - on(eventMap: Backbone.EventMap, context?: any): any; - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - - once(events: string, callback: (...args: any[]) => void, context?: any): any; - once(eventMap: Backbone.EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; - listenTo(object: any, eventMap: Backbone.EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; - listenToOnce(object: any, eventMap: Backbone.EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; -} \ No newline at end of file diff --git a/types/giraffe/index.d.ts b/types/giraffe/index.d.ts index 5911301460..1758823c7d 100644 --- a/types/giraffe/index.d.ts +++ b/types/giraffe/index.d.ts @@ -145,22 +145,12 @@ declare namespace Giraffe { namespace Contrib { - class Controller implements GiraffeObject, Backbone.Events { - on(eventName: string, callback?: (...args: any[]) => void, context?: any); - on(eventMap: Backbone.EventMap, context?: any): any; + class Controller extends Backbone.EventsMixin implements GiraffeObject, Backbone.Events { + /** + * Faulty overgeneralization of Backbone.Events.on, for historical + * reasons. + */ on(eventName: any, callback?: any, context?: any) - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - - once(events: string, callback: (...args: any[]) => void, context?: any): any; - once(eventMap: Backbone.EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; - listenTo(object: any, eventMap: Backbone.EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; - listenToOnce(object: any, eventMap: Backbone.EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; app: App; } From 54c9125b2f5c9640a676bb696a197e8d799edc25 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 19:25:39 +0100 Subject: [PATCH 06/18] Make Backbone.Events even DRYer --- types/backbone/index.d.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 1171dac918..a32e9ee626 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -119,20 +119,20 @@ declare namespace Backbone { * repeat all signatures below. */ abstract class EventsMixin implements Events { - on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; + on(eventName: string, callback?: EventHandler, context?: any): any; on(eventMap: EventMap, context?: any): any; - off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + off(eventName?: string, callback?: EventHandler, context?: any): any; trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; - unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; + bind(eventName: string, callback: EventHandler, context?: any): any; + unbind(eventName?: string, callback?: EventHandler, context?: any): any; - once(events: string, callback: (...args: any[]) => void, context?: any): any; + once(events: string, callback: EventHandler, context?: any): any; once(eventMap: EventMap, context?: any): any; - listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenTo(object: any, events: string, callback: EventHandler): any; listenTo(object: any, eventMap: EventMap): any; - listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: EventHandler): any; listenToOnce(object: any, eventMap: EventMap): any; - stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; + stopListening(object?: any, events?: string, callback?: EventHandler): any; } export const Events: Events; From d62916a608393cb1bd7ddf2b76d748cb40137ac2 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 19:41:47 +0100 Subject: [PATCH 07/18] Return polymorphic this from all Backbone.Events methods Since this is what these methods actually do. --- types/backbone/index.d.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index a32e9ee626..000e8f6dcc 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -119,20 +119,20 @@ declare namespace Backbone { * repeat all signatures below. */ abstract class EventsMixin implements Events { - on(eventName: string, callback?: EventHandler, context?: any): any; - on(eventMap: EventMap, context?: any): any; - off(eventName?: string, callback?: EventHandler, context?: any): any; - trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: EventHandler, context?: any): any; - unbind(eventName?: string, callback?: EventHandler, context?: any): any; + on(eventName: string, callback?: EventHandler, context?: any): this; + on(eventMap: EventMap, context?: any): this; + off(eventName?: string, callback?: EventHandler, context?: any): this; + trigger(eventName: string, ...args: any[]): this; + bind(eventName: string, callback: EventHandler, context?: any): this; + unbind(eventName?: string, callback?: EventHandler, context?: any): this; - once(events: string, callback: EventHandler, context?: any): any; - once(eventMap: EventMap, context?: any): any; - listenTo(object: any, events: string, callback: EventHandler): any; - listenTo(object: any, eventMap: EventMap): any; - listenToOnce(object: any, events: string, callback: EventHandler): any; - listenToOnce(object: any, eventMap: EventMap): any; - stopListening(object?: any, events?: string, callback?: EventHandler): any; + once(events: string, callback: EventHandler, context?: any): this; + once(eventMap: EventMap, context?: any): this; + listenTo(object: any, events: string, callback: EventHandler): this; + listenTo(object: any, eventMap: EventMap): this; + listenToOnce(object: any, events: string, callback: EventHandler): this; + listenToOnce(object: any, eventMap: EventMap): this; + stopListening(object?: any, events?: string, callback?: EventHandler): this; } export const Events: Events; From a483095c3b1f446a23702efca2894fd6aaf2c001 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 8 Feb 2019 20:31:37 +0100 Subject: [PATCH 08/18] Add my name to giraffe --- types/giraffe/index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/types/giraffe/index.d.ts b/types/giraffe/index.d.ts index 1758823c7d..2f0223321c 100644 --- a/types/giraffe/index.d.ts +++ b/types/giraffe/index.d.ts @@ -1,6 +1,7 @@ // Type definitions for Giraffe // Project: https://github.com/barc/backbone.giraffe // Definitions by: Matt McCray +// Julian Gonggrijp // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 From 99c51c2457d225903ad59a8b18c5d8718c4d02b8 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:06:54 +0100 Subject: [PATCH 09/18] Callback argument to Backbone.Events.on is not optional --- types/backbone/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 000e8f6dcc..7b20e76a7f 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -119,7 +119,7 @@ declare namespace Backbone { * repeat all signatures below. */ abstract class EventsMixin implements Events { - on(eventName: string, callback?: EventHandler, context?: any): this; + on(eventName: string, callback: EventHandler, context?: any): this; on(eventMap: EventMap, context?: any): this; off(eventName?: string, callback?: EventHandler, context?: any): this; trigger(eventName: string, ...args: any[]): this; From 6202c307db1339e449990b2abfe70be21600aff1 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:07:28 +0100 Subject: [PATCH 10/18] Add the missing EventMap overload of Backbone.Events.bind --- types/backbone/index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 7b20e76a7f..dcf4d44c84 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -124,6 +124,7 @@ declare namespace Backbone { off(eventName?: string, callback?: EventHandler, context?: any): this; trigger(eventName: string, ...args: any[]): this; bind(eventName: string, callback: EventHandler, context?: any): this; + bind(eventMap: EventMap, context?: any): this; unbind(eventName?: string, callback?: EventHandler, context?: any): this; once(events: string, callback: EventHandler, context?: any): this; From 342615bd7faaa27c3817bd46321cc457eff33bac Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:10:19 +0100 Subject: [PATCH 11/18] Add shorthand interfaces for the Backbone.Events methods --- types/backbone/backbone-tests.ts | 44 +++++++++++++++++++++ types/backbone/index.d.ts | 67 ++++++++++++++++++++++++++++---- 2 files changed, 104 insertions(+), 7 deletions(-) diff --git a/types/backbone/backbone-tests.ts b/types/backbone/backbone-tests.ts index 96d447c1b3..c36b92ff3f 100644 --- a/types/backbone/backbone-tests.ts +++ b/types/backbone/backbone-tests.ts @@ -15,6 +15,50 @@ function test_events() { object.off(); } +class PubSub implements Backbone.Events { + on: Backbone.Events_On; + off: Backbone.Events_Off; + trigger: Backbone.Events_Trigger; + bind: Backbone.Events_On; + unbind: Backbone.Events_Off; + + once: Backbone.Events_On; + listenTo: Backbone.Events_Listen; + listenToOnce: Backbone.Events_Listen; + stopListening: Backbone.Events_Stop; +} + +Object.assign(PubSub.prototype, Backbone.Events); + +function test_events_shorthands() { + let channel1 = new PubSub(); + let channel2 = new PubSub(); + let onChange = () => alert('whatever'); + + channel1.on("alert", (eventName: string) => alert("Triggered " + eventName)); + channel1.trigger("alert", "an event"); + + channel1.once('invalid', () => { }, this); + channel1.once('invalid', () => { }); + channel1.once({invalid: () => { }, success: () => { }}, this); + channel1.once({invalid: () => { }, success: () => { }}); + + channel1.off("change", onChange); + channel1.off("change"); + channel1.off(null, onChange); + channel1.off(null, null, this); + channel1.off(); + + channel2.listenTo(channel1, 'invalid', () => { }); + channel2.listenTo(channel1, {invalid: () => { }, success: () => { }}); + channel2.listenToOnce(channel1, 'invalid', () => { }); + channel2.listenToOnce(channel1, {invalid: () => { }, success: () => { }}); + + channel2.stopListening(channel1, 'invalid', () => { }); + channel2.stopListening(channel1, 'invalid'); + channel2.stopListening(channel1); +} + class SettingDefaults extends Backbone.Model { // 'defaults' could be set in one of the following ways: diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index dcf4d44c84..1fa83dbead 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -110,13 +110,14 @@ declare namespace Backbone { } /** - * Helper to avoid code repetition. Backbone.Events cannot be extended, - * hence a separate abstract class with a different name. - * Both classes and interfaces can extend from this helper class to - * reuse the signatures, but only in type declarations. - * Classes that already extend another base class can still - * `implements Events`, but in this case, unfortunately you have to - * repeat all signatures below. + * Helper to avoid code repetition in type declarations. + * Backbone.Events cannot be extended, hence a separate abstract + * class with a different name. Both classes and interfaces can + * extend from this helper class to reuse the signatures. + * + * For class type declarations that already extend another base + * class, and for actual class definitions, please see the + * EventsMethod* interfaces below. */ abstract class EventsMixin implements Events { on(eventName: string, callback: EventHandler, context?: any): this; @@ -139,6 +140,58 @@ declare namespace Backbone { export const Events: Events; interface Events extends EventsMixin { } + /** + * Helper shorthands for classes that implement the Events interface. + * Define your class like this: + * + * import { + * Events, + * Events_On, + * Events_Off, + * Events_Trigger, + * Events_Listen, + * Events_Stop, + * } from 'backbone'; + * + * class YourClass implements Events { + * on: Events_On; + * off: Events_Off; + * trigger: Events_Trigger; + * bind: Events_On; + * unbind: Events_Off; + * + * once: Events_On; + * listenTo: Events_Listen; + * listenToOnce: Events_Listen; + * stopListening: Events_Stop; + * + * // ... (other methods) + * } + * + * Object.assign(YourClass.prototype, Events); // can also use _.extend + * + * If you are just writing a class type declaration that doesn't already + * extend some other base class, you can use the EventsMixin instead; + * see above. + */ + interface Events_On { + (this: T, eventName: string, callback: EventHandler, context?: any): T; + (this: T, eventMap: EventMap, context?: any): T; + } + interface Events_Off { + (this: T, eventName?: string, callback?: EventHandler, context?: any): T; + } + interface Events_Trigger { + (this: T, eventName: string, ...args: any[]): T; + } + interface Events_Listen { + (this: T, object: any, events: string, callback: EventHandler): T; + (this: T, object: any, eventMap: EventMap): T; + } + interface Events_Stop { + (this: T, object?: any, events?: string, callback?: EventHandler): T; + } + class ModelBase extends EventsMixin { parse(response: any, options?: any): any; toJSON(options?: any): any; From b26dfca0d248f0e0b557fde8ce96e8085b55b51f Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:19:11 +0100 Subject: [PATCH 12/18] Move Backbone.EventsMixin after the Backbone.Events_* method shorthands Because the latter can always be used, and the former only corner cases. --- types/backbone/index.d.ts | 58 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 1fa83dbead..c54bf6309b 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -109,34 +109,6 @@ declare namespace Backbone { [event: string]: EventHandler; } - /** - * Helper to avoid code repetition in type declarations. - * Backbone.Events cannot be extended, hence a separate abstract - * class with a different name. Both classes and interfaces can - * extend from this helper class to reuse the signatures. - * - * For class type declarations that already extend another base - * class, and for actual class definitions, please see the - * EventsMethod* interfaces below. - */ - abstract class EventsMixin implements Events { - on(eventName: string, callback: EventHandler, context?: any): this; - on(eventMap: EventMap, context?: any): this; - off(eventName?: string, callback?: EventHandler, context?: any): this; - trigger(eventName: string, ...args: any[]): this; - bind(eventName: string, callback: EventHandler, context?: any): this; - bind(eventMap: EventMap, context?: any): this; - unbind(eventName?: string, callback?: EventHandler, context?: any): this; - - once(events: string, callback: EventHandler, context?: any): this; - once(eventMap: EventMap, context?: any): this; - listenTo(object: any, events: string, callback: EventHandler): this; - listenTo(object: any, eventMap: EventMap): this; - listenToOnce(object: any, events: string, callback: EventHandler): this; - listenToOnce(object: any, eventMap: EventMap): this; - stopListening(object?: any, events?: string, callback?: EventHandler): this; - } - export const Events: Events; interface Events extends EventsMixin { } @@ -172,7 +144,7 @@ declare namespace Backbone { * * If you are just writing a class type declaration that doesn't already * extend some other base class, you can use the EventsMixin instead; - * see above. + * see below. */ interface Events_On { (this: T, eventName: string, callback: EventHandler, context?: any): T; @@ -192,6 +164,34 @@ declare namespace Backbone { (this: T, object?: any, events?: string, callback?: EventHandler): T; } + /** + * Helper to avoid code repetition in type declarations. + * Backbone.Events cannot be extended, hence a separate abstract + * class with a different name. Both classes and interfaces can + * extend from this helper class to reuse the signatures. + * + * For class type declarations that already extend another base + * class, and for actual class definitions, please see the + * Events_* interfaces above. + */ + abstract class EventsMixin implements Events { + on(eventName: string, callback: EventHandler, context?: any): this; + on(eventMap: EventMap, context?: any): this; + off(eventName?: string, callback?: EventHandler, context?: any): this; + trigger(eventName: string, ...args: any[]): this; + bind(eventName: string, callback: EventHandler, context?: any): this; + bind(eventMap: EventMap, context?: any): this; + unbind(eventName?: string, callback?: EventHandler, context?: any): this; + + once(events: string, callback: EventHandler, context?: any): this; + once(eventMap: EventMap, context?: any): this; + listenTo(object: any, events: string, callback: EventHandler): this; + listenTo(object: any, eventMap: EventMap): this; + listenToOnce(object: any, events: string, callback: EventHandler): this; + listenToOnce(object: any, eventMap: EventMap): this; + stopListening(object?: any, events?: string, callback?: EventHandler): this; + } + class ModelBase extends EventsMixin { parse(response: any, options?: any): any; toJSON(options?: any): any; From 00b5d6b4bf33604d22ba1ff089ef8d681f9eac52 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:36:50 +0100 Subject: [PATCH 13/18] Re-enable two linter rules in backbone-relational no-declare-current-package no-single-declare-module --- types/backbone-relational/tslint.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/types/backbone-relational/tslint.json b/types/backbone-relational/tslint.json index a41bf5d19a..4f5d8a2416 100644 --- a/types/backbone-relational/tslint.json +++ b/types/backbone-relational/tslint.json @@ -22,7 +22,6 @@ "no-conditional-assignment": false, "no-consecutive-blank-lines": false, "no-construct": false, - "no-declare-current-package": false, "no-duplicate-imports": false, "no-duplicate-variable": false, "no-empty-interface": false, @@ -41,7 +40,6 @@ "no-reference-import": false, "no-relative-import-in-test": false, "no-self-import": false, - "no-single-declare-module": false, "no-string-throw": false, "no-unnecessary-callback-wrapper": false, "no-unnecessary-class": false, From 878409b6b4db06949016f4e75428b2ad53cd6e48 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:37:41 +0100 Subject: [PATCH 14/18] Remove the unnecessary module declaration from backbone-relational --- types/backbone-relational/index.d.ts | 243 +++++++++++++-------------- 1 file changed, 119 insertions(+), 124 deletions(-) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index 5d66ebfef9..e9cc5e71ff 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -9,166 +9,161 @@ import { EventsMixin, Events, Model as BModel, Collection } from 'backbone'; -declare module 'backbone-relational' { - class Model extends BModel { - /** - * Do not use, prefer TypeScript's extend functionality. - **/ - //private static extend(properties:any, classProperties?:any):any; +export class Model extends BModel { + /** + * Do not use, prefer TypeScript's extend functionality. + **/ + //private static extend(properties:any, classProperties?:any):any; - relations:any; - subModelTypes:any; - subModelTypeAttribute:any; + relations:any; + subModelTypes:any; + subModelTypeAttribute:any; - initializeRelations(options:any):void; + initializeRelations(options:any):void; - updateRelations(options:any):void; + updateRelations(options:any):void; - queue(func:any):void; + queue(func:any):void; - processQueue():void; + processQueue():void; - getRelation(name:string):Relation; + getRelation(name:string):Relation; - getRelations():Relation[]; + getRelations():Relation[]; - fetchRelated(key:string, options?:any, update?:boolean):any; + fetchRelated(key:string, options?:any, update?:boolean):any; - toJSON(options?: any):any; + toJSON(options?: any):any; - static setup(); + static setup(); - static build(attributes:any, options?:any); + static build(attributes:any, options?:any); - static findOrCreate(attributes:string, options?:any); + static findOrCreate(attributes:string, options?:any); - static findOrCreate(attributes:number, options?:any); + static findOrCreate(attributes:number, options?:any); - static findOrCreate(attributes:any, options?:any); - } + static findOrCreate(attributes:any, options?:any); +} - export class Relation extends BModel { +export class Relation extends BModel { - options:any; - instance:any; - key:any; - keyContents:any; - relatedModel:any; - relatedCollection:any; - reverseRelation:any; - related:any; + options:any; + instance:any; + key:any; + keyContents:any; + relatedModel:any; + relatedCollection:any; + reverseRelation:any; + related:any; - checkPreconditions():boolean; + checkPreconditions():boolean; - setRelated(related:BModel):void; + setRelated(related:BModel):void; - setRelated(related:Collection):void; + setRelated(related:Collection):void; - getReverseRelations(model:Model):Relation; + getReverseRelations(model:Model):Relation; - destroy():void; - } + destroy():void; +} - export class HasOne extends Relation { - collectionType:any; +export class HasOne extends Relation { + collectionType:any; - findRelated(options:any):BModel; + findRelated(options:any):BModel; - setKeyContents(keyContents:string):void; + setKeyContents(keyContents:string):void; - setKeyContents(keyContents:string[]):void; + setKeyContents(keyContents:string[]):void; - setKeyContents(keyContents:number):void; + setKeyContents(keyContents:number):void; - setKeyContents(keyContents:number[]):void; + setKeyContents(keyContents:number[]):void; - setKeyContents(keyContents:Collection):void; + setKeyContents(keyContents:Collection):void; - onChange(model:BModel, attr:any, options:any):void; + onChange(model:BModel, attr:any, options:any):void; - handleAddition(model:BModel, coll:Collection, options:any):void; + handleAddition(model:BModel, coll:Collection, options:any):void; - handleRemoval(model:BModel, coll:Collection, options:any):void; + handleRemoval(model:BModel, coll:Collection, options:any):void; - handleReset(coll:Collection, options:any):void; + handleReset(coll:Collection, options:any):void; - tryAddRelated(model:BModel, coll:any, options:any):void; + tryAddRelated(model:BModel, coll:any, options:any):void; - addRelated(model:BModel, options:any):void; + addRelated(model:BModel, options:any):void; - removeRelated(model:BModel, coll:any, options:any):void; - - } - - - export class HasMany extends Relation { - collectionType:any; - - findRelated(options:any):BModel; - - setKeyContents(keyContents:string):void; - - setKeyContents(keyContents:number):void; - - setKeyContents(keyContents:BModel):void; - - onChange(model:BModel, attr:any, options:any):void; - - tryAddRelated(model:BModel, coll:any, options:any):void; - - addRelated(model:BModel, options:any):void; - - removeRelated(model:BModel, coll:any, options:any):void; - - } - - export class Store extends EventsMixin implements Events { - initializeRelation(model, relation, options); - - addModelScope(scope:any):void; - - removeModelScope(scope):void; - - addSubModels(subModelTypes:Model, superModelType:Model):void; - - setupSuperModel(modelType:Model):void; - - addReverseRelation(relation:any):void; - - addOrphanRelation(relation:any):void; - - processOrphanRelations():void; - - retroFitRelation(relation:Model, create:boolean):Collection; - - getCollection(type:Model, create:boolean):Collection; - - getObjectByName(name:string):any; - - - resolveIdForItem(type:any, item:any):any; - - static find(type:any, item:string):Model; - - static find(type:any, item:number):Model; - - static find(type:any, item:Model):Model; - - static find(type:any, item:any):Model; - - register(model:Model):void; - - checkId(model:Model, id:any):void; - - update(model:Model):void; - - unregister(model:Model, collection:Collection, options:any):void; - - reset():void; - - - } + removeRelated(model:BModel, coll:any, options:any):void; } + +export class HasMany extends Relation { + collectionType:any; + + findRelated(options:any):BModel; + + setKeyContents(keyContents:string):void; + + setKeyContents(keyContents:number):void; + + setKeyContents(keyContents:BModel):void; + + onChange(model:BModel, attr:any, options:any):void; + + tryAddRelated(model:BModel, coll:any, options:any):void; + + addRelated(model:BModel, options:any):void; + + removeRelated(model:BModel, coll:any, options:any):void; + +} + +export class Store extends EventsMixin implements Events { + initializeRelation(model, relation, options); + + addModelScope(scope:any):void; + + removeModelScope(scope):void; + + addSubModels(subModelTypes:Model, superModelType:Model):void; + + setupSuperModel(modelType:Model):void; + + addReverseRelation(relation:any):void; + + addOrphanRelation(relation:any):void; + + processOrphanRelations():void; + + retroFitRelation(relation:Model, create:boolean):Collection; + + getCollection(type:Model, create:boolean):Collection; + + getObjectByName(name:string):any; + + + resolveIdForItem(type:any, item:any):any; + + static find(type:any, item:string):Model; + + static find(type:any, item:number):Model; + + static find(type:any, item:Model):Model; + + static find(type:any, item:any):Model; + + register(model:Model):void; + + checkId(model:Model, id:any):void; + + update(model:Model):void; + + unregister(model:Model, collection:Collection, options:any):void; + + reset():void; + +} From 6fecba5a3632dcc1715a6c2a852a5d784462f910 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:49:13 +0100 Subject: [PATCH 15/18] Re-enable all linter rules in backbone-relational that are not violated --- types/backbone-relational/tslint.json | 53 --------------------------- 1 file changed, 53 deletions(-) diff --git a/types/backbone-relational/tslint.json b/types/backbone-relational/tslint.json index 4f5d8a2416..65e27fce52 100644 --- a/types/backbone-relational/tslint.json +++ b/types/backbone-relational/tslint.json @@ -1,77 +1,24 @@ { "extends": "dtslint/dt.json", "rules": { - "adjacent-overload-signatures": false, "array-type": false, - "arrow-return-shorthand": false, - "ban-types": false, - "callable-types": false, "comment-format": false, "dt-header": false, "eofline": false, - "export-just-namespace": false, - "import-spacing": false, - "interface-name": false, - "interface-over-type-literal": false, "jsdoc-format": false, "max-line-length": false, "member-access": false, - "new-parens": false, - "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, "no-consecutive-blank-lines": false, - "no-construct": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, - "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, - "no-namespace": false, - "no-object-literal-type-assertion": false, "no-padding": false, - "no-redundant-jsdoc": false, - "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, - "no-unnecessary-generics": false, - "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, "no-var-keyword": false, - "no-var-requires": false, - "no-void-expression": false, - "no-trailing-whitespace": false, "object-literal-key-quotes": false, - "object-literal-shorthand": false, "one-line": false, - "one-variable-per-declaration": false, "only-arrow-functions": false, - "prefer-conditional-expression": false, "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, - "prefer-method-signature": false, "prefer-template": false, - "radix": false, - "semicolon": false, "space-before-function-paren": false, - "space-within-parens": false, - "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, "typedef-whitespace": false, "unified-signatures": false, - "void-return": false, "whitespace": false } } From 6b964fe60df13153fe0543b25ad2b58d6bde4a13 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 02:58:56 +0100 Subject: [PATCH 16/18] Re-enable all linter rules in backbone that are not violated --- types/backbone/tslint.json | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/types/backbone/tslint.json b/types/backbone/tslint.json index d67ffb3a73..f5ae3a6788 100644 --- a/types/backbone/tslint.json +++ b/types/backbone/tslint.json @@ -8,73 +8,35 @@ "callable-types": false, "comment-format": false, "dt-header": false, - "eofline": false, "export-just-namespace": false, - "import-spacing": false, "interface-name": false, - "interface-over-type-literal": false, "jsdoc-format": false, "max-line-length": false, "member-access": false, "new-parens": false, "no-angle-bracket-type-assertion": false, "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, "no-consecutive-blank-lines": false, - "no-construct": false, - "no-declare-current-package": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, "no-namespace": false, "no-object-literal-type-assertion": false, "no-padding": false, "no-redundant-jsdoc": false, "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-single-declare-module": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, "no-unnecessary-generics": false, "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, "no-var-keyword": false, - "no-var-requires": false, "no-void-expression": false, - "no-trailing-whitespace": false, "object-literal-key-quotes": false, - "object-literal-shorthand": false, - "one-line": false, - "one-variable-per-declaration": false, "only-arrow-functions": false, - "prefer-conditional-expression": false, "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, "prefer-method-signature": false, "prefer-template": false, - "radix": false, "semicolon": false, "space-before-function-paren": false, - "space-within-parens": false, "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, "typedef-whitespace": false, "unified-signatures": false, - "void-return": false, "whitespace": false } } From 56683cefb04ce87f7d267148aaa75562168c3770 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 03:29:39 +0100 Subject: [PATCH 17/18] Fix some project URLs --- types/backbone-associations/index.d.ts | 2 +- types/backbone/index.d.ts | 1 + types/knockback/index.d.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/types/backbone-associations/index.d.ts b/types/backbone-associations/index.d.ts index d0681c6651..3cf8937b40 100644 --- a/types/backbone-associations/index.d.ts +++ b/types/backbone-associations/index.d.ts @@ -1,5 +1,5 @@ // Type definitions for Backbone-associations 0.6.4 -// Project: https://github.com/dhruvaray/backbone-associations/ +// Project: https://github.com/dhruvaray/backbone-associations // Definitions by: Craig Brett // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index c54bf6309b..58e3735f2b 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -1,5 +1,6 @@ // Type definitions for Backbone 1.3.3 // Project: http://backbonejs.org/ +// https://github.com/jashkenas/backbone // Definitions by: Boris Yankov // Natan Vivo // kenjiru diff --git a/types/knockback/index.d.ts b/types/knockback/index.d.ts index 68b9dc9e0b..6788b4b652 100644 --- a/types/knockback/index.d.ts +++ b/types/knockback/index.d.ts @@ -1,5 +1,5 @@ // Type definitions for Knockback.js -// Project: http://kmalakoff.github.io/knockback/ +// Project: http://kmalakoff.github.io/knockback // Definitions by: Boris Yankov // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 From 4a12e746f2a4a9cd39d0563a50b3c1b8705dda35 Mon Sep 17 00:00:00 2001 From: Julian Gonggrijp Date: Fri, 15 Feb 2019 03:38:31 +0100 Subject: [PATCH 18/18] Really fix the project URLs for knockback and backbone-assocations --- types/backbone-associations/index.d.ts | 2 +- types/knockback/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/types/backbone-associations/index.d.ts b/types/backbone-associations/index.d.ts index 3cf8937b40..c93eb965e8 100644 --- a/types/backbone-associations/index.d.ts +++ b/types/backbone-associations/index.d.ts @@ -1,5 +1,5 @@ // Type definitions for Backbone-associations 0.6.4 -// Project: https://github.com/dhruvaray/backbone-associations +// Project: http://dhruvaray.github.io/backbone-associations // Definitions by: Craig Brett // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 diff --git a/types/knockback/index.d.ts b/types/knockback/index.d.ts index 6788b4b652..59f3e3fa93 100644 --- a/types/knockback/index.d.ts +++ b/types/knockback/index.d.ts @@ -1,5 +1,5 @@ // Type definitions for Knockback.js -// Project: http://kmalakoff.github.io/knockback +// Project: http://kmalakoff.github.com/knockback // Definitions by: Boris Yankov // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3