Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Commit 9cd3c03

Browse files
update to simplify odata getAs & postAs + fix for extend
1 parent fb16d7e commit 9cd3c03

13 files changed

Lines changed: 69 additions & 73 deletions

File tree

debug/debug.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ Logger.activeLogLevel = LogLevel.Verbose;
3232
// import { Example } from "./example";
3333
// Example();
3434

35-
import { batch } from "./batch";
36-
batch();
35+
import { getAs } from "./getAs";
36+
getAs();
3737

3838
// you can also set break points inside the src folder to examine how things are working
3939
// within the library while debugging!

debug/example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// use of relative paths to the modules
22
import pnp from "../src/pnp";
3-
import { Logger, LogLevel, ConsoleListener } from "../src/utils/logging";
3+
import { Logger, LogLevel } from "../src/utils/logging";
44

55
export function Example() {
66

src/configuration/providers/spListConfigurationProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default class SPListConfigurationProvider implements IConfigurationProvid
4343
public getConfiguration(): Promise<TypedHash<string>> {
4444

4545
return this.web.lists.getByTitle(this.listTitle).items.select("Title", "Value")
46-
.getAs<any, { Title: string, Value: string }[]>().then((data) => {
46+
.getAs<{ Title: string, Value: string }[]>().then((data) => {
4747
return data.reduce((configuration, item) => {
4848

4949
return Object.defineProperty(configuration, item.Title, {

src/sharepoint/caching.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ export class CachingOptions implements ICachingOptions {
2828
}
2929
}
3030

31-
export class CachingParserWrapper<T, U> implements ODataParser<T, U> {
31+
export class CachingParserWrapper<T> implements ODataParser<T> {
3232

3333
constructor(
34-
private _parser: ODataParser<T, U>,
34+
private _parser: ODataParser<T>,
3535
private _cacheOptions: CachingOptions) { }
3636

37-
public parse(response: Response): Promise<U> {
37+
public parse(response: Response): Promise<T> {
3838

3939
// add this to the cache based on the options
4040
return this._parser.parse(response).then(data => {

src/sharepoint/contenttypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class ContentTypes extends QueryableCollection {
3737
"contentTypeId": contentTypeId,
3838
});
3939

40-
return new ContentTypes(this, `addAvailableContentType`).postAs<any, { id: string }>({ body: postBody }).then((data) => {
40+
return new ContentTypes(this, `addAvailableContentType`).postAs<{ id: string }>({ body: postBody }).then((data) => {
4141
return {
4242
contentType: this.getById(data.id),
4343
data: data,

src/sharepoint/fields.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class Fields extends QueryableCollection {
7171

7272
let q: Fields = new Fields(this, "createfieldasxml");
7373

74-
return q.postAs<any, { Id: string }>({ body: postBody }).then((data) => {
74+
return q.postAs<{ Id: string }>({ body: postBody }).then((data) => {
7575
return {
7676
data: data,
7777
field: this.getById(data.Id),
@@ -93,7 +93,7 @@ export class Fields extends QueryableCollection {
9393
"Title": title,
9494
}, properties));
9595

96-
return this.postAs<any, { Id: string }>({ body: postBody }).then((data) => {
96+
return this.postAs<{ Id: string }>({ body: postBody }).then((data) => {
9797
return {
9898
data: data,
9999
field: this.getById(data.Id),

src/sharepoint/files.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ export class File extends QueryableInstance {
388388
* @returns The size of the total uploaded data in bytes.
389389
*/
390390
private startUpload(uploadId: string, fragment: ArrayBuffer | Blob): Promise<number> {
391-
return new File(this, `startUpload(uploadId=guid'${uploadId}')`).postAs<any, string>({ body: fragment }).then(n => parseFloat(n));
391+
return new File(this, `startUpload(uploadId=guid'${uploadId}')`).postAs<string>({ body: fragment }).then(n => parseFloat(n));
392392
}
393393

394394
/**
@@ -403,7 +403,7 @@ export class File extends QueryableInstance {
403403
* @returns The size of the total uploaded data in bytes.
404404
*/
405405
private continueUpload(uploadId: string, fileOffset: number, fragment: ArrayBuffer | Blob): Promise<number> {
406-
return new File(this, `continueUpload(uploadId=guid'${uploadId}',fileOffset=${fileOffset})`).postAs<any, string>({ body: fragment }).then(n => parseFloat(n));
406+
return new File(this, `continueUpload(uploadId=guid'${uploadId}',fileOffset=${fileOffset})`).postAs<string>({ body: fragment }).then(n => parseFloat(n));
407407
}
408408

409409
/**
@@ -418,7 +418,7 @@ export class File extends QueryableInstance {
418418
*/
419419
private finishUpload(uploadId: string, fileOffset: number, fragment: ArrayBuffer | Blob): Promise<FileAddResult> {
420420
return new File(this, `finishUpload(uploadId=guid'${uploadId}',fileOffset=${fileOffset})`)
421-
.postAs<any, { ServerRelativeUrl: string }>({ body: fragment }).then((response) => {
421+
.postAs<{ ServerRelativeUrl: string }>({ body: fragment }).then((response) => {
422422
return {
423423
data: response,
424424
file: new File(response.ServerRelativeUrl),

src/sharepoint/items.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ export class Items extends QueryableCollection {
6363

6464
let parentList = this.getParent(QueryableInstance);
6565

66-
return parentList.select("ListItemEntityTypeFullName").getAs<any, { ListItemEntityTypeFullName: string }>().then((d) => {
66+
return parentList.select("ListItemEntityTypeFullName").getAs<{ ListItemEntityTypeFullName: string }>().then((d) => {
6767

6868
let postBody = JSON.stringify(Util.extend({
6969
"__metadata": { "type": d.ListItemEntityTypeFullName },
7070
}, properties));
7171

72-
let promise = this.postAs<any, { Id: number }>({ body: postBody }).then((data) => {
72+
let promise = this.postAs<{ Id: number }>({ body: postBody }).then((data) => {
7373
return {
7474
data: data,
7575
item: this.getById(data.Id),
@@ -174,7 +174,7 @@ export class Item extends QueryableSecurable {
174174

175175
let parentList = this.getParent(QueryableInstance, this.parentUrl.substr(0, this.parentUrl.lastIndexOf("/")));
176176

177-
return parentList.select("ListItemEntityTypeFullName").getAs<any, { ListItemEntityTypeFullName: string }>().then((d) => {
177+
return parentList.select("ListItemEntityTypeFullName").getAs<{ ListItemEntityTypeFullName: string }>().then((d) => {
178178

179179
let postBody = JSON.stringify(Util.extend({
180180
"__metadata": { "type": d.ListItemEntityTypeFullName },
@@ -288,7 +288,7 @@ export class PagedItemCollection<T> {
288288
}
289289
}
290290

291-
class PagedItemCollectionParser extends ODataParserBase<any, PagedItemCollection<any>> {
291+
class PagedItemCollectionParser extends ODataParserBase<PagedItemCollection<any>> {
292292
public parse(r: Response): Promise<PagedItemCollection<any>> {
293293

294294
return r.json().then(json => {

src/sharepoint/odata.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ export function extractOdataId(candidate: any): string {
1717
}
1818
}
1919

20-
export interface ODataParser<T, U> {
20+
export interface ODataParser<U> {
2121
parse(r: Response): Promise<U>;
2222
}
2323

24-
export abstract class ODataParserBase<T, U> implements ODataParser<T, U> {
24+
export abstract class ODataParserBase<U> implements ODataParser<U> {
2525

2626
public parse(r: Response): Promise<U> {
2727
return r.json().then(json => this.parseODataJSON(json));
@@ -42,36 +42,36 @@ export abstract class ODataParserBase<T, U> implements ODataParser<T, U> {
4242
}
4343
}
4444

45-
export class ODataDefaultParser extends ODataParserBase<any, any> {
45+
export class ODataDefaultParser extends ODataParserBase<any> {
4646
}
4747

48-
export class ODataRawParserImpl implements ODataParser<any, any> {
48+
export class ODataRawParserImpl implements ODataParser<any> {
4949
public parse(r: Response): Promise<any> {
5050
return r.json();
5151
}
5252
}
5353

54-
class ODataValueParserImpl<T> extends ODataParserBase<any, T> {
54+
class ODataValueParserImpl<T> extends ODataParserBase<T> {
5555
public parse(r: Response): Promise<T> {
5656
return super.parse(r).then(d => d as T);
5757
}
5858
}
5959

60-
class ODataEntityParserImpl<T> extends ODataParserBase<T, T> {
60+
class ODataEntityParserImpl<T> extends ODataParserBase<T> {
6161

6262
constructor(protected factory: QueryableConstructor<T>) {
6363
super();
6464
}
6565

6666
public parse(r: Response): Promise<T> {
6767
return super.parse(r).then(d => {
68-
let o = new this.factory(getEntityUrl(d), null);
68+
let o = <T>new this.factory(getEntityUrl(d), null);
6969
return Util.extend(o, d);
7070
});
7171
}
7272
}
7373

74-
class ODataEntityArrayParserImpl<T> extends ODataParserBase<T, T[]> {
74+
class ODataEntityArrayParserImpl<T> extends ODataParserBase<T[]> {
7575

7676
constructor(protected factory: QueryableConstructor<T>) {
7777
super();
@@ -80,7 +80,7 @@ class ODataEntityArrayParserImpl<T> extends ODataParserBase<T, T[]> {
8080
public parse(r: Response): Promise<T[]> {
8181
return super.parse(r).then((d: any[]) => {
8282
return d.map(v => {
83-
let o = new this.factory(getEntityUrl(v), null);
83+
let o = <T>new this.factory(getEntityUrl(v), null);
8484
return Util.extend(o, v);
8585
});
8686
});
@@ -89,12 +89,12 @@ class ODataEntityArrayParserImpl<T> extends ODataParserBase<T, T[]> {
8989

9090
function getEntityUrl(entity: any): string {
9191

92-
if (entity.hasOwnProperty("__metadata")) {
93-
// we are dealing with verbose, which has an absolute uri
94-
return entity.__metadata.uri;
95-
} else if (entity.hasOwnProperty("odata.editLink")) {
92+
if (entity.hasOwnProperty("odata.editLink")) {
9693
// we are dealign with minimal metadata (default)
9794
return Util.combinePaths("_api", entity["odata.editLink"]);
95+
} else if (entity.hasOwnProperty("__metadata")) {
96+
// we are dealing with verbose, which has an absolute uri
97+
return entity.__metadata.uri;
9898
} else {
9999
// we are likely dealing with nometadata, so don't error but we won't be able to
100100
// chain off these objects
@@ -105,16 +105,16 @@ function getEntityUrl(entity: any): string {
105105

106106
export let ODataRaw = new ODataRawParserImpl();
107107

108-
export function ODataValue<T>(): ODataParser<any, T> {
108+
export function ODataValue<T>(): ODataParser<T> {
109109
return new ODataValueParserImpl<T>();
110110
}
111111

112-
export function ODataEntity<T>(factory: QueryableConstructor<T>): ODataParser<T, T> {
112+
export function ODataEntity<T>(factory: QueryableConstructor<T>): ODataParser<T> {
113113
return new ODataEntityParserImpl(factory);
114114
}
115115

116-
export function ODataEntityArray<T>(factory: QueryableConstructor<T>): ODataParser<T, T[]> {
117-
return new ODataEntityArrayParserImpl<T>(factory);
116+
export function ODataEntityArray<T>(factory: QueryableConstructor<T>): ODataParser<T[]> {
117+
return new ODataEntityArrayParserImpl(factory);
118118
}
119119

120120
/**
@@ -138,18 +138,18 @@ export class ODataBatch {
138138
* @param options Any options to include in the request
139139
* @param parser The parser that will hadle the results of the request
140140
*/
141-
public add<U>(url: string, method: string, options: any, parser: ODataParser<any, U>): Promise<U> {
141+
public add<T>(url: string, method: string, options: any, parser: ODataParser<T>): Promise<T> {
142142

143143
let info = {
144144
method: method.toUpperCase(),
145145
options: options,
146146
parser: parser,
147147
reject: <(reason?: any) => void>null,
148-
resolve: <(value?: U | PromiseLike<U>) => void>null,
148+
resolve: <(value?: T | PromiseLike<T>) => void>null,
149149
url: url,
150150
};
151151

152-
let p = new Promise<U>((resolve, reject) => {
152+
let p = new Promise<T>((resolve, reject) => {
153153
info.resolve = resolve;
154154
info.reject = reject;
155155
});
@@ -369,33 +369,33 @@ interface ODataBatchRequestInfo {
369369
url: string;
370370
method: string;
371371
options: any;
372-
parser: ODataParser<any, any>;
372+
parser: ODataParser<any>;
373373
resolve: (d: any) => void;
374374
reject: (error: any) => void;
375375
}
376376

377-
export class TextFileParser implements ODataParser<any, string> {
377+
export class TextFileParser implements ODataParser<string> {
378378

379379
public parse(r: Response): Promise<string> {
380380
return r.text();
381381
}
382382
}
383383

384-
export class BlobFileParser implements ODataParser<any, Blob> {
384+
export class BlobFileParser implements ODataParser<Blob> {
385385

386386
public parse(r: Response): Promise<Blob> {
387387
return r.blob();
388388
}
389389
}
390390

391-
export class JSONFileParser implements ODataParser<any, any> {
391+
export class JSONFileParser implements ODataParser<any> {
392392

393393
public parse(r: Response): Promise<any> {
394394
return r.json();
395395
}
396396
}
397397

398-
export class BufferFileParser implements ODataParser<any, ArrayBuffer> {
398+
export class BufferFileParser implements ODataParser<ArrayBuffer> {
399399

400400
public parse(r: any): Promise<ArrayBuffer> {
401401

src/sharepoint/queryable.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -203,27 +203,27 @@ export class Queryable {
203203
* Executes the currently built request
204204
*
205205
*/
206-
public get(parser: ODataParser<any, any> = new ODataDefaultParser(), getOptions: FetchOptions = {}): Promise<any> {
206+
public get(parser: ODataParser<any> = new ODataDefaultParser(), getOptions: FetchOptions = {}): Promise<any> {
207207
return this.getImpl(getOptions, parser);
208208
}
209209

210-
public getAs<T, U>(parser: ODataParser<T, U> = new ODataDefaultParser(), getOptions: FetchOptions = {}): Promise<U> {
210+
public getAs<T>(parser: ODataParser<T> = new ODataDefaultParser(), getOptions: FetchOptions = {}): Promise<T> {
211211
return this.getImpl(getOptions, parser);
212212
}
213213

214-
protected post(postOptions: FetchOptions = {}, parser: ODataParser<any, any> = new ODataDefaultParser()): Promise<any> {
214+
protected post(postOptions: FetchOptions = {}, parser: ODataParser<any> = new ODataDefaultParser()): Promise<any> {
215215
return this.postImpl(postOptions, parser);
216216
}
217217

218-
protected postAs<T, U>(postOptions: FetchOptions = {}, parser: ODataParser<T, U> = new ODataDefaultParser()): Promise<U> {
218+
protected postAs<T>(postOptions: FetchOptions = {}, parser: ODataParser<T> = new ODataDefaultParser()): Promise<T> {
219219
return this.postImpl(postOptions, parser);
220220
}
221221

222-
protected patch(patchOptions: FetchOptions = {}, parser: ODataParser<any, any> = new ODataDefaultParser()): Promise<any> {
222+
protected patch(patchOptions: FetchOptions = {}, parser: ODataParser<any> = new ODataDefaultParser()): Promise<any> {
223223
return this.patchImpl(patchOptions, parser);
224224
}
225225

226-
protected delete(deleteOptions: FetchOptions = {}, parser: ODataParser<any, any> = new ODataDefaultParser()): Promise<any> {
226+
protected delete(deleteOptions: FetchOptions = {}, parser: ODataParser<any> = new ODataDefaultParser()): Promise<any> {
227227
return this.deleteImpl(deleteOptions, parser);
228228
}
229229

@@ -245,7 +245,7 @@ export class Queryable {
245245
return parent;
246246
}
247247

248-
private getImpl<U>(getOptions: FetchOptions = {}, parser: ODataParser<any, U>): Promise<U> {
248+
private getImpl<T>(getOptions: FetchOptions = {}, parser: ODataParser<T>): Promise<T> {
249249

250250
if (this._useCaching) {
251251
let options = new CachingOptions(this.toUrlAndQuery().toLowerCase());
@@ -281,7 +281,7 @@ export class Queryable {
281281
}
282282
}
283283

284-
private postImpl<U>(postOptions: FetchOptions, parser: ODataParser<any, U>): Promise<U> {
284+
private postImpl<T>(postOptions: FetchOptions, parser: ODataParser<T>): Promise<T> {
285285

286286
if (!this.hasBatch) {
287287

@@ -296,7 +296,7 @@ export class Queryable {
296296
}
297297
}
298298

299-
private patchImpl<U>(patchOptions: FetchOptions, parser: ODataParser<any, U>): Promise<U> {
299+
private patchImpl<T>(patchOptions: FetchOptions, parser: ODataParser<T>): Promise<T> {
300300

301301
if (!this.hasBatch) {
302302

@@ -311,7 +311,7 @@ export class Queryable {
311311
}
312312
}
313313

314-
private deleteImpl<U>(deleteOptions: FetchOptions, parser: ODataParser<any, U>): Promise<U> {
314+
private deleteImpl<T>(deleteOptions: FetchOptions, parser: ODataParser<T>): Promise<T> {
315315

316316
if (!this.hasBatch) {
317317

@@ -326,9 +326,9 @@ export class Queryable {
326326
}
327327
}
328328

329-
private processHttpClientResponse<U>(response: Response, parser: ODataParser<any, U>): Promise<U> {
329+
private processHttpClientResponse<T>(response: Response, parser: ODataParser<T>): Promise<T> {
330330

331-
return new Promise<U>((resolve, reject) => {
331+
return new Promise<T>((resolve, reject) => {
332332

333333
// 200 = OK (get, delete)
334334
// 201 = Created (create)
@@ -340,7 +340,7 @@ export class Queryable {
340340

341341
// in these cases the server has returned no content, so we create an empty object
342342
// this was done because the fetch browser methods throw exceptions with no content
343-
resolve(<U>{});
343+
resolve(<T>{});
344344
}
345345

346346
// pipe our parsed content

0 commit comments

Comments
 (0)