@8ms/helpers 1.1.17 → 1.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.
- package/dist/aws/s3/copyFile.d.ts +14 -0
- package/dist/aws/s3/copyFile.js +62 -0
- package/dist/aws/s3/index.d.ts +3 -1
- package/dist/aws/s3/index.js +5 -1
- package/dist/aws/s3/moveFile.d.ts +11 -0
- package/dist/aws/s3/moveFile.js +73 -0
- package/dist/date/getExcelDate.d.ts +8 -0
- package/dist/date/getExcelDate.js +20 -0
- package/dist/date/index.d.ts +2 -1
- package/dist/date/index.js +3 -1
- package/dist/google/sheets/getAssociatedData.d.ts +20 -0
- package/dist/google/sheets/getAssociatedData.js +100 -0
- package/dist/google/sheets/getBatchData.d.ts +20 -0
- package/dist/google/sheets/getBatchData.js +64 -0
- package/dist/google/sheets/index.d.ts +4 -1
- package/dist/google/sheets/index.js +7 -1
- package/dist/google/sheets/isCellNa.d.ts +7 -0
- package/dist/google/sheets/isCellNa.js +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare type CopyFileType = {
|
|
2
|
+
bucket: string;
|
|
3
|
+
key: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Copy a file from one bucket/path to another bucket/path.
|
|
7
|
+
*/
|
|
8
|
+
declare const copyFile: ({ S3Lib, client, from, to }: {
|
|
9
|
+
S3Lib: any;
|
|
10
|
+
client: any;
|
|
11
|
+
from: CopyFileType;
|
|
12
|
+
to: CopyFileType;
|
|
13
|
+
}) => Promise<void>;
|
|
14
|
+
export default copyFile;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
/**
|
|
40
|
+
* Copy a file from one bucket/path to another bucket/path.
|
|
41
|
+
*/
|
|
42
|
+
var copyFile = function (_a) {
|
|
43
|
+
var S3Lib = _a.S3Lib, client = _a.client, from = _a.from, to = _a.to;
|
|
44
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
45
|
+
var CopyObjectCommand;
|
|
46
|
+
return __generator(this, function (_b) {
|
|
47
|
+
switch (_b.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
CopyObjectCommand = S3Lib.CopyObjectCommand;
|
|
50
|
+
return [4 /*yield*/, client.send(new CopyObjectCommand({
|
|
51
|
+
Bucket: to.bucket,
|
|
52
|
+
CopySource: encodeURIComponent("".concat(from.bucket, "/").concat(from.key)),
|
|
53
|
+
Key: to.key,
|
|
54
|
+
}))];
|
|
55
|
+
case 1:
|
|
56
|
+
_b.sent();
|
|
57
|
+
return [2 /*return*/];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
exports.default = copyFile;
|
package/dist/aws/s3/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import copyFile from './copyFile';
|
|
1
2
|
import deleteFile from './deleteFile';
|
|
2
3
|
import deleteFiles from './deleteFiles';
|
|
3
4
|
import deleteFolder from './deleteFolder';
|
|
@@ -6,10 +7,11 @@ import getPresignedPost from './getPresignedPost';
|
|
|
6
7
|
import getSignedUrl from './getSignedUrl';
|
|
7
8
|
import listFiles from './listFiles';
|
|
8
9
|
import listFolders from './listFolders';
|
|
10
|
+
import moveFile from './moveFile';
|
|
9
11
|
import readBuffer, { ReadBufferType } from './readBuffer';
|
|
10
12
|
import readFile, { ReadFileType, ReadType } from './readFile';
|
|
11
13
|
import writeFile from './writeFile';
|
|
12
14
|
import writeGlueJsonFile from './writeGlueJsonFile';
|
|
13
15
|
import writePresignedPost from './writePresignedPost';
|
|
14
16
|
export type { ReadType, ReadBufferType, ReadFileType, };
|
|
15
|
-
export { deleteFolder, deleteFile, deleteFiles, getClient, getPresignedPost, getSignedUrl, listFiles, listFolders, readBuffer, readFile, writeFile, writeGlueJsonFile, writePresignedPost, };
|
|
17
|
+
export { copyFile, deleteFolder, deleteFile, deleteFiles, getClient, getPresignedPost, getSignedUrl, listFiles, listFolders, moveFile, readBuffer, readFile, writeFile, writeGlueJsonFile, writePresignedPost, };
|
package/dist/aws/s3/index.js
CHANGED
|
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.writePresignedPost = exports.writeGlueJsonFile = exports.writeFile = exports.readFile = exports.readBuffer = exports.listFolders = exports.listFiles = exports.getSignedUrl = exports.getPresignedPost = exports.getClient = exports.deleteFiles = exports.deleteFile = exports.deleteFolder = void 0;
|
|
6
|
+
exports.writePresignedPost = exports.writeGlueJsonFile = exports.writeFile = exports.readFile = exports.readBuffer = exports.moveFile = exports.listFolders = exports.listFiles = exports.getSignedUrl = exports.getPresignedPost = exports.getClient = exports.deleteFiles = exports.deleteFile = exports.deleteFolder = exports.copyFile = void 0;
|
|
7
|
+
var copyFile_1 = __importDefault(require("./copyFile"));
|
|
8
|
+
exports.copyFile = copyFile_1.default;
|
|
7
9
|
var deleteFile_1 = __importDefault(require("./deleteFile"));
|
|
8
10
|
exports.deleteFile = deleteFile_1.default;
|
|
9
11
|
var deleteFiles_1 = __importDefault(require("./deleteFiles"));
|
|
@@ -20,6 +22,8 @@ var listFiles_1 = __importDefault(require("./listFiles"));
|
|
|
20
22
|
exports.listFiles = listFiles_1.default;
|
|
21
23
|
var listFolders_1 = __importDefault(require("./listFolders"));
|
|
22
24
|
exports.listFolders = listFolders_1.default;
|
|
25
|
+
var moveFile_1 = __importDefault(require("./moveFile"));
|
|
26
|
+
exports.moveFile = moveFile_1.default;
|
|
23
27
|
var readBuffer_1 = __importDefault(require("./readBuffer"));
|
|
24
28
|
exports.readBuffer = readBuffer_1.default;
|
|
25
29
|
var readFile_1 = __importDefault(require("./readFile"));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CopyFileType } from './copyFile';
|
|
2
|
+
/**
|
|
3
|
+
* It's not possible to just move or rename a file, you must copy then delete the old file.
|
|
4
|
+
*/
|
|
5
|
+
declare const moveFile: ({ S3Lib, client, from, to }: {
|
|
6
|
+
S3Lib: any;
|
|
7
|
+
client: any;
|
|
8
|
+
from: CopyFileType;
|
|
9
|
+
to: CopyFileType;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
export default moveFile;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var copyFile_1 = __importDefault(require("./copyFile"));
|
|
43
|
+
var deleteFile_1 = __importDefault(require("./deleteFile"));
|
|
44
|
+
/**
|
|
45
|
+
* It's not possible to just move or rename a file, you must copy then delete the old file.
|
|
46
|
+
*/
|
|
47
|
+
var moveFile = function (_a) {
|
|
48
|
+
var S3Lib = _a.S3Lib, client = _a.client, from = _a.from, to = _a.to;
|
|
49
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
+
return __generator(this, function (_b) {
|
|
51
|
+
switch (_b.label) {
|
|
52
|
+
case 0: return [4 /*yield*/, (0, copyFile_1.default)({
|
|
53
|
+
S3Lib: S3Lib,
|
|
54
|
+
client: client,
|
|
55
|
+
from: from,
|
|
56
|
+
to: to,
|
|
57
|
+
})];
|
|
58
|
+
case 1:
|
|
59
|
+
_b.sent();
|
|
60
|
+
return [4 /*yield*/, (0, deleteFile_1.default)({
|
|
61
|
+
S3Lib: S3Lib,
|
|
62
|
+
bucket: from.bucket,
|
|
63
|
+
client: client,
|
|
64
|
+
key: from.key,
|
|
65
|
+
})];
|
|
66
|
+
case 2:
|
|
67
|
+
_b.sent();
|
|
68
|
+
return [2 /*return*/];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
exports.default = moveFile;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an excel date "e.g. 44216" into a JavaScript date object.
|
|
3
|
+
* https://stackoverflow.com/questions/16229494/converting-excel-date-serial-number-to-date-using-javascript
|
|
4
|
+
*/
|
|
5
|
+
declare const getExcelDate: ({ input }: {
|
|
6
|
+
input: number;
|
|
7
|
+
}) => Date;
|
|
8
|
+
export default getExcelDate;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Convert an excel date "e.g. 44216" into a JavaScript date object.
|
|
5
|
+
* https://stackoverflow.com/questions/16229494/converting-excel-date-serial-number-to-date-using-javascript
|
|
6
|
+
*/
|
|
7
|
+
var getExcelDate = function (_a) {
|
|
8
|
+
var input = _a.input;
|
|
9
|
+
var utcDates = Math.floor(input - 25569);
|
|
10
|
+
var utcValue = utcDates * 86400;
|
|
11
|
+
var dateInfo = new Date(utcValue * 1000);
|
|
12
|
+
var fractionalDay = input - Math.floor(input) + 0.0000001;
|
|
13
|
+
var totalSeconds = Math.floor(86400 * fractionalDay);
|
|
14
|
+
var seconds = totalSeconds % 60;
|
|
15
|
+
totalSeconds -= seconds;
|
|
16
|
+
var hours = Math.floor(totalSeconds / (60 * 60));
|
|
17
|
+
var minutes = Math.floor(totalSeconds / 60) % 60;
|
|
18
|
+
return new Date(dateInfo.getFullYear(), dateInfo.getMonth(), dateInfo.getDate(), hours, minutes, seconds);
|
|
19
|
+
};
|
|
20
|
+
exports.default = getExcelDate;
|
package/dist/date/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import format from './format';
|
|
|
8
8
|
import getDate from './getDate';
|
|
9
9
|
import getDurationHours from './getDurationHours';
|
|
10
10
|
import getDurationMinutes from './getDurationMinutes';
|
|
11
|
+
import getExcelDate from './getExcelDate';
|
|
11
12
|
import getFinancialYear from './getFinancialYear';
|
|
12
13
|
import getFinancialYearToDate from './getFinancialYearToDate';
|
|
13
14
|
import getFinancialYearWeeks from './getFinancialYearWeeks';
|
|
@@ -31,4 +32,4 @@ import { predefinedTimeframes, PredefinedTimeframesType } from './predefinedTime
|
|
|
31
32
|
import { TimeframeType } from './timeframe';
|
|
32
33
|
import { timeframes } from './timeframes';
|
|
33
34
|
export type { DateType, DurationType, FinancialYearType, FinancialYearWeekType, PredefinedTimeframesType, TimeframeType, };
|
|
34
|
-
export { durations, durationComparisons, predefinedTimeframes, timeframes, format, getDate, getDurationHours, getDurationMinutes, getFinancialYear, getFinancialYearToDate, getFinancialYearWeeks, getLastWeek, getMax, getMin, getMonday, getNumber, getPredefinedTimeframe, getSunday, getThisWeek, getToday, getTwoWeeksAgo, getWeeksAgo, getYesterday, isDateValid, isLastWeek, isThisWeek, parseExcelDate, };
|
|
35
|
+
export { durations, durationComparisons, predefinedTimeframes, timeframes, format, getDate, getDurationHours, getDurationMinutes, getExcelDate, getFinancialYear, getFinancialYearToDate, getFinancialYearWeeks, getLastWeek, getMax, getMin, getMonday, getNumber, getPredefinedTimeframe, getSunday, getThisWeek, getToday, getTwoWeeksAgo, getWeeksAgo, getYesterday, isDateValid, isLastWeek, isThisWeek, parseExcelDate, };
|
package/dist/date/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.parseExcelDate = exports.isThisWeek = exports.isLastWeek = exports.isDateValid = exports.getYesterday = exports.getWeeksAgo = exports.getTwoWeeksAgo = exports.getToday = exports.getThisWeek = exports.getSunday = exports.getPredefinedTimeframe = exports.getNumber = exports.getMonday = exports.getMin = exports.getMax = exports.getLastWeek = exports.getFinancialYearWeeks = exports.getFinancialYearToDate = exports.getFinancialYear = exports.getDurationMinutes = exports.getDurationHours = exports.getDate = exports.format = exports.timeframes = exports.predefinedTimeframes = exports.durationComparisons = exports.durations = void 0;
|
|
6
|
+
exports.parseExcelDate = exports.isThisWeek = exports.isLastWeek = exports.isDateValid = exports.getYesterday = exports.getWeeksAgo = exports.getTwoWeeksAgo = exports.getToday = exports.getThisWeek = exports.getSunday = exports.getPredefinedTimeframe = exports.getNumber = exports.getMonday = exports.getMin = exports.getMax = exports.getLastWeek = exports.getFinancialYearWeeks = exports.getFinancialYearToDate = exports.getFinancialYear = exports.getExcelDate = exports.getDurationMinutes = exports.getDurationHours = exports.getDate = exports.format = exports.timeframes = exports.predefinedTimeframes = exports.durationComparisons = exports.durations = void 0;
|
|
7
7
|
var durationComparisons_1 = require("./durationComparisons");
|
|
8
8
|
Object.defineProperty(exports, "durationComparisons", { enumerable: true, get: function () { return durationComparisons_1.durationComparisons; } });
|
|
9
9
|
var durations_1 = require("./durations");
|
|
@@ -16,6 +16,8 @@ var getDurationHours_1 = __importDefault(require("./getDurationHours"));
|
|
|
16
16
|
exports.getDurationHours = getDurationHours_1.default;
|
|
17
17
|
var getDurationMinutes_1 = __importDefault(require("./getDurationMinutes"));
|
|
18
18
|
exports.getDurationMinutes = getDurationMinutes_1.default;
|
|
19
|
+
var getExcelDate_1 = __importDefault(require("./getExcelDate"));
|
|
20
|
+
exports.getExcelDate = getExcelDate_1.default;
|
|
19
21
|
var getFinancialYear_1 = __importDefault(require("./getFinancialYear"));
|
|
20
22
|
exports.getFinancialYear = getFinancialYear_1.default;
|
|
21
23
|
var getFinancialYearToDate_1 = __importDefault(require("./getFinancialYearToDate"));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare type AssociateDataRequestType = {
|
|
2
|
+
spreadsheetId: string;
|
|
3
|
+
ranges: [
|
|
4
|
+
format: string,
|
|
5
|
+
defaultRange: string,
|
|
6
|
+
heading: string,
|
|
7
|
+
data: string
|
|
8
|
+
];
|
|
9
|
+
dateTimeRender: 'FORMATTED_STRING' | 'SERIAL_NUMBER';
|
|
10
|
+
valueRender: 'FORMATTED_VALUE' | 'UNFORMATTED_VALUE' | 'FORMULA';
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Make a batch get to Google Sheets to retrieve the data correctly formatted, with default values provided.
|
|
14
|
+
*/
|
|
15
|
+
declare const getAssociatedData: ({ SheetsLib, client, request }: {
|
|
16
|
+
SheetsLib: any;
|
|
17
|
+
client: any;
|
|
18
|
+
request: AssociateDataRequestType;
|
|
19
|
+
}) => Promise<object[]>;
|
|
20
|
+
export default getAssociatedData;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var isUndefined_1 = __importDefault(require("lodash/isUndefined"));
|
|
43
|
+
var getBatchData_1 = __importDefault(require("./getBatchData"));
|
|
44
|
+
/**
|
|
45
|
+
* Make a batch get to Google Sheets to retrieve the data correctly formatted, with default values provided.
|
|
46
|
+
*/
|
|
47
|
+
var getAssociatedData = function (_a) {
|
|
48
|
+
var SheetsLib = _a.SheetsLib, client = _a.client, request = _a.request;
|
|
49
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
+
var apiResponse, template, response, initialRangeLength, i, rowIndex, row, columnIndex, refValue, value;
|
|
51
|
+
return __generator(this, function (_b) {
|
|
52
|
+
switch (_b.label) {
|
|
53
|
+
case 0: return [4 /*yield*/, (0, getBatchData_1.default)({
|
|
54
|
+
SheetsLib: SheetsLib,
|
|
55
|
+
client: client,
|
|
56
|
+
spreadsheetId: request.spreadsheetId,
|
|
57
|
+
ranges: request.ranges,
|
|
58
|
+
dateTimeRender: request.dateTimeRender,
|
|
59
|
+
valueRender: request.valueRender,
|
|
60
|
+
})];
|
|
61
|
+
case 1:
|
|
62
|
+
apiResponse = _b.sent();
|
|
63
|
+
template = [];
|
|
64
|
+
response = [];
|
|
65
|
+
// Missing ranges or too many ranges
|
|
66
|
+
if (4 !== apiResponse.valueRanges.length) {
|
|
67
|
+
throw new Error("Associated data response length must be 4.");
|
|
68
|
+
}
|
|
69
|
+
initialRangeLength = apiResponse.valueRanges[0].values[0].length;
|
|
70
|
+
// Loop through the headings
|
|
71
|
+
for (i = 0; i < initialRangeLength; i++) {
|
|
72
|
+
template.push({
|
|
73
|
+
format: apiResponse.valueRanges[0].values[0][i],
|
|
74
|
+
default: apiResponse.valueRanges[1].values[0][i],
|
|
75
|
+
heading: apiResponse.valueRanges[2].values[0][i],
|
|
76
|
+
index: i,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// console.log('template', template);
|
|
80
|
+
// Loop through each row of data
|
|
81
|
+
if (!(0, isUndefined_1.default)(apiResponse.valueRanges[3].values)) {
|
|
82
|
+
for (rowIndex = 0; rowIndex < apiResponse.valueRanges[3].values.length; rowIndex++) {
|
|
83
|
+
row = {};
|
|
84
|
+
// Loop through each column within the row
|
|
85
|
+
for (columnIndex = 0; columnIndex < apiResponse.valueRanges[3].values[rowIndex].length; columnIndex++) {
|
|
86
|
+
refValue = apiResponse.valueRanges[3].values[rowIndex][columnIndex];
|
|
87
|
+
value = ('' === refValue ? template[columnIndex]['default'] : refValue);
|
|
88
|
+
// Add this to our row
|
|
89
|
+
row[template[columnIndex]['heading']] = value;
|
|
90
|
+
}
|
|
91
|
+
// Add the row to our response
|
|
92
|
+
response.push(row);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return [2 /*return*/, response];
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
exports.default = getAssociatedData;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare type BatchRangeResponse = {
|
|
2
|
+
spreadsheetId: string;
|
|
3
|
+
valueRanges: {
|
|
4
|
+
range: string;
|
|
5
|
+
majorDimension: 'rows' | 'dimension';
|
|
6
|
+
values: [
|
|
7
|
+
any[]
|
|
8
|
+
];
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
declare type BatchDataRequestType = {
|
|
12
|
+
SheetsLib: any;
|
|
13
|
+
client: any;
|
|
14
|
+
spreadsheetId: string;
|
|
15
|
+
ranges: string[];
|
|
16
|
+
dateTimeRender?: string;
|
|
17
|
+
valueRender?: string;
|
|
18
|
+
};
|
|
19
|
+
declare const getBatchData: ({ SheetsLib, client, spreadsheetId, ranges, dateTimeRender, valueRender, }: BatchDataRequestType) => Promise<BatchRangeResponse>;
|
|
20
|
+
export default getBatchData;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var getBatchData = function (_a) {
|
|
40
|
+
var SheetsLib = _a.SheetsLib, client = _a.client, spreadsheetId = _a.spreadsheetId, ranges = _a.ranges, _b = _a.dateTimeRender, dateTimeRender = _b === void 0 ? 'FORMATTED_STRING' : _b, _c = _a.valueRender, valueRender = _c === void 0 ? 'UNFORMATTED_VALUE' : _c;
|
|
41
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
+
var request, data;
|
|
43
|
+
return __generator(this, function (_d) {
|
|
44
|
+
switch (_d.label) {
|
|
45
|
+
case 0:
|
|
46
|
+
request = {
|
|
47
|
+
auth: client,
|
|
48
|
+
dateTimeRenderOption: dateTimeRender,
|
|
49
|
+
ranges: ranges,
|
|
50
|
+
spreadsheetId: spreadsheetId,
|
|
51
|
+
valueRenderOption: valueRender,
|
|
52
|
+
};
|
|
53
|
+
return [4 /*yield*/, SheetsLib.sheets('v4')
|
|
54
|
+
.spreadsheets
|
|
55
|
+
.values
|
|
56
|
+
.batchGet(request)];
|
|
57
|
+
case 1:
|
|
58
|
+
data = (_d.sent()).data;
|
|
59
|
+
return [2 /*return*/, data];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
exports.default = getBatchData;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import getAuth from './getAuth';
|
|
2
|
+
import getAssociatedData from './getAssociatedData';
|
|
3
|
+
import getBatchData from './getBatchData';
|
|
4
|
+
import isCellNa from './isCellNa';
|
|
2
5
|
export type {};
|
|
3
|
-
export { getAuth, };
|
|
6
|
+
export { getAssociatedData, getAuth, getBatchData, isCellNa, };
|
|
@@ -3,6 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getAuth = void 0;
|
|
6
|
+
exports.isCellNa = exports.getBatchData = exports.getAuth = exports.getAssociatedData = void 0;
|
|
7
7
|
var getAuth_1 = __importDefault(require("./getAuth"));
|
|
8
8
|
exports.getAuth = getAuth_1.default;
|
|
9
|
+
var getAssociatedData_1 = __importDefault(require("./getAssociatedData"));
|
|
10
|
+
exports.getAssociatedData = getAssociatedData_1.default;
|
|
11
|
+
var getBatchData_1 = __importDefault(require("./getBatchData"));
|
|
12
|
+
exports.getBatchData = getBatchData_1.default;
|
|
13
|
+
var isCellNa_1 = __importDefault(require("./isCellNa"));
|
|
14
|
+
exports.isCellNa = isCellNa_1.default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Noticed sometimes Google Sheets can struggle with import XML resulting to N/A values.
|
|
5
|
+
*/
|
|
6
|
+
var isCellNa = function (_a) {
|
|
7
|
+
var input = _a.input;
|
|
8
|
+
return '#N/A' === input;
|
|
9
|
+
};
|
|
10
|
+
exports.default = isCellNa;
|