@lindle/sharepoint_requests 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,17 +27,19 @@ declare class HTTPSharePointRequests<T extends {
27
27
  };
28
28
  getDigest(): Promise<string>;
29
29
  from<K extends Extract<keyof T['LISTS'], string>, V extends SHAREPOINT_VER = '2013'>(listName: K, sharepoint_ver?: V): {
30
- create: (data: ListData) => Promise<import("axios").AxiosResponse<any, any, {}>>;
30
+ create: (data: ListData<T["LISTS"][K]>) => Promise<import("axios").AxiosResponse<any, any, {}>>;
31
31
  get: (options?: Options<T["LISTS"][K], V>) => Promise<{
32
32
  data: (T["LISTS"][K] & Partial<import("../types").SPItem<V>>)[];
33
33
  meta: {
34
34
  url: URL;
35
35
  };
36
36
  }>;
37
- update: (id: ItemID, data: ListData, digest?: string) => Promise<import("axios").AxiosResponse<any, any, {}>>;
37
+ update: (id: ItemID, data: ListData<T["LISTS"][K]>, digest?: string) => Promise<import("axios").AxiosResponse<any, any, {}>>;
38
38
  delete: (id: ItemID) => Promise<import("axios").AxiosResponse<any, any, {}>>;
39
39
  createFile: (props: CreateFileProps) => Promise<import("axios").AxiosResponse<any, any, {}>>;
40
- uploadFile: (props: UploadFileProps) => Promise<import("axios").AxiosResponse<any, any, {}>>;
40
+ uploadFile: (props: UploadFileProps) => Promise<import("axios").AxiosResponse<any, any, {}> & {
41
+ itemId?: ItemID;
42
+ }>;
41
43
  deleteFile: (props: DeleteFileProps) => Promise<import("axios").AxiosResponse<any, any, {}>>;
42
44
  fields: (options?: Field_Options<T["LISTS"][K], V>) => {
43
45
  get: () => Promise<any>;
@@ -1,3 +1,3 @@
1
1
  import type { ListData, SHAREPOINT_VER } from '../../../types';
2
2
  import type { RequestContext } from '../context';
3
- export declare function createListItem<V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, listData: ListData): Promise<import("axios").AxiosResponse<any, any, {}>>;
3
+ export declare function createListItem<D = Record<string, unknown>, V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, listData: ListData<D>): Promise<import("axios").AxiosResponse<any, any, {}>>;
@@ -0,0 +1,4 @@
1
+ import type { ListData } from '../../../types';
2
+ type AnyRecord = Record<string, unknown>;
3
+ export declare function normalizeListPayload<D = Record<string, unknown>>(data: ListData<D>): AnyRecord;
4
+ export {};
@@ -1,3 +1,3 @@
1
1
  import type { ListData, SHAREPOINT_VER } from '../../../types';
2
2
  import type { RequestContext } from '../context';
3
- export declare function updateListItem<V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, id: number | string, data: ListData, digest?: string): Promise<import("axios").AxiosResponse<any, any, {}>>;
3
+ export declare function updateListItem<D = Record<string, unknown>, V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, id: number | string, data: ListData<D>, digest?: string): Promise<import("axios").AxiosResponse<any, any, {}>>;
@@ -1,3 +1,6 @@
1
- import type { SHAREPOINT_VER, UploadFileProps } from '../../../types';
1
+ import type { AxiosResponse } from 'axios';
2
+ import type { ItemID, SHAREPOINT_VER, UploadFileProps } from '../../../types';
2
3
  import type { RequestContext } from '../context';
3
- export declare function uploadFile<V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, { file, folderPath, overwrite }: UploadFileProps): Promise<import("axios").AxiosResponse<any, any, {}>>;
4
+ export declare function uploadFile<V extends SHAREPOINT_VER = '2013'>(context: RequestContext<V>, { file, folderPath, overwrite }: UploadFileProps): Promise<AxiosResponse & {
5
+ itemId?: ItemID;
6
+ }>;
@@ -7,6 +7,11 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
7
7
  var axios = require('axios');
8
8
  var axios__default = _interopDefault(axios);
9
9
 
10
+ function _arrayLikeToArray(r, a) {
11
+ (null == a || a > r.length) && (a = r.length);
12
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
13
+ return n;
14
+ }
10
15
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
11
16
  try {
12
17
  var i = n[a](c),
@@ -32,6 +37,23 @@ function _asyncToGenerator(n) {
32
37
  });
33
38
  };
34
39
  }
40
+ function _createForOfIteratorHelperLoose(r, e) {
41
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
42
+ if (t) return (t = t.call(r)).next.bind(t);
43
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
44
+ t && (r = t);
45
+ var o = 0;
46
+ return function () {
47
+ return o >= r.length ? {
48
+ done: !0
49
+ } : {
50
+ done: !1,
51
+ value: r[o++]
52
+ };
53
+ };
54
+ }
55
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
56
+ }
35
57
  function _extends() {
36
58
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
37
59
  for (var e = 1; e < arguments.length; e++) {
@@ -149,6 +171,13 @@ function _regeneratorDefine(e, r, n, t) {
149
171
  }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
150
172
  }, _regeneratorDefine(e, r, n, t);
151
173
  }
174
+ function _unsupportedIterableToArray(r, a) {
175
+ if (r) {
176
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
177
+ var t = {}.toString.call(r).slice(8, -1);
178
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
179
+ }
180
+ }
152
181
 
153
182
  var defaultConfig = {
154
183
  headers: {
@@ -202,6 +231,144 @@ function _fetchDigest() {
202
231
  return _fetchDigest.apply(this, arguments);
203
232
  }
204
233
 
234
+ var LOOKUP_ID_KEYS = ['lookupId', 'LookupId', 'lookupID', 'LookupID', 'Id', 'ID'];
235
+ function isPlainObject(value) {
236
+ return !!value && typeof value === 'object' && !Array.isArray(value);
237
+ }
238
+ function extractLookupPrimitive(value, allowGenericId) {
239
+ for (var _iterator = _createForOfIteratorHelperLoose(LOOKUP_ID_KEYS), _step; !(_step = _iterator()).done;) {
240
+ var key = _step.value;
241
+ if (!allowGenericId && (key === 'Id' || key === 'ID')) {
242
+ continue;
243
+ }
244
+ if (value[key] !== undefined && value[key] !== null) {
245
+ return value[key];
246
+ }
247
+ }
248
+ return undefined;
249
+ }
250
+ function normalizeLookupValue(value) {
251
+ if (Array.isArray(value)) {
252
+ return {
253
+ results: value
254
+ };
255
+ }
256
+ if (isPlainObject(value)) {
257
+ if (Array.isArray(value.results)) {
258
+ return {
259
+ results: value.results
260
+ };
261
+ }
262
+ var primitive = extractLookupPrimitive(value, true);
263
+ if (primitive !== undefined) {
264
+ return primitive;
265
+ }
266
+ }
267
+ if (typeof value === 'string') {
268
+ var trimmed = value.trim();
269
+ if (!trimmed) {
270
+ return value;
271
+ }
272
+ var numeric = Number(trimmed);
273
+ return Number.isNaN(numeric) ? trimmed : numeric;
274
+ }
275
+ return value;
276
+ }
277
+ function resolveLookupField(key, value) {
278
+ var lower = key.toLowerCase();
279
+ var endsWithId = lower.endsWith('id');
280
+ var endsWithRef = lower.endsWith('ref');
281
+ var endsWithLookup = lower.endsWith('lookup');
282
+ var hasLookupHint = endsWithId || endsWithRef || endsWithLookup;
283
+ if (value === undefined) {
284
+ return null;
285
+ }
286
+ if (Array.isArray(value)) {
287
+ var _targetKey = endsWithId ? key : key + "Id";
288
+ return {
289
+ key: _targetKey,
290
+ value: {
291
+ results: value
292
+ }
293
+ };
294
+ }
295
+ if (isPlainObject(value)) {
296
+ var primitive = extractLookupPrimitive(value, hasLookupHint);
297
+ if (primitive !== undefined) {
298
+ var _targetKey2 = endsWithId ? key : key + "Id";
299
+ return {
300
+ key: _targetKey2,
301
+ value: normalizeLookupValue(primitive)
302
+ };
303
+ }
304
+ if (Array.isArray(value.results)) {
305
+ var _targetKey3 = endsWithId ? key : key + "Id";
306
+ return {
307
+ key: _targetKey3,
308
+ value: {
309
+ results: value.results
310
+ }
311
+ };
312
+ }
313
+ if (!hasLookupHint) {
314
+ return null;
315
+ }
316
+ } else if (!hasLookupHint) {
317
+ return null;
318
+ }
319
+ var targetKey = endsWithId ? key : key + "Id";
320
+ if (value === null) {
321
+ return {
322
+ key: targetKey,
323
+ value: null
324
+ };
325
+ }
326
+ if (typeof value === 'number') {
327
+ return {
328
+ key: targetKey,
329
+ value: value
330
+ };
331
+ }
332
+ if (typeof value === 'string') {
333
+ var trimmed = value.trim();
334
+ if (!trimmed) {
335
+ return {
336
+ key: targetKey,
337
+ value: ''
338
+ };
339
+ }
340
+ var numeric = Number(trimmed);
341
+ return {
342
+ key: targetKey,
343
+ value: Number.isNaN(numeric) ? trimmed : numeric
344
+ };
345
+ }
346
+ return null;
347
+ }
348
+ function normalizeListPayload(data) {
349
+ var result = {};
350
+ if (!data) {
351
+ return result;
352
+ }
353
+ for (var _i = 0, _Object$entries = Object.entries(data); _i < _Object$entries.length; _i++) {
354
+ var _Object$entries$_i = _Object$entries[_i],
355
+ key = _Object$entries$_i[0],
356
+ value = _Object$entries$_i[1];
357
+ if (key === '__metadata') {
358
+ continue;
359
+ }
360
+ var lookupField = resolveLookupField(key, value);
361
+ if (lookupField) {
362
+ result[lookupField.key] = lookupField.value;
363
+ continue;
364
+ }
365
+ if (value !== undefined) {
366
+ result[key] = value;
367
+ }
368
+ }
369
+ return result;
370
+ }
371
+
205
372
  function resolveMetadataType(_x) {
206
373
  return _resolveMetadataType.apply(this, arguments);
207
374
  }
@@ -233,7 +400,7 @@ function createListItem(_x2, _x3) {
233
400
  }
234
401
  function _createListItem() {
235
402
  _createListItem = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(context, listData) {
236
- var metadataType, payload, response, _t, _t2, _t3, _t4, _t5;
403
+ var metadataType, normalizedData, userMetadata, payload, response, _t, _t2, _t3, _t4, _t5;
237
404
  return _regenerator().w(function (_context2) {
238
405
  while (1) switch (_context2.n) {
239
406
  case 0:
@@ -241,10 +408,12 @@ function _createListItem() {
241
408
  return resolveMetadataType(context);
242
409
  case 1:
243
410
  metadataType = _context2.v;
244
- payload = _extends({}, listData, {
245
- __metadata: {
411
+ normalizedData = normalizeListPayload(listData);
412
+ userMetadata = listData.__metadata;
413
+ payload = _extends({}, normalizedData, {
414
+ __metadata: _extends({}, userMetadata && typeof userMetadata === 'object' ? userMetadata : {}, {
246
415
  type: metadataType
247
- }
416
+ })
248
417
  });
249
418
  _t = context;
250
419
  _t2 = context.endpoint;
@@ -569,7 +738,7 @@ function updateListItem(_x2, _x3, _x4, _x5) {
569
738
  }
570
739
  function _updateListItem() {
571
740
  _updateListItem = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(context, id, data, digest) {
572
- var formDigestValue, metadataType, payload, url, response, _t;
741
+ var formDigestValue, metadataType, normalizedData, userMetadata, payload, url, response, _t;
573
742
  return _regenerator().w(function (_context2) {
574
743
  while (1) switch (_context2.n) {
575
744
  case 0:
@@ -588,10 +757,12 @@ function _updateListItem() {
588
757
  return resolveMetadataType$1(context);
589
758
  case 3:
590
759
  metadataType = _context2.v;
591
- payload = _extends({}, data, {
592
- __metadata: {
760
+ normalizedData = normalizeListPayload(data);
761
+ userMetadata = data.__metadata;
762
+ payload = _extends({}, normalizedData, {
763
+ __metadata: _extends({}, userMetadata && typeof userMetadata === 'object' ? userMetadata : {}, {
593
764
  type: metadataType
594
- }
765
+ })
595
766
  });
596
767
  url = "_api/lists/getbytitle('" + context.listName + "')/getItemById('" + id + "')";
597
768
  _context2.n = 4;
@@ -620,7 +791,8 @@ function uploadFile(_x, _x2) {
620
791
  }
621
792
  function _uploadFile() {
622
793
  _uploadFile = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(context, _ref) {
623
- var file, folderPath, _ref$overwrite, overwrite, requestUrl, encodedFileName, digest, response;
794
+ var _response$data$d, _response$data, _ref2, _ref3, _listItemFields$Id, _listItemFields$__def;
795
+ var file, folderPath, _ref$overwrite, overwrite, requestUrl, encodedFileName, digest, response, responseData, listItemFields, itemId, _listItemResponse$dat, _listItemResponse$dat2, _listItemResponse$dat3, listItemResponse, deferredId;
624
796
  return _regenerator().w(function (_context) {
625
797
  while (1) switch (_context.n) {
626
798
  case 0:
@@ -640,7 +812,7 @@ function _uploadFile() {
640
812
  requestUrl = "_api/web/lists/getbytitle('" + context.listName + "')/RootFolder";
641
813
  requestUrl += buildLibraryPath(folderPath);
642
814
  encodedFileName = encodeFileName(file.name);
643
- requestUrl += "/Files/add(url='" + encodedFileName + "',overwrite=" + (overwrite ? 'true' : 'false') + ")";
815
+ requestUrl += "/Files/add(url='" + encodedFileName + "',overwrite=" + (overwrite ? 'true' : 'false') + ")?$expand=ListItemAllFields&$select=ListItemAllFields/Id";
644
816
  _context.n = 3;
645
817
  return fetchDigest(context.instance, context.baseURL);
646
818
  case 3:
@@ -655,6 +827,30 @@ function _uploadFile() {
655
827
  });
656
828
  case 4:
657
829
  response = _context.v;
830
+ responseData = (_response$data$d = (_response$data = response.data) == null ? void 0 : _response$data.d) != null ? _response$data$d : response.data;
831
+ listItemFields = responseData == null ? void 0 : responseData.ListItemAllFields;
832
+ itemId = (_ref2 = (_ref3 = (_listItemFields$Id = listItemFields == null ? void 0 : listItemFields.Id) != null ? _listItemFields$Id : listItemFields == null ? void 0 : listItemFields.ID) != null ? _ref3 : responseData == null ? void 0 : responseData.Id) != null ? _ref2 : responseData == null ? void 0 : responseData.ID;
833
+ if (!(typeof itemId !== 'undefined')) {
834
+ _context.n = 5;
835
+ break;
836
+ }
837
+ response.itemId = itemId;
838
+ _context.n = 7;
839
+ break;
840
+ case 5:
841
+ if (!(listItemFields != null && (_listItemFields$__def = listItemFields.__deferred) != null && _listItemFields$__def.uri)) {
842
+ _context.n = 7;
843
+ break;
844
+ }
845
+ _context.n = 6;
846
+ return context.instance.get(listItemFields.__deferred.uri);
847
+ case 6:
848
+ listItemResponse = _context.v;
849
+ deferredId = (_listItemResponse$dat = (_listItemResponse$dat2 = listItemResponse.data) == null || (_listItemResponse$dat2 = _listItemResponse$dat2.d) == null ? void 0 : _listItemResponse$dat2.Id) != null ? _listItemResponse$dat : (_listItemResponse$dat3 = listItemResponse.data) == null ? void 0 : _listItemResponse$dat3.Id;
850
+ if (typeof deferredId !== 'undefined') {
851
+ response.itemId = deferredId;
852
+ }
853
+ case 7:
658
854
  return _context.a(2, response);
659
855
  }
660
856
  }, _callee);