kinto
Version:
An Offline-First JavaScript client for Kinto.
167 lines (143 loc) • 5.36 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _collection = _interopRequireDefault(require("./collection"));
var _base = _interopRequireDefault(require("./adapters/base"));
var DEFAULT_BUCKET_NAME = "default";
var DEFAULT_REMOTE = "http://localhost:8888/v1";
var DEFAULT_RETRY = 1;
/**
* KintoBase class.
*/
var KintoBase =
/*#__PURE__*/
function () {
(0, _createClass2.default)(KintoBase, null, [{
key: "adapters",
/**
* Provides a public access to the base adapter class. Users can create a
* custom DB adapter by extending {@link BaseAdapter}.
*
* @type {Object}
*/
get: function get() {
return {
BaseAdapter: _base.default
};
}
/**
* Synchronization strategies. Available strategies are:
*
* - `MANUAL`: Conflicts will be reported in a dedicated array.
* - `SERVER_WINS`: Conflicts are resolved using remote data.
* - `CLIENT_WINS`: Conflicts are resolved using local data.
*
* @type {Object}
*/
}, {
key: "syncStrategy",
get: function get() {
return _collection.default.strategy;
}
/**
* Constructor.
*
* Options:
* - `{String}` `remote` The server URL to use.
* - `{String}` `bucket` The collection bucket name.
* - `{EventEmitter}` `events` Events handler.
* - `{BaseAdapter}` `adapter` The base DB adapter class.
* - `{Object}` `adapterOptions` Options given to the adapter.
* - `{Object}` `headers` The HTTP headers to use.
* - `{Object}` `retry` Number of retries when the server fails to process the request (default: `1`)
* - `{String}` `requestMode` The HTTP CORS mode to use.
* - `{Number}` `timeout` The requests timeout in ms (default: `5000`).
*
* @param {Object} options The options object.
*/
}]);
function KintoBase() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
(0, _classCallCheck2.default)(this, KintoBase);
var defaults = {
bucket: DEFAULT_BUCKET_NAME,
remote: DEFAULT_REMOTE,
retry: DEFAULT_RETRY
};
this._options = (0, _objectSpread2.default)({}, defaults, options);
if (!this._options.adapter) {
throw new Error("No adapter provided");
}
var _this$_options = this._options,
ApiClass = _this$_options.ApiClass,
events = _this$_options.events,
headers = _this$_options.headers,
remote = _this$_options.remote,
requestMode = _this$_options.requestMode,
retry = _this$_options.retry,
timeout = _this$_options.timeout; // public properties
/**
* The kinto HTTP client instance.
* @type {KintoClient}
*/
this.api = new ApiClass(remote, {
events: events,
headers: headers,
requestMode: requestMode,
retry: retry,
timeout: timeout
});
/**
* The event emitter instance.
* @type {EventEmitter}
*/
this.events = this._options.events;
}
/**
* Creates a {@link Collection} instance. The second (optional) parameter
* will set collection-level options like e.g. `remoteTransformers`.
*
* @param {String} collName The collection name.
* @param {Object} [options={}] Extra options or override client's options.
* @param {Object} [options.idSchema] IdSchema instance (default: UUID)
* @param {Object} [options.remoteTransformers] Array<RemoteTransformer> (default: `[]`])
* @param {Object} [options.hooks] Array<Hook> (default: `[]`])
* @param {Object} [options.localFields] Array<Field> (default: `[]`])
* @return {Collection}
*/
(0, _createClass2.default)(KintoBase, [{
key: "collection",
value: function collection(collName) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!collName) {
throw new Error("missing collection name");
}
var _this$_options$option = (0, _objectSpread2.default)({}, this._options, options),
bucket = _this$_options$option.bucket,
events = _this$_options$option.events,
adapter = _this$_options$option.adapter,
adapterOptions = _this$_options$option.adapterOptions;
var idSchema = options.idSchema,
remoteTransformers = options.remoteTransformers,
hooks = options.hooks,
localFields = options.localFields;
return new _collection.default(bucket, collName, this.api, {
events: events,
adapter: adapter,
adapterOptions: adapterOptions,
idSchema: idSchema,
remoteTransformers: remoteTransformers,
hooks: hooks,
localFields: localFields
});
}
}]);
return KintoBase;
}();
exports.default = KintoBase;