@8ms/helpers 1.1.16 → 1.1.19
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/lambda/getHandlerPath.d.ts +4 -0
- package/dist/aws/lambda/getHandlerPath.js +8 -0
- package/dist/aws/lambda/index.d.ts +2 -1
- package/dist/aws/lambda/index.js +3 -1
- 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/getDate.d.ts +5 -3
- package/dist/date/getDate.js +31 -20
- 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 +2 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var getHandlerPath = function (_a) {
|
|
4
|
+
var context = _a.context;
|
|
5
|
+
return "".concat(context.split(process.cwd())[1].substring(1)
|
|
6
|
+
.replace(/\\/g, '/'));
|
|
7
|
+
};
|
|
8
|
+
exports.default = getHandlerPath;
|
package/dist/aws/lambda/index.js
CHANGED
|
@@ -3,8 +3,10 @@ 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.invoke = exports.getClient = void 0;
|
|
6
|
+
exports.invoke = exports.getHandlerPath = exports.getClient = void 0;
|
|
7
7
|
var getClient_1 = __importDefault(require("./getClient"));
|
|
8
8
|
exports.getClient = getClient_1.default;
|
|
9
|
+
var getHandlerPath_1 = __importDefault(require("./getHandlerPath"));
|
|
10
|
+
exports.getHandlerPath = getHandlerPath_1.default;
|
|
9
11
|
var invoke_1 = __importDefault(require("./invoke"));
|
|
10
12
|
exports.invoke = invoke_1.default;
|
|
@@ -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;
|
package/dist/date/getDate.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { DateType } from './date';
|
|
2
|
+
declare type GetDateType = {
|
|
3
|
+
input: DateType;
|
|
4
|
+
setMidnight?: boolean;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* Convert a (number | string | Date) into a Date object.
|
|
4
8
|
*/
|
|
5
|
-
declare const getDate: ({ input }:
|
|
6
|
-
input: DateType;
|
|
7
|
-
}) => Date;
|
|
9
|
+
declare const getDate: ({ input, setMidnight }: GetDateType) => Date;
|
|
8
10
|
export default getDate;
|
package/dist/date/getDate.js
CHANGED
|
@@ -3,36 +3,47 @@ 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
|
-
var addHours_1 = __importDefault(require("date-fns/addHours"));
|
|
7
6
|
var parse_1 = __importDefault(require("date-fns/parse"));
|
|
8
|
-
var subHours_1 = __importDefault(require("date-fns/subHours"));
|
|
9
7
|
/**
|
|
10
8
|
* Convert a (number | string | Date) into a Date object.
|
|
11
9
|
*/
|
|
12
10
|
var getDate = function (_a) {
|
|
13
|
-
var input = _a.input;
|
|
11
|
+
var input = _a.input, _b = _a.setMidnight, setMidnight = _b === void 0 ? true : _b;
|
|
14
12
|
var date;
|
|
15
13
|
if (input instanceof Date) {
|
|
16
14
|
date = new Date(input.valueOf());
|
|
17
15
|
}
|
|
18
|
-
else if ('string' === typeof input) {
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
else if ('string' === typeof input || 'number' === typeof input) {
|
|
17
|
+
// Convert the input into string
|
|
18
|
+
var dateString = input.toString();
|
|
19
|
+
// 20220412
|
|
20
|
+
if (8 === dateString.length) {
|
|
21
|
+
var year = Number(dateString.substring(0, 4));
|
|
22
|
+
var month = Number(dateString.substring(4, 6));
|
|
23
|
+
var day = Number(dateString.substring(6, 8));
|
|
24
|
+
if (year > 999 && month < 13 && day < 32) {
|
|
25
|
+
date = new Date();
|
|
26
|
+
date.setUTCFullYear(year);
|
|
27
|
+
date.setUTCMonth(month - 1);
|
|
28
|
+
date.setUTCDate(day);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 2022-04-12
|
|
32
|
+
else if (10 === dateString.length) {
|
|
33
|
+
var dateTimeString = dateString + ' 00:00:00s';
|
|
34
|
+
date = (0, parse_1.default)(dateTimeString, 'yyyy-MM-dd HH:mm:ss', new Date());
|
|
35
|
+
}
|
|
36
|
+
// 2022-04-12 01:01:01
|
|
37
|
+
else if (19 === dateString.length) {
|
|
38
|
+
date = (0, parse_1.default)(dateString, 'yyyy-MM-dd HH:mm:ss', new Date());
|
|
39
|
+
}
|
|
40
|
+
// Unsure date format, try anything
|
|
41
|
+
else {
|
|
42
|
+
date = new Date(dateString);
|
|
43
|
+
}
|
|
21
44
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
date = (0, parse_1.default)(dateString, 'yyyyMMdd HH:mm:ss', new Date());
|
|
25
|
-
}
|
|
26
|
-
// Behind an hour (going back to DST)
|
|
27
|
-
if (date.getTimezoneOffset() < 0) {
|
|
28
|
-
date = (0, addHours_1.default)(date, 1);
|
|
29
|
-
}
|
|
30
|
-
// Forward an hour (going into BST)
|
|
31
|
-
else if (date.getTimezoneOffset() > 0) {
|
|
32
|
-
date = (0, subHours_1.default)(date, 1);
|
|
33
|
-
}
|
|
34
|
-
// Otherwise set to UTC hours
|
|
35
|
-
else {
|
|
45
|
+
// Reset to UTC hours
|
|
46
|
+
if (setMidnight) {
|
|
36
47
|
date.setHours(0, 0, 0, 0);
|
|
37
48
|
}
|
|
38
49
|
return date;
|
|
@@ -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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@8ms/helpers",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.19",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/8millionstories-organisation/8ms-helpers-ts.git"
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"@types/node": "17.0.23",
|
|
26
26
|
"babel-jest": "27.5.1",
|
|
27
27
|
"crypto-js": "4.1.1",
|
|
28
|
+
"date-fns-tz": "1.3.3",
|
|
28
29
|
"jest": "27.5.1",
|
|
29
30
|
"ts-node": "10.7.0",
|
|
30
31
|
"tslib": "2.3.1",
|