Skip to content

Commit 4132414

Browse files
authored
Merge pull request #3217 from jasongrout/upgrade-backbonetypes
Upgrade @types/backbone
2 parents 355eea5 + 78fa12b commit 4132414

File tree

6 files changed

+41
-26
lines changed

6 files changed

+41
-26
lines changed

packages/base-manager/src/manager-base.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ import {
2121
PROTOCOL_VERSION,
2222
IWidgetManager,
2323
IModelOptions,
24-
IWidgetOptions
24+
IWidgetOptions,
25+
IBackboneModelOptions
2526
} from '@jupyter-widgets/base';
2627

2728
import { base64ToBuffer, bufferToBase64, hexToBuffer } from './utils';
@@ -52,6 +53,11 @@ export interface IBase64Buffers extends PartialJSONObject {
5253
encoding: 'base64';
5354
}
5455

56+
/**
57+
* Make all properties in K (of T) required
58+
*/
59+
export type RequiredSome<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
60+
5561
/**
5662
* Manager abstract base class
5763
*/
@@ -270,25 +276,21 @@ export abstract class ManagerBase implements IWidgetManager {
270276
options: IModelOptions,
271277
serialized_state: any = {}
272278
): Promise<WidgetModel> {
273-
let model_id;
274-
if (options.model_id) {
275-
model_id = options.model_id;
276-
} else if (options.comm) {
277-
model_id = options.model_id = options.comm.comm_id;
278-
} else {
279+
const model_id = options.model_id ?? options.comm?.comm_id;
280+
if (!model_id) {
279281
throw new Error(
280282
'Neither comm nor model_id provided in options object. At least one must exist.'
281283
);
282284
}
283-
284-
const modelPromise = this._make_model(options, serialized_state);
285+
options.model_id = model_id;
286+
const modelPromise = this._make_model(options as RequiredSome<IModelOptions, 'model_id'>, serialized_state);
285287
// this call needs to happen before the first `await`, see note in `set_state`:
286288
this.register_model(model_id, modelPromise);
287289
return await modelPromise;
288290
}
289291

290292
async _make_model(
291-
options: IModelOptions,
293+
options: RequiredSome<IModelOptions, 'model_id'>,
292294
serialized_state: any = {}
293295
): Promise<WidgetModel> {
294296
const model_id = options.model_id;
@@ -315,7 +317,7 @@ export abstract class ManagerBase implements IWidgetManager {
315317
serialized_state,
316318
this
317319
);
318-
const modelOptions = {
320+
const modelOptions: IBackboneModelOptions = {
319321
widget_manager: this,
320322
model_id: model_id,
321323
comm: options.comm

packages/base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"@lumino/coreutils": "^1.2.0",
3737
"@lumino/messaging": "^1.2.1",
3838
"@lumino/widgets": "^1.3.0",
39-
"@types/backbone": "1.4.1",
39+
"@types/backbone": "1.4.10",
4040
"@types/lodash": "^4.14.134",
4141
"backbone": "1.4.0",
4242
"jquery": "^3.1.1",

packages/base/src/nativeview.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class NativeView<T extends Backbone.Model> extends Backbone.View<T> {
8080
_setAttributes(attrs: Backbone.ObjectHash): void {
8181
for (const attr in attrs) {
8282
attr in this.el
83-
? (this.el[attr] = attrs[attr])
83+
? ((this.el as any)[attr] = attrs[attr])
8484
: this.el.setAttribute(attr, attrs[attr]);
8585
}
8686
}
@@ -99,17 +99,17 @@ export class NativeView<T extends Backbone.Model> extends Backbone.View<T> {
9999
* https://github.com/jquery/jquery/blob/7d21f02b9ec9f655583e898350badf89165ed4d5/src/event.js#L442
100100
* for some similar exceptional cases).
101101
*/
102-
delegate(eventName: string, listener: Function): Backbone.View<T>;
102+
delegate(eventName: string, listener: Function): this;
103103
delegate(
104104
eventName: string,
105105
selector: string,
106106
listener: Function
107-
): Backbone.View<T>;
107+
): this;
108108
delegate(
109109
eventName: string,
110110
selector: string | Function,
111111
listener?: any
112-
): Backbone.View<T> {
112+
): this {
113113
if (typeof selector !== 'string') {
114114
listener = selector;
115115
selector = null!;
@@ -150,8 +150,8 @@ export class NativeView<T extends Backbone.Model> extends Backbone.View<T> {
150150
eventName: string,
151151
selector?: string,
152152
listener?: Function
153-
): NativeView<T>;
154-
undelegate(selector: string, listener?: Function): NativeView<T>;
153+
): this;
154+
undelegate(selector: string, listener?: Function): this;
155155
undelegate(
156156
eventName: string,
157157
selector?: string | Function,
@@ -185,7 +185,7 @@ export class NativeView<T extends Backbone.Model> extends Backbone.View<T> {
185185
}
186186

187187
// Remove all events created with `delegate` from `el`
188-
undelegateEvents(): NativeView<T> {
188+
undelegateEvents(): this {
189189
if (this.el && this._domEvents) {
190190
const len = this._domEvents.length;
191191
for (let i = 0; i < len; i++) {

packages/base/src/widget.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ export interface ISerializers {
6666
};
6767
}
6868

69+
export interface IBackboneModelOptions extends Backbone.ModelSetOptions {
70+
model_id: string; comm?: any; widget_manager: any
71+
}
72+
6973
export class WidgetModel extends Backbone.Model {
7074
/**
7175
* The default attributes.
@@ -107,7 +111,7 @@ export class WidgetModel extends Backbone.Model {
107111
*/
108112
initialize(
109113
attributes: Backbone.ObjectHash,
110-
options: { model_id: string; comm?: any; widget_manager: any }
114+
options: IBackboneModelOptions
111115
): void {
112116
super.initialize(attributes, options);
113117

packages/base/test/src/widget_test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DummyManager, MockComm } from './dummy-manager';
22

33
import { expect } from 'chai';
44

5+
import { IBackboneModelOptions } from '../../lib/';
56
import * as widgets from '../../lib/';
67
const WidgetModel = widgets.WidgetModel;
78

@@ -82,7 +83,7 @@ describe('WidgetModel', function() {
8283
model_id: 'widget',
8384
widget_manager: this.manager,
8485
comm: this.comm
85-
}
86+
} as IBackboneModelOptions
8687
);
8788
// Create some dummy deserializers. One returns synchronously, and the
8889
// other asynchronously using a promise.
@@ -128,7 +129,7 @@ describe('WidgetModel', function() {
128129
{
129130
model_id: 'widget',
130131
widget_manager: this.manager
131-
}
132+
} as IBackboneModelOptions
132133
);
133134
expect(widget.attributes).to.deep.equal({
134135
...widget.defaults(),
@@ -143,7 +144,7 @@ describe('WidgetModel', function() {
143144
{
144145
model_id: 'widgetDead',
145146
widget_manager: this.manager
146-
}
147+
} as IBackboneModelOptions
147148
);
148149
expect(widgetDead.model_id).to.equal('widgetDead');
149150
expect(widgetDead.widget_manager).to.equal(this.manager);
@@ -157,7 +158,7 @@ describe('WidgetModel', function() {
157158
model_id: 'widgetLive',
158159
widget_manager: this.manager,
159160
comm: comm
160-
}
161+
} as IBackboneModelOptions
161162
);
162163
expect(widgetLive.model_id).to.equal('widgetLive');
163164
expect(widgetLive.widget_manager).to.equal(this.manager);
@@ -171,7 +172,7 @@ describe('WidgetModel', function() {
171172
{
172173
model_id: 'widget',
173174
widget_manager: this.manager
174-
}
175+
} as IBackboneModelOptions
175176
);
176177
const x = await widget.state_change;
177178
expect(x).to.be.undefined;
@@ -193,7 +194,7 @@ describe('WidgetModel', function() {
193194
model_id: 'widget',
194195
widget_manager: this.manager,
195196
comm: comm
196-
}
197+
} as IBackboneModelOptions
197198
);
198199
const data1 = { a: 1, b: 'state' };
199200
const data2 = { a: 2, b: 'state' };

yarn.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,14 @@
18021802
"@types/jquery" "*"
18031803
"@types/underscore" "*"
18041804

1805+
1806+
version "1.4.10"
1807+
resolved "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.10.tgz#042e72ffc966fe920ed02ff92afa66984a036844"
1808+
integrity sha512-X6UM8N9i4WFtO1F53Z3DE7mjI7UxEfxyFtMTYHOPFhYFvExDuu0UJENstnA023+/FnVOdxltMIKc4picZxW4dA==
1809+
dependencies:
1810+
"@types/jquery" "*"
1811+
"@types/underscore" "*"
1812+
18051813
"@types/base64-js@^1.2.5":
18061814
version "1.3.0"
18071815
resolved "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.0.tgz#c939fdba49846861caf5a246b165dbf5698a317c"

0 commit comments

Comments
 (0)