Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

parse-googlesheets

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

parse-googlesheets - npm Package Compare versions

Comparing version 1.0.1 to 2.0.0

dist/request.d.ts

12

dist/index.d.ts

@@ -0,11 +1,14 @@

export declare const string: (data: string | undefined) => string | undefined;
export declare const number: (data: string | undefined) => number | undefined;
export declare const parseGoogleSheets: <T extends Schema>(schema: T, data: SheetsResponse) => Row<T>[];
export declare const loadGoogleSheets: <T extends Schema>(schema: T, SheetId: string, SheetListNumber?: number) => Promise<Row<T>[]>;
declare type FieldData = {
type: 'string' | 'number';
parse: Func<[string | undefined], any>;
columnName: string;
};
declare type Schema = {
export declare type Schema = {
[Key: string]: FieldData;
};
declare type Row<T extends Schema> = {
[Key in keyof T]?: T[Key]['type'] extends 'string' ? string : number;
export declare type Row<T extends Schema> = {
[Key in keyof T]: ReturnType<T[Key]['parse']>;
};

@@ -25,2 +28,3 @@ declare type SheetsResponse = {

};
declare type Func<Arguments extends Array<any>, Return> = (...args: Arguments) => Return;
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseGoogleSheets = void 0;
exports.loadGoogleSheets = exports.parseGoogleSheets = exports.number = exports.string = void 0;
var request_1 = require("./request");
var ifElse = function (expression, onTrue, onFalse) {
return function (data) { return expression(data)
? onTrue(data)
: onFalse(data); };
};
var isNil = function (data) {
return data === null || data === undefined;
};
var always = function (data) { return function () { return data; }; };
var identity = function (data) { return data; };
var toNumberOrNil = function (value) { return isNaN(Number(value))
? undefined
: Number(value); };
exports.string = ifElse(isNil, always(undefined), identity);
exports.number = ifElse(isNil, always(undefined), toNumberOrNil);
var parseGoogleSheets = function (schema, data) {

@@ -21,13 +37,11 @@ var rows = data.feed.entry.reduce(function (acc, item) {

return columnName.toLowerCase() === sheetsColumnName.trim().toLowerCase();
})) !== null && _a !== void 0 ? _a : [undefined, { type: undefined }], dataName = _b[0], type = _b[1].type;
if (dataName && type) {
acc[dataName] = { index: index, type: type };
})) !== null && _a !== void 0 ? _a : [undefined, { type: undefined }], dataName = _b[0], parse = _b[1].parse;
if (dataName && parse) {
acc[dataName] = { index: index, parse: parse };
}
return acc;
}, Object.create(null));
var toNumber = function (value) { return isNaN(Number(value)) ? undefined : Number(value); };
return rows.slice(1).map(function (row) { return Object.entries(indexMap).reduce(function (acc, _a) {
var key = _a[0], _b = _a[1], index = _b.index, type = _b.type;
// @ts-ignore
acc[key] = type === 'string' ? row[index] : toNumber(row[index]);
var key = _a[0], _b = _a[1], index = _b.index, parse = _b.parse;
acc[key] = parse(row[index]);
return acc;

@@ -37,1 +51,8 @@ }, Object.create(null)); });

exports.parseGoogleSheets = parseGoogleSheets;
var loadGoogleSheets = function (schema, SheetId, SheetListNumber) {
if (SheetListNumber === void 0) { SheetListNumber = 1; }
return request_1.request("https://spreadsheets.google.com/feeds/cells/" + SheetId + "/" + SheetListNumber + "/public/full?alt=json")
.then(function (r) { return r.ok ? r.json() : r.text().then(function (message) { return Promise.reject(message); }); })
.then(function (sheets) { return exports.parseGoogleSheets(schema, sheets); });
};
exports.loadGoogleSheets = loadGoogleSheets;

@@ -19,7 +19,23 @@ (function webpackUniversalModuleDefinition(root, factory) {

\**********************/
/***/ ((__unused_webpack_module, exports) => {
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseGoogleSheets = void 0;
exports.loadGoogleSheets = exports.parseGoogleSheets = exports.number = exports.string = void 0;
var request_1 = __webpack_require__(/*! ./request */ "./src/request.ts");
var ifElse = function (expression, onTrue, onFalse) {
return function (data) { return expression(data)
? onTrue(data)
: onFalse(data); };
};
var isNil = function (data) {
return data === null || data === undefined;
};
var always = function (data) { return function () { return data; }; };
var identity = function (data) { return data; };
var toNumberOrNil = function (value) { return isNaN(Number(value))
? undefined
: Number(value); };
exports.string = ifElse(isNil, always(undefined), identity);
exports.number = ifElse(isNil, always(undefined), toNumberOrNil);
var parseGoogleSheets = function (schema, data) {

@@ -42,13 +58,11 @@ var rows = data.feed.entry.reduce(function (acc, item) {

return columnName.toLowerCase() === sheetsColumnName.trim().toLowerCase();
})) !== null && _a !== void 0 ? _a : [undefined, { type: undefined }], dataName = _b[0], type = _b[1].type;
if (dataName && type) {
acc[dataName] = { index: index, type: type };
})) !== null && _a !== void 0 ? _a : [undefined, { type: undefined }], dataName = _b[0], parse = _b[1].parse;
if (dataName && parse) {
acc[dataName] = { index: index, parse: parse };
}
return acc;
}, Object.create(null));
var toNumber = function (value) { return isNaN(Number(value)) ? undefined : Number(value); };
return rows.slice(1).map(function (row) { return Object.entries(indexMap).reduce(function (acc, _a) {
var key = _a[0], _b = _a[1], index = _b.index, type = _b.type;
// @ts-ignore
acc[key] = type === 'string' ? row[index] : toNumber(row[index]);
var key = _a[0], _b = _a[1], index = _b.index, parse = _b.parse;
acc[key] = parse(row[index]);
return acc;

@@ -58,4 +72,27 @@ }, Object.create(null)); });

exports.parseGoogleSheets = parseGoogleSheets;
var loadGoogleSheets = function (schema, SheetId, SheetListNumber) {
if (SheetListNumber === void 0) { SheetListNumber = 1; }
return request_1.request("https://spreadsheets.google.com/feeds/cells/" + SheetId + "/" + SheetListNumber + "/public/full?alt=json")
.then(function (r) { return r.ok ? r.json() : r.text().then(function (message) { return Promise.reject(message); }); })
.then(function (sheets) { return exports.parseGoogleSheets(schema, sheets); });
};
exports.loadGoogleSheets = loadGoogleSheets;
/***/ }),
/***/ "./src/request.ts":
/*!************************!*
!*** ./src/request.ts ***!
\************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.request = void 0;
exports.request = typeof fetch === 'function'
? fetch
: __webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'node-fetch'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
/***/ })

@@ -96,2 +133,2 @@

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wYXJzZS1nb29nbGVzaGVldHMvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BhcnNlLWdvb2dsZXNoZWV0cy8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9wYXJzZS1nb29nbGVzaGVldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGFyc2UtZ29vZ2xlc2hlZXRzL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7OztBQ1ZhO0FBQ2IsOENBQTZDLENBQUMsY0FBYyxFQUFDO0FBQzdELHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDhCQUE4QixxQ0FBcUMsZUFBZSxFQUFFLEVBQUUsRUFBRTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaURBQWlELGtCQUFrQjtBQUM1RTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsS0FBSztBQUNMLHFDQUFxQyx5REFBeUQ7QUFDOUYsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1QkFBdUIsRUFBRTtBQUM5QjtBQUNBLHlCQUF5Qjs7Ozs7OztVQ2xDekI7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7OztVQ3JCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJwYXJzZS1nb29nbGVzaGVldHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlR29vZ2xlU2hlZXRzID0gdm9pZCAwO1xudmFyIHBhcnNlR29vZ2xlU2hlZXRzID0gZnVuY3Rpb24gKHNjaGVtYSwgZGF0YSkge1xuICAgIHZhciByb3dzID0gZGF0YS5mZWVkLmVudHJ5LnJlZHVjZShmdW5jdGlvbiAoYWNjLCBpdGVtKSB7XG4gICAgICAgIHZhciByb3cgPSBOdW1iZXIoaXRlbVsnZ3MkY2VsbCddLnJvdyk7XG4gICAgICAgIHZhciBjZWxsID0gTnVtYmVyKGl0ZW1bJ2dzJGNlbGwnXS5jb2wpO1xuICAgICAgICBpZiAoIWFjY1tyb3ddKSB7XG4gICAgICAgICAgICBhY2Nbcm93XSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGFjY1tyb3ddW2NlbGxdID0gaXRlbS5jb250ZW50LiR0O1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKS5maWx0ZXIoZnVuY3Rpb24gKHJvd3MpIHsgcmV0dXJuIHJvd3MuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiAhIWl0ZW07IH0pOyB9KTtcbiAgICB2YXIgaGVhZExpbmUgPSByb3dzWzBdO1xuICAgIHZhciBkaWN0aW9uYXJ5ID0gT2JqZWN0LmVudHJpZXMoc2NoZW1hKTtcbiAgICB2YXIgaW5kZXhNYXAgPSBoZWFkTGluZS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgc2hlZXRzQ29sdW1uTmFtZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgX2IgPSAoX2EgPSBkaWN0aW9uYXJ5LmZpbmQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gX2FbMF0sIGNvbHVtbk5hbWUgPSBfYVsxXS5jb2x1bW5OYW1lO1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2hlZXRzQ29sdW1uTmFtZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFt1bmRlZmluZWQsIHsgdHlwZTogdW5kZWZpbmVkIH1dLCBkYXRhTmFtZSA9IF9iWzBdLCB0eXBlID0gX2JbMV0udHlwZTtcbiAgICAgICAgaWYgKGRhdGFOYW1lICYmIHR5cGUpIHtcbiAgICAgICAgICAgIGFjY1tkYXRhTmFtZV0gPSB7IGluZGV4OiBpbmRleCwgdHlwZTogdHlwZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgdmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IHVuZGVmaW5lZCA6IE51bWJlcih2YWx1ZSk7IH07XG4gICAgcmV0dXJuIHJvd3Muc2xpY2UoMSkubWFwKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGluZGV4TWFwKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgX2EpIHtcbiAgICAgICAgdmFyIGtleSA9IF9hWzBdLCBfYiA9IF9hWzFdLCBpbmRleCA9IF9iLmluZGV4LCB0eXBlID0gX2IudHlwZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhY2Nba2V5XSA9IHR5cGUgPT09ICdzdHJpbmcnID8gcm93W2luZGV4XSA6IHRvTnVtYmVyKHJvd1tpbmRleF0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpOyB9KTtcbn07XG5leHBvcnRzLnBhcnNlR29vZ2xlU2hlZXRzID0gcGFyc2VHb29nbGVTaGVldHM7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wYXJzZS1nb29nbGVzaGVldHMvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BhcnNlLWdvb2dsZXNoZWV0cy8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9wYXJzZS1nb29nbGVzaGVldHMvLi9zcmMvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly9wYXJzZS1nb29nbGVzaGVldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGFyc2UtZ29vZ2xlc2hlZXRzL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7OztBQ1ZhO0FBQ2IsOENBQTZDLENBQUMsY0FBYyxFQUFDO0FBQzdELHdCQUF3QixHQUFHLHlCQUF5QixHQUFHLGNBQWMsR0FBRyxjQUFjO0FBQ3RGLGdCQUFnQixtQkFBTyxDQUFDLG1DQUFXO0FBQ25DO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHFCQUFxQixhQUFhLEdBQUc7QUFDbkUsZ0NBQWdDLGFBQWE7QUFDN0Msc0NBQXNDO0FBQ3RDO0FBQ0Esb0JBQW9CO0FBQ3BCLGNBQWM7QUFDZCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyw4QkFBOEIscUNBQXFDLGVBQWUsRUFBRSxFQUFFLEVBQUU7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlEQUFpRCxrQkFBa0I7QUFDNUU7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEtBQUs7QUFDTCw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1QkFBdUIsRUFBRTtBQUM5QjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLHFDQUFxQyxxQkFBcUI7QUFDMUQ7QUFDQSw0QkFBNEIsNERBQTRELGdDQUFnQyxFQUFFLEVBQUUsRUFBRTtBQUM5SCxpQ0FBaUMsa0RBQWtELEVBQUU7QUFDckY7QUFDQSx3QkFBd0I7Ozs7Ozs7Ozs7O0FDdkRYO0FBQ2IsOENBQTZDLENBQUMsY0FBYyxFQUFDO0FBQzdELGVBQWU7QUFDZixlQUFlO0FBQ2Y7QUFDQSxNQUFNLG1CQUFPLENBQUMseUlBQVk7Ozs7Ozs7VUNMMUI7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7OztVQ3JCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJwYXJzZS1nb29nbGVzaGVldHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvYWRHb29nbGVTaGVldHMgPSBleHBvcnRzLnBhcnNlR29vZ2xlU2hlZXRzID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLnN0cmluZyA9IHZvaWQgMDtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0XCIpO1xudmFyIGlmRWxzZSA9IGZ1bmN0aW9uIChleHByZXNzaW9uLCBvblRydWUsIG9uRmFsc2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGV4cHJlc3Npb24oZGF0YSlcbiAgICAgICAgPyBvblRydWUoZGF0YSlcbiAgICAgICAgOiBvbkZhbHNlKGRhdGEpOyB9O1xufTtcbnZhciBpc05pbCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkO1xufTtcbnZhciBhbHdheXMgPSBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZGF0YTsgfTsgfTtcbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiBkYXRhOyB9O1xudmFyIHRvTnVtYmVyT3JOaWwgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGlzTmFOKE51bWJlcih2YWx1ZSkpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IE51bWJlcih2YWx1ZSk7IH07XG5leHBvcnRzLnN0cmluZyA9IGlmRWxzZShpc05pbCwgYWx3YXlzKHVuZGVmaW5lZCksIGlkZW50aXR5KTtcbmV4cG9ydHMubnVtYmVyID0gaWZFbHNlKGlzTmlsLCBhbHdheXModW5kZWZpbmVkKSwgdG9OdW1iZXJPck5pbCk7XG52YXIgcGFyc2VHb29nbGVTaGVldHMgPSBmdW5jdGlvbiAoc2NoZW1hLCBkYXRhKSB7XG4gICAgdmFyIHJvd3MgPSBkYXRhLmZlZWQuZW50cnkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGl0ZW0pIHtcbiAgICAgICAgdmFyIHJvdyA9IE51bWJlcihpdGVtWydncyRjZWxsJ10ucm93KTtcbiAgICAgICAgdmFyIGNlbGwgPSBOdW1iZXIoaXRlbVsnZ3MkY2VsbCddLmNvbCk7XG4gICAgICAgIGlmICghYWNjW3Jvd10pIHtcbiAgICAgICAgICAgIGFjY1tyb3ddID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYWNjW3Jvd11bY2VsbF0gPSBpdGVtLmNvbnRlbnQuJHQ7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmZpbHRlcihmdW5jdGlvbiAocm93cykgeyByZXR1cm4gcm93cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuICEhaXRlbTsgfSk7IH0pO1xuICAgIHZhciBoZWFkTGluZSA9IHJvd3NbMF07XG4gICAgdmFyIGRpY3Rpb25hcnkgPSBPYmplY3QuZW50cmllcyhzY2hlbWEpO1xuICAgIHZhciBpbmRleE1hcCA9IGhlYWRMaW5lLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBzaGVldHNDb2x1bW5OYW1lLCBpbmRleCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBfYiA9IChfYSA9IGRpY3Rpb25hcnkuZmluZChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBfYVswXSwgY29sdW1uTmFtZSA9IF9hWzFdLmNvbHVtbk5hbWU7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uTmFtZS50b0xvd2VyQ2FzZSgpID09PSBzaGVldHNDb2x1bW5OYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW3VuZGVmaW5lZCwgeyB0eXBlOiB1bmRlZmluZWQgfV0sIGRhdGFOYW1lID0gX2JbMF0sIHBhcnNlID0gX2JbMV0ucGFyc2U7XG4gICAgICAgIGlmIChkYXRhTmFtZSAmJiBwYXJzZSkge1xuICAgICAgICAgICAgYWNjW2RhdGFOYW1lXSA9IHsgaW5kZXg6IGluZGV4LCBwYXJzZTogcGFyc2UgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIHJldHVybiByb3dzLnNsaWNlKDEpLm1hcChmdW5jdGlvbiAocm93KSB7IHJldHVybiBPYmplY3QuZW50cmllcyhpbmRleE1hcCkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIF9hKSB7XG4gICAgICAgIHZhciBrZXkgPSBfYVswXSwgX2IgPSBfYVsxXSwgaW5kZXggPSBfYi5pbmRleCwgcGFyc2UgPSBfYi5wYXJzZTtcbiAgICAgICAgYWNjW2tleV0gPSBwYXJzZShyb3dbaW5kZXhdKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTsgfSk7XG59O1xuZXhwb3J0cy5wYXJzZUdvb2dsZVNoZWV0cyA9IHBhcnNlR29vZ2xlU2hlZXRzO1xudmFyIGxvYWRHb29nbGVTaGVldHMgPSBmdW5jdGlvbiAoc2NoZW1hLCBTaGVldElkLCBTaGVldExpc3ROdW1iZXIpIHtcbiAgICBpZiAoU2hlZXRMaXN0TnVtYmVyID09PSB2b2lkIDApIHsgU2hlZXRMaXN0TnVtYmVyID0gMTsgfVxuICAgIHJldHVybiByZXF1ZXN0XzEucmVxdWVzdChcImh0dHBzOi8vc3ByZWFkc2hlZXRzLmdvb2dsZS5jb20vZmVlZHMvY2VsbHMvXCIgKyBTaGVldElkICsgXCIvXCIgKyBTaGVldExpc3ROdW1iZXIgKyBcIi9wdWJsaWMvZnVsbD9hbHQ9anNvblwiKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA/IHIuanNvbigpIDogci50ZXh0KCkudGhlbihmdW5jdGlvbiAobWVzc2FnZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QobWVzc2FnZSk7IH0pOyB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoc2hlZXRzKSB7IHJldHVybiBleHBvcnRzLnBhcnNlR29vZ2xlU2hlZXRzKHNjaGVtYSwgc2hlZXRzKTsgfSk7XG59O1xuZXhwb3J0cy5sb2FkR29vZ2xlU2hlZXRzID0gbG9hZEdvb2dsZVNoZWV0cztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXF1ZXN0ID0gdm9pZCAwO1xuZXhwb3J0cy5yZXF1ZXN0ID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nXG4gICAgPyBmZXRjaFxuICAgIDogcmVxdWlyZSgnbm9kZS1mZXRjaCcpO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==

@@ -1,2 +0,2 @@

!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,(function(){return(()=>{"use strict";var e={432:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseGoogleSheets=void 0,t.parseGoogleSheets=function(e,t){var r=t.feed.entry.reduce((function(e,t){var r=Number(t.gs$cell.row),n=Number(t.gs$cell.col);return e[r]||(e[r]=[]),e[r][n]=t.content.$t,e}),[]).filter((function(e){return e.filter((function(e){return!!e}))})),n=r[0],o=Object.entries(e),u=n.reduce((function(e,t,r){var n,u=null!==(n=o.find((function(e){return e[0],e[1].columnName.toLowerCase()===t.trim().toLowerCase()})))&&void 0!==n?n:[void 0,{type:void 0}],i=u[0],c=u[1].type;return i&&c&&(e[i]={index:r,type:c}),e}),Object.create(null));return r.slice(1).map((function(e){return Object.entries(u).reduce((function(t,r){var n,o=r[0],u=r[1],i=u.index,c=u.type;return t[o]="string"===c?e[i]:(n=e[i],isNaN(Number(n))?void 0:Number(n)),t}),Object.create(null))}))}}},t={};return function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}(432)})()}));
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,(function(){return(()=>{"use strict";var e={432:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.loadGoogleSheets=t.parseGoogleSheets=t.number=t.string=void 0;var n=r(602),o=function(e,t,r){return function(n){return e(n)?t(n):r(n)}},u=function(e){return null==e},i=function(e){return function(){return e}};t.string=o(u,i(void 0),(function(e){return e})),t.number=o(u,i(void 0),(function(e){return isNaN(Number(e))?void 0:Number(e)})),t.parseGoogleSheets=function(e,t){var r=t.feed.entry.reduce((function(e,t){var r=Number(t.gs$cell.row),n=Number(t.gs$cell.col);return e[r]||(e[r]=[]),e[r][n]=t.content.$t,e}),[]).filter((function(e){return e.filter((function(e){return!!e}))})),n=r[0],o=Object.entries(e),u=n.reduce((function(e,t,r){var n,u=null!==(n=o.find((function(e){return e[0],e[1].columnName.toLowerCase()===t.trim().toLowerCase()})))&&void 0!==n?n:[void 0,{type:void 0}],i=u[0],c=u[1].parse;return i&&c&&(e[i]={index:r,parse:c}),e}),Object.create(null));return r.slice(1).map((function(e){return Object.entries(u).reduce((function(t,r){var n=r[0],o=r[1],u=o.index,i=o.parse;return t[n]=i(e[u]),t}),Object.create(null))}))},t.loadGoogleSheets=function(e,r,o){return void 0===o&&(o=1),n.request("https://spreadsheets.google.com/feeds/cells/"+r+"/"+o+"/public/full?alt=json").then((function(e){return e.ok?e.json():e.text().then((function(e){return Promise.reject(e)}))})).then((function(r){return t.parseGoogleSheets(e,r)}))}},602:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.request=void 0,t.request="function"==typeof fetch?fetch:r(Object(function(){var e=new Error("Cannot find module 'node-fetch'");throw e.code="MODULE_NOT_FOUND",e}()))}},t={};return function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}(432)})()}));
//# sourceMappingURL=parse-googlesheets.min.js.map
{
"name": "parse-googlesheets",
"version": "1.0.1",
"version": "2.0.0",
"description": "Parse google sheets",

@@ -14,3 +14,3 @@ "main": "dist/parse-googlesheets.min.js",

"build": "npx tsc && npx webpack",
"prepublish": "npm run test",
"prepublish": "npm run test && npm run build",
"postversion": "npm publish",

@@ -42,3 +42,6 @@ "postpublish": "git push"

},
"dependencies": {},
"dependencies": {
"@types/node-fetch": "^2.5.7",
"node-fetch": "^2.6.1"
},
"jest": {

@@ -45,0 +48,0 @@ "collectCoverage": true,

@@ -0,1 +1,27 @@

import { request } from './request';
const ifElse = <T>(expression: Func<[T], boolean>, onTrue: Func<[T], any>, onFalse: Func<[T], any>) =>
(data: T) => expression(data)
? onTrue(data)
: onFalse(data);
const isNil = (data: any): data is (null | undefined) =>
data === null || data === undefined;
const always = <T>(data: T): Func<[], T> => (): T => data;
const identity = <T>(data: T): T => data;
const toNumberOrNil = (value: string | undefined) => isNaN(Number(value))
? undefined
: Number(value);
export const string: (data: string | undefined) => string | undefined = ifElse(
isNil,
always(undefined),
identity
);
export const number: (data: string | undefined) => number | undefined = ifElse(
isNil,
always(undefined),
toNumberOrNil
);
export const parseGoogleSheets = <T extends Schema>(schema: T, data: SheetsResponse): Array<Row<T>> => {

@@ -18,17 +44,17 @@ const rows = data.feed.entry.reduce<Array<Array<string>>>((acc: Array<Array<string>>, item) => {

const indexMap = headLine.reduce((acc: Record<string, { index: number; type: 'string' | 'number' }>, sheetsColumnName, index) => {
const [dataName, { type }] = dictionary.find(([key, { columnName }]) => columnName.toLowerCase() === sheetsColumnName.trim().toLowerCase()) ?? [undefined, { type: undefined }];
const indexMap = headLine.reduce((acc: Record<string, { index: number; parse: Func<[string], any> }>, sheetsColumnName, index) => {
const [dataName, { parse }] = dictionary.find(([key, { columnName }]) => columnName.toLowerCase() === sheetsColumnName.trim().toLowerCase()) ?? [undefined, { type: undefined }];
if (dataName && type) {
acc[dataName] = { index, type };
}
if (dataName && parse) {
acc[dataName] = { index, parse };
}
return acc;
return acc;
}, Object.create(null));
const toNumber = (value: string): number | undefined => isNaN(Number(value)) ? undefined : Number(value);
return rows.slice(1).map((row) => Object.entries(indexMap).reduce<Row<T>>((acc, [key, { index, type }]: [string, any]) => {
// @ts-ignore
acc[key] = type === 'string' ? row[index] : toNumber(row[index]);
return rows.slice(1).map((row) => Object.entries(indexMap).reduce<Row<T>>((acc, [key, {
index,
parse
}]: [keyof T, { index: number; parse: Func<[string], any> }]) => {
acc[key] = parse(row[index]);
return acc;

@@ -38,14 +64,18 @@ }, Object.create(null)));

export const loadGoogleSheets = <T extends Schema>(schema: T, SheetId: string, SheetListNumber: number = 1): Promise<Array<Row<T>>> =>
request(`https://spreadsheets.google.com/feeds/cells/${SheetId}/${SheetListNumber}/public/full?alt=json`)
.then<SheetsResponse>(r => r.ok ? r.json() : r.text().then(message => Promise.reject(message)))
.then(sheets => parseGoogleSheets<T>(schema, sheets));
type FieldData = {
type: 'string' | 'number';
parse: Func<[string | undefined], any>;
columnName: string;
}
type Schema = {
export type Schema = {
[Key: string]: FieldData;
}
type Row<T extends Schema> = {
[Key in keyof T]?: T[Key]['type'] extends 'string' ? string : number;
export type Row<T extends Schema> = {
[Key in keyof T]: ReturnType<T[Key]['parse']>;
}

@@ -66,1 +96,3 @@

}
type Func<Arguments extends Array<any>, Return> = (...args: Arguments) => Return;

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc