db-wrapper 2.0.0 → 2.0.1

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.
@@ -42,4 +42,4 @@ export var DefaultType;
42
42
  DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
43
43
  DefaultType["Date"] = "(date('now', 'localtime'))";
44
44
  })(DefaultType || (DefaultType = {}));
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kYi13cmFwcGVyL3NyYy9saWIvZGItd3JhcHBlci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxDQUFOLElBQVksUUFxQlg7QUFyQkQsV0FBWSxRQUFRO0lBQ2hCLCtCQUFtQixDQUFBO0lBQ25CLDJCQUFlLENBQUE7SUFDZiwrQkFBbUIsQ0FBQTtJQUNuQixnQ0FBb0IsQ0FBQTtJQUNwQiw4QkFBa0IsQ0FBQTtJQUNsQix5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLDBCQUFjLENBQUE7SUFDZCw0QkFBZ0IsQ0FBQTtJQUNoQiw2QkFBaUIsQ0FBQTtJQUNqQix5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsNEJBQWdCLENBQUE7SUFDaEIsMEJBQWMsQ0FBQTtJQUNkLCtCQUFtQixDQUFBO0lBQ25CLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7QUFFakIsQ0FBQyxFQXJCVyxRQUFRLEtBQVIsUUFBUSxRQXFCbkI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQW9CWDtBQXBCRCxXQUFZLFdBQVc7SUFDbkIsNEJBQWEsQ0FBQTtJQUNiLHdCQUFTLENBQUE7SUFDVCw0QkFBYSxDQUFBO0lBQ2IsNkJBQWMsQ0FBQTtJQUNkLDJCQUFZLENBQUE7SUFDWiwwQkFBYSxDQUFBO0lBQ2IsMEJBQWEsQ0FBQTtJQUNiLDJCQUFjLENBQUE7SUFDZCw2QkFBZ0IsQ0FBQTtJQUNoQiw4QkFBaUIsQ0FBQTtJQUNqQiwwQkFBYSxDQUFBO0lBQ2IseUJBQVUsQ0FBQTtJQUNWLDJCQUFZLENBQUE7SUFDWiw2QkFBYyxDQUFBO0lBQ2QsOEJBQWUsQ0FBQTtJQUNmLDRCQUFhLENBQUE7SUFDYiw0QkFBYSxDQUFBO0lBQ2IsMERBQStDLENBQUE7SUFDL0Msa0RBQXVDLENBQUE7QUFDM0MsQ0FBQyxFQXBCVyxXQUFXLEtBQVgsV0FBVyxRQW9CdEIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBJbnRlZ2VyID0gJ2ludGVnZXInLFxuICAgIEludCA9ICdpbnRlZ2VyJyxcbiAgICBUaW55SW50ID0gJ2ludGVnZXInLFxuICAgIFNtYWxsSW50ID0gJ2ludGVnZXInLFxuICAgIEJpZ0ludCA9ICdpbnRlZ2VyJyxcbiAgICBUZXh0ID0gJ3RleHQnLFxuICAgIENoYXIgPSAndGV4dCcsXG4gICAgTkNoYXIgPSAndGV4dCcsXG4gICAgVmFyQ2hhciA9ICd0ZXh0JyxcbiAgICBOVmFyQ2hhciA9ICd0ZXh0JyxcbiAgICBDTE9CID0gJ3RleHQnLFxuICAgIEJMT0IgPSAnYmxvYicsXG4gICAgUmVhbCA9ICdyZWFsJyxcbiAgICBEb3VibGUgPSAncmVhbCcsXG4gICAgRGVjaW1hbCA9ICdyZWFsJyxcbiAgICBGbG9hdCA9ICdyZWFsJyxcbiAgICBCb29sZWFuID0gJ2ludGVnZXInLFxuICAgIERhdGVUaW1lID0gJ3RleHQnLFxuICAgIERhdGUgPSAndGV4dCdcblxufVxuXG5leHBvcnQgZW51bSBEZWZhdWx0VHlwZSB7XG4gICAgSW50ZWdlciA9ICcwJyxcbiAgICBJbnQgPSAnMCcsXG4gICAgVGlueUludCA9ICcwJyxcbiAgICBTbWFsbEludCA9ICcwJyxcbiAgICBCaWdJbnQgPSAnMCcsXG4gICAgVGV4dCA9ICdcXCdcXCcnLFxuICAgIENoYXIgPSAnXFwnXFwnJyxcbiAgICBOQ2hhciA9ICdcXCdcXCcnLFxuICAgIFZhckNoYXIgPSAnXFwnXFwnJyxcbiAgICBOVmFyQ2hhciA9ICdcXCdcXCcnLFxuICAgIENMT0IgPSAnXFwnXFwnJyxcbiAgICBCTE9CID0gJzAnLFxuICAgIFJlYWwgPSAnMC4wJyxcbiAgICBEb3VibGUgPSAnMC4wJyxcbiAgICBEZWNpbWFsID0gJzAuMCcsXG4gICAgRmxvYXQgPSAnMC4wJyxcbiAgICBCb29sZWFuID0gJzAnLFxuICAgIERhdGVUaW1lID0gJyhkYXRldGltZShcXCdub3dcXCcsIFxcJ2xvY2FsdGltZVxcJykpJyxcbiAgICBEYXRlID0gJyhkYXRlKFxcJ25vd1xcJywgXFwnbG9jYWx0aW1lXFwnKSknXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBTcWxUcmFuc2FjdGlvbiB7XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgU1FMIHN0YXRlbWVudCB2aWEgY3VycmVudCB0cmFuc2FjdGlvbi5cbiAgICAgKiBAcGFyYW0gc3FsIFNRTCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIFNRTCBzdGV0ZW1lbnQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgQ2FsbGVkIGluIGNhc2Ugb2YgcXVlcnkgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRvbmUuXG4gICAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgICBDYWxsZWQsIHdoZW4gcXVlcnkgZmFpbHMuIFJldHVybiBmYWxzZSB0byBjb250aW51ZSB0cmFuc2FjdGlvbjsgdHJ1ZSBvciBubyByZXR1cm4gdG8gcm9sbGJhY2suXG4gICAgICovXG4gICAgZXhlY3V0ZVNxbChzcWw6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zPzogYW55W10sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjaz86ICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIHJlc3VsdFNldDogU3FsUmVzdWx0U2V0KSA9PiB2b2lkLFxuICAgICAgICBlcnJvckNhbGxiYWNrPzogKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiBhbnkpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldCB7XG4gICAgaW5zZXJ0SWQ6IG51bWJlcjtcbiAgICByb3dzQWZmZWN0ZWQ6IG51bWJlcjtcbiAgICByb3dzOiBTcWxSZXN1bHRTZXRSb3dMaXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldFJvd0xpc3Qge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGl0ZW0oaW5kZXg6IG51bWJlcik6IE9iamVjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcWxFcnJvciB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZheiBjb24gbGEgY29uZmlndXJhY2nDs24gZGUgd2Vic3FsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJDb25maWcge1xuICAgIC8qKlxuICAgICAqICBub21icmUgZGUgbGEgYmFzZSBkZSBkYXRvc1xuICAgICovXG4gICAgZGJOYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZGVmYXVsdCAnZGVmYXVsdCdcbiAgICAqL1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgJ0xpYnJhcnknXG4gICAgKi9cbiAgICBpb3NEYXRhYmFzZUxvY2F0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVmYXogcGFyYSBkZWZpbmlyIHVuIGNvbnN0cmFpbnQgdW5pcXVlXG4gKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERCVW5pcXVlIHtcbiAgICBuYW1lOiBzdHJpbmc7IC8qKiBub21icmUgICovXG4gICAgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXTsgLyoqIGxpc3RhIGRlIGNhbXBvcyAqL1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCRm9yZWlnbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZVRhYmxlOiBzdHJpbmc7XG4gICAgcHJpbWFyeUtleTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgREJDb2x1bW4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBEYXRhVHlwZTtcbiAgICBsZW5ndGg/OiBudW1iZXI7XG4gICAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdD86IERlZmF1bHRUeXBlIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCVGFibGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5zOiBEQkNvbHVtbltdO1xuICAgIHByaW1hcnk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHVuaXF1ZXM/OiBEQlVuaXF1ZVtdO1xuICAgIGZvcmVpZ25zPzogREJGb3JlaWduW107XG4gICAgc3luYz86IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIERCVmlldyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNxbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCU2NoZW1hIHtcbiAgICB0YWJsZXM6IERCVGFibGVbXSxcbiAgICB2aWV3cz86IERCVmlld1tdXG59XG5cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kYi13cmFwcGVyL3NyYy9saWIvZGItd3JhcHBlci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxDQUFOLElBQVksUUFxQlg7QUFyQkQsV0FBWSxRQUFRO0lBQ2hCLCtCQUFtQixDQUFBO0lBQ25CLDJCQUFlLENBQUE7SUFDZiwrQkFBbUIsQ0FBQTtJQUNuQixnQ0FBb0IsQ0FBQTtJQUNwQiw4QkFBa0IsQ0FBQTtJQUNsQix5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLDBCQUFjLENBQUE7SUFDZCw0QkFBZ0IsQ0FBQTtJQUNoQiw2QkFBaUIsQ0FBQTtJQUNqQix5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsNEJBQWdCLENBQUE7SUFDaEIsMEJBQWMsQ0FBQTtJQUNkLCtCQUFtQixDQUFBO0lBQ25CLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7QUFFakIsQ0FBQyxFQXJCVyxRQUFRLEtBQVIsUUFBUSxRQXFCbkI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQW9CWDtBQXBCRCxXQUFZLFdBQVc7SUFDbkIsNEJBQWEsQ0FBQTtJQUNiLHdCQUFTLENBQUE7SUFDVCw0QkFBYSxDQUFBO0lBQ2IsNkJBQWMsQ0FBQTtJQUNkLDJCQUFZLENBQUE7SUFDWiwwQkFBYSxDQUFBO0lBQ2IsMEJBQWEsQ0FBQTtJQUNiLDJCQUFjLENBQUE7SUFDZCw2QkFBZ0IsQ0FBQTtJQUNoQiw4QkFBaUIsQ0FBQTtJQUNqQiwwQkFBYSxDQUFBO0lBQ2IseUJBQVUsQ0FBQTtJQUNWLDJCQUFZLENBQUE7SUFDWiw2QkFBYyxDQUFBO0lBQ2QsOEJBQWUsQ0FBQTtJQUNmLDRCQUFhLENBQUE7SUFDYiw0QkFBYSxDQUFBO0lBQ2IsMERBQStDLENBQUE7SUFDL0Msa0RBQXVDLENBQUE7QUFDM0MsQ0FBQyxFQXBCVyxXQUFXLEtBQVgsV0FBVyxRQW9CdEIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBJbnRlZ2VyID0gJ2ludGVnZXInLFxuICAgIEludCA9ICdpbnRlZ2VyJyxcbiAgICBUaW55SW50ID0gJ2ludGVnZXInLFxuICAgIFNtYWxsSW50ID0gJ2ludGVnZXInLFxuICAgIEJpZ0ludCA9ICdpbnRlZ2VyJyxcbiAgICBUZXh0ID0gJ3RleHQnLFxuICAgIENoYXIgPSAndGV4dCcsXG4gICAgTkNoYXIgPSAndGV4dCcsXG4gICAgVmFyQ2hhciA9ICd0ZXh0JyxcbiAgICBOVmFyQ2hhciA9ICd0ZXh0JyxcbiAgICBDTE9CID0gJ3RleHQnLFxuICAgIEJMT0IgPSAnYmxvYicsXG4gICAgUmVhbCA9ICdyZWFsJyxcbiAgICBEb3VibGUgPSAncmVhbCcsXG4gICAgRGVjaW1hbCA9ICdyZWFsJyxcbiAgICBGbG9hdCA9ICdyZWFsJyxcbiAgICBCb29sZWFuID0gJ2ludGVnZXInLFxuICAgIERhdGVUaW1lID0gJ3RleHQnLFxuICAgIERhdGUgPSAndGV4dCdcblxufVxuXG5leHBvcnQgZW51bSBEZWZhdWx0VHlwZSB7XG4gICAgSW50ZWdlciA9ICcwJyxcbiAgICBJbnQgPSAnMCcsXG4gICAgVGlueUludCA9ICcwJyxcbiAgICBTbWFsbEludCA9ICcwJyxcbiAgICBCaWdJbnQgPSAnMCcsXG4gICAgVGV4dCA9ICdcXCdcXCcnLFxuICAgIENoYXIgPSAnXFwnXFwnJyxcbiAgICBOQ2hhciA9ICdcXCdcXCcnLFxuICAgIFZhckNoYXIgPSAnXFwnXFwnJyxcbiAgICBOVmFyQ2hhciA9ICdcXCdcXCcnLFxuICAgIENMT0IgPSAnXFwnXFwnJyxcbiAgICBCTE9CID0gJzAnLFxuICAgIFJlYWwgPSAnMC4wJyxcbiAgICBEb3VibGUgPSAnMC4wJyxcbiAgICBEZWNpbWFsID0gJzAuMCcsXG4gICAgRmxvYXQgPSAnMC4wJyxcbiAgICBCb29sZWFuID0gJzAnLFxuICAgIERhdGVUaW1lID0gJyhkYXRldGltZShcXCdub3dcXCcsIFxcJ2xvY2FsdGltZVxcJykpJyxcbiAgICBEYXRlID0gJyhkYXRlKFxcJ25vd1xcJywgXFwnbG9jYWx0aW1lXFwnKSknXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBTcWxUcmFuc2FjdGlvbiB7XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgU1FMIHN0YXRlbWVudCB2aWEgY3VycmVudCB0cmFuc2FjdGlvbi5cbiAgICAgKiBAcGFyYW0gc3FsIFNRTCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIFNRTCBzdGV0ZW1lbnQgYXJndW1lbnRzLlxuICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgQ2FsbGVkIGluIGNhc2Ugb2YgcXVlcnkgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRvbmUuXG4gICAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgICBDYWxsZWQsIHdoZW4gcXVlcnkgZmFpbHMuIFJldHVybiBmYWxzZSB0byBjb250aW51ZSB0cmFuc2FjdGlvbjsgdHJ1ZSBvciBubyByZXR1cm4gdG8gcm9sbGJhY2suXG4gICAgICovXG4gICAgZXhlY3V0ZVNxbChzcWw6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zPzogYW55W10sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjaz86ICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIHJlc3VsdFNldDogU3FsUmVzdWx0U2V0KSA9PiB2b2lkLFxuICAgICAgICBlcnJvckNhbGxiYWNrPzogKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiBhbnkpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldCB7XG4gICAgaW5zZXJ0SWQ6IG51bWJlcjtcbiAgICByb3dzQWZmZWN0ZWQ6IG51bWJlcjtcbiAgICByb3dzOiBTcWxSZXN1bHRTZXRSb3dMaXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldFJvd0xpc3Qge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGl0ZW0oaW5kZXg6IG51bWJlcik6IE9iamVjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcWxFcnJvciB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZheiBjb24gbGEgY29uZmlndXJhY2nDs24gZGUgd2Vic3FsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJDb25maWcge1xuICAgIC8qKlxuICAgICAqICBub21icmUgZGUgbGEgYmFzZSBkZSBkYXRvc1xuICAgICovXG4gICAgZGJOYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZGVmYXVsdCAnZGVmYXVsdCdcbiAgICAqL1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgJ0xpYnJhcnknXG4gICAgKi9cbiAgICBpb3NEYXRhYmFzZUxvY2F0aW9uPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAgICovXG4gICAgYW5kcm9pZERhdGFiYXNlUHJvdmlkZXI/OiBzdHJpbmc7ICAgIFxufVxuXG4vKipcbiAqIEludGVmYXogcGFyYSBkZWZpbmlyIHVuIGNvbnN0cmFpbnQgdW5pcXVlXG4gKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERCVW5pcXVlIHtcbiAgICBuYW1lOiBzdHJpbmc7IC8qKiBub21icmUgICovXG4gICAgZmllbGRzOiBzdHJpbmcgfCBzdHJpbmdbXTsgLyoqIGxpc3RhIGRlIGNhbXBvcyAqL1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCRm9yZWlnbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZVRhYmxlOiBzdHJpbmc7XG4gICAgcHJpbWFyeUtleTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgREJDb2x1bW4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBEYXRhVHlwZTtcbiAgICBsZW5ndGg/OiBudW1iZXI7XG4gICAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdD86IERlZmF1bHRUeXBlIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCVGFibGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5zOiBEQkNvbHVtbltdO1xuICAgIHByaW1hcnk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHVuaXF1ZXM/OiBEQlVuaXF1ZVtdO1xuICAgIGZvcmVpZ25zPzogREJGb3JlaWduW107XG4gICAgc3luYz86IHN0cmluZztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIERCVmlldyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNxbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERCU2NoZW1hIHtcbiAgICB0YWJsZXM6IERCVGFibGVbXSxcbiAgICB2aWV3cz86IERCVmlld1tdXG59XG5cbiJdfQ==
@@ -5,6 +5,7 @@ export class DbWrapperService {
5
5
  this._dbName = dbConfig.dbName;
6
6
  this._location = dbConfig.location || 'default';
7
7
  this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
8
+ this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';
8
9
  const window = (new WindowService()).nativeWindow;
9
10
  if (dbSchema) {
10
11
  this.schema = dbSchema;
@@ -37,6 +38,7 @@ export class DbWrapperService {
37
38
  this.db = window.sqlitePlugin.openDatabase({
38
39
  name: this._dbName,
39
40
  location: this._location,
41
+ androidDatabaseProvider: this._androidDatabaseProvider,
40
42
  androidLockWorkaround: 1
41
43
  });
42
44
  if (dbSchema) {
@@ -402,4 +404,4 @@ export function provideDbWrapper(dbConfig, dbSchema) {
402
404
  const config = !!dbConfig ? dbConfig : getDefaultDbConfig();
403
405
  return new DbWrapperService(config, dbSchema);
404
406
  }
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGItd3JhcHBlci9zcmMvbGliL2RiLXdyYXBwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQVksUUFBa0IsRUFBRSxRQUFtQjtRQUVqRCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQztRQUN0RSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztTQUFFO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO2dCQUN6QyxVQUFVLENBQUUsR0FBRyxFQUFFO29CQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUU7d0JBQ0gsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQyxDQUFFO3lCQUNGLEtBQUssQ0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZCxDQUFDLENB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QUFNO1lBQUcsT0FBTyxJQUFJLENBQUM7U0FBRTtJQUMvRSxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWEsRUFBRSxHQUFhO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsY0FBYyxHQUFHLEtBQUssR0FBRyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUY7QUFJRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVcsaUJBQWlCLENBQUMsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVcsaUJBQWlCLENBQUMsQ0FBQztBQUV6RSxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVztRQUNuQixRQUFRLEVBQUUsU0FBUztRQUNuQixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCLEVBQUUsUUFBbUI7SUFDdEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBEQlRhYmxlLCBEYkNvbmZpZywgREJTY2hlbWEsIERCVmlldyxcbiAgREJDb2x1bW4sIERCVW5pcXVlLCBEQkZvcmVpZ24sIFNxbFRyYW5zYWN0aW9uLCBTcWxSZXN1bHRTZXQsIFNxbEVycm9yLCBEZWZhdWx0VHlwZSB9IGZyb20gJy4vZGItd3JhcHBlci5tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgRGJXcmFwcGVyU2VydmljZSB7XG4gIHByaXZhdGUgX2RiTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9sb2NhdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9pb3NEYXRhYmFzZUxvY2F0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlYWR5UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbiAgc2NoZW1hOiBEQlNjaGVtYTtcbiAgZGI6IGFueTtcblxuICBjb25zdHJ1Y3RvcihkYkNvbmZpZzogRGJDb25maWcsIGRiU2NoZW1hPzogREJTY2hlbWEpIHtcblxuICAgIHRoaXMuX2RiTmFtZSA9IGRiQ29uZmlnLmRiTmFtZTtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGRiQ29uZmlnLmxvY2F0aW9uIHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLl9pb3NEYXRhYmFzZUxvY2F0aW9uID0gZGJDb25maWcuaW9zRGF0YWJhc2VMb2NhdGlvbiB8fCAnTGlicmFyeSc7XG4gICAgY29uc3Qgd2luZG93ID0gKG5ldyBXaW5kb3dTZXJ2aWNlKCkpLm5hdGl2ZVdpbmRvdztcbiAgICBpZiAoZGJTY2hlbWEpIHsgdGhpcy5zY2hlbWEgPSBkYlNjaGVtYTsgfVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlICggKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY29yZG92YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5pdChkYlNjaGVtYSkudGhlbiAoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgLmNhdGNoICggKGVycikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RldmljZXJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYldyYXBwZXI6IGRldmljZSByZWFkeS4nKTtcbiAgICAgICAgICB0aGlzLmluaXREZXZpY2UoZGJTY2hlbWEpLnRoZW4gKCAoKSA9PiByZXNvbHZlKCkgKS5jYXRjaCAoIChlcnIpID0+IHJlamVjdChlcnIpICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZTtcbiAgfVxuXG4gIGluaXREZXZpY2UoZGJTY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2luZG93ID0gKG5ldyBXaW5kb3dTZXJ2aWNlKCkpLm5hdGl2ZVdpbmRvdztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGIgPSB3aW5kb3cuc3FsaXRlUGx1Z2luLm9wZW5EYXRhYmFzZSh7XG4gICAgICAgIG5hbWU6IHRoaXMuX2RiTmFtZSxcbiAgICAgICAgbG9jYXRpb246IHRoaXMuX2xvY2F0aW9uLFxuICAgICAgICBhbmRyb2lkTG9ja1dvcmthcm91bmQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGJTY2hlbWEpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZShkYlNjaGVtYSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7IHJlc29sdmUoKTsgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbml0KGRiU2NoZW1hOiBEQlNjaGVtYSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpbmRvdyA9IChuZXcgV2luZG93U2VydmljZSgpKS5uYXRpdmVXaW5kb3c7XG4gICAgcmV0dXJuICBuZXcgUHJvbWlzZSAoIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGIgPSB3aW5kb3cub3BlbkRhdGFiYXNlKHRoaXMuX2RiTmFtZSwgJzEuMCcsICdkYXRhYmFzZScsIC0xKTtcbiAgICAgIGlmIChkYlNjaGVtYSkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlKGRiU2NoZW1hKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pLnRoZW4oICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGUoc2NoZW1hOiBEQlNjaGVtYSk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBzZW50ZW5jZXMgPSBbXTtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcblxuICAgIGlmIChzY2hlbWEudGFibGVzKSB7XG4gICAgICBzY2hlbWEudGFibGVzLmZvckVhY2godGFibGUgPT4ge1xuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlKHRhYmxlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS52aWV3cykge1xuICAgICAgc2NoZW1hLnZpZXdzLmZvckVhY2goIHZpZXcgPT4ge1xuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmNyZWF0ZVZpZXcodmlldykpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VzcXVlbWEgZGUgbGEgYmFzZSBkZSBkYXRvcyB2YWNpYS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHNlbnRlbmNlcyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZTogREJUYWJsZSk6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHNxbCA9ICcnLCAgb25Db25mbGljdFByaW1hcnk7XG4gICAgY29uc3Qgc2VudGVuY2VzID0gW10sICBuZXdDb2x1bW5zID0gW11cblxuICAgIGNvbnN0IHRhYmxlRERMID0gYXdhaXQgdGhpcy5fdGFibGVFeGlzdHModGFibGUubmFtZSk7XG4gICAgaWYgKHRhYmxlRERMKSB7XG4gICAgICAgIHRhYmxlLmNvbHVtbnMuZm9yRWFjaCggY29sID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2NvbHVtbkV4aXN0cyh0YWJsZURETCBhcyBzdHJpbmcsIGNvbC5uYW1lKSApIHtcbiAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaCh0aGlzLmFkZENvbHVtbih0YWJsZS5uYW1lLCBjb2wpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goIGNvbCA9PiB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuZGVmQ29sdW1uKGNvbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG9uQ29uZmxpY3RQcmltYXJ5ID0gJ29uIGNvbmZsaWN0IGZhaWwnO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFibGUucHJpbWFyeSkgKSAge1xuICAgICAgc2VudGVuY2VzLnB1c2ggKCcgQ09OU1RSQUlOVCBpZGVudGlmaWNhZG9yIFBSSU1BUlkgS0VZICgnICsgdGFibGUucHJpbWFyeS5qb2luKCcsJykgKyAnKSAnICsgb25Db25mbGljdFByaW1hcnkgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0YWJsZS5wcmltYXJ5ID09PSAnc3RyaW5nJykgICB7XG4gICAgICBzZW50ZW5jZXMucHVzaCAoJyBDT05TVFJBSU5UIGlkZW50aWZpY2Fkb3IgUFJJTUFSWSBLRVkgKCcgKyB0YWJsZS5wcmltYXJ5ICsgJykgJyArIG9uQ29uZmxpY3RQcmltYXJ5ICk7XG4gICAgfVxuICAgIGlmICh0YWJsZS51bmlxdWVzKSB7XG4gICAgICB0YWJsZS51bmlxdWVzLmZvckVhY2goIHVuaXEgPT4ge1xuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmRlZlVuaXF1ZSh1bmlxKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGFibGUuZm9yZWlnbnMpIHtcbiAgICAgIHRhYmxlLmZvcmVpZ25zLmZvckVhY2ggKCBmb3JlID0+IHtcbiAgICAgICAgc2VudGVuY2VzLnB1c2godGhpcy5kZWZGb3JlaWduKGZvcmUpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0YWJsZURETCAmJiBuZXdDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG5ld0NvbHVtbnMpXG4gICAgICAudGhlbiggKCkgPT4geyBjb25zb2xlLmxvZyhgVGFibGUgJHt0YWJsZS5uYW1lfSBhbHRlcmVkLmApOyB9IClcbiAgICAgIC5jYXRjaCggKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yIChgVGFibGUgJHt0YWJsZS5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSAke3RhYmxlLm5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKCF0YWJsZURETCkge1xuICAgICAgc3FsID0gJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgKyB0YWJsZS5uYW1lICsgJyAoJyArIHNlbnRlbmNlcy5qb2luKCcsJykgKyAnKSc7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeShzcWwpXG4gICAgICAudGhlbiggKCkgPT4geyBjb25zb2xlLmxvZyhgVGFibGUgJHt0YWJsZS5uYW1lfSBjcmVhdGVkLmApOyB9KVxuICAgICAgLmNhdGNoKCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IgKGBUYWJsZSAke3RhYmxlLm5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGUubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oICgpID0+IHsgY29uc29sZS5sb2coYFRhYmxlICR7dGFibGUubmFtZX0gaW5pdGlhbGl6ZWQuYCk7IH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgY3JlYXRlVmlldyh2aWV3OiBEQlZpZXcpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBzcWw6IHN0cmluZztcblxuICAgIHNxbCA9ICdDUkVBVEUgVklFVyBJRiBOT1QgRVhJU1RTICcgKyB2aWV3Lm5hbWVcbiAgICAgICsgJyBBUyAnICsgdmlldy5zcWw7XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyeShzcWwpO1xuXG4gIH1cblxuICBnZXRTY2hlbWFUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IERCVGFibGUge1xuICAgIGxldCByZXM6IERCVGFibGU7XG5cbiAgICB0aGlzLnNjaGVtYS50YWJsZXMuZm9yRWFjaCggdGFibGUgPT4ge1xuICAgICAgaWYgKHRhYmxlLm5hbWUgPT09IHRhYmxlTmFtZSkge1xuICAgICAgICByZXMgPSB0YWJsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuXG4gIH1cblxuICBnZXRVbmlxdWVzVGFibGUodGFibGU6IERCVGFibGUpOiBvYmplY3Qge1xuICAgIGxldCByZXM6IHt9O1xuICAgIHRhYmxlLnVuaXF1ZXMuZm9yRWFjaCh1bmlxID0+IHtcbiAgICAgIHJlc1t1bmlxLm5hbWVdID0gdW5pcTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcXVlcnkocXVlcnk6IHN0cmluZywgYmluZGluZ3M6IGFueVtdPSBbXSk6IFByb21pc2U8U3FsUmVzdWx0U2V0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChxdWVyeS5pbmRleE9mKCdzZWxlY3QnKSA9PT0gMCkge1xuICAgICAgICB0aGlzLmRiLnJlYWRUcmFuc2FjdGlvbigodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHF1ZXJ5LCBiaW5kaW5ncywgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgcmVzdWx0OiBTcWxSZXN1bHRTZXQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9LCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCBlcnJvcjogU3FsRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnI6IFNxbEVycm9yKSA9PiByZWplY3QoZXJyKSApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYi50cmFuc2FjdGlvbigodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHF1ZXJ5LCBiaW5kaW5ncywgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgcmVzdWx0OiBTcWxSZXN1bHRTZXQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9LCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCBlcnJvcjogU3FsRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIChlcnI6IFNxbEVycm9yKSA9PiByZWplY3QoZXJyKSApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQ291bnQocXVlcnk6IHN0cmluZywgYmluZGluZ3M6IGFueVtdPSBbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkocXVlcnksIGJpbmRpbmdzKS50aGVuKHJvd3MgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzQ291bnQocm93cyk7XG4gICAgfSk7XG4gIH1cblxuICBpbnNlcnQodGFibGU6IHN0cmluZywgYmluZGluZ3M6IHt9KTogUHJvbWlzZTxTcWxSZXN1bHRTZXQ+IHtcbiAgICBsZXQgc3FsID0gJycsIHNxbEJpbmRzID0gW10sIHNxbEtleXMgPSBbXSwgc3FsVmFsdWVzID0gW10gO1xuXG4gICAgc3FsID0gc3FsICsgJ2luc2VydCBpbnRvICcgKyB0YWJsZSArICcgJztcblxuICAgIGZvciAoY29uc3QgaW5kZXggaW4gYmluZGluZ3MpIHtcbiAgICAgICBpZiAoYmluZGluZ3MuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgICBzcWxLZXlzLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgc3FsVmFsdWVzLnB1c2goYmluZGluZ3NbaW5kZXhdKTtcbiAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goJz8nKTtcbiAgICAgICB9XG4gICAgfVxuXG4gICAgc3FsID0gc3FsICsgJygnICsgc3FsS2V5cy5qb2luKCcsJykgKyAnKSB2YWx1ZXMgKCcgKyBzcWxCaW5kcy5qb2luKCcsJykgKyAnKSc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGIudHJhbnNhY3Rpb24odHJhbnNhY3Rpb24gPT4ge1xuICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoc3FsLCBzcWxWYWx1ZXMsICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIHJlc3VsdDogU3FsUmVzdWx0U2V0KSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9LCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCBlcnJvcjogU3FsRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlKHRhYmxlOiBzdHJpbmcsIGJpbmRpbmdzOiB7fSwgd2hlcmU6IHt9KTogUHJvbWlzZTxTcWxSZXN1bHRTZXQ+IHtcbiAgICBsZXQgc3FsID0gJycsIHNxbEJpbmRzID0gW10sIHNxbEtleXMgPVtdLCBzcWxWYWx1ZXMgPSBbXSA7XG5cbiAgICBzcWwgPSBzcWwgKyAndXBkYXRlICcgKyB0YWJsZSArICcgc2V0ICc7XG5cbiAgICBmb3IgKGxldCBpbmRleCBpbiBiaW5kaW5ncykge1xuICAgICAgIGlmIChiaW5kaW5ncy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICAgIGxldCBuZXdPYmogPSBiaW5kaW5nc1tpbmRleF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5ld09iaiA9PT0gJ29iamVjdCcgJiYgbmV3T2JqICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3FsVmFsdWVzLnB1c2gobmV3T2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3T2JqLmlmbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9IGlmbnVsbCggJyArIGluZGV4ICsgJywwKSArID8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld09iai5vcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9ICcgKyBpbmRleCArIG5ld09iai5vcGVyYXRvciArICcgPycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goaW5kZXggKyAnID0gPycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9ID8nKTtcbiAgICAgICAgICAgICAgICBzcWxWYWx1ZXMucHVzaChiaW5kaW5nc1tpbmRleF0pO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4IGluIHdoZXJlKSB7XG4gICAgICAgaWYgKHdoZXJlLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZVtpbmRleF0gPT09ICdvYmplY3QnICAmJiB3aGVyZVtpbmRleF0gIT09IG51bGwpe1xuICAgICAgICAgICAgICAgIHNxbEtleXMucHVzaChpbmRleCArICcgJyArIHdoZXJlW2luZGV4XS5vcGVyYXRvciArICcgPycpO1xuICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5wdXNoKHdoZXJlW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNxbEtleXMucHVzaChpbmRleCArICcgPSA/Jyk7XG4gICAgICAgICAgICAgICAgc3FsVmFsdWVzLnB1c2god2hlcmVbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuXG4gICAgc3FsID0gc3FsICsgc3FsQmluZHMuam9pbignLCcpICsgJyB3aGVyZSAnICsgc3FsS2V5cy5qb2luKCcgYW5kICcpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRiLnRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uID0+IHtcbiAgICAgICAgdHJhbnNhY3Rpb24uZXhlY3V0ZVNxbChzcWwsIHNxbFZhbHVlcywgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgcmVzdWx0OiBTcWxSZXN1bHRTZXQpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZHJvcFRhYmxlICh0YWJsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbnQgPSAxO1xuXG4gICAgY29udCA9IHRhYmxlcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRhYmxlcy5zb21lKCB0YWJsZSA9PiB7XG4gICAgICAgIGlmIChjb250ICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSgnRFJPUCBUQUJMRSAnICsgdGFibGUpXG4gICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnQgPT09IDEgKSB7IHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHsgY29udC0tOyB9XG4gICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnQgPSAwO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pXG4gIH1cblxuICBmZXRjaEFsbChyZXN1bHQ6IFNxbFJlc3VsdFNldCk6IG9iamVjdFtdIHtcbiAgICBsZXQgb3V0cHV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdC5yb3dzLml0ZW0oaSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBmZXRjaChyZXN1bHQ6IFNxbFJlc3VsdFNldCk6IG9iamVjdCB7XG4gICAgICBsZXQgb2JqZXRvID0gdW5kZWZpbmVkLCBuZXdPYmo9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBvYmpldG8gPSByZXN1bHQucm93cy5pdGVtKDApO1xuICAgICAgICAgIG5ld09iaiA9IHt9O1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmpldG8pO1xuICAgICAgICAgIGZvciAobGV0IGtleSBpbiBrZXlzKSB7XG4gICAgICAgICAgICAgIG5ld09ialtrZXlzW2tleV1dID0gb2JqZXRvW2tleXNba2V5XV07XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09iajtcbiAgfVxuXG5cbiAgcm93c0NvdW50KHJlc3VsdDogU3FsUmVzdWx0U2V0KTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByZXN1bHQucm93cy5sZW5ndGg7XG4gIH1cblxuICB0YWJsZUV4aXN0cyh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ3NlbGVjdCAgc3FsIGZyb20gc3FsaXRlX21hc3RlciAnICtcbiAgICAgICAgJ3doZXJlIHR5cGU9XFwndGFibGVcXCcgYW5kIG5hbWU9XFwnJyArIHRhYmxlICsgJ1xcJycpXG4gICAgLnRoZW4ocmVzdWx0ID0+ICAodGhpcy5yb3dzQ291bnQocmVzdWx0KSA9PT0gMSkgKTtcbiAgfVxuXG4gIGNvbHVtbkV4aXN0cyh0YWJsZTogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUV4aXN0cyh0YWJsZSlcbiAgICAgIC50aGVuKCh0YWJsZURETCkgPT4ge1xuICAgICAgICBpZiAodGFibGVEREwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uRXhpc3RzKCh0YWJsZURETCBhcyBzdHJpbmcpLCBjb2x1bW4pO1xuICAgICAgICB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIH0pO1xuICB9XG5cbi8qIFByaXZhdGUgKi9cblxuICBwcml2YXRlIGRlZkNvbHVtbihjb2w6IERCQ29sdW1uKTogc3RyaW5nIHtcbiAgICBsZXQgY29sU3FsOiBzdHJpbmc7XG5cbiAgICBjb2xTcWwgPSBjb2wubmFtZSArICcgJyArIGNvbC50eXBlO1xuICAgIGlmICghY29sLmlzTnVsbGFibGUpIHtcbiAgICAgIGNvbFNxbCArPSAgJyBOT1QgTlVMTCAnO1xuICAgIH1cbiAgICBpZiAoY29sLmRlZmF1bHQpIHtcbiAgICAgIGNvbFNxbCArPSAnIERFRkFVTFQgJyArIGNvbC5kZWZhdWx0ICsgJyAnO1xuICAgIH1cbiAgICBpZiAoY29sLnR5cGUgPT09ICd0ZXh0JyAmJiBjb2wubGVuZ3RoKSB7XG4gICAgICBjb2xTcWwgKz0gYCBDT05TVFJBSU5UICR7Y29sLm5hbWV9X2xlbmd0aCBDSEVDSyAoIGA7XG4gICAgICBpZiAoY29sLmlzTnVsbGFibGUpIHtcbiAgICAgICAgY29sU3FsICs9IGAke2NvbC5uYW1lfSBpcyBudWxsIE9SIGA7XG4gICAgICB9XG4gICAgICBjb2xTcWwgKz0gYGxlbmd0aCgke2NvbC5uYW1lfSkgPD0gJHtjb2wubGVuZ3RofSApYDtcblxuICAgIH1cblxuICAgIHJldHVybiBjb2xTcWw7XG5cbiAgfVxuXG4gIHByaXZhdGUgZGVmVW5pcXVlKHVuaXF1ZTogREJVbmlxdWUpOiBzdHJpbmcge1xuICAgIGxldCB1bmlxU3FsOiBzdHJpbmc7XG5cbiAgICAvLyBkZXBlbmRlIGRlbCBlbnRvcm5vLCBwcm9kdWNjacOzbiBvIGRlc2Fycm9sbG9cbiAgICBjb25zdCBvbkNvbmZsaWN0VW5pcXVlID0gJ29uIGNvbmZsaWN0IHJlcGxhY2UnO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodW5pcXVlLmZpZWxkcykgKSAge1xuICAgICAgdW5pcVNxbCA9IGAgQ09OU1RSQUlOVCAke3VuaXF1ZS5uYW1lfSBVTklRVUUgKCAke3VuaXF1ZS5maWVsZHMuam9pbignLCcpfSApICR7b25Db25mbGljdFVuaXF1ZX0gYDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB1bmlxdWUuZmllbGRzID09PSAnc3RyaW5nJykgICB7XG4gICAgICB1bmlxU3FsID0gYCBDT05TVFJBSU5UICR7dW5pcXVlLm5hbWV9IFVOSVFVRSAoICR7dW5pcXVlLmZpZWxkc30gKSAke29uQ29uZmxpY3RVbmlxdWV9IGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXFTcWw7XG4gIH1cblxuICBwcml2YXRlIGRlZkZvcmVpZ24oZm9yZTogREJGb3JlaWduKTogc3RyaW5nIHtcbiAgICBsZXQgZm9yZVNxbDogc3RyaW5nO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9yZS5mb3JlaWduS2V5KSApICB7XG4gICAgICBmb3JlU3FsID0gYCBGT1JFSUdOIEtFWSAoICAke2ZvcmUuZm9yZWlnbktleS5qb2luKCcsJyl9ICkgYDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZvcmUuZm9yZWlnbktleSA9PT0gJ3N0cmluZycpICAge1xuICAgICAgZm9yZVNxbCA9IGAgRk9SRUlHTiBLRVkgKCAgJHtmb3JlLmZvcmVpZ25LZXl9ICkgYDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JlLnByaW1hcnlLZXkpICkgIHtcbiAgICAgIGZvcmVTcWwgPSBgIFJFRkVSRU5DRVMgJHtmb3JlLnJlZmVyZW5jZVRhYmxlfSAoICAke2ZvcmUucHJpbWFyeUtleS5qb2luKCcsJyl9ICkgYDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZvcmUucHJpbWFyeUtleSA9PT0gJ3N0cmluZycpICAge1xuICAgICAgZm9yZVNxbCA9IGAgUkVGRVJFTkNFUyAke2ZvcmUucmVmZXJlbmNlVGFibGV9ICggICR7Zm9yZS5wcmltYXJ5S2V5fSApIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmVTcWw7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZUV4aXN0cyh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ3NlbGVjdCAgc3FsIGZyb20gc3FsaXRlX21hc3RlciAnICtcbiAgICAgICAgJ3doZXJlIHR5cGU9XFwndGFibGVcXCcgYW5kIG5hbWU9XFwnJyArIHRhYmxlICsgJ1xcJycpXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0NvdW50KHJlc3VsdCkgPT09IDEpIHsgcmV0dXJuICh0aGlzLmZldGNoKHJlc3VsdCkgYXMgYW55KS5zcWwgYXMgc3RyaW5nOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkV4aXN0cyh0YWJsZURETDogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHRhYmxlRERMLmluZGV4T2YoY29sdW1uKSA9PT0gLTEpIHsgcmV0dXJuIGZhbHNlOyB9IGVsc2UgeyAgcmV0dXJuIHRydWU7IH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29sdW1uKHRhYmxlOiBzdHJpbmcsIGNvbDogREJDb2x1bW4pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGNvbFNxbCA9IHRoaXMuZGVmQ29sdW1uKGNvbCk7XG4gICAgY29uc3QgcXVlcnkgPSAnYWx0ZXIgVEFCTEUgJyArIHRhYmxlICsgJyBhZGQgQ09MVU1OICcgKyBjb2xTcWw7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkocXVlcnkpO1xuICB9XG5cbn1cblxuXG5cbmV4cG9ydCBjb25zdCBEQl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGJDb25maWc+KCdkYldyYXBwZXJDb25maWcnKTtcbmV4cG9ydCBjb25zdCBEQl9TQ0hFTUEgPSBuZXcgSW5qZWN0aW9uVG9rZW48REJTY2hlbWE+KCdkYldyYXBwZXJTY2hlbWEnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHREYkNvbmZpZygpOiBEYkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgZGJOYW1lOiAnZGIuc3FsaXRlJyxcbiAgICBsb2NhdGlvbjogJ2RlZmF1bHQnLFxuICAgIGlvc0RhdGFiYXNlTG9jYXRpb246ICdMaWJyYXJ5J1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZURiV3JhcHBlcihkYkNvbmZpZzogRGJDb25maWcsIGRiU2NoZW1hPzogREJTY2hlbWEpOiBEYldyYXBwZXJTZXJ2aWNlIHtcbiAgY29uc3QgY29uZmlnID0gISFkYkNvbmZpZyA/IGRiQ29uZmlnIDogZ2V0RGVmYXVsdERiQ29uZmlnKCk7XG4gIHJldHVybiBuZXcgRGJXcmFwcGVyU2VydmljZShjb25maWcsIGRiU2NoZW1hKTtcbn1cblxuXG5cbiJdfQ==
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZGItd3JhcHBlci9zcmMvbGliL2RiLXdyYXBwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBUzNCLFlBQVksUUFBa0IsRUFBRSxRQUFtQjtRQUVqRCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQztRQUN0RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixJQUFJLFNBQVMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztTQUFFO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO2dCQUN6QyxVQUFVLENBQUUsR0FBRyxFQUFFO29CQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUU7d0JBQ0gsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQyxDQUFFO3lCQUNGLEtBQUssQ0FBRyxDQUFD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QUFFLE1BQWM7UUFFcEQsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTthQUFNO1lBQUcsT0FBTyxJQUFJLENBQUM7U0FBRTtJQUMvRSxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWEsRUFBRSxHQUFhO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsY0FBYyxHQUFHLEtBQUssR0FBRyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUY7QUFJRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVcsaUJBQWlCLENBQUMsQ0FBQztBQUN6RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVcsaUJBQWlCLENBQUMsQ0FBQztBQUV6RSxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVztRQUNuQixRQUFRLEVBQUUsU0FBUztRQUNuQixtQkFBbUIsRUFBRSxTQUFTO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCLEVBQUUsUUFBbUI7SUFDdEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBEQlRhYmxlLCBEYkNvbmZpZywgREJTY2hlbWEsIERCVmlldyxcbiAgREJDb2x1bW4sIERCVW5pcXVlLCBEQkZvcmVpZ24sIFNxbFRyYW5zYWN0aW9uLCBTcWxSZXN1bHRTZXQsIFNxbEVycm9yLCBEZWZhdWx0VHlwZSB9IGZyb20gJy4vZGItd3JhcHBlci5tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgRGJXcmFwcGVyU2VydmljZSB7XG4gIHByaXZhdGUgX2RiTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9sb2NhdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9pb3NEYXRhYmFzZUxvY2F0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2FuZHJvaWREYXRhYmFzZVByb3ZpZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlYWR5UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbiAgc2NoZW1hOiBEQlNjaGVtYTtcbiAgZGI6IGFueTtcblxuICBjb25zdHJ1Y3RvcihkYkNvbmZpZzogRGJDb25maWcsIGRiU2NoZW1hPzogREJTY2hlbWEpIHtcblxuICAgIHRoaXMuX2RiTmFtZSA9IGRiQ29uZmlnLmRiTmFtZTtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGRiQ29uZmlnLmxvY2F0aW9uIHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLl9pb3NEYXRhYmFzZUxvY2F0aW9uID0gZGJDb25maWcuaW9zRGF0YWJhc2VMb2NhdGlvbiB8fCAnTGlicmFyeSc7XG4gICAgdGhpcy5fYW5kcm9pZERhdGFiYXNlUHJvdmlkZXIgPSBkYkNvbmZpZy5hbmRyb2lkRGF0YWJhc2VQcm92aWRlciB8fCAnZGVmYXVsdCc7XG4gICAgY29uc3Qgd2luZG93ID0gKG5ldyBXaW5kb3dTZXJ2aWNlKCkpLm5hdGl2ZVdpbmRvdztcbiAgICBpZiAoZGJTY2hlbWEpIHsgdGhpcy5zY2hlbWEgPSBkYlNjaGVtYTsgfVxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlICggKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY29yZG92YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5pdChkYlNjaGVtYSkudGhlbiAoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gKVxuICAgICAgICAgICAgLmNhdGNoICggKGVycikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RldmljZXJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYldyYXBwZXI6IGRldmljZSByZWFkeS4nKTtcbiAgICAgICAgICB0aGlzLmluaXREZXZpY2UoZGJTY2hlbWEpLnRoZW4gKCAoKSA9PiByZXNvbHZlKCkgKS5jYXRjaCAoIChlcnIpID0+IHJlamVjdChlcnIpICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZTtcbiAgfVxuXG4gIGluaXREZXZpY2UoZGJTY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2luZG93ID0gKG5ldyBXaW5kb3dTZXJ2aWNlKCkpLm5hdGl2ZVdpbmRvdztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGIgPSB3aW5kb3cuc3FsaXRlUGx1Z2luLm9wZW5EYXRhYmFzZSh7XG4gICAgICAgIG5hbWU6IHRoaXMuX2RiTmFtZSxcbiAgICAgICAgbG9jYXRpb246IHRoaXMuX2xvY2F0aW9uLFxuICAgICAgICBhbmRyb2lkRGF0YWJhc2VQcm92aWRlcjogdGhpcy5fYW5kcm9pZERhdGFiYXNlUHJvdmlkZXIsXG4gICAgICAgIGFuZHJvaWRMb2NrV29ya2Fyb3VuZDogMVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkYlNjaGVtYSkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlKGRiU2NoZW1hKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KS50aGVuKCgpID0+IHsgcmVzb2x2ZSgpOyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoZGJTY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2luZG93ID0gKG5ldyBXaW5kb3dTZXJ2aWNlKCkpLm5hdGl2ZVdpbmRvdztcbiAgICByZXR1cm4gIG5ldyBQcm9taXNlICggKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYiA9IHdpbmRvdy5vcGVuRGF0YWJhc2UodGhpcy5fZGJOYW1lLCAnMS4wJywgJ2RhdGFiYXNlJywgLTEpO1xuICAgICAgaWYgKGRiU2NoZW1hKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGUoZGJTY2hlbWEpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSkudGhlbiggKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZShzY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIGNvbnN0IHNlbnRlbmNlcyA9IFtdO1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuXG4gICAgaWYgKHNjaGVtYS50YWJsZXMpIHtcbiAgICAgIHNjaGVtYS50YWJsZXMuZm9yRWFjaCh0YWJsZSA9PiB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuY3JlYXRlVGFibGUodGFibGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLnZpZXdzKSB7XG4gICAgICBzY2hlbWEudmlld3MuZm9yRWFjaCggdmlldyA9PiB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuY3JlYXRlVmlldyh2aWV3KSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXNxdWVtYSBkZSBsYSBiYXNlIGRlIGRhdG9zIHZhY2lhLicpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoc2VudGVuY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRhYmxlKHRhYmxlOiBEQlRhYmxlKTogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgc3FsID0gJycsICBvbkNvbmZsaWN0UHJpbWFyeTtcbiAgICBjb25zdCBzZW50ZW5jZXMgPSBbXSwgIG5ld0NvbHVtbnMgPSBbXVxuXG4gICAgY29uc3QgdGFibGVEREwgPSBhd2FpdCB0aGlzLl90YWJsZUV4aXN0cyh0YWJsZS5uYW1lKTtcbiAgICBpZiAodGFibGVEREwpIHtcbiAgICAgICAgdGFibGUuY29sdW1ucy5mb3JFYWNoKCBjb2wgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fY29sdW1uRXhpc3RzKHRhYmxlRERMIGFzIHN0cmluZywgY29sLm5hbWUpICkge1xuICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHRoaXMuYWRkQ29sdW1uKHRhYmxlLm5hbWUsIGNvbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlLmNvbHVtbnMuZm9yRWFjaCggY29sID0+IHtcbiAgICAgICAgc2VudGVuY2VzLnB1c2godGhpcy5kZWZDb2x1bW4oY29sKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgb25Db25mbGljdFByaW1hcnkgPSAnb24gY29uZmxpY3QgZmFpbCc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZS5wcmltYXJ5KSApICB7XG4gICAgICBzZW50ZW5jZXMucHVzaCAoJyBDT05TVFJBSU5UIGlkZW50aWZpY2Fkb3IgUFJJTUFSWSBLRVkgKCcgKyB0YWJsZS5wcmltYXJ5LmpvaW4oJywnKSArICcpICcgKyBvbkNvbmZsaWN0UHJpbWFyeSApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRhYmxlLnByaW1hcnkgPT09ICdzdHJpbmcnKSAgIHtcbiAgICAgIHNlbnRlbmNlcy5wdXNoICgnIENPTlNUUkFJTlQgaWRlbnRpZmljYWRvciBQUklNQVJZIEtFWSAoJyArIHRhYmxlLnByaW1hcnkgKyAnKSAnICsgb25Db25mbGljdFByaW1hcnkgKTtcbiAgICB9XG4gICAgaWYgKHRhYmxlLnVuaXF1ZXMpIHtcbiAgICAgIHRhYmxlLnVuaXF1ZXMuZm9yRWFjaCggdW5pcSA9PiB7XG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuZGVmVW5pcXVlKHVuaXEpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0YWJsZS5mb3JlaWducykge1xuICAgICAgdGFibGUuZm9yZWlnbnMuZm9yRWFjaCAoIGZvcmUgPT4ge1xuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmRlZkZvcmVpZ24oZm9yZSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRhYmxlRERMICYmIG5ld0NvbHVtbnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwobmV3Q29sdW1ucylcbiAgICAgIC50aGVuKCAoKSA9PiB7IGNvbnNvbGUubG9nKGBUYWJsZSAke3RhYmxlLm5hbWV9IGFsdGVyZWQuYCk7IH0gKVxuICAgICAgLmNhdGNoKCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IgKGBUYWJsZSAke3RhYmxlLm5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGUubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcblxuICAgIH0gZWxzZSBpZiAoIXRhYmxlRERMKSB7XG4gICAgICBzcWwgPSAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJyArIHRhYmxlLm5hbWUgKyAnICgnICsgc2VudGVuY2VzLmpvaW4oJywnKSArICcpJztcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNxbClcbiAgICAgIC50aGVuKCAoKSA9PiB7IGNvbnNvbGUubG9nKGBUYWJsZSAke3RhYmxlLm5hbWV9IGNyZWF0ZWQuYCk7IH0pXG4gICAgICAuY2F0Y2goIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvciAoYFRhYmxlICR7dGFibGUubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZS5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbiggKCkgPT4geyBjb25zb2xlLmxvZyhgVGFibGUgJHt0YWJsZS5uYW1lfSBpbml0aWFsaXplZC5gKTsgfSk7XG4gICAgfVxuICB9XG5cblxuICBjcmVhdGVWaWV3KHZpZXc6IERCVmlldyk6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHNxbDogc3RyaW5nO1xuXG4gICAgc3FsID0gJ0NSRUFURSBWSUVXIElGIE5PVCBFWElTVFMgJyArIHZpZXcubmFtZVxuICAgICAgKyAnIEFTICcgKyB2aWV3LnNxbDtcblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNxbCk7XG5cbiAgfVxuXG4gIGdldFNjaGVtYVRhYmxlKHRhYmxlTmFtZTogc3RyaW5nKTogREJUYWJsZSB7XG4gICAgbGV0IHJlczogREJUYWJsZTtcblxuICAgIHRoaXMuc2NoZW1hLnRhYmxlcy5mb3JFYWNoKCB0YWJsZSA9PiB7XG4gICAgICBpZiAodGFibGUubmFtZSA9PT0gdGFibGVOYW1lKSB7XG4gICAgICAgIHJlcyA9IHRhYmxlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG5cbiAgfVxuXG4gIGdldFVuaXF1ZXNUYWJsZSh0YWJsZTogREJUYWJsZSk6IG9iamVjdCB7XG4gICAgbGV0IHJlczoge307XG4gICAgdGFibGUudW5pcXVlcy5mb3JFYWNoKHVuaXEgPT4ge1xuICAgICAgcmVzW3VuaXEubmFtZV0gPSB1bmlxO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBxdWVyeShxdWVyeTogc3RyaW5nLCBiaW5kaW5nczogYW55W109IFtdKTogUHJvbWlzZTxTcWxSZXN1bHRTZXQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3NlbGVjdCcpID09PSAwKSB7XG4gICAgICAgIHRoaXMuZGIucmVhZFRyYW5zYWN0aW9uKCh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwocXVlcnksIGJpbmRpbmdzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0sICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIGVycm9yOiBTcWxFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVycjogU3FsRXJyb3IpID0+IHJlamVjdChlcnIpICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRiLnRyYW5zYWN0aW9uKCh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwocXVlcnksIGJpbmRpbmdzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0sICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIGVycm9yOiBTcWxFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVycjogU3FsRXJyb3IpID0+IHJlamVjdChlcnIpICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBDb3VudChxdWVyeTogc3RyaW5nLCBiaW5kaW5nczogYW55W109IFtdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShxdWVyeSwgYmluZGluZ3MpLnRoZW4ocm93cyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3NDb3VudChyb3dzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluc2VydCh0YWJsZTogc3RyaW5nLCBiaW5kaW5nczoge30pOiBQcm9taXNlPFNxbFJlc3VsdFNldD4ge1xuICAgIGxldCBzcWwgPSAnJywgc3FsQmluZHMgPSBbXSwgc3FsS2V5cyA9IFtdLCBzcWxWYWx1ZXMgPSBbXSA7XG5cbiAgICBzcWwgPSBzcWwgKyAnaW5zZXJ0IGludG8gJyArIHRhYmxlICsgJyAnO1xuXG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBiaW5kaW5ncykge1xuICAgICAgIGlmIChiaW5kaW5ncy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICAgIHNxbEtleXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICBzcWxWYWx1ZXMucHVzaChiaW5kaW5nc1tpbmRleF0pO1xuICAgICAgICAgICAgc3FsQmluZHMucHVzaCgnPycpO1xuICAgICAgIH1cbiAgICB9XG5cbiAgICBzcWwgPSBzcWwgKyAnKCcgKyBzcWxLZXlzLmpvaW4oJywnKSArICcpIHZhbHVlcyAoJyArIHNxbEJpbmRzLmpvaW4oJywnKSArICcpJztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYi50cmFuc2FjdGlvbih0cmFuc2FjdGlvbiA9PiB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZXhlY3V0ZVNxbChzcWwsIHNxbFZhbHVlcywgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgcmVzdWx0OiBTcWxSZXN1bHRTZXQpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0sICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIGVycm9yOiBTcWxFcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGUodGFibGU6IHN0cmluZywgYmluZGluZ3M6IHt9LCB3aGVyZToge30pOiBQcm9taXNlPFNxbFJlc3VsdFNldD4ge1xuICAgIGxldCBzcWwgPSAnJywgc3FsQmluZHMgPSBbXSwgc3FsS2V5cyA9W10sIHNxbFZhbHVlcyA9IFtdIDtcblxuICAgIHNxbCA9IHNxbCArICd1cGRhdGUgJyArIHRhYmxlICsgJyBzZXQgJztcblxuICAgIGZvciAobGV0IGluZGV4IGluIGJpbmRpbmdzKSB7XG4gICAgICAgaWYgKGJpbmRpbmdzLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICAgICAgbGV0IG5ld09iaiA9IGJpbmRpbmdzW2luZGV4XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3T2JqID09PSAnb2JqZWN0JyAmJiBuZXdPYmogIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzcWxWYWx1ZXMucHVzaChuZXdPYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdPYmouaWZudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goaW5kZXggKyAnID0gaWZudWxsKCAnICsgaW5kZXggKyAnLDApICsgPycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3T2JqLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goaW5kZXggKyAnID0gJyArIGluZGV4ICsgbmV3T2JqLm9wZXJhdG9yICsgJyA/Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3FsQmluZHMucHVzaChpbmRleCArICcgPSA/Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goaW5kZXggKyAnID0gPycpO1xuICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5wdXNoKGJpbmRpbmdzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5kZXggaW4gd2hlcmUpIHtcbiAgICAgICBpZiAod2hlcmUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdoZXJlW2luZGV4XSA9PT0gJ29iamVjdCcgICYmIHdoZXJlW2luZGV4XSAhPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgc3FsS2V5cy5wdXNoKGluZGV4ICsgJyAnICsgd2hlcmVbaW5kZXhdLm9wZXJhdG9yICsgJyA/Jyk7XG4gICAgICAgICAgICAgICAgc3FsVmFsdWVzLnB1c2god2hlcmVbaW5kZXhdLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3FsS2V5cy5wdXNoKGluZGV4ICsgJyA9ID8nKTtcbiAgICAgICAgICAgICAgICBzcWxWYWx1ZXMucHVzaCh3aGVyZVtpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgIH1cbiAgICB9XG5cbiAgICBzcWwgPSBzcWwgKyBzcWxCaW5kcy5qb2luKCcsJykgKyAnIHdoZXJlICcgKyBzcWxLZXlzLmpvaW4oJyBhbmQgJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGIudHJhbnNhY3Rpb24odHJhbnNhY3Rpb24gPT4ge1xuICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHNxbCwgc3FsVmFsdWVzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCBlcnJvcjogU3FsRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBkcm9wVGFibGUgKHRhYmxlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29udCA9IDE7XG5cbiAgICBjb250ID0gdGFibGVzLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGFibGVzLnNvbWUoIHRhYmxlID0+IHtcbiAgICAgICAgaWYgKGNvbnQgIT09IDApIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5KCdEUk9QIFRBQkxFICcgKyB0YWJsZSlcbiAgICAgICAgICAudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udCA9PT0gMSApIHsgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgeyBjb250LS07IH1cbiAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgY29udCA9IDA7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoQWxsKHJlc3VsdDogU3FsUmVzdWx0U2V0KTogb2JqZWN0W10ge1xuICAgIGxldCBvdXRwdXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0LnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0LnJvd3MuaXRlbShpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGZldGNoKHJlc3VsdDogU3FsUmVzdWx0U2V0KTogb2JqZWN0IHtcbiAgICAgIGxldCBvYmpldG8gPSB1bmRlZmluZWQsIG5ld09iaj0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIG9iamV0byA9IHJlc3VsdC5yb3dzLml0ZW0oMCk7XG4gICAgICAgICAgbmV3T2JqID0ge307XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamV0byk7XG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIGtleXMpIHtcbiAgICAgICAgICAgICAgbmV3T2JqW2tleXNba2V5XV0gPSBvYmpldG9ba2V5c1trZXldXTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICB9XG5cblxuICByb3dzQ291bnQocmVzdWx0OiBTcWxSZXN1bHRTZXQpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzLmxlbmd0aDtcbiAgfVxuXG4gIHRhYmxlRXhpc3RzKHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnc2VsZWN0ICBzcWwgZnJvbSBzcWxpdGVfbWFzdGVyICcgK1xuICAgICAgICAnd2hlcmUgdHlwZT1cXCd0YWJsZVxcJyBhbmQgbmFtZT1cXCcnICsgdGFibGUgKyAnXFwnJylcbiAgICAudGhlbihyZXN1bHQgPT4gICh0aGlzLnJvd3NDb3VudChyZXN1bHQpID09PSAxKSApO1xuICB9XG5cbiAgY29sdW1uRXhpc3RzKHRhYmxlOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlRXhpc3RzKHRhYmxlKVxuICAgICAgLnRoZW4oKHRhYmxlRERMKSA9PiB7XG4gICAgICAgIGlmICh0YWJsZURETCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5FeGlzdHMoKHRhYmxlRERMIGFzIHN0cmluZyksIGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfSk7XG4gIH1cblxuLyogUHJpdmF0ZSAqL1xuXG4gIHByaXZhdGUgZGVmQ29sdW1uKGNvbDogREJDb2x1bW4pOiBzdHJpbmcge1xuICAgIGxldCBjb2xTcWw6IHN0cmluZztcblxuICAgIGNvbFNxbCA9IGNvbC5uYW1lICsgJyAnICsgY29sLnR5cGU7XG4gICAgaWYgKCFjb2wuaXNOdWxsYWJsZSkge1xuICAgICAgY29sU3FsICs9ICAnIE5PVCBOVUxMICc7XG4gICAgfVxuICAgIGlmIChjb2wuZGVmYXVsdCkge1xuICAgICAgY29sU3FsICs9ICcgREVGQVVMVCAnICsgY29sLmRlZmF1bHQgKyAnICc7XG4gICAgfVxuICAgIGlmIChjb2wudHlwZSA9PT0gJ3RleHQnICYmIGNvbC5sZW5ndGgpIHtcbiAgICAgIGNvbFNxbCArPSBgIENPTlNUUkFJTlQgJHtjb2wubmFtZX1fbGVuZ3RoIENIRUNLICggYDtcbiAgICAgIGlmIChjb2wuaXNOdWxsYWJsZSkge1xuICAgICAgICBjb2xTcWwgKz0gYCR7Y29sLm5hbWV9IGlzIG51bGwgT1IgYDtcbiAgICAgIH1cbiAgICAgIGNvbFNxbCArPSBgbGVuZ3RoKCR7Y29sLm5hbWV9KSA8PSAke2NvbC5sZW5ndGh9IClgO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbFNxbDtcblxuICB9XG5cbiAgcHJpdmF0ZSBkZWZVbmlxdWUodW5pcXVlOiBEQlVuaXF1ZSk6IHN0cmluZyB7XG4gICAgbGV0IHVuaXFTcWw6IHN0cmluZztcblxuICAgIC8vIGRlcGVuZGUgZGVsIGVudG9ybm8sIHByb2R1Y2Npw7NuIG8gZGVzYXJyb2xsb1xuICAgIGNvbnN0IG9uQ29uZmxpY3RVbmlxdWUgPSAnb24gY29uZmxpY3QgcmVwbGFjZSc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1bmlxdWUuZmllbGRzKSApICB7XG4gICAgICB1bmlxU3FsID0gYCBDT05TVFJBSU5UICR7dW5pcXVlLm5hbWV9IFVOSVFVRSAoICR7dW5pcXVlLmZpZWxkcy5qb2luKCcsJyl9ICkgJHtvbkNvbmZsaWN0VW5pcXVlfSBgO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHVuaXF1ZS5maWVsZHMgPT09ICdzdHJpbmcnKSAgIHtcbiAgICAgIHVuaXFTcWwgPSBgIENPTlNUUkFJTlQgJHt1bmlxdWUubmFtZX0gVU5JUVVFICggJHt1bmlxdWUuZmllbGRzfSApICR7b25Db25mbGljdFVuaXF1ZX0gYDtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcVNxbDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmRm9yZWlnbihmb3JlOiBEQkZvcmVpZ24pOiBzdHJpbmcge1xuICAgIGxldCBmb3JlU3FsOiBzdHJpbmc7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JlLmZvcmVpZ25LZXkpICkgIHtcbiAgICAgIGZvcmVTcWwgPSBgIEZPUkVJR04gS0VZICggICR7Zm9yZS5mb3JlaWduS2V5LmpvaW4oJywnKX0gKSBgO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm9yZS5mb3JlaWduS2V5ID09PSAnc3RyaW5nJykgICB7XG4gICAgICBmb3JlU3FsID0gYCBGT1JFSUdOIEtFWSAoICAke2ZvcmUuZm9yZWlnbktleX0gKSBgO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcmUucHJpbWFyeUtleSkgKSAge1xuICAgICAgZm9yZVNxbCA9IGAgUkVGRVJFTkNFUyAke2ZvcmUucmVmZXJlbmNlVGFibGV9ICggICR7Zm9yZS5wcmltYXJ5S2V5LmpvaW4oJywnKX0gKSBgO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm9yZS5wcmltYXJ5S2V5ID09PSAnc3RyaW5nJykgICB7XG4gICAgICBmb3JlU3FsID0gYCBSRUZFUkVOQ0VTICR7Zm9yZS5yZWZlcmVuY2VUYWJsZX0gKCAgJHtmb3JlLnByaW1hcnlLZXl9ICkgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9yZVNxbDtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlRXhpc3RzKHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnc2VsZWN0ICBzcWwgZnJvbSBzcWxpdGVfbWFzdGVyICcgK1xuICAgICAgICAnd2hlcmUgdHlwZT1cXCd0YWJsZVxcJyBhbmQgbmFtZT1cXCcnICsgdGFibGUgKyAnXFwnJylcbiAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBpZiAodGhpcy5yb3dzQ291bnQocmVzdWx0KSA9PT0gMSkgeyByZXR1cm4gKHRoaXMuZmV0Y2gocmVzdWx0KSBhcyBhbnkpLnNxbCBhcyBzdHJpbmc7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sdW1uRXhpc3RzKHRhYmxlRERMOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodGFibGVEREwuaW5kZXhPZihjb2x1bW4pID09PSAtMSkgeyByZXR1cm4gZmFsc2U7IH0gZWxzZSB7ICByZXR1cm4gdHJ1ZTsgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb2x1bW4odGFibGU6IHN0cmluZywgY29sOiBEQkNvbHVtbik6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgY29sU3FsID0gdGhpcy5kZWZDb2x1bW4oY29sKTtcbiAgICBjb25zdCBxdWVyeSA9ICdhbHRlciBUQUJMRSAnICsgdGFibGUgKyAnIGFkZCBDT0xVTU4gJyArIGNvbFNxbDtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShxdWVyeSk7XG4gIH1cblxufVxuXG5cblxuZXhwb3J0IGNvbnN0IERCX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYkNvbmZpZz4oJ2RiV3JhcHBlckNvbmZpZycpO1xuZXhwb3J0IGNvbnN0IERCX1NDSEVNQSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEQlNjaGVtYT4oJ2RiV3JhcHBlclNjaGVtYScpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdERiQ29uZmlnKCk6IERiQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBkYk5hbWU6ICdkYi5zcWxpdGUnLFxuICAgIGxvY2F0aW9uOiAnZGVmYXVsdCcsXG4gICAgaW9zRGF0YWJhc2VMb2NhdGlvbjogJ0xpYnJhcnknXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRGJXcmFwcGVyKGRiQ29uZmlnOiBEYkNvbmZpZywgZGJTY2hlbWE/OiBEQlNjaGVtYSk6IERiV3JhcHBlclNlcnZpY2Uge1xuICBjb25zdCBjb25maWcgPSAhIWRiQ29uZmlnID8gZGJDb25maWcgOiBnZXREZWZhdWx0RGJDb25maWcoKTtcbiAgcmV0dXJuIG5ldyBEYldyYXBwZXJTZXJ2aWNlKGNvbmZpZywgZGJTY2hlbWEpO1xufVxuXG5cblxuIl19
@@ -22,6 +22,7 @@ class DbWrapperService {
22
22
  this._dbName = dbConfig.dbName;
23
23
  this._location = dbConfig.location || 'default';
24
24
  this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
25
+ this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';
25
26
  const window = (new WindowService()).nativeWindow;
26
27
  if (dbSchema) {
27
28
  this.schema = dbSchema;
@@ -54,6 +55,7 @@ class DbWrapperService {
54
55
  this.db = window.sqlitePlugin.openDatabase({
55
56
  name: this._dbName,
56
57
  location: this._location,
58
+ androidDatabaseProvider: this._androidDatabaseProvider,
57
59
  androidLockWorkaround: 1
58
60
  });
59
61
  if (dbSchema) {
@@ -1 +1 @@
1
- {"version":3,"file":"db-wrapper.mjs","sources":["../../../projects/db-wrapper/src/lib/window.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.module.ts","../../../projects/db-wrapper/src/lib/db-wrapper.models.ts","../../../projects/db-wrapper/src/public-api.ts","../../../projects/db-wrapper/src/db-wrapper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n\n get nativeWindow(): any {\n return _window();\n }\n}\n\nfunction _window(): any {\n // Return the global native browser window object\n return typeof window !== 'undefined' ? window : undefined;\n}","import { InjectionToken } from '@angular/core';\nimport { WindowService } from './window.service';\nimport { DBTable, DbConfig, DBSchema, DBView,\n DBColumn, DBUnique, DBForeign, SqlTransaction, SqlResultSet, SqlError, DefaultType } from './db-wrapper.models';\n\nexport class DbWrapperService {\n private _dbName: string;\n private _location: string;\n private _iosDatabaseLocation: string;\n private _readyPromise: Promise<void>;\n schema: DBSchema;\n db: any;\n\n constructor(dbConfig: DbConfig, dbSchema?: DBSchema) {\n\n this._dbName = dbConfig.dbName;\n this._location = dbConfig.location || 'default';\n this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';\n const window = (new WindowService()).nativeWindow;\n if (dbSchema) { this.schema = dbSchema; }\n this._readyPromise = new Promise ( (resolve, reject) => {\n if (typeof window.cordova === 'undefined') {\n setTimeout( () => {\n this.init(dbSchema).then (\n () => {\n resolve();\n } )\n .catch ( (err) => {\n reject(err);\n } );\n }, 500);\n } else {\n document.addEventListener('deviceready', () => {\n console.log('dbWrapper: device ready.');\n this.initDevice(dbSchema).then ( () => resolve() ).catch ( (err) => reject(err) );\n });\n }\n });\n }\n\n ready(): Promise<void> {\n return this._readyPromise;\n }\n\n initDevice(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise( (resolve, reject) => {\n this.db = window.sqlitePlugin.openDatabase({\n name: this._dbName,\n location: this._location,\n androidLockWorkaround: 1\n });\n\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then(() => { resolve(); });\n } else {\n resolve();\n }\n });\n }\n\n init(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise ( (resolve, reject) => {\n this.db = window.openDatabase(this._dbName, '1.0', 'database', -1);\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then( () => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n generate(schema: DBSchema): Promise<any> {\n\n const sentences = [];\n this.schema = schema;\n\n if (schema.tables) {\n schema.tables.forEach(table => {\n sentences.push(this.createTable(table));\n });\n }\n if (schema.views) {\n schema.views.forEach( view => {\n sentences.push(this.createView(view));\n });\n }\n if (sentences.length === 0) {\n throw new Error('Esquema de la base de datos vacia.');\n }\n return Promise.all(sentences);\n }\n\n async createTable(table: DBTable): Promise<any> {\n let sql = '', onConflictPrimary;\n const sentences = [], newColumns = []\n\n const tableDDL = await this._tableExists(table.name);\n if (tableDDL) {\n table.columns.forEach( col => {\n if (!this._columnExists(tableDDL as string, col.name) ) {\n newColumns.push(this.addColumn(table.name, col));\n }\n });\n } else {\n table.columns.forEach( col => {\n sentences.push(this.defColumn(col));\n });\n }\n onConflictPrimary = 'on conflict fail';\n\n if (Array.isArray(table.primary) ) {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary );\n }\n if (typeof table.primary === 'string') {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary );\n }\n if (table.uniques) {\n table.uniques.forEach( uniq => {\n sentences.push(this.defUnique(uniq));\n });\n }\n\n if (table.foreigns) {\n table.foreigns.forEach ( fore => {\n sentences.push(this.defForeign(fore));\n });\n }\n\n if (tableDDL && newColumns.length !== 0) {\n return Promise.all(newColumns)\n .then( () => { console.log(`Table ${table.name} altered.`); } )\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n\n } else if (!tableDDL) {\n sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';\n return this.query(sql)\n .then( () => { console.log(`Table ${table.name} created.`); })\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n } else {\n return Promise.resolve().then( () => { console.log(`Table ${table.name} initialized.`); });\n }\n }\n\n\n createView(view: DBView): Promise<any> {\n let sql: string;\n\n sql = 'CREATE VIEW IF NOT EXISTS ' + view.name\n + ' AS ' + view.sql;\n\n return this.query(sql);\n\n }\n\n getSchemaTable(tableName: string): DBTable {\n let res: DBTable;\n\n this.schema.tables.forEach( table => {\n if (table.name === tableName) {\n res = table;\n }\n });\n return res;\n\n }\n\n getUniquesTable(table: DBTable): object {\n let res: {};\n table.uniques.forEach(uniq => {\n res[uniq.name] = uniq;\n });\n return res;\n }\n\n query(query: string, bindings: any[]= []): Promise<SqlResultSet> {\n return new Promise((resolve, reject) => {\n if (query.indexOf('select') === 0) {\n this.db.readTransaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n } else {\n this.db.transaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n }\n });\n }\n\n Count(query: string, bindings: any[]= []): Promise<number> {\n return this.query(query, bindings).then(rows => {\n return this.rowsCount(rows);\n });\n }\n\n insert(table: string, bindings: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [] ;\n\n sql = sql + 'insert into ' + table + ' ';\n\n for (const index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n sqlKeys.push(index);\n sqlValues.push(bindings[index]);\n sqlBinds.push('?');\n }\n }\n\n sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n update(table: string, bindings: {}, where: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys =[], sqlValues = [] ;\n\n sql = sql + 'update ' + table + ' set ';\n\n for (let index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n let newObj = bindings[index];\n if (typeof newObj === 'object' && newObj !== null) {\n sqlValues.push(newObj.value);\n if (newObj.ifnull) {\n sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');\n } else if (newObj.operator) {\n sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');\n } else {\n sqlBinds.push(index + ' = ?');\n }\n\n } else {\n sqlBinds.push(index + ' = ?');\n sqlValues.push(bindings[index]);\n\n }\n }\n }\n\n for (let index in where) {\n if (where.hasOwnProperty(index)) {\n if (typeof where[index] === 'object' && where[index] !== null){\n sqlKeys.push(index + ' ' + where[index].operator + ' ?');\n sqlValues.push(where[index].value);\n } else {\n sqlKeys.push(index + ' = ?');\n sqlValues.push(where[index]);\n }\n }\n }\n\n sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n dropTable (tables: string[]): Promise<void> {\n let cont = 1;\n\n cont = tables.length;\n return new Promise((resolve, reject) => {\n tables.some( table => {\n if (cont !== 0) {\n this.query('DROP TABLE ' + table)\n .then( () => {\n if (cont === 1 ) { resolve();\n } else { cont--; }\n }, err => {\n cont = 0;\n reject(err);\n return true;\n });\n return false;\n }\n });\n })\n }\n\n fetchAll(result: SqlResultSet): object[] {\n let output = [];\n\n for (let i = 0; i < result.rows.length; i++) {\n output.push(result.rows.item(i));\n }\n\n return output;\n }\n\n fetch(result: SqlResultSet): object {\n let objeto = undefined, newObj= undefined;\n if (result.rows.length !== 0) {\n objeto = result.rows.item(0);\n newObj = {};\n const keys = Object.keys(objeto);\n for (let key in keys) {\n newObj[keys[key]] = objeto[keys[key]];\n }\n }\n return newObj;\n }\n\n\n rowsCount(result: SqlResultSet): number {\n return result.rows.length;\n }\n\n tableExists(table: string): Promise<boolean> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => (this.rowsCount(result) === 1) );\n }\n\n columnExists(table: string, column: string): Promise<boolean> {\n return this._tableExists(table)\n .then((tableDDL) => {\n if (tableDDL) {\n return this._columnExists((tableDDL as string), column);\n } else { return false; }\n });\n }\n\n/* Private */\n\n private defColumn(col: DBColumn): string {\n let colSql: string;\n\n colSql = col.name + ' ' + col.type;\n if (!col.isNullable) {\n colSql += ' NOT NULL ';\n }\n if (col.default) {\n colSql += ' DEFAULT ' + col.default + ' ';\n }\n if (col.type === 'text' && col.length) {\n colSql += ` CONSTRAINT ${col.name}_length CHECK ( `;\n if (col.isNullable) {\n colSql += `${col.name} is null OR `;\n }\n colSql += `length(${col.name}) <= ${col.length} )`;\n\n }\n\n return colSql;\n\n }\n\n private defUnique(unique: DBUnique): string {\n let uniqSql: string;\n\n // depende del entorno, producción o desarrollo\n const onConflictUnique = 'on conflict replace';\n\n if (Array.isArray(unique.fields) ) {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields.join(',')} ) ${onConflictUnique} `;\n }\n if (typeof unique.fields === 'string') {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields} ) ${onConflictUnique} `;\n }\n\n return uniqSql;\n }\n\n private defForeign(fore: DBForeign): string {\n let foreSql: string;\n\n if (Array.isArray(fore.foreignKey) ) {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey.join(',')} ) `;\n }\n\n if (typeof fore.foreignKey === 'string') {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey} ) `;\n }\n\n if (Array.isArray(fore.primaryKey) ) {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey.join(',')} ) `;\n }\n\n if (typeof fore.primaryKey === 'string') {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey} ) `;\n }\n\n return foreSql;\n }\n\n private _tableExists(table: string): Promise<boolean | string> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => {\n if (this.rowsCount(result) === 1) { return (this.fetch(result) as any).sql as string; } else { return false; }\n });\n }\n\n private _columnExists(tableDDL: string, column: string): boolean {\n\n if (tableDDL.indexOf(column) === -1) { return false; } else { return true; }\n }\n\n private addColumn(table: string, col: DBColumn): Promise<any> {\n const colSql = this.defColumn(col);\n const query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;\n return this.query(query);\n }\n\n}\n\n\n\nexport const DB_CONFIG = new InjectionToken<DbConfig>('dbWrapperConfig');\nexport const DB_SCHEMA = new InjectionToken<DBSchema>('dbWrapperSchema');\n\nexport function getDefaultDbConfig(): DbConfig {\n return {\n dbName: 'db.sqlite',\n location: 'default',\n iosDatabaseLocation: 'Library'\n };\n}\n\nexport function provideDbWrapper(dbConfig: DbConfig, dbSchema?: DBSchema): DbWrapperService {\n const config = !!dbConfig ? dbConfig : getDefaultDbConfig();\n return new DbWrapperService(config, dbSchema);\n}\n\n\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DbConfig, DBSchema } from './db-wrapper.models';\nimport { DB_CONFIG, provideDbWrapper, DbWrapperService, DB_SCHEMA } from './db-wrapper.service';\n\n@NgModule()\nexport class DbWrapperModule {\n static forRoot(dbConfig: DbConfig, schema?: DBSchema): ModuleWithProviders<DbWrapperModule>{\n return {\n ngModule: DbWrapperModule,\n providers: [\n { provide: DB_CONFIG, useValue: dbConfig },\n { provide: DB_SCHEMA, useValue: schema },\n { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }\n ]\n };\n }\n\n}\n","\nexport enum DataType {\n Integer = 'integer',\n Int = 'integer',\n TinyInt = 'integer',\n SmallInt = 'integer',\n BigInt = 'integer',\n Text = 'text',\n Char = 'text',\n NChar = 'text',\n VarChar = 'text',\n NVarChar = 'text',\n CLOB = 'text',\n BLOB = 'blob',\n Real = 'real',\n Double = 'real',\n Decimal = 'real',\n Float = 'real',\n Boolean = 'integer',\n DateTime = 'text',\n Date = 'text'\n\n}\n\nexport enum DefaultType {\n Integer = '0',\n Int = '0',\n TinyInt = '0',\n SmallInt = '0',\n BigInt = '0',\n Text = '\\'\\'',\n Char = '\\'\\'',\n NChar = '\\'\\'',\n VarChar = '\\'\\'',\n NVarChar = '\\'\\'',\n CLOB = '\\'\\'',\n BLOB = '0',\n Real = '0.0',\n Double = '0.0',\n Decimal = '0.0',\n Float = '0.0',\n Boolean = '0',\n DateTime = '(datetime(\\'now\\', \\'localtime\\'))',\n Date = '(date(\\'now\\', \\'localtime\\'))'\n}\n\n\nexport interface SqlTransaction {\n /**\n * Executes SQL statement via current transaction.\n * @param sql SQL statement to execute.\n * @param params SQL stetement arguments.\n * @param successCallback Called in case of query has been successfully done.\n * @param errorCallback Called, when query fails. Return false to continue transaction; true or no return to rollback.\n */\n executeSql(sql: string,\n params?: any[],\n successCallback?: (transaction: SqlTransaction, resultSet: SqlResultSet) => void,\n errorCallback?: (transaction: SqlTransaction, error: SqlError) => any): void;\n}\n\nexport interface SqlResultSet {\n insertId: number;\n rowsAffected: number;\n rows: SqlResultSetRowList;\n}\n\nexport interface SqlResultSetRowList {\n length: number;\n item(index: number): Object;\n}\n\nexport interface SqlError {\n code: number;\n message: string;\n}\n\n/**\n * Interfaz con la configuración de websql\n */\nexport interface DbConfig {\n /**\n * nombre de la base de datos\n */\n dbName: string;\n /**\n * default 'default'\n */\n location?: string;\n /**\n * default 'Library'\n */\n iosDatabaseLocation?: string;\n}\n\n/**\n * Intefaz para definir un constraint unique\n *\n */\nexport interface DBUnique {\n name: string; /** nombre */\n fields: string | string[]; /** lista de campos */\n}\n\nexport interface DBForeign {\n name: string;\n foreignKey: string | string[];\n referenceTable: string;\n primaryKey: string | string[];\n}\n\nexport interface DBColumn {\n name: string;\n type: DataType;\n length?: number;\n isNullable?: boolean;\n default?: DefaultType | string;\n}\n\nexport interface DBTable {\n name: string;\n columns: DBColumn[];\n primary: string | string[];\n uniques?: DBUnique[];\n foreigns?: DBForeign[];\n sync?: string;\n}\n\n\nexport interface DBView {\n name: string;\n sql: string;\n}\n\nexport interface DBSchema {\n tables: DBTable[],\n views?: DBView[]\n}\n\n","\n\n/*\n * Public API Surface of db-wrapper\n */\n\nexport * from './lib/db-wrapper.service';\nexport * from './lib/db-wrapper.module';\nexport * from './lib/db-wrapper.models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-wrapper.mjs","sources":["../../../projects/db-wrapper/src/lib/window.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.module.ts","../../../projects/db-wrapper/src/lib/db-wrapper.models.ts","../../../projects/db-wrapper/src/public-api.ts","../../../projects/db-wrapper/src/db-wrapper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n\n get nativeWindow(): any {\n return _window();\n }\n}\n\nfunction _window(): any {\n // Return the global native browser window object\n return typeof window !== 'undefined' ? window : undefined;\n}","import { InjectionToken } from '@angular/core';\nimport { WindowService } from './window.service';\nimport { DBTable, DbConfig, DBSchema, DBView,\n DBColumn, DBUnique, DBForeign, SqlTransaction, SqlResultSet, SqlError, DefaultType } from './db-wrapper.models';\n\nexport class DbWrapperService {\n private _dbName: string;\n private _location: string;\n private _iosDatabaseLocation: string;\n private _androidDatabaseProvider: string;\n private _readyPromise: Promise<void>;\n schema: DBSchema;\n db: any;\n\n constructor(dbConfig: DbConfig, dbSchema?: DBSchema) {\n\n this._dbName = dbConfig.dbName;\n this._location = dbConfig.location || 'default';\n this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';\n this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';\n const window = (new WindowService()).nativeWindow;\n if (dbSchema) { this.schema = dbSchema; }\n this._readyPromise = new Promise ( (resolve, reject) => {\n if (typeof window.cordova === 'undefined') {\n setTimeout( () => {\n this.init(dbSchema).then (\n () => {\n resolve();\n } )\n .catch ( (err) => {\n reject(err);\n } );\n }, 500);\n } else {\n document.addEventListener('deviceready', () => {\n console.log('dbWrapper: device ready.');\n this.initDevice(dbSchema).then ( () => resolve() ).catch ( (err) => reject(err) );\n });\n }\n });\n }\n\n ready(): Promise<void> {\n return this._readyPromise;\n }\n\n initDevice(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise( (resolve, reject) => {\n this.db = window.sqlitePlugin.openDatabase({\n name: this._dbName,\n location: this._location,\n androidDatabaseProvider: this._androidDatabaseProvider,\n androidLockWorkaround: 1\n });\n\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then(() => { resolve(); });\n } else {\n resolve();\n }\n });\n }\n\n init(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise ( (resolve, reject) => {\n this.db = window.openDatabase(this._dbName, '1.0', 'database', -1);\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then( () => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n generate(schema: DBSchema): Promise<any> {\n\n const sentences = [];\n this.schema = schema;\n\n if (schema.tables) {\n schema.tables.forEach(table => {\n sentences.push(this.createTable(table));\n });\n }\n if (schema.views) {\n schema.views.forEach( view => {\n sentences.push(this.createView(view));\n });\n }\n if (sentences.length === 0) {\n throw new Error('Esquema de la base de datos vacia.');\n }\n return Promise.all(sentences);\n }\n\n async createTable(table: DBTable): Promise<any> {\n let sql = '', onConflictPrimary;\n const sentences = [], newColumns = []\n\n const tableDDL = await this._tableExists(table.name);\n if (tableDDL) {\n table.columns.forEach( col => {\n if (!this._columnExists(tableDDL as string, col.name) ) {\n newColumns.push(this.addColumn(table.name, col));\n }\n });\n } else {\n table.columns.forEach( col => {\n sentences.push(this.defColumn(col));\n });\n }\n onConflictPrimary = 'on conflict fail';\n\n if (Array.isArray(table.primary) ) {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary );\n }\n if (typeof table.primary === 'string') {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary );\n }\n if (table.uniques) {\n table.uniques.forEach( uniq => {\n sentences.push(this.defUnique(uniq));\n });\n }\n\n if (table.foreigns) {\n table.foreigns.forEach ( fore => {\n sentences.push(this.defForeign(fore));\n });\n }\n\n if (tableDDL && newColumns.length !== 0) {\n return Promise.all(newColumns)\n .then( () => { console.log(`Table ${table.name} altered.`); } )\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n\n } else if (!tableDDL) {\n sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';\n return this.query(sql)\n .then( () => { console.log(`Table ${table.name} created.`); })\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n } else {\n return Promise.resolve().then( () => { console.log(`Table ${table.name} initialized.`); });\n }\n }\n\n\n createView(view: DBView): Promise<any> {\n let sql: string;\n\n sql = 'CREATE VIEW IF NOT EXISTS ' + view.name\n + ' AS ' + view.sql;\n\n return this.query(sql);\n\n }\n\n getSchemaTable(tableName: string): DBTable {\n let res: DBTable;\n\n this.schema.tables.forEach( table => {\n if (table.name === tableName) {\n res = table;\n }\n });\n return res;\n\n }\n\n getUniquesTable(table: DBTable): object {\n let res: {};\n table.uniques.forEach(uniq => {\n res[uniq.name] = uniq;\n });\n return res;\n }\n\n query(query: string, bindings: any[]= []): Promise<SqlResultSet> {\n return new Promise((resolve, reject) => {\n if (query.indexOf('select') === 0) {\n this.db.readTransaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n } else {\n this.db.transaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n }\n });\n }\n\n Count(query: string, bindings: any[]= []): Promise<number> {\n return this.query(query, bindings).then(rows => {\n return this.rowsCount(rows);\n });\n }\n\n insert(table: string, bindings: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [] ;\n\n sql = sql + 'insert into ' + table + ' ';\n\n for (const index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n sqlKeys.push(index);\n sqlValues.push(bindings[index]);\n sqlBinds.push('?');\n }\n }\n\n sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n update(table: string, bindings: {}, where: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys =[], sqlValues = [] ;\n\n sql = sql + 'update ' + table + ' set ';\n\n for (let index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n let newObj = bindings[index];\n if (typeof newObj === 'object' && newObj !== null) {\n sqlValues.push(newObj.value);\n if (newObj.ifnull) {\n sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');\n } else if (newObj.operator) {\n sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');\n } else {\n sqlBinds.push(index + ' = ?');\n }\n\n } else {\n sqlBinds.push(index + ' = ?');\n sqlValues.push(bindings[index]);\n\n }\n }\n }\n\n for (let index in where) {\n if (where.hasOwnProperty(index)) {\n if (typeof where[index] === 'object' && where[index] !== null){\n sqlKeys.push(index + ' ' + where[index].operator + ' ?');\n sqlValues.push(where[index].value);\n } else {\n sqlKeys.push(index + ' = ?');\n sqlValues.push(where[index]);\n }\n }\n }\n\n sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n dropTable (tables: string[]): Promise<void> {\n let cont = 1;\n\n cont = tables.length;\n return new Promise((resolve, reject) => {\n tables.some( table => {\n if (cont !== 0) {\n this.query('DROP TABLE ' + table)\n .then( () => {\n if (cont === 1 ) { resolve();\n } else { cont--; }\n }, err => {\n cont = 0;\n reject(err);\n return true;\n });\n return false;\n }\n });\n })\n }\n\n fetchAll(result: SqlResultSet): object[] {\n let output = [];\n\n for (let i = 0; i < result.rows.length; i++) {\n output.push(result.rows.item(i));\n }\n\n return output;\n }\n\n fetch(result: SqlResultSet): object {\n let objeto = undefined, newObj= undefined;\n if (result.rows.length !== 0) {\n objeto = result.rows.item(0);\n newObj = {};\n const keys = Object.keys(objeto);\n for (let key in keys) {\n newObj[keys[key]] = objeto[keys[key]];\n }\n }\n return newObj;\n }\n\n\n rowsCount(result: SqlResultSet): number {\n return result.rows.length;\n }\n\n tableExists(table: string): Promise<boolean> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => (this.rowsCount(result) === 1) );\n }\n\n columnExists(table: string, column: string): Promise<boolean> {\n return this._tableExists(table)\n .then((tableDDL) => {\n if (tableDDL) {\n return this._columnExists((tableDDL as string), column);\n } else { return false; }\n });\n }\n\n/* Private */\n\n private defColumn(col: DBColumn): string {\n let colSql: string;\n\n colSql = col.name + ' ' + col.type;\n if (!col.isNullable) {\n colSql += ' NOT NULL ';\n }\n if (col.default) {\n colSql += ' DEFAULT ' + col.default + ' ';\n }\n if (col.type === 'text' && col.length) {\n colSql += ` CONSTRAINT ${col.name}_length CHECK ( `;\n if (col.isNullable) {\n colSql += `${col.name} is null OR `;\n }\n colSql += `length(${col.name}) <= ${col.length} )`;\n\n }\n\n return colSql;\n\n }\n\n private defUnique(unique: DBUnique): string {\n let uniqSql: string;\n\n // depende del entorno, producción o desarrollo\n const onConflictUnique = 'on conflict replace';\n\n if (Array.isArray(unique.fields) ) {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields.join(',')} ) ${onConflictUnique} `;\n }\n if (typeof unique.fields === 'string') {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields} ) ${onConflictUnique} `;\n }\n\n return uniqSql;\n }\n\n private defForeign(fore: DBForeign): string {\n let foreSql: string;\n\n if (Array.isArray(fore.foreignKey) ) {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey.join(',')} ) `;\n }\n\n if (typeof fore.foreignKey === 'string') {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey} ) `;\n }\n\n if (Array.isArray(fore.primaryKey) ) {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey.join(',')} ) `;\n }\n\n if (typeof fore.primaryKey === 'string') {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey} ) `;\n }\n\n return foreSql;\n }\n\n private _tableExists(table: string): Promise<boolean | string> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => {\n if (this.rowsCount(result) === 1) { return (this.fetch(result) as any).sql as string; } else { return false; }\n });\n }\n\n private _columnExists(tableDDL: string, column: string): boolean {\n\n if (tableDDL.indexOf(column) === -1) { return false; } else { return true; }\n }\n\n private addColumn(table: string, col: DBColumn): Promise<any> {\n const colSql = this.defColumn(col);\n const query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;\n return this.query(query);\n }\n\n}\n\n\n\nexport const DB_CONFIG = new InjectionToken<DbConfig>('dbWrapperConfig');\nexport const DB_SCHEMA = new InjectionToken<DBSchema>('dbWrapperSchema');\n\nexport function getDefaultDbConfig(): DbConfig {\n return {\n dbName: 'db.sqlite',\n location: 'default',\n iosDatabaseLocation: 'Library'\n };\n}\n\nexport function provideDbWrapper(dbConfig: DbConfig, dbSchema?: DBSchema): DbWrapperService {\n const config = !!dbConfig ? dbConfig : getDefaultDbConfig();\n return new DbWrapperService(config, dbSchema);\n}\n\n\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DbConfig, DBSchema } from './db-wrapper.models';\nimport { DB_CONFIG, provideDbWrapper, DbWrapperService, DB_SCHEMA } from './db-wrapper.service';\n\n@NgModule()\nexport class DbWrapperModule {\n static forRoot(dbConfig: DbConfig, schema?: DBSchema): ModuleWithProviders<DbWrapperModule>{\n return {\n ngModule: DbWrapperModule,\n providers: [\n { provide: DB_CONFIG, useValue: dbConfig },\n { provide: DB_SCHEMA, useValue: schema },\n { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }\n ]\n };\n }\n\n}\n","\nexport enum DataType {\n Integer = 'integer',\n Int = 'integer',\n TinyInt = 'integer',\n SmallInt = 'integer',\n BigInt = 'integer',\n Text = 'text',\n Char = 'text',\n NChar = 'text',\n VarChar = 'text',\n NVarChar = 'text',\n CLOB = 'text',\n BLOB = 'blob',\n Real = 'real',\n Double = 'real',\n Decimal = 'real',\n Float = 'real',\n Boolean = 'integer',\n DateTime = 'text',\n Date = 'text'\n\n}\n\nexport enum DefaultType {\n Integer = '0',\n Int = '0',\n TinyInt = '0',\n SmallInt = '0',\n BigInt = '0',\n Text = '\\'\\'',\n Char = '\\'\\'',\n NChar = '\\'\\'',\n VarChar = '\\'\\'',\n NVarChar = '\\'\\'',\n CLOB = '\\'\\'',\n BLOB = '0',\n Real = '0.0',\n Double = '0.0',\n Decimal = '0.0',\n Float = '0.0',\n Boolean = '0',\n DateTime = '(datetime(\\'now\\', \\'localtime\\'))',\n Date = '(date(\\'now\\', \\'localtime\\'))'\n}\n\n\nexport interface SqlTransaction {\n /**\n * Executes SQL statement via current transaction.\n * @param sql SQL statement to execute.\n * @param params SQL stetement arguments.\n * @param successCallback Called in case of query has been successfully done.\n * @param errorCallback Called, when query fails. Return false to continue transaction; true or no return to rollback.\n */\n executeSql(sql: string,\n params?: any[],\n successCallback?: (transaction: SqlTransaction, resultSet: SqlResultSet) => void,\n errorCallback?: (transaction: SqlTransaction, error: SqlError) => any): void;\n}\n\nexport interface SqlResultSet {\n insertId: number;\n rowsAffected: number;\n rows: SqlResultSetRowList;\n}\n\nexport interface SqlResultSetRowList {\n length: number;\n item(index: number): Object;\n}\n\nexport interface SqlError {\n code: number;\n message: string;\n}\n\n/**\n * Interfaz con la configuración de websql\n */\nexport interface DbConfig {\n /**\n * nombre de la base de datos\n */\n dbName: string;\n /**\n * default 'default'\n */\n location?: string;\n /**\n * default 'Library'\n */\n iosDatabaseLocation?: string;\n /**\n * default 'default'\n */\n androidDatabaseProvider?: string; \n}\n\n/**\n * Intefaz para definir un constraint unique\n *\n */\nexport interface DBUnique {\n name: string; /** nombre */\n fields: string | string[]; /** lista de campos */\n}\n\nexport interface DBForeign {\n name: string;\n foreignKey: string | string[];\n referenceTable: string;\n primaryKey: string | string[];\n}\n\nexport interface DBColumn {\n name: string;\n type: DataType;\n length?: number;\n isNullable?: boolean;\n default?: DefaultType | string;\n}\n\nexport interface DBTable {\n name: string;\n columns: DBColumn[];\n primary: string | string[];\n uniques?: DBUnique[];\n foreigns?: DBForeign[];\n sync?: string;\n}\n\n\nexport interface DBView {\n name: string;\n sql: string;\n}\n\nexport interface DBSchema {\n tables: DBTable[],\n views?: DBView[]\n}\n\n","\n\n/*\n * Public API Surface of db-wrapper\n */\n\nexport * from './lib/db-wrapper.service';\nexport * from './lib/db-wrapper.module';\nexport * from './lib/db-wrapper.models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ class DbWrapperService {
21
21
  this._dbName = dbConfig.dbName;
22
22
  this._location = dbConfig.location || 'default';
23
23
  this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
24
+ this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';
24
25
  const window = (new WindowService()).nativeWindow;
25
26
  if (dbSchema) {
26
27
  this.schema = dbSchema;
@@ -53,6 +54,7 @@ class DbWrapperService {
53
54
  this.db = window.sqlitePlugin.openDatabase({
54
55
  name: this._dbName,
55
56
  location: this._location,
57
+ androidDatabaseProvider: this._androidDatabaseProvider,
56
58
  androidLockWorkaround: 1
57
59
  });
58
60
  if (dbSchema) {
@@ -1 +1 @@
1
- {"version":3,"file":"db-wrapper.mjs","sources":["../../../projects/db-wrapper/src/lib/window.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.module.ts","../../../projects/db-wrapper/src/lib/db-wrapper.models.ts","../../../projects/db-wrapper/src/public-api.ts","../../../projects/db-wrapper/src/db-wrapper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n\n get nativeWindow(): any {\n return _window();\n }\n}\n\nfunction _window(): any {\n // Return the global native browser window object\n return typeof window !== 'undefined' ? window : undefined;\n}","import { InjectionToken } from '@angular/core';\nimport { WindowService } from './window.service';\nimport { DBTable, DbConfig, DBSchema, DBView,\n DBColumn, DBUnique, DBForeign, SqlTransaction, SqlResultSet, SqlError, DefaultType } from './db-wrapper.models';\n\nexport class DbWrapperService {\n private _dbName: string;\n private _location: string;\n private _iosDatabaseLocation: string;\n private _readyPromise: Promise<void>;\n schema: DBSchema;\n db: any;\n\n constructor(dbConfig: DbConfig, dbSchema?: DBSchema) {\n\n this._dbName = dbConfig.dbName;\n this._location = dbConfig.location || 'default';\n this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';\n const window = (new WindowService()).nativeWindow;\n if (dbSchema) { this.schema = dbSchema; }\n this._readyPromise = new Promise ( (resolve, reject) => {\n if (typeof window.cordova === 'undefined') {\n setTimeout( () => {\n this.init(dbSchema).then (\n () => {\n resolve();\n } )\n .catch ( (err) => {\n reject(err);\n } );\n }, 500);\n } else {\n document.addEventListener('deviceready', () => {\n console.log('dbWrapper: device ready.');\n this.initDevice(dbSchema).then ( () => resolve() ).catch ( (err) => reject(err) );\n });\n }\n });\n }\n\n ready(): Promise<void> {\n return this._readyPromise;\n }\n\n initDevice(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise( (resolve, reject) => {\n this.db = window.sqlitePlugin.openDatabase({\n name: this._dbName,\n location: this._location,\n androidLockWorkaround: 1\n });\n\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then(() => { resolve(); });\n } else {\n resolve();\n }\n });\n }\n\n init(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise ( (resolve, reject) => {\n this.db = window.openDatabase(this._dbName, '1.0', 'database', -1);\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then( () => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n generate(schema: DBSchema): Promise<any> {\n\n const sentences = [];\n this.schema = schema;\n\n if (schema.tables) {\n schema.tables.forEach(table => {\n sentences.push(this.createTable(table));\n });\n }\n if (schema.views) {\n schema.views.forEach( view => {\n sentences.push(this.createView(view));\n });\n }\n if (sentences.length === 0) {\n throw new Error('Esquema de la base de datos vacia.');\n }\n return Promise.all(sentences);\n }\n\n async createTable(table: DBTable): Promise<any> {\n let sql = '', onConflictPrimary;\n const sentences = [], newColumns = []\n\n const tableDDL = await this._tableExists(table.name);\n if (tableDDL) {\n table.columns.forEach( col => {\n if (!this._columnExists(tableDDL as string, col.name) ) {\n newColumns.push(this.addColumn(table.name, col));\n }\n });\n } else {\n table.columns.forEach( col => {\n sentences.push(this.defColumn(col));\n });\n }\n onConflictPrimary = 'on conflict fail';\n\n if (Array.isArray(table.primary) ) {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary );\n }\n if (typeof table.primary === 'string') {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary );\n }\n if (table.uniques) {\n table.uniques.forEach( uniq => {\n sentences.push(this.defUnique(uniq));\n });\n }\n\n if (table.foreigns) {\n table.foreigns.forEach ( fore => {\n sentences.push(this.defForeign(fore));\n });\n }\n\n if (tableDDL && newColumns.length !== 0) {\n return Promise.all(newColumns)\n .then( () => { console.log(`Table ${table.name} altered.`); } )\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n\n } else if (!tableDDL) {\n sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';\n return this.query(sql)\n .then( () => { console.log(`Table ${table.name} created.`); })\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n } else {\n return Promise.resolve().then( () => { console.log(`Table ${table.name} initialized.`); });\n }\n }\n\n\n createView(view: DBView): Promise<any> {\n let sql: string;\n\n sql = 'CREATE VIEW IF NOT EXISTS ' + view.name\n + ' AS ' + view.sql;\n\n return this.query(sql);\n\n }\n\n getSchemaTable(tableName: string): DBTable {\n let res: DBTable;\n\n this.schema.tables.forEach( table => {\n if (table.name === tableName) {\n res = table;\n }\n });\n return res;\n\n }\n\n getUniquesTable(table: DBTable): object {\n let res: {};\n table.uniques.forEach(uniq => {\n res[uniq.name] = uniq;\n });\n return res;\n }\n\n query(query: string, bindings: any[]= []): Promise<SqlResultSet> {\n return new Promise((resolve, reject) => {\n if (query.indexOf('select') === 0) {\n this.db.readTransaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n } else {\n this.db.transaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n }\n });\n }\n\n Count(query: string, bindings: any[]= []): Promise<number> {\n return this.query(query, bindings).then(rows => {\n return this.rowsCount(rows);\n });\n }\n\n insert(table: string, bindings: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [] ;\n\n sql = sql + 'insert into ' + table + ' ';\n\n for (const index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n sqlKeys.push(index);\n sqlValues.push(bindings[index]);\n sqlBinds.push('?');\n }\n }\n\n sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n update(table: string, bindings: {}, where: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys =[], sqlValues = [] ;\n\n sql = sql + 'update ' + table + ' set ';\n\n for (let index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n let newObj = bindings[index];\n if (typeof newObj === 'object' && newObj !== null) {\n sqlValues.push(newObj.value);\n if (newObj.ifnull) {\n sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');\n } else if (newObj.operator) {\n sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');\n } else {\n sqlBinds.push(index + ' = ?');\n }\n\n } else {\n sqlBinds.push(index + ' = ?');\n sqlValues.push(bindings[index]);\n\n }\n }\n }\n\n for (let index in where) {\n if (where.hasOwnProperty(index)) {\n if (typeof where[index] === 'object' && where[index] !== null){\n sqlKeys.push(index + ' ' + where[index].operator + ' ?');\n sqlValues.push(where[index].value);\n } else {\n sqlKeys.push(index + ' = ?');\n sqlValues.push(where[index]);\n }\n }\n }\n\n sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n dropTable (tables: string[]): Promise<void> {\n let cont = 1;\n\n cont = tables.length;\n return new Promise((resolve, reject) => {\n tables.some( table => {\n if (cont !== 0) {\n this.query('DROP TABLE ' + table)\n .then( () => {\n if (cont === 1 ) { resolve();\n } else { cont--; }\n }, err => {\n cont = 0;\n reject(err);\n return true;\n });\n return false;\n }\n });\n })\n }\n\n fetchAll(result: SqlResultSet): object[] {\n let output = [];\n\n for (let i = 0; i < result.rows.length; i++) {\n output.push(result.rows.item(i));\n }\n\n return output;\n }\n\n fetch(result: SqlResultSet): object {\n let objeto = undefined, newObj= undefined;\n if (result.rows.length !== 0) {\n objeto = result.rows.item(0);\n newObj = {};\n const keys = Object.keys(objeto);\n for (let key in keys) {\n newObj[keys[key]] = objeto[keys[key]];\n }\n }\n return newObj;\n }\n\n\n rowsCount(result: SqlResultSet): number {\n return result.rows.length;\n }\n\n tableExists(table: string): Promise<boolean> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => (this.rowsCount(result) === 1) );\n }\n\n columnExists(table: string, column: string): Promise<boolean> {\n return this._tableExists(table)\n .then((tableDDL) => {\n if (tableDDL) {\n return this._columnExists((tableDDL as string), column);\n } else { return false; }\n });\n }\n\n/* Private */\n\n private defColumn(col: DBColumn): string {\n let colSql: string;\n\n colSql = col.name + ' ' + col.type;\n if (!col.isNullable) {\n colSql += ' NOT NULL ';\n }\n if (col.default) {\n colSql += ' DEFAULT ' + col.default + ' ';\n }\n if (col.type === 'text' && col.length) {\n colSql += ` CONSTRAINT ${col.name}_length CHECK ( `;\n if (col.isNullable) {\n colSql += `${col.name} is null OR `;\n }\n colSql += `length(${col.name}) <= ${col.length} )`;\n\n }\n\n return colSql;\n\n }\n\n private defUnique(unique: DBUnique): string {\n let uniqSql: string;\n\n // depende del entorno, producción o desarrollo\n const onConflictUnique = 'on conflict replace';\n\n if (Array.isArray(unique.fields) ) {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields.join(',')} ) ${onConflictUnique} `;\n }\n if (typeof unique.fields === 'string') {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields} ) ${onConflictUnique} `;\n }\n\n return uniqSql;\n }\n\n private defForeign(fore: DBForeign): string {\n let foreSql: string;\n\n if (Array.isArray(fore.foreignKey) ) {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey.join(',')} ) `;\n }\n\n if (typeof fore.foreignKey === 'string') {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey} ) `;\n }\n\n if (Array.isArray(fore.primaryKey) ) {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey.join(',')} ) `;\n }\n\n if (typeof fore.primaryKey === 'string') {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey} ) `;\n }\n\n return foreSql;\n }\n\n private _tableExists(table: string): Promise<boolean | string> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => {\n if (this.rowsCount(result) === 1) { return (this.fetch(result) as any).sql as string; } else { return false; }\n });\n }\n\n private _columnExists(tableDDL: string, column: string): boolean {\n\n if (tableDDL.indexOf(column) === -1) { return false; } else { return true; }\n }\n\n private addColumn(table: string, col: DBColumn): Promise<any> {\n const colSql = this.defColumn(col);\n const query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;\n return this.query(query);\n }\n\n}\n\n\n\nexport const DB_CONFIG = new InjectionToken<DbConfig>('dbWrapperConfig');\nexport const DB_SCHEMA = new InjectionToken<DBSchema>('dbWrapperSchema');\n\nexport function getDefaultDbConfig(): DbConfig {\n return {\n dbName: 'db.sqlite',\n location: 'default',\n iosDatabaseLocation: 'Library'\n };\n}\n\nexport function provideDbWrapper(dbConfig: DbConfig, dbSchema?: DBSchema): DbWrapperService {\n const config = !!dbConfig ? dbConfig : getDefaultDbConfig();\n return new DbWrapperService(config, dbSchema);\n}\n\n\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DbConfig, DBSchema } from './db-wrapper.models';\nimport { DB_CONFIG, provideDbWrapper, DbWrapperService, DB_SCHEMA } from './db-wrapper.service';\n\n@NgModule()\nexport class DbWrapperModule {\n static forRoot(dbConfig: DbConfig, schema?: DBSchema): ModuleWithProviders<DbWrapperModule>{\n return {\n ngModule: DbWrapperModule,\n providers: [\n { provide: DB_CONFIG, useValue: dbConfig },\n { provide: DB_SCHEMA, useValue: schema },\n { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }\n ]\n };\n }\n\n}\n","\nexport enum DataType {\n Integer = 'integer',\n Int = 'integer',\n TinyInt = 'integer',\n SmallInt = 'integer',\n BigInt = 'integer',\n Text = 'text',\n Char = 'text',\n NChar = 'text',\n VarChar = 'text',\n NVarChar = 'text',\n CLOB = 'text',\n BLOB = 'blob',\n Real = 'real',\n Double = 'real',\n Decimal = 'real',\n Float = 'real',\n Boolean = 'integer',\n DateTime = 'text',\n Date = 'text'\n\n}\n\nexport enum DefaultType {\n Integer = '0',\n Int = '0',\n TinyInt = '0',\n SmallInt = '0',\n BigInt = '0',\n Text = '\\'\\'',\n Char = '\\'\\'',\n NChar = '\\'\\'',\n VarChar = '\\'\\'',\n NVarChar = '\\'\\'',\n CLOB = '\\'\\'',\n BLOB = '0',\n Real = '0.0',\n Double = '0.0',\n Decimal = '0.0',\n Float = '0.0',\n Boolean = '0',\n DateTime = '(datetime(\\'now\\', \\'localtime\\'))',\n Date = '(date(\\'now\\', \\'localtime\\'))'\n}\n\n\nexport interface SqlTransaction {\n /**\n * Executes SQL statement via current transaction.\n * @param sql SQL statement to execute.\n * @param params SQL stetement arguments.\n * @param successCallback Called in case of query has been successfully done.\n * @param errorCallback Called, when query fails. Return false to continue transaction; true or no return to rollback.\n */\n executeSql(sql: string,\n params?: any[],\n successCallback?: (transaction: SqlTransaction, resultSet: SqlResultSet) => void,\n errorCallback?: (transaction: SqlTransaction, error: SqlError) => any): void;\n}\n\nexport interface SqlResultSet {\n insertId: number;\n rowsAffected: number;\n rows: SqlResultSetRowList;\n}\n\nexport interface SqlResultSetRowList {\n length: number;\n item(index: number): Object;\n}\n\nexport interface SqlError {\n code: number;\n message: string;\n}\n\n/**\n * Interfaz con la configuración de websql\n */\nexport interface DbConfig {\n /**\n * nombre de la base de datos\n */\n dbName: string;\n /**\n * default 'default'\n */\n location?: string;\n /**\n * default 'Library'\n */\n iosDatabaseLocation?: string;\n}\n\n/**\n * Intefaz para definir un constraint unique\n *\n */\nexport interface DBUnique {\n name: string; /** nombre */\n fields: string | string[]; /** lista de campos */\n}\n\nexport interface DBForeign {\n name: string;\n foreignKey: string | string[];\n referenceTable: string;\n primaryKey: string | string[];\n}\n\nexport interface DBColumn {\n name: string;\n type: DataType;\n length?: number;\n isNullable?: boolean;\n default?: DefaultType | string;\n}\n\nexport interface DBTable {\n name: string;\n columns: DBColumn[];\n primary: string | string[];\n uniques?: DBUnique[];\n foreigns?: DBForeign[];\n sync?: string;\n}\n\n\nexport interface DBView {\n name: string;\n sql: string;\n}\n\nexport interface DBSchema {\n tables: DBTable[],\n views?: DBView[]\n}\n\n","\n\n/*\n * Public API Surface of db-wrapper\n */\n\nexport * from './lib/db-wrapper.service';\nexport * from './lib/db-wrapper.module';\nexport * from './lib/db-wrapper.models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-wrapper.mjs","sources":["../../../projects/db-wrapper/src/lib/window.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.service.ts","../../../projects/db-wrapper/src/lib/db-wrapper.module.ts","../../../projects/db-wrapper/src/lib/db-wrapper.models.ts","../../../projects/db-wrapper/src/public-api.ts","../../../projects/db-wrapper/src/db-wrapper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowService {\n\n get nativeWindow(): any {\n return _window();\n }\n}\n\nfunction _window(): any {\n // Return the global native browser window object\n return typeof window !== 'undefined' ? window : undefined;\n}","import { InjectionToken } from '@angular/core';\nimport { WindowService } from './window.service';\nimport { DBTable, DbConfig, DBSchema, DBView,\n DBColumn, DBUnique, DBForeign, SqlTransaction, SqlResultSet, SqlError, DefaultType } from './db-wrapper.models';\n\nexport class DbWrapperService {\n private _dbName: string;\n private _location: string;\n private _iosDatabaseLocation: string;\n private _androidDatabaseProvider: string;\n private _readyPromise: Promise<void>;\n schema: DBSchema;\n db: any;\n\n constructor(dbConfig: DbConfig, dbSchema?: DBSchema) {\n\n this._dbName = dbConfig.dbName;\n this._location = dbConfig.location || 'default';\n this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';\n this._androidDatabaseProvider = dbConfig.androidDatabaseProvider || 'default';\n const window = (new WindowService()).nativeWindow;\n if (dbSchema) { this.schema = dbSchema; }\n this._readyPromise = new Promise ( (resolve, reject) => {\n if (typeof window.cordova === 'undefined') {\n setTimeout( () => {\n this.init(dbSchema).then (\n () => {\n resolve();\n } )\n .catch ( (err) => {\n reject(err);\n } );\n }, 500);\n } else {\n document.addEventListener('deviceready', () => {\n console.log('dbWrapper: device ready.');\n this.initDevice(dbSchema).then ( () => resolve() ).catch ( (err) => reject(err) );\n });\n }\n });\n }\n\n ready(): Promise<void> {\n return this._readyPromise;\n }\n\n initDevice(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise( (resolve, reject) => {\n this.db = window.sqlitePlugin.openDatabase({\n name: this._dbName,\n location: this._location,\n androidDatabaseProvider: this._androidDatabaseProvider,\n androidLockWorkaround: 1\n });\n\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then(() => { resolve(); });\n } else {\n resolve();\n }\n });\n }\n\n init(dbSchema: DBSchema): Promise<void> {\n const window = (new WindowService()).nativeWindow;\n return new Promise ( (resolve, reject) => {\n this.db = window.openDatabase(this._dbName, '1.0', 'database', -1);\n if (dbSchema) {\n this.generate(dbSchema).catch(err => {\n reject(err);\n }).then( () => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n generate(schema: DBSchema): Promise<any> {\n\n const sentences = [];\n this.schema = schema;\n\n if (schema.tables) {\n schema.tables.forEach(table => {\n sentences.push(this.createTable(table));\n });\n }\n if (schema.views) {\n schema.views.forEach( view => {\n sentences.push(this.createView(view));\n });\n }\n if (sentences.length === 0) {\n throw new Error('Esquema de la base de datos vacia.');\n }\n return Promise.all(sentences);\n }\n\n async createTable(table: DBTable): Promise<any> {\n let sql = '', onConflictPrimary;\n const sentences = [], newColumns = []\n\n const tableDDL = await this._tableExists(table.name);\n if (tableDDL) {\n table.columns.forEach( col => {\n if (!this._columnExists(tableDDL as string, col.name) ) {\n newColumns.push(this.addColumn(table.name, col));\n }\n });\n } else {\n table.columns.forEach( col => {\n sentences.push(this.defColumn(col));\n });\n }\n onConflictPrimary = 'on conflict fail';\n\n if (Array.isArray(table.primary) ) {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary );\n }\n if (typeof table.primary === 'string') {\n sentences.push (' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary );\n }\n if (table.uniques) {\n table.uniques.forEach( uniq => {\n sentences.push(this.defUnique(uniq));\n });\n }\n\n if (table.foreigns) {\n table.foreigns.forEach ( fore => {\n sentences.push(this.defForeign(fore));\n });\n }\n\n if (tableDDL && newColumns.length !== 0) {\n return Promise.all(newColumns)\n .then( () => { console.log(`Table ${table.name} altered.`); } )\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n\n } else if (!tableDDL) {\n sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';\n return this.query(sql)\n .then( () => { console.log(`Table ${table.name} created.`); })\n .catch( (err) => {\n console.error (`Table ${table.name}: ${err.message}`);\n throw new Error(`Table ${table.name}: ${err.message}`);\n });\n } else {\n return Promise.resolve().then( () => { console.log(`Table ${table.name} initialized.`); });\n }\n }\n\n\n createView(view: DBView): Promise<any> {\n let sql: string;\n\n sql = 'CREATE VIEW IF NOT EXISTS ' + view.name\n + ' AS ' + view.sql;\n\n return this.query(sql);\n\n }\n\n getSchemaTable(tableName: string): DBTable {\n let res: DBTable;\n\n this.schema.tables.forEach( table => {\n if (table.name === tableName) {\n res = table;\n }\n });\n return res;\n\n }\n\n getUniquesTable(table: DBTable): object {\n let res: {};\n table.uniques.forEach(uniq => {\n res[uniq.name] = uniq;\n });\n return res;\n }\n\n query(query: string, bindings: any[]= []): Promise<SqlResultSet> {\n return new Promise((resolve, reject) => {\n if (query.indexOf('select') === 0) {\n this.db.readTransaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n } else {\n this.db.transaction((transaction: SqlTransaction) => {\n transaction.executeSql(query, bindings, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n }, (err: SqlError) => reject(err) );\n }\n });\n }\n\n Count(query: string, bindings: any[]= []): Promise<number> {\n return this.query(query, bindings).then(rows => {\n return this.rowsCount(rows);\n });\n }\n\n insert(table: string, bindings: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [] ;\n\n sql = sql + 'insert into ' + table + ' ';\n\n for (const index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n sqlKeys.push(index);\n sqlValues.push(bindings[index]);\n sqlBinds.push('?');\n }\n }\n\n sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n update(table: string, bindings: {}, where: {}): Promise<SqlResultSet> {\n let sql = '', sqlBinds = [], sqlKeys =[], sqlValues = [] ;\n\n sql = sql + 'update ' + table + ' set ';\n\n for (let index in bindings) {\n if (bindings.hasOwnProperty(index)) {\n let newObj = bindings[index];\n if (typeof newObj === 'object' && newObj !== null) {\n sqlValues.push(newObj.value);\n if (newObj.ifnull) {\n sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');\n } else if (newObj.operator) {\n sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');\n } else {\n sqlBinds.push(index + ' = ?');\n }\n\n } else {\n sqlBinds.push(index + ' = ?');\n sqlValues.push(bindings[index]);\n\n }\n }\n }\n\n for (let index in where) {\n if (where.hasOwnProperty(index)) {\n if (typeof where[index] === 'object' && where[index] !== null){\n sqlKeys.push(index + ' ' + where[index].operator + ' ?');\n sqlValues.push(where[index].value);\n } else {\n sqlKeys.push(index + ' = ?');\n sqlValues.push(where[index]);\n }\n }\n }\n\n sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');\n return new Promise((resolve, reject) => {\n this.db.transaction(transaction => {\n transaction.executeSql(sql, sqlValues, (transaction: SqlTransaction, result: SqlResultSet) => {\n resolve(result);\n }, (transaction: SqlTransaction, error: SqlError) => {\n reject(error);\n });\n });\n });\n }\n\n dropTable (tables: string[]): Promise<void> {\n let cont = 1;\n\n cont = tables.length;\n return new Promise((resolve, reject) => {\n tables.some( table => {\n if (cont !== 0) {\n this.query('DROP TABLE ' + table)\n .then( () => {\n if (cont === 1 ) { resolve();\n } else { cont--; }\n }, err => {\n cont = 0;\n reject(err);\n return true;\n });\n return false;\n }\n });\n })\n }\n\n fetchAll(result: SqlResultSet): object[] {\n let output = [];\n\n for (let i = 0; i < result.rows.length; i++) {\n output.push(result.rows.item(i));\n }\n\n return output;\n }\n\n fetch(result: SqlResultSet): object {\n let objeto = undefined, newObj= undefined;\n if (result.rows.length !== 0) {\n objeto = result.rows.item(0);\n newObj = {};\n const keys = Object.keys(objeto);\n for (let key in keys) {\n newObj[keys[key]] = objeto[keys[key]];\n }\n }\n return newObj;\n }\n\n\n rowsCount(result: SqlResultSet): number {\n return result.rows.length;\n }\n\n tableExists(table: string): Promise<boolean> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => (this.rowsCount(result) === 1) );\n }\n\n columnExists(table: string, column: string): Promise<boolean> {\n return this._tableExists(table)\n .then((tableDDL) => {\n if (tableDDL) {\n return this._columnExists((tableDDL as string), column);\n } else { return false; }\n });\n }\n\n/* Private */\n\n private defColumn(col: DBColumn): string {\n let colSql: string;\n\n colSql = col.name + ' ' + col.type;\n if (!col.isNullable) {\n colSql += ' NOT NULL ';\n }\n if (col.default) {\n colSql += ' DEFAULT ' + col.default + ' ';\n }\n if (col.type === 'text' && col.length) {\n colSql += ` CONSTRAINT ${col.name}_length CHECK ( `;\n if (col.isNullable) {\n colSql += `${col.name} is null OR `;\n }\n colSql += `length(${col.name}) <= ${col.length} )`;\n\n }\n\n return colSql;\n\n }\n\n private defUnique(unique: DBUnique): string {\n let uniqSql: string;\n\n // depende del entorno, producción o desarrollo\n const onConflictUnique = 'on conflict replace';\n\n if (Array.isArray(unique.fields) ) {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields.join(',')} ) ${onConflictUnique} `;\n }\n if (typeof unique.fields === 'string') {\n uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields} ) ${onConflictUnique} `;\n }\n\n return uniqSql;\n }\n\n private defForeign(fore: DBForeign): string {\n let foreSql: string;\n\n if (Array.isArray(fore.foreignKey) ) {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey.join(',')} ) `;\n }\n\n if (typeof fore.foreignKey === 'string') {\n foreSql = ` FOREIGN KEY ( ${fore.foreignKey} ) `;\n }\n\n if (Array.isArray(fore.primaryKey) ) {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey.join(',')} ) `;\n }\n\n if (typeof fore.primaryKey === 'string') {\n foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey} ) `;\n }\n\n return foreSql;\n }\n\n private _tableExists(table: string): Promise<boolean | string> {\n return this.query('select sql from sqlite_master ' +\n 'where type=\\'table\\' and name=\\'' + table + '\\'')\n .then(result => {\n if (this.rowsCount(result) === 1) { return (this.fetch(result) as any).sql as string; } else { return false; }\n });\n }\n\n private _columnExists(tableDDL: string, column: string): boolean {\n\n if (tableDDL.indexOf(column) === -1) { return false; } else { return true; }\n }\n\n private addColumn(table: string, col: DBColumn): Promise<any> {\n const colSql = this.defColumn(col);\n const query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;\n return this.query(query);\n }\n\n}\n\n\n\nexport const DB_CONFIG = new InjectionToken<DbConfig>('dbWrapperConfig');\nexport const DB_SCHEMA = new InjectionToken<DBSchema>('dbWrapperSchema');\n\nexport function getDefaultDbConfig(): DbConfig {\n return {\n dbName: 'db.sqlite',\n location: 'default',\n iosDatabaseLocation: 'Library'\n };\n}\n\nexport function provideDbWrapper(dbConfig: DbConfig, dbSchema?: DBSchema): DbWrapperService {\n const config = !!dbConfig ? dbConfig : getDefaultDbConfig();\n return new DbWrapperService(config, dbSchema);\n}\n\n\n\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { DbConfig, DBSchema } from './db-wrapper.models';\nimport { DB_CONFIG, provideDbWrapper, DbWrapperService, DB_SCHEMA } from './db-wrapper.service';\n\n@NgModule()\nexport class DbWrapperModule {\n static forRoot(dbConfig: DbConfig, schema?: DBSchema): ModuleWithProviders<DbWrapperModule>{\n return {\n ngModule: DbWrapperModule,\n providers: [\n { provide: DB_CONFIG, useValue: dbConfig },\n { provide: DB_SCHEMA, useValue: schema },\n { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }\n ]\n };\n }\n\n}\n","\nexport enum DataType {\n Integer = 'integer',\n Int = 'integer',\n TinyInt = 'integer',\n SmallInt = 'integer',\n BigInt = 'integer',\n Text = 'text',\n Char = 'text',\n NChar = 'text',\n VarChar = 'text',\n NVarChar = 'text',\n CLOB = 'text',\n BLOB = 'blob',\n Real = 'real',\n Double = 'real',\n Decimal = 'real',\n Float = 'real',\n Boolean = 'integer',\n DateTime = 'text',\n Date = 'text'\n\n}\n\nexport enum DefaultType {\n Integer = '0',\n Int = '0',\n TinyInt = '0',\n SmallInt = '0',\n BigInt = '0',\n Text = '\\'\\'',\n Char = '\\'\\'',\n NChar = '\\'\\'',\n VarChar = '\\'\\'',\n NVarChar = '\\'\\'',\n CLOB = '\\'\\'',\n BLOB = '0',\n Real = '0.0',\n Double = '0.0',\n Decimal = '0.0',\n Float = '0.0',\n Boolean = '0',\n DateTime = '(datetime(\\'now\\', \\'localtime\\'))',\n Date = '(date(\\'now\\', \\'localtime\\'))'\n}\n\n\nexport interface SqlTransaction {\n /**\n * Executes SQL statement via current transaction.\n * @param sql SQL statement to execute.\n * @param params SQL stetement arguments.\n * @param successCallback Called in case of query has been successfully done.\n * @param errorCallback Called, when query fails. Return false to continue transaction; true or no return to rollback.\n */\n executeSql(sql: string,\n params?: any[],\n successCallback?: (transaction: SqlTransaction, resultSet: SqlResultSet) => void,\n errorCallback?: (transaction: SqlTransaction, error: SqlError) => any): void;\n}\n\nexport interface SqlResultSet {\n insertId: number;\n rowsAffected: number;\n rows: SqlResultSetRowList;\n}\n\nexport interface SqlResultSetRowList {\n length: number;\n item(index: number): Object;\n}\n\nexport interface SqlError {\n code: number;\n message: string;\n}\n\n/**\n * Interfaz con la configuración de websql\n */\nexport interface DbConfig {\n /**\n * nombre de la base de datos\n */\n dbName: string;\n /**\n * default 'default'\n */\n location?: string;\n /**\n * default 'Library'\n */\n iosDatabaseLocation?: string;\n /**\n * default 'default'\n */\n androidDatabaseProvider?: string; \n}\n\n/**\n * Intefaz para definir un constraint unique\n *\n */\nexport interface DBUnique {\n name: string; /** nombre */\n fields: string | string[]; /** lista de campos */\n}\n\nexport interface DBForeign {\n name: string;\n foreignKey: string | string[];\n referenceTable: string;\n primaryKey: string | string[];\n}\n\nexport interface DBColumn {\n name: string;\n type: DataType;\n length?: number;\n isNullable?: boolean;\n default?: DefaultType | string;\n}\n\nexport interface DBTable {\n name: string;\n columns: DBColumn[];\n primary: string | string[];\n uniques?: DBUnique[];\n foreigns?: DBForeign[];\n sync?: string;\n}\n\n\nexport interface DBView {\n name: string;\n sql: string;\n}\n\nexport interface DBSchema {\n tables: DBTable[],\n views?: DBView[]\n}\n\n","\n\n/*\n * Public API Surface of db-wrapper\n */\n\nexport * from './lib/db-wrapper.service';\nexport * from './lib/db-wrapper.module';\nexport * from './lib/db-wrapper.models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -79,6 +79,10 @@ export interface DbConfig {
79
79
  * default 'Library'
80
80
  */
81
81
  iosDatabaseLocation?: string;
82
+ /**
83
+ * default 'default'
84
+ */
85
+ androidDatabaseProvider?: string;
82
86
  }
83
87
  /**
84
88
  * Intefaz para definir un constraint unique
@@ -4,6 +4,7 @@ export declare class DbWrapperService {
4
4
  private _dbName;
5
5
  private _location;
6
6
  private _iosDatabaseLocation;
7
+ private _androidDatabaseProvider;
7
8
  private _readyPromise;
8
9
  schema: DBSchema;
9
10
  db: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "db-wrapper",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.0.0",
6
6
  "@angular/core": "^15.0.0"