ddb-table
Version:
Strongly typed library for querying and modeling DynamoDB documents.
37 lines (36 loc) • 6.01 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
class ProjectionExpression {
constructor(names, init) {
this.names = void 0;
this.paths = void 0;
this.names = names;
this.paths = {};
if (!init) return;
const parts = init.trim().split(/\s*,\s*/g);
for (const part of parts) {
this.paths[part] = 1;
}
}
add(fields) {
const iterateFields = (path, fields) => {
Object.entries(fields).forEach(([key, value]) => {
if (!value) return;
const keyPath = [...path, key.match(/^\d+$/) ? Number(key) : key];
if (typeof value !== 'object') {
this.paths[this.names.add(...keyPath)] = 1;
return;
}
iterateFields(keyPath, value);
});
};
iterateFields([], fields);
return this;
}
serialize() {
return Object.keys(this.paths).join(', ') || undefined;
}
}
exports.default = ProjectionExpression;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9qZWN0aW9uRXhwcmVzc2lvbiIsImNvbnN0cnVjdG9yIiwibmFtZXMiLCJpbml0IiwicGF0aHMiLCJwYXJ0cyIsInRyaW0iLCJzcGxpdCIsInBhcnQiLCJhZGQiLCJmaWVsZHMiLCJpdGVyYXRlRmllbGRzIiwicGF0aCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5IiwidmFsdWUiLCJrZXlQYXRoIiwibWF0Y2giLCJOdW1iZXIiLCJzZXJpYWxpemUiLCJrZXlzIiwiam9pbiIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cHJlc3Npb25zL1Byb2plY3Rpb25FeHByZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMgZnJvbSAnLi9FeHByZXNzaW9uQXR0cmlidXRlTmFtZXMnO1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0aW9uRmllbGRzPFQ+ID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBbUCBpbiBrZXlvZiBUXT86IFtUW1BdXSBleHRlbmRzIFtvYmplY3RdXG4gICAgPyBQcm9qZWN0aW9uRmllbGRzPFRbUF0+IHwgdHJ1ZSB8IGZhbHNlIHwgMSB8IDBcbiAgICA6IHRydWUgfCBmYWxzZSB8IDEgfCAwO1xufTtcblxudHlwZSBQcm9qZWN0aW9uRmllbGRzS2V5czxULCBQIGV4dGVuZHMgUHJvamVjdGlvbkZpZWxkczxUPj4gPSBFeGNsdWRlPFxuICB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICBbSyBpbiBrZXlvZiBUXTogW1BbS11dIGV4dGVuZHMgW3RydWUgfCAxIHwgb2JqZWN0XSA/IEsgOiBuZXZlcjtcbiAgfVtrZXlvZiBUXSxcbiAgdW5kZWZpbmVkXG4+O1xuXG50eXBlIFByb2plY3Rpb25GaWVsZHNNYXliZUtleXM8VCwgUCBleHRlbmRzIFByb2plY3Rpb25GaWVsZHM8VD4+ID0gRXhjbHVkZTxcbiAge1xuICAgIFtLIGluIGtleW9mIFRdOiBbUFtLXV0gZXh0ZW5kcyBbYm9vbGVhbl1cbiAgICAgID8gW1BbS11dIGV4dGVuZHMgW2ZhbHNlXVxuICAgICAgICA/IG5ldmVyXG4gICAgICAgIDogS1xuICAgICAgOiBuZXZlcjtcbiAgfVtrZXlvZiBUXSxcbiAgdW5kZWZpbmVkXG4+O1xuXG5leHBvcnQgdHlwZSBJdGVtUHJvamVjdGlvbjxULCBQIGV4dGVuZHMgUHJvamVjdGlvbkZpZWxkczxUPj4gPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIFtLIGluIFByb2plY3Rpb25GaWVsZHNLZXlzPFQsIFA+XTogW1BbS11dIGV4dGVuZHMgW29iamVjdF1cbiAgICA/IEl0ZW1Qcm9qZWN0aW9uPFRbS10sIFBbS10+XG4gICAgOiBUW0tdO1xufSAmIHsgW0sgaW4gUHJvamVjdGlvbkZpZWxkc01heWJlS2V5czxULCBQPl0/OiBUW0tdIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2plY3Rpb25FeHByZXNzaW9uPFQgZXh0ZW5kcyBLLCBLPiB7XG4gIHByaXZhdGUgbmFtZXM6IEV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lczxUPjtcbiAgcHJpdmF0ZSBwYXRoczogeyBba2V5OiBzdHJpbmddOiAxIH07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWVzOiBFeHByZXNzaW9uQXR0cmlidXRlTmFtZXM8VD4sIGluaXQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgdGhpcy5wYXRocyA9IHt9O1xuXG4gICAgaWYgKCFpbml0KSByZXR1cm47XG5cbiAgICBjb25zdCBwYXJ0cyA9IGluaXQudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovZyk7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICB0aGlzLnBhdGhzW3BhcnRdID0gMTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkPFAgZXh0ZW5kcyBQcm9qZWN0aW9uRmllbGRzPE9taXQ8VCwga2V5b2YgSz4+PihmaWVsZHM6IFApOiB0aGlzIHtcbiAgICBjb25zdCBpdGVyYXRlRmllbGRzID0gKFxuICAgICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgIGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qga2V5UGF0aCA9IFsuLi5wYXRoLCBrZXkubWF0Y2goL15cXGQrJC8pID8gTnVtYmVyKGtleSkgOiBrZXldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhpcy5wYXRoc1t0aGlzLm5hbWVzLmFkZCguLi4oa2V5UGF0aCBhcyBba2V5b2YgVF0pKV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZXJhdGVGaWVsZHMoa2V5UGF0aCwgdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGl0ZXJhdGVGaWVsZHMoW10sIGZpZWxkcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc2VyaWFsaXplKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGF0aHMpLmpvaW4oJywgJykgfHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFtQ2UsTUFBTUEsb0JBQW9CLENBQWlCO0VBSWpEQyxXQUFXQSxDQUFDQyxLQUFrQyxFQUFFQyxJQUFhLEVBQUU7SUFBQSxLQUg5REQsS0FBSztJQUFBLEtBQ0xFLEtBQUs7SUFHWCxJQUFJLENBQUNGLEtBQUssR0FBR0EsS0FBSztJQUNsQixJQUFJLENBQUNFLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLENBQUNELElBQUksRUFBRTtJQUVYLE1BQU1FLEtBQUssR0FBR0YsSUFBSSxDQUFDRyxJQUFJLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMzQyxLQUFLLE1BQU1DLElBQUksSUFBSUgsS0FBSyxFQUFFO01BQ3hCLElBQUksQ0FBQ0QsS0FBSyxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3RCO0VBQ0Y7RUFFT0MsR0FBR0EsQ0FBK0NDLE1BQVMsRUFBUTtJQUN4RSxNQUFNQyxhQUFhLEdBQUdBLENBQ3BCQyxJQUF5QixFQUN6QkYsTUFBK0IsS0FDdEI7TUFDVEcsTUFBTSxDQUFDQyxPQUFPLENBQUNKLE1BQU0sQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLEtBQUssQ0FBQyxLQUFLO1FBQy9DLElBQUksQ0FBQ0EsS0FBSyxFQUFFO1FBRVosTUFBTUMsT0FBTyxHQUFHLENBQUMsR0FBR04sSUFBSSxFQUFFSSxHQUFHLENBQUNHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBR0MsTUFBTSxDQUFDSixHQUFHLENBQUMsR0FBR0EsR0FBRyxDQUFDO1FBRWpFLElBQUksT0FBT0MsS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUM3QixJQUFJLENBQUNiLEtBQUssQ0FBQyxJQUFJLENBQUNGLEtBQUssQ0FBQ08sR0FBRyxDQUFDLEdBQUlTLE9BQXFCLENBQUMsQ0FBQyxHQUFHLENBQUM7VUFDekQ7UUFDRjtRQUVBUCxhQUFhLENBQUNPLE9BQU8sRUFBRUQsS0FBSyxDQUE0QjtNQUMxRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUROLGFBQWEsQ0FBQyxFQUFFLEVBQUVELE1BQU0sQ0FBQztJQUN6QixPQUFPLElBQUk7RUFDYjtFQUVPVyxTQUFTQSxDQUFBLEVBQXVCO0lBQ3JDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDLElBQUksQ0FBQ2xCLEtBQUssQ0FBQyxDQUFDbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJQyxTQUFTO0VBQ3hEO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBQyxPQUFBLEdBQUExQixvQkFBQSJ9