firestore-adapter
Advanced tools
Comparing version 1.0.0 to 1.0.1
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var extractValues = function (input) { | ||
var output = input.map(function (i) { return loopFields(i); }); | ||
console.log(JSON.stringify(output)); | ||
}; | ||
exports.extractValues = extractValues; | ||
var loopFields = function (value) { | ||
var output = {}; | ||
Object.keys(value).forEach(function (k) { | ||
var valueField = value[k]; | ||
output[k] = valueFromField(valueField); | ||
}); | ||
return output; | ||
}; | ||
var valueFromField = function (valueField) { | ||
if (isArrayValue(valueField)) { | ||
return valueField.arrayValue.values.map(function (v) { return valueFromField(v); }); | ||
/** | ||
* Adapter is a class to convert Firestore data into values without value types. | ||
*/ | ||
var Adapter = /** @class */ (function () { | ||
function Adapter(input) { | ||
this.input = input; | ||
} | ||
else if (isMapValue(valueField)) { | ||
return loopFields(valueField.mapValue.fields); | ||
} | ||
else { | ||
return getRawValue(valueField); | ||
} | ||
}; | ||
var getRawValue = function (object) { | ||
if (object instanceof Object) { | ||
var key = Object.keys(object)[0]; | ||
return object[key]; | ||
} | ||
return object; | ||
}; | ||
var isArrayValue = function (object) { | ||
return object.hasOwnProperty('arrayValue'); | ||
}; | ||
var isMapValue = function (object) { | ||
return object.hasOwnProperty('mapValue'); | ||
}; | ||
Adapter.prototype.convert = function () { | ||
var _this = this; | ||
var output = this.input.map(function (obj) { return _this.extractObject(obj); }); | ||
return output; | ||
}; | ||
/** | ||
* Extract an `Object`with types and values into pure values | ||
* Each field of Object has its type and value. | ||
* We only need the value | ||
* | ||
* @example | ||
* { | ||
* field1: { { | ||
* stringValue: 'some value' field1: 'some value', | ||
* }, => field2: true, | ||
* field2: { ... | ||
* booleanValue: true } | ||
* }, | ||
* ... | ||
* } | ||
* | ||
*/ | ||
Adapter.prototype.extractObject = function (value) { | ||
var _this = this; | ||
var output = {}; | ||
// Extract value of each field | ||
Object.keys(value).forEach(function (k) { | ||
var valueField = value[k]; | ||
output[k] = _this.extractValueField(valueField); | ||
}); | ||
return output; | ||
}; | ||
/** | ||
* Extract value from a `ValueField` | ||
* | ||
* @param valueField { NullValue | BooleanValue | IntegerValue | DoubleValue | TimestampValue | StringValue | BytesValue | ReferenceValue | GeoPointValue | ArrayValue | MapValue } | ||
* | ||
* @example | ||
* { stringValue: 'some value'} => 'some value' | ||
* { mapValue: {fields: {field1: {stringValue: 'some value'}, ...}}} => {field1: 'some value', ...} | ||
* { arrayValue: {values: [{stringValue: 'some value'}, ...]}} => ['some value'] | ||
*/ | ||
Adapter.prototype.extractValueField = function (valueField) { | ||
var _this = this; | ||
/** | ||
* `ArrayValue` contains array of ValueField i.e. { values: [{stringValue: 'some value'}, ...] } | ||
* Each item of values should be extracted. | ||
*/ | ||
if (this.isArrayValue(valueField)) { | ||
return valueField.arrayValue.values.map(function (v) { return _this.extractValueField(v); }); | ||
} | ||
/** | ||
* `MapValue` is an Object which its "fields" is ValueField object i.e. {fields: {field1: {stringValue: 'some value}, ...}} | ||
* Each field should be extracted. | ||
*/ | ||
if (this.isMapValue(valueField)) { | ||
return this.extractObject(valueField.mapValue.fields); | ||
} | ||
/** | ||
* `StringValue`, `NullValue`, ... | ||
* valueField can be a string when it's for `id` | ||
*/ | ||
if (!(valueField instanceof Object)) { | ||
return valueField; | ||
} | ||
var key = Object.keys(valueField)[0]; | ||
return valueField[key]; | ||
}; | ||
/** | ||
* Check if object is `ArrayValue` | ||
*/ | ||
Adapter.prototype.isArrayValue = function (object) { | ||
return object.hasOwnProperty('arrayValue'); | ||
}; | ||
/** | ||
* Check if object is `MapValue` | ||
*/ | ||
Adapter.prototype.isMapValue = function (object) { | ||
return object.hasOwnProperty('mapValue'); | ||
}; | ||
return Adapter; | ||
}()); | ||
exports.Adapter = Adapter; | ||
exports.default = Adapter; |
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var adapter_1 = require("./adapter"); | ||
var adapter_1 = __importDefault(require("./adapter")); | ||
var resource_1 = require("./resource"); | ||
adapter_1.extractValues(resource_1.data); | ||
var adapter = new adapter_1.default(resource_1.data); | ||
console.log(JSON.stringify(adapter.convert())); |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.data = [{ | ||
city: { | ||
string: { | ||
stringValue: 'WASHINGTON' | ||
}, | ||
has_subseccd: { | ||
boolean: { | ||
booleanValue: true | ||
}, | ||
sub_name: { | ||
stringValue: 'AMERICAN NATIONAL RED CROSS ' | ||
}, | ||
have_extracts: { | ||
null: { | ||
nullValue: null | ||
}, | ||
score: { | ||
double: { | ||
doubleValue: 523.3892 | ||
}, | ||
subseccd: { | ||
integer: { | ||
integerValue: '3' | ||
}, | ||
geo: { | ||
geoPoint: { | ||
geoPointValue: { | ||
latitude: "123.456", | ||
latitude: 123.456, | ||
longitude: 234.23 | ||
} | ||
}, | ||
reference: { | ||
referenceValue: 'Reference' | ||
}, | ||
array: { | ||
@@ -33,3 +33,4 @@ arrayValue: { | ||
{ timestampValue: Date.now() }, | ||
{ arrayValue: { | ||
{ | ||
arrayValue: { | ||
values: [ | ||
@@ -39,9 +40,11 @@ { stringValue: 'abc' }, | ||
] | ||
} }, | ||
{ mapValue: { | ||
} | ||
}, | ||
{ | ||
mapValue: { | ||
fields: { | ||
a1: { | ||
integer: { | ||
integerValue: '1526' | ||
}, | ||
b2: { | ||
geoPoint: { | ||
geoPointValue: { | ||
@@ -53,3 +56,4 @@ latitude: 23.4, | ||
} | ||
} } | ||
} | ||
} | ||
] | ||
@@ -61,12 +65,6 @@ }, | ||
fields: { | ||
score: { | ||
double: { | ||
doubleValue: 523.3892 | ||
}, | ||
have_pdfs: { | ||
nullValue: null | ||
}, | ||
subseccd: { | ||
integerValue: '3' | ||
}, | ||
geo: { | ||
geoPoint: { | ||
geoPointValue: { | ||
@@ -73,0 +71,0 @@ latitude: 123.456, |
{ | ||
"name": "firestore-adapter", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "Adapter to convert typed Firestore data into a standard format.", | ||
@@ -9,3 +9,4 @@ "main": "index.js", | ||
"build": "tsc -p .", | ||
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts" | ||
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts", | ||
"prepublishOnly": "npm run build" | ||
}, | ||
@@ -12,0 +13,0 @@ "author": "", |
@@ -92,1 +92,3 @@ import { ValueField, ArrayValue, MapValue } from './models'; | ||
} | ||
export default Adapter |
@@ -1,2 +0,2 @@ | ||
import { Adapter } from './adapter'; | ||
import Adapter from './adapter'; | ||
import { data } from './resource'; | ||
@@ -3,0 +3,0 @@ |
21798
545