-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsage.min.js
1 lines (1 loc) · 8.5 KB
/
sage.min.js
1
!function(encodeURI,encodeURIComponent,decodeURIComponent){var global=this;var extend=function(target){var source,key,i=1;while(source=arguments[i++]){for(key in source)target[key]=source[key]}return target};var asString=function(that){return Object.prototype.toString.call(that)};var isObject=function(that){return asString(that)=="[object Object]"};var isArray=function(that){return asString(that)=="[object Array]"};var isFunction=function(that){return asString(that)=="[object Function]"};var sage=function(uri){return sage.make(uri)};var previousSage=this.sage;this.sage=sage;sage.noConflict=function(){global.sage=previousSage;return sage};sage.version="0.4.2";sage.make=function(uri){var client,index;uri=sage._parseURI(uri);if(uri.path&&(index=/\/*([^\/]+)\/*$/.exec(uri.path))){uri.path=uri.path.substr(0,index.index);index=index[1]&&decodeURIComponent(index[1])}client=new sage.Client(uri.host+uri.path,uri);return index?client.index(index):client};sage._parseURI=function(uri){var match;if(uri){if(match=/^(https?:\/\/)(?:([^@:]+):([^@]+)@)?([^\/]+)(.*)\/*$/.exec(uri)){return{host:match[1]+match[4].replace(/\/+/g,"/"),path:match[5],user:match[2]&&decodeURIComponent(match[2]),pass:match[3]&&decodeURIComponent(match[3])}}}return{host:uri||"",path:""}};sage.Base=function(){};sage.Base.prototype={request:function(){var args=[].slice.call(arguments),callback=isFunction(args[args.length-1])&&args.pop(),headers=args[4]||{},path=args[1]?"/"+args[1]:"",data=args[3]||"";if(data&&!/\/_bulk$/.test(path)){data=JSON.stringify(args[3],/^\/_mapping/.test(path)&&this._replacer)}if(!("Content-Type"in headers))headers["Content-Type"]="application/json";this._request(args[0]||"GET",this.uri+path,args[2],data,headers,this.auth||{},callback);return this},_request:function(method,uri,query,body,headers,auth,callback){var self=this,xhr=new XMLHttpRequest,qval=[],header,key;if(query){for(key in query){qval.push(encodeURIComponent(key)+"="+encodeURIComponent(query[key]))}uri+="?"+qval.join("&")}xhr.open(method,uri,true,auth.user,auth.pass);if(headers){for(header in headers){xhr.setRequestHeader(header,headers[header])}}xhr.onreadystatechange=function(){if(callback&&xhr.readyState===4){var headers=self._getHeaders(xhr),data=xhr.responseText,err;if(method=="HEAD"){data=headers}else if(data){try{data=JSON.parse(data)}catch(e){err=e}if(!err){if(data.error)err=new Error(data.error);else data=self._response(data)}}callback(err,data,xhr.status,headers,xhr)}};xhr.send(body)},_response:function(json){var data=json.items||json.hits&&json.hits.hits,meta=this._meta,i=0,len;if(data){data=[].slice.call(data);extend(data.__proto__=[],json,json.hits).json=json;for(len=data.length;i<len;i++)data[i]=meta(data[i])}else{data=meta(json)}return data},_replacer:function(key,val){return isFunction(val)?val.toString():val},_meta:function(doc){var hasId=!doc.id^!doc._id,hasRev=!doc.version^!doc._version,proto;if(hasId||hasRev){proto=extend(doc.__proto__={},doc);if(hasId)proto._id=doc.id=doc._id||doc.id;if(hasRev)proto._version=doc.version=doc._version||doc.version}return doc},_headers:["cache-control","content-length","content-type","date","etag","server"],_getHeaders:function(xhr){var headers={},header,i=0;while(header=this._headers[i++]){headers[header]=xhr.getResponseHeader(header)}return headers},_:function(args,start,withDoc){var self=this,doc,id,rev;function request(method,path,options){if(!options)options={};self.request(method,path||request.p||"","q"in options?options.q:request.q,"b"in options?options.b:request.b,"h"in options?options.h:request.h,"f"in options?options.f:request.f);return self}args=[].slice.call(args,start);request.f=isFunction(args[args.length-1])&&args.pop();request.p=args[0]&&(isArray(args[0])&&encodeURI(args.shift().join(","))||!isObject(args[0])&&!isFunction(args[0])&&encodeURI(args.shift()))||"";request.q=args[withDoc?1:0]||{};request.h=args[withDoc?2:1]||{};if(withDoc){if(doc=request.b=args[0]){if(id=request.p||doc._id||doc.id)request.p=id;if(rev=request.q.rev||doc._rev||doc.rev)request.q.rev=rev}}return request}};sage.Client=function(uri,auth){this.uri=uri;this.auth=auth;this._indexes={}};sage.Client.prototype={index:function(name){var indexes=this._indexes;if(name&&name.split)name=name.split(",");name.sort();name=name.join(",");return indexes[name]||(indexes[name]=new sage.Index(this,name,this.auth))},river:function(name){var request=this._(arguments,1,1);return request(request.b?"PUT":"GET","_river/"+name+"/_meta")},unriver:function(name){return this._(arguments,1)("DELETE","_river/"+name)},stats:function(){var request=this._(arguments);return request("GET","_nodes"+(request.p?"/"+request.p:"")+"/stats")},health:function(){return this._(arguments)("GET","_cluster/health")},state:function(){var request=this._(arguments);return request("GET","_cluster/state/"+(request.p||""))},nodes:function(){var request=this._(arguments);return request("GET","_nodes/"+(request.p||""))},config:function(){var request=this._(arguments,0,1);return request(request.b?"PUT":"GET","_cluster/settings")},tmpl:function(){var request=this._(arguments,0,1);return request(request.b?"PUT":"GET","_template/"+request.p)},untmpl:function(){var request=this._(arguments);return request("DELETE","_template/"+request.p)}};sage.Index=function(client,name,auth){this.client=client;this.name=name;this.uri=client.uri+(name?"/"+encodeURIComponent(name):"");this.auth=auth;this._types={}};sage.Index.prototype={type:function(name){var types=this._types;return types[name]||(types[name]=new sage.Type(this,name,this.auth))},create:function(){return this._(arguments,0,1)("PUT")},destroy:function(){return this._(arguments)("DELETE")},exists:function(){var request=this._(arguments),callback=request.f;request.f=function(err,body,status,headers,xhr){callback(err,status===200,status,headers,xhr)};return request("HEAD")},close:function(){return this._(arguments)("POST","_close")},open:function(){return this._(arguments)("POST","_open")},refresh:function(){return this._(arguments)("POST","_refresh")},flush:function(){return this._(arguments)("POST","_flush")},clear:function(){return this._(arguments)("GET","_cache/clear")},optimize:function(){return this._(arguments)("POST","_optimize")},snapshot:function(){return this._(arguments)("POST","_gateway/snapshot")},settings:function(){var request=this._(arguments,0,1);return request(request.b?"PUT":"GET","_settings")},map:function(){var request=this._(arguments,0,1);return request(request.b?"PUT":"GET",(request.p?request.p+"/":"")+"_mapping")},unmap:function(){var request=this._(arguments);return request("DELETE",(request.p?request.p+"/":"")+"_mapping")},stats:function(){return this._(arguments)("GET","_stats")},status:function(){return this._(arguments)("GET","_status")},segments:function(){return this._(arguments)("GET","_segments")}};sage.Type=function(index,type,auth){this.index=index;this.name=type;this.uri=index.uri+(type?"/"+encodeURIComponent(type):"");this.auth=auth};sage.Type.prototype={all:function(){return this._(arguments,0,1)("GET","_mget")},find:function(){return this._(arguments,0,1)("POST","_search")},get:function(){return this._(arguments)("GET")},post:function(docs){var request=this._(arguments,1),doc,meta,data,action,buf="",i,len,key;if(isArray(docs)){request.p="_bulk";for(i=0,len=docs.length;i<len;i++){doc=docs[i],meta={},data={};action=meta[doc._deleted?"delete":"index"]={};for(key in doc){(key[0]=="_"?action:data)[key]=doc[key]}buf+=JSON.stringify(meta)+"\n"+JSON.stringify(doc)+"\n"}}return request("POST",0,{b:buf||docs})},put:function(doc){if(!this.name||!doc._id&&!doc.id)throw new Error("missing type or id");return this._(arguments,1)("PUT",doc._id||doc.id,{b:doc})},del:function(docs){if(isArray(docs)){var i=0,len,doc,data={};for(len=docs.length;i<len;i++){doc=docs[i],data[i]={_index:doc._index||doc.index,_type:doc._type||doc.type,_id:doc._id||doc.id,_version:doc._version||doc.version,_deleted:true}}docs=data;return this.post.apply(this,arguments)}else{if(!this.name||!docs._id&&!docs.id)throw new Error("missing type or id");return this._(arguments,1)("DELETE",docs._id||docs.id)}},up:function(id,doc){if(!this.name||!id)throw new Error("missing type or id");return this._(arguments,2)("POST",id+"/_update",{b:doc})},mlt:function(id){var request=this._(arguments,1),fields=request.q&&request.q.mlt_fields;if(isArray(fields))request.q.mlt_fields=fields.join(",");return request("GET",id+"/_mlt")}};sage.Client.prototype=extend(new sage.Base,sage.Client.prototype);sage.Index.prototype=extend(new sage.Base,sage.Index.prototype,sage.Type.prototype);sage.Type.prototype=extend(new sage.Base,sage.Type.prototype)}(encodeURI,encodeURIComponent,decodeURIComponent);