jsforce2 1.11.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.
- package/LICENSE +22 -0
- package/README.md +74 -0
- package/bin/jsforce +3 -0
- package/bower.json +30 -0
- package/build/jsforce-api-analytics.js +393 -0
- package/build/jsforce-api-analytics.min.js +2 -0
- package/build/jsforce-api-analytics.min.js.map +1 -0
- package/build/jsforce-api-apex.js +183 -0
- package/build/jsforce-api-apex.min.js +2 -0
- package/build/jsforce-api-apex.min.js.map +1 -0
- package/build/jsforce-api-bulk.js +1054 -0
- package/build/jsforce-api-bulk.min.js +2 -0
- package/build/jsforce-api-bulk.min.js.map +1 -0
- package/build/jsforce-api-chatter.js +320 -0
- package/build/jsforce-api-chatter.min.js +2 -0
- package/build/jsforce-api-chatter.min.js.map +1 -0
- package/build/jsforce-api-metadata.js +3020 -0
- package/build/jsforce-api-metadata.min.js +2 -0
- package/build/jsforce-api-metadata.min.js.map +1 -0
- package/build/jsforce-api-soap.js +403 -0
- package/build/jsforce-api-soap.min.js +2 -0
- package/build/jsforce-api-soap.min.js.map +1 -0
- package/build/jsforce-api-streaming.js +3479 -0
- package/build/jsforce-api-streaming.min.js +2 -0
- package/build/jsforce-api-streaming.min.js.map +1 -0
- package/build/jsforce-api-tooling.js +319 -0
- package/build/jsforce-api-tooling.min.js +2 -0
- package/build/jsforce-api-tooling.min.js.map +1 -0
- package/build/jsforce-core.js +25250 -0
- package/build/jsforce-core.min.js +2 -0
- package/build/jsforce-core.min.js.map +1 -0
- package/build/jsforce.js +31637 -0
- package/build/jsforce.min.js +2 -0
- package/build/jsforce.min.js.map +1 -0
- package/core.js +1 -0
- package/index.js +1 -0
- package/lib/VERSION.js +2 -0
- package/lib/_required.js +29 -0
- package/lib/api/analytics.js +387 -0
- package/lib/api/apex.js +177 -0
- package/lib/api/bulk.js +862 -0
- package/lib/api/chatter.js +314 -0
- package/lib/api/index.js +8 -0
- package/lib/api/metadata.js +848 -0
- package/lib/api/soap.js +397 -0
- package/lib/api/streaming-extension.js +136 -0
- package/lib/api/streaming.js +270 -0
- package/lib/api/tooling.js +313 -0
- package/lib/browser/canvas.js +90 -0
- package/lib/browser/client.js +241 -0
- package/lib/browser/core.js +5 -0
- package/lib/browser/jsforce.js +6 -0
- package/lib/browser/jsonp.js +52 -0
- package/lib/browser/request.js +70 -0
- package/lib/cache.js +252 -0
- package/lib/cli/cli.js +431 -0
- package/lib/cli/repl.js +337 -0
- package/lib/connection.js +1881 -0
- package/lib/core.js +16 -0
- package/lib/csv.js +50 -0
- package/lib/date.js +163 -0
- package/lib/http-api.js +300 -0
- package/lib/jsforce.js +10 -0
- package/lib/logger.js +52 -0
- package/lib/oauth2.js +206 -0
- package/lib/process.js +275 -0
- package/lib/promise.js +164 -0
- package/lib/query.js +881 -0
- package/lib/quick-action.js +90 -0
- package/lib/record-stream.js +305 -0
- package/lib/record.js +107 -0
- package/lib/registry/file-registry.js +48 -0
- package/lib/registry/index.js +3 -0
- package/lib/registry/registry.js +111 -0
- package/lib/require.js +14 -0
- package/lib/soap.js +207 -0
- package/lib/sobject.js +558 -0
- package/lib/soql-builder.js +236 -0
- package/lib/transport.js +233 -0
- package/package.json +110 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.jsforce||(g.jsforce = {}));g=(g.modules||(g.modules = {}));g=(g.api||(g.api = {}));g.Tooling = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
|
2
|
+
/**
|
|
3
|
+
* @file Manages Tooling APIs
|
|
4
|
+
* @author Shinichi Tomita <shinichi.tomita@gmail.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var jsforce = window.jsforce.require('./core'),
|
|
10
|
+
_ = window.jsforce.require('lodash/core'),
|
|
11
|
+
Cache = window.jsforce.require('./cache');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* API class for Tooling API call
|
|
15
|
+
*
|
|
16
|
+
* @class
|
|
17
|
+
* @param {Connection} conn - Connection
|
|
18
|
+
*/
|
|
19
|
+
var Tooling = function(conn) {
|
|
20
|
+
this._conn = conn;
|
|
21
|
+
this._logger = conn._logger;
|
|
22
|
+
var delegates = [
|
|
23
|
+
"query",
|
|
24
|
+
"queryMore",
|
|
25
|
+
"_toRecordResult",
|
|
26
|
+
"create",
|
|
27
|
+
"_createSingle",
|
|
28
|
+
"_createParallel",
|
|
29
|
+
"_createMany",
|
|
30
|
+
"insert",
|
|
31
|
+
"retrieve",
|
|
32
|
+
"_retrieveSingle",
|
|
33
|
+
"_retrieveParallel",
|
|
34
|
+
"_retrieveMany",
|
|
35
|
+
"update",
|
|
36
|
+
"_updateSingle",
|
|
37
|
+
"_updateParallel",
|
|
38
|
+
"_updateMany",
|
|
39
|
+
"upsert",
|
|
40
|
+
"del",
|
|
41
|
+
"delete",
|
|
42
|
+
"destroy",
|
|
43
|
+
"_destroySingle",
|
|
44
|
+
"_destroyParallel",
|
|
45
|
+
"_destroyMany",
|
|
46
|
+
"describe",
|
|
47
|
+
"describeGlobal",
|
|
48
|
+
"sobject"
|
|
49
|
+
];
|
|
50
|
+
delegates.forEach(function(method) {
|
|
51
|
+
this[method] = conn.constructor.prototype[method];
|
|
52
|
+
}, this);
|
|
53
|
+
|
|
54
|
+
this.cache = new Cache();
|
|
55
|
+
|
|
56
|
+
var cacheOptions = {
|
|
57
|
+
key: function(type) { return type ? "describe." + type : "describe"; }
|
|
58
|
+
};
|
|
59
|
+
this.describe$ = this.cache.makeCacheable(this.describe, this, cacheOptions);
|
|
60
|
+
this.describe = this.cache.makeResponseCacheable(this.describe, this, cacheOptions);
|
|
61
|
+
this.describeSObject$ = this.describe$;
|
|
62
|
+
this.describeSObject = this.describe;
|
|
63
|
+
|
|
64
|
+
cacheOptions = { key: 'describeGlobal' };
|
|
65
|
+
this.describeGlobal$ = this.cache.makeCacheable(this.describeGlobal, this, cacheOptions);
|
|
66
|
+
this.describeGlobal = this.cache.makeResponseCacheable(this.describeGlobal, this, cacheOptions);
|
|
67
|
+
|
|
68
|
+
this.initialize();
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Initialize tooling API
|
|
73
|
+
* @protected
|
|
74
|
+
*/
|
|
75
|
+
Tooling.prototype.initialize = function() {
|
|
76
|
+
this.sobjects = {};
|
|
77
|
+
this.cache.clear();
|
|
78
|
+
this.cache.get('describeGlobal').removeAllListeners('value');
|
|
79
|
+
this.cache.get('describeGlobal').on('value', _.bind(function(res) {
|
|
80
|
+
if (res.result) {
|
|
81
|
+
var types = _.map(res.result.sobjects, function(so) { return so.name; });
|
|
82
|
+
types.forEach(this.sobject, this);
|
|
83
|
+
}
|
|
84
|
+
}, this));
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
Tooling.prototype._baseUrl = function() {
|
|
91
|
+
return this._conn._baseUrl() + "/tooling";
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
Tooling.prototype._supports = function(feature) {
|
|
98
|
+
// should return false in order not to use compsite collection
|
|
99
|
+
if (feature === 'sobject-collection') {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
return this._conn._supports.apply(this._conn, arguments);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
Tooling.prototype.request = function() {
|
|
109
|
+
return this._conn.request.apply(this._conn, arguments);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Execute query by using SOQL
|
|
114
|
+
*
|
|
115
|
+
* @param {String} soql - SOQL string
|
|
116
|
+
* @param {Callback.<QueryResult>} [callback] - Callback function
|
|
117
|
+
* @returns {Query.<QueryResult>}
|
|
118
|
+
*/
|
|
119
|
+
/**
|
|
120
|
+
* Query next record set by using query locator
|
|
121
|
+
*
|
|
122
|
+
* @method Tooling#query
|
|
123
|
+
* @param {String} locator - Next record set locator
|
|
124
|
+
* @param {Callback.<QueryResult>} [callback] - Callback function
|
|
125
|
+
* @returns {Query.<QueryResult>}
|
|
126
|
+
*/
|
|
127
|
+
/**
|
|
128
|
+
* Retrieve specified records
|
|
129
|
+
*
|
|
130
|
+
* @method Tooling#queryMore
|
|
131
|
+
* @param {String} type - SObject Type
|
|
132
|
+
* @param {String|Array.<String>} ids - A record ID or array of record IDs
|
|
133
|
+
* @param {Callback.<Record|Array.<Record>>} [callback] - Callback function
|
|
134
|
+
* @returns {Promise.<Record|Array.<Record>>}
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Synonym of Tooling#create()
|
|
139
|
+
*
|
|
140
|
+
* @method Tooling#insert
|
|
141
|
+
* @param {String} type - SObject Type
|
|
142
|
+
* @param {Object|Array.<Object>} records - A record or array of records to create
|
|
143
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function
|
|
144
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
145
|
+
*/
|
|
146
|
+
/**
|
|
147
|
+
* Create records
|
|
148
|
+
*
|
|
149
|
+
* @method Tooling#create
|
|
150
|
+
* @param {String} type - SObject Type
|
|
151
|
+
* @param {Record|Array.<Record>} records - A record or array of records to create
|
|
152
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function
|
|
153
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Update records
|
|
158
|
+
*
|
|
159
|
+
* @method Tooling#update
|
|
160
|
+
* @param {String} type - SObject Type
|
|
161
|
+
* @param {Record|Array.<Record>} records - A record or array of records to update
|
|
162
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function
|
|
163
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Upsert records
|
|
168
|
+
*
|
|
169
|
+
* @method Tooling#upsert
|
|
170
|
+
* @param {String} type - SObject Type
|
|
171
|
+
* @param {Record|Array.<Record>} records - Record or array of records to upsert
|
|
172
|
+
* @param {String} extIdField - External ID field name
|
|
173
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback
|
|
174
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Synonym of Tooling#destroy()
|
|
179
|
+
*
|
|
180
|
+
* @method Tooling#delete
|
|
181
|
+
* @param {String} type - SObject Type
|
|
182
|
+
* @param {String|Array.<String>} ids - A ID or array of IDs to delete
|
|
183
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback
|
|
184
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
185
|
+
*/
|
|
186
|
+
/**
|
|
187
|
+
* Synonym of Tooling#destroy()
|
|
188
|
+
*
|
|
189
|
+
* @method Tooling#del
|
|
190
|
+
* @param {String} type - SObject Type
|
|
191
|
+
* @param {String|Array.<String>} ids - A ID or array of IDs to delete
|
|
192
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback
|
|
193
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
194
|
+
*/
|
|
195
|
+
/**
|
|
196
|
+
* Delete records
|
|
197
|
+
*
|
|
198
|
+
* @method Tooling#destroy
|
|
199
|
+
* @param {String} type - SObject Type
|
|
200
|
+
* @param {String|Array.<String>} ids - A ID or array of IDs to delete
|
|
201
|
+
* @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback
|
|
202
|
+
* @returns {Promise.<RecordResult|Array.<RecordResult>>}
|
|
203
|
+
*/
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Synonym of Tooling#describe()
|
|
207
|
+
*
|
|
208
|
+
* @method Tooling#describeSObject
|
|
209
|
+
* @param {String} type - SObject Type
|
|
210
|
+
* @param {Callback.<DescribeSObjectResult>} [callback] - Callback function
|
|
211
|
+
* @returns {Promise.<DescribeSObjectResult>}
|
|
212
|
+
*/
|
|
213
|
+
/**
|
|
214
|
+
* Describe SObject metadata
|
|
215
|
+
*
|
|
216
|
+
* @method Tooling#describe
|
|
217
|
+
* @param {String} type - SObject Type
|
|
218
|
+
* @param {Callback.<DescribeSObjectResult>} [callback] - Callback function
|
|
219
|
+
* @returns {Promise.<DescribeSObjectResult>}
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Describe global SObjects
|
|
224
|
+
*
|
|
225
|
+
* @method Tooling#describeGlobal
|
|
226
|
+
* @param {Callback.<DescribeGlobalResult>} [callback] - Callback function
|
|
227
|
+
* @returns {Promise.<DescribeGlobalResult>}
|
|
228
|
+
*/
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Get SObject instance
|
|
232
|
+
*
|
|
233
|
+
* @method Tooling#sobject
|
|
234
|
+
* @param {String} type - SObject Type
|
|
235
|
+
* @returns {SObject}
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* @typedef {Object} Tooling~ExecuteAnonymousResult
|
|
240
|
+
* @prop {Boolean} compiled - Flag if the query is compiled successfully
|
|
241
|
+
* @prop {String} compileProblem - Error reason in compilation
|
|
242
|
+
* @prop {Boolean} success - Flag if the code is executed successfully
|
|
243
|
+
* @prop {Number} line - Line number for the error
|
|
244
|
+
* @prop {Number} column - Column number for the error
|
|
245
|
+
* @prop {String} exceptionMessage - Exception message
|
|
246
|
+
* @prop {String} exceptionStackTrace - Exception stack trace
|
|
247
|
+
*/
|
|
248
|
+
/**
|
|
249
|
+
* Executes Apex code anonymously
|
|
250
|
+
*
|
|
251
|
+
* @param {String} body - Anonymous Apex code
|
|
252
|
+
* @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function
|
|
253
|
+
* @returns {Promise.<Tooling~ExecuteAnonymousResult>}
|
|
254
|
+
*/
|
|
255
|
+
Tooling.prototype.executeAnonymous = function(body, callback) {
|
|
256
|
+
var url = this._baseUrl() + "/executeAnonymous?anonymousBody=" + encodeURIComponent(body);
|
|
257
|
+
return this.request(url).thenCall(callback);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Executes Apex tests asynchronously
|
|
262
|
+
*
|
|
263
|
+
* @param {Array.<String>} classids - Comma separated list of class IDs
|
|
264
|
+
* @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function
|
|
265
|
+
* @returns {Promise.<Tooling~ExecuteAnonymousResult>}
|
|
266
|
+
*/
|
|
267
|
+
Tooling.prototype.runTestsAsynchronous = function(classids, callback) {
|
|
268
|
+
var url = this._baseUrl() + "/runTestsAsynchronous/";
|
|
269
|
+
return this._conn.requestPost(url, {classids : classids.join(',')}, undefined, callback);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Executes Apex tests synchronously
|
|
274
|
+
*
|
|
275
|
+
* @param {Array.<String>} classnames - Comma separated list of class Names
|
|
276
|
+
* @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function
|
|
277
|
+
* @returns {Promise.<Tooling~ExecuteAnonymousResult>}
|
|
278
|
+
*/
|
|
279
|
+
Tooling.prototype.runTestsSynchronous = function(classnames, callback) {
|
|
280
|
+
var url = this._baseUrl() + "/runTestsSynchronous/";
|
|
281
|
+
return this._conn.requestPost(url, {classnames : classnames.join(',')}, undefined, callback);
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @typedef {Object} Tooling~CompletionsResult
|
|
286
|
+
* @prop {Object} publicDeclarations
|
|
287
|
+
*/
|
|
288
|
+
/**
|
|
289
|
+
* Retrieves available code completions of the referenced type
|
|
290
|
+
*
|
|
291
|
+
* @param {String} [type] - completion type (default 'apex')
|
|
292
|
+
* @param {Callback.<Tooling~CompletionsResult>} [callback] - Callback function
|
|
293
|
+
* @returns {Promise.<Tooling~CompletionsResult>}
|
|
294
|
+
*/
|
|
295
|
+
Tooling.prototype.completions = function(type, callback) {
|
|
296
|
+
if (!_.isString(type)) {
|
|
297
|
+
callback = type;
|
|
298
|
+
type = 'apex';
|
|
299
|
+
}
|
|
300
|
+
var url = this._baseUrl() + "/completions?type=" + encodeURIComponent(type);
|
|
301
|
+
return this.request(url).thenCall(callback);
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
/*--------------------------------------------*/
|
|
306
|
+
/*
|
|
307
|
+
* Register hook in connection instantiation for dynamically adding this API module features
|
|
308
|
+
*/
|
|
309
|
+
jsforce.on('connection:new', function(conn) {
|
|
310
|
+
conn.tooling = new Tooling(conn);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
module.exports = Tooling;
|
|
315
|
+
|
|
316
|
+
},{}]},{},[1])(1)
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYXBpL3Rvb2xpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqXG4gKiBAZmlsZSBNYW5hZ2VzIFRvb2xpbmcgQVBJc1xuICogQGF1dGhvciBTaGluaWNoaSBUb21pdGEgPHNoaW5pY2hpLnRvbWl0YUBnbWFpbC5jb20+XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIganNmb3JjZSA9IHdpbmRvdy5qc2ZvcmNlLnJlcXVpcmUoJy4vY29yZScpLFxuICAgIF8gICAgID0gd2luZG93LmpzZm9yY2UucmVxdWlyZSgnbG9kYXNoL2NvcmUnKSxcbiAgICBDYWNoZSA9IHdpbmRvdy5qc2ZvcmNlLnJlcXVpcmUoJy4vY2FjaGUnKTtcblxuLyoqXG4gKiBBUEkgY2xhc3MgZm9yIFRvb2xpbmcgQVBJIGNhbGxcbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7Q29ubmVjdGlvbn0gY29ubiAtIENvbm5lY3Rpb25cbiAqL1xudmFyIFRvb2xpbmcgPSBmdW5jdGlvbihjb25uKSB7XG4gIHRoaXMuX2Nvbm4gPSBjb25uO1xuICB0aGlzLl9sb2dnZXIgPSBjb25uLl9sb2dnZXI7XG4gIHZhciBkZWxlZ2F0ZXMgPSBbXG4gICAgXCJxdWVyeVwiLFxuICAgIFwicXVlcnlNb3JlXCIsXG4gICAgXCJfdG9SZWNvcmRSZXN1bHRcIixcbiAgICBcImNyZWF0ZVwiLFxuICAgIFwiX2NyZWF0ZVNpbmdsZVwiLFxuICAgIFwiX2NyZWF0ZVBhcmFsbGVsXCIsXG4gICAgXCJfY3JlYXRlTWFueVwiLFxuICAgIFwiaW5zZXJ0XCIsXG4gICAgXCJyZXRyaWV2ZVwiLFxuICAgIFwiX3JldHJpZXZlU2luZ2xlXCIsXG4gICAgXCJfcmV0cmlldmVQYXJhbGxlbFwiLFxuICAgIFwiX3JldHJpZXZlTWFueVwiLFxuICAgIFwidXBkYXRlXCIsXG4gICAgXCJfdXBkYXRlU2luZ2xlXCIsXG4gICAgXCJfdXBkYXRlUGFyYWxsZWxcIixcbiAgICBcIl91cGRhdGVNYW55XCIsXG4gICAgXCJ1cHNlcnRcIixcbiAgICBcImRlbFwiLFxuICAgIFwiZGVsZXRlXCIsXG4gICAgXCJkZXN0cm95XCIsXG4gICAgXCJfZGVzdHJveVNpbmdsZVwiLFxuICAgIFwiX2Rlc3Ryb3lQYXJhbGxlbFwiLFxuICAgIFwiX2Rlc3Ryb3lNYW55XCIsXG4gICAgXCJkZXNjcmliZVwiLFxuICAgIFwiZGVzY3JpYmVHbG9iYWxcIixcbiAgICBcInNvYmplY3RcIlxuICBdO1xuICBkZWxlZ2F0ZXMuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICB0aGlzW21ldGhvZF0gPSBjb25uLmNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2RdO1xuICB9LCB0aGlzKTtcblxuICB0aGlzLmNhY2hlID0gbmV3IENhY2hlKCk7XG5cbiAgdmFyIGNhY2hlT3B0aW9ucyA9IHtcbiAgICBrZXk6IGZ1bmN0aW9uKHR5cGUpIHsgcmV0dXJuIHR5cGUgPyBcImRlc2NyaWJlLlwiICsgdHlwZSA6IFwiZGVzY3JpYmVcIjsgfVxuICB9O1xuICB0aGlzLmRlc2NyaWJlJCA9IHRoaXMuY2FjaGUubWFrZUNhY2hlYWJsZSh0aGlzLmRlc2NyaWJlLCB0aGlzLCBjYWNoZU9wdGlvbnMpO1xuICB0aGlzLmRlc2NyaWJlID0gdGhpcy5jYWNoZS5tYWtlUmVzcG9uc2VDYWNoZWFibGUodGhpcy5kZXNjcmliZSwgdGhpcywgY2FjaGVPcHRpb25zKTtcbiAgdGhpcy5kZXNjcmliZVNPYmplY3QkID0gdGhpcy5kZXNjcmliZSQ7XG4gIHRoaXMuZGVzY3JpYmVTT2JqZWN0ID0gdGhpcy5kZXNjcmliZTtcblxuICBjYWNoZU9wdGlvbnMgPSB7IGtleTogJ2Rlc2NyaWJlR2xvYmFsJyB9O1xuICB0aGlzLmRlc2NyaWJlR2xvYmFsJCA9IHRoaXMuY2FjaGUubWFrZUNhY2hlYWJsZSh0aGlzLmRlc2NyaWJlR2xvYmFsLCB0aGlzLCBjYWNoZU9wdGlvbnMpO1xuICB0aGlzLmRlc2NyaWJlR2xvYmFsID0gdGhpcy5jYWNoZS5tYWtlUmVzcG9uc2VDYWNoZWFibGUodGhpcy5kZXNjcmliZUdsb2JhbCwgdGhpcywgY2FjaGVPcHRpb25zKTtcblxuICB0aGlzLmluaXRpYWxpemUoKTtcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0b29saW5nIEFQSVxuICogQHByb3RlY3RlZFxuICovXG5Ub29saW5nLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc29iamVjdHMgPSB7fTtcbiAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB0aGlzLmNhY2hlLmdldCgnZGVzY3JpYmVHbG9iYWwnKS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3ZhbHVlJyk7XG4gIHRoaXMuY2FjaGUuZ2V0KCdkZXNjcmliZUdsb2JhbCcpLm9uKCd2YWx1ZScsIF8uYmluZChmdW5jdGlvbihyZXMpIHtcbiAgICBpZiAocmVzLnJlc3VsdCkge1xuICAgICAgdmFyIHR5cGVzID0gXy5tYXAocmVzLnJlc3VsdC5zb2JqZWN0cywgZnVuY3Rpb24oc28pIHsgcmV0dXJuIHNvLm5hbWU7IH0pO1xuICAgICAgdHlwZXMuZm9yRWFjaCh0aGlzLnNvYmplY3QsIHRoaXMpO1xuICAgIH1cbiAgfSwgdGhpcykpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5Ub29saW5nLnByb3RvdHlwZS5fYmFzZVVybCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY29ubi5fYmFzZVVybCgpICsgXCIvdG9vbGluZ1wiO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5Ub29saW5nLnByb3RvdHlwZS5fc3VwcG9ydHMgPSBmdW5jdGlvbihmZWF0dXJlKSB7XG4gIC8vIHNob3VsZCByZXR1cm4gZmFsc2UgaW4gb3JkZXIgbm90IHRvIHVzZSBjb21wc2l0ZSBjb2xsZWN0aW9uXG4gIGlmIChmZWF0dXJlID09PSAnc29iamVjdC1jb2xsZWN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fY29ubi5fc3VwcG9ydHMuYXBwbHkodGhpcy5fY29ubiwgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuVG9vbGluZy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fY29ubi5yZXF1ZXN0LmFwcGx5KHRoaXMuX2Nvbm4sIGFyZ3VtZW50cyk7XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgcXVlcnkgYnkgdXNpbmcgU09RTFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3FsIC0gU09RTCBzdHJpbmdcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPFF1ZXJ5UmVzdWx0Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7UXVlcnkuPFF1ZXJ5UmVzdWx0Pn1cbiAqL1xuLyoqXG4gKiBRdWVyeSBuZXh0IHJlY29yZCBzZXQgYnkgdXNpbmcgcXVlcnkgbG9jYXRvclxuICpcbiAqIEBtZXRob2QgVG9vbGluZyNxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd9IGxvY2F0b3IgLSBOZXh0IHJlY29yZCBzZXQgbG9jYXRvclxuICogQHBhcmFtIHtDYWxsYmFjay48UXVlcnlSZXN1bHQ+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtRdWVyeS48UXVlcnlSZXN1bHQ+fVxuICovXG4vKipcbiAqIFJldHJpZXZlIHNwZWNpZmllZCByZWNvcmRzXG4gKlxuICogQG1ldGhvZCBUb29saW5nI3F1ZXJ5TW9yZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBpZHMgLSBBIHJlY29yZCBJRCBvciBhcnJheSBvZiByZWNvcmQgSURzXG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxSZWNvcmR8QXJyYXkuPFJlY29yZD4+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtQcm9taXNlLjxSZWNvcmR8QXJyYXkuPFJlY29yZD4+fVxuICovXG5cbi8qKlxuICogU3lub255bSBvZiBUb29saW5nI2NyZWF0ZSgpXG4gKlxuICogQG1ldGhvZCBUb29saW5nI2luc2VydFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5LjxPYmplY3Q+fSByZWNvcmRzIC0gQSByZWNvcmQgb3IgYXJyYXkgb2YgcmVjb3JkcyB0byBjcmVhdGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPFJlY29yZFJlc3VsdHxBcnJheS48UmVjb3JkUmVzdWx0Pj59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPFJlY29yZFJlc3VsdHxBcnJheS48UmVjb3JkUmVzdWx0Pj59XG4gKi9cbi8qKlxuICogQ3JlYXRlIHJlY29yZHNcbiAqXG4gKiBAbWV0aG9kIFRvb2xpbmcjY3JlYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFNPYmplY3QgVHlwZVxuICogQHBhcmFtIHtSZWNvcmR8QXJyYXkuPFJlY29yZD59IHJlY29yZHMgLSBBIHJlY29yZCBvciBhcnJheSBvZiByZWNvcmRzIHRvIGNyZWF0ZVxuICogQHBhcmFtIHtDYWxsYmFjay48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn1cbiAqL1xuXG4vKipcbiAqIFVwZGF0ZSByZWNvcmRzXG4gKlxuICogQG1ldGhvZCBUb29saW5nI3VwZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEBwYXJhbSB7UmVjb3JkfEFycmF5LjxSZWNvcmQ+fSByZWNvcmRzIC0gQSByZWNvcmQgb3IgYXJyYXkgb2YgcmVjb3JkcyB0byB1cGRhdGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPFJlY29yZFJlc3VsdHxBcnJheS48UmVjb3JkUmVzdWx0Pj59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPFJlY29yZFJlc3VsdHxBcnJheS48UmVjb3JkUmVzdWx0Pj59XG4gKi9cblxuLyoqXG4gKiBVcHNlcnQgcmVjb3Jkc1xuICpcbiAqIEBtZXRob2QgVG9vbGluZyN1cHNlcnRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIC0gU09iamVjdCBUeXBlXG4gKiBAcGFyYW0ge1JlY29yZHxBcnJheS48UmVjb3JkPn0gcmVjb3JkcyAtIFJlY29yZCBvciBhcnJheSBvZiByZWNvcmRzIHRvIHVwc2VydFxuICogQHBhcmFtIHtTdHJpbmd9IGV4dElkRmllbGQgLSBFeHRlcm5hbCBJRCBmaWVsZCBuYW1lXG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxSZWNvcmRSZXN1bHR8QXJyYXkuPFJlY29yZFJlc3VsdD4+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2tcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxSZWNvcmRSZXN1bHR8QXJyYXkuPFJlY29yZFJlc3VsdD4+fVxuICovXG5cbi8qKlxuICogU3lub255bSBvZiBUb29saW5nI2Rlc3Ryb3koKVxuICpcbiAqIEBtZXRob2QgVG9vbGluZyNkZWxldGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIC0gU09iamVjdCBUeXBlXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gaWRzIC0gQSBJRCBvciBhcnJheSBvZiBJRHMgdG8gZGVsZXRlXG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxSZWNvcmRSZXN1bHR8QXJyYXkuPFJlY29yZFJlc3VsdD4+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2tcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxSZWNvcmRSZXN1bHR8QXJyYXkuPFJlY29yZFJlc3VsdD4+fVxuICovXG4vKipcbiAqIFN5bm9ueW0gb2YgVG9vbGluZyNkZXN0cm95KClcbiAqXG4gKiBAbWV0aG9kIFRvb2xpbmcjZGVsXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFNPYmplY3QgVHlwZVxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGlkcyAtIEEgSUQgb3IgYXJyYXkgb2YgSURzIHRvIGRlbGV0ZVxuICogQHBhcmFtIHtDYWxsYmFjay48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn1cbiAqL1xuLyoqXG4gKiBEZWxldGUgcmVjb3Jkc1xuICpcbiAqIEBtZXRob2QgVG9vbGluZyNkZXN0cm95XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFNPYmplY3QgVHlwZVxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGlkcyAtIEEgSUQgb3IgYXJyYXkgb2YgSURzIHRvIGRlbGV0ZVxuICogQHBhcmFtIHtDYWxsYmFjay48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48UmVjb3JkUmVzdWx0fEFycmF5LjxSZWNvcmRSZXN1bHQ+Pn1cbiAqL1xuXG4vKipcbiAqIFN5bm9ueW0gb2YgVG9vbGluZyNkZXNjcmliZSgpXG4gKlxuICogQG1ldGhvZCBUb29saW5nI2Rlc2NyaWJlU09iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPERlc2NyaWJlU09iamVjdFJlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPERlc2NyaWJlU09iamVjdFJlc3VsdD59XG4gKi9cbi8qKlxuICogRGVzY3JpYmUgU09iamVjdCBtZXRhZGF0YVxuICpcbiAqIEBtZXRob2QgVG9vbGluZyNkZXNjcmliZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPERlc2NyaWJlU09iamVjdFJlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPERlc2NyaWJlU09iamVjdFJlc3VsdD59XG4gKi9cblxuLyoqXG4gKiBEZXNjcmliZSBnbG9iYWwgU09iamVjdHNcbiAqXG4gKiBAbWV0aG9kIFRvb2xpbmcjZGVzY3JpYmVHbG9iYWxcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPERlc2NyaWJlR2xvYmFsUmVzdWx0Pn0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48RGVzY3JpYmVHbG9iYWxSZXN1bHQ+fVxuICovXG5cbi8qKlxuICogR2V0IFNPYmplY3QgaW5zdGFuY2VcbiAqXG4gKiBAbWV0aG9kIFRvb2xpbmcjc29iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTT2JqZWN0IFR5cGVcbiAqIEByZXR1cm5zIHtTT2JqZWN0fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVG9vbGluZ35FeGVjdXRlQW5vbnltb3VzUmVzdWx0XG4gKiBAcHJvcCB7Qm9vbGVhbn0gY29tcGlsZWQgLSBGbGFnIGlmIHRoZSBxdWVyeSBpcyBjb21waWxlZCBzdWNjZXNzZnVsbHlcbiAqIEBwcm9wIHtTdHJpbmd9IGNvbXBpbGVQcm9ibGVtIC0gRXJyb3IgcmVhc29uIGluIGNvbXBpbGF0aW9uXG4gKiBAcHJvcCB7Qm9vbGVhbn0gc3VjY2VzcyAtIEZsYWcgaWYgdGhlIGNvZGUgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gKiBAcHJvcCB7TnVtYmVyfSBsaW5lIC0gTGluZSBudW1iZXIgZm9yIHRoZSBlcnJvclxuICogQHByb3Age051bWJlcn0gY29sdW1uIC0gQ29sdW1uIG51bWJlciBmb3IgdGhlIGVycm9yXG4gKiBAcHJvcCB7U3RyaW5nfSBleGNlcHRpb25NZXNzYWdlIC0gRXhjZXB0aW9uIG1lc3NhZ2VcbiAqIEBwcm9wIHtTdHJpbmd9IGV4Y2VwdGlvblN0YWNrVHJhY2UgLSBFeGNlcHRpb24gc3RhY2sgdHJhY2VcbiAqL1xuLyoqXG4gKiBFeGVjdXRlcyBBcGV4IGNvZGUgYW5vbnltb3VzbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYm9keSAtIEFub255bW91cyBBcGV4IGNvZGVcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPFRvb2xpbmd+RXhlY3V0ZUFub255bW91c1Jlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPFRvb2xpbmd+RXhlY3V0ZUFub255bW91c1Jlc3VsdD59XG4gKi9cblRvb2xpbmcucHJvdG90eXBlLmV4ZWN1dGVBbm9ueW1vdXMgPSBmdW5jdGlvbihib2R5LCBjYWxsYmFjaykge1xuICB2YXIgdXJsID0gdGhpcy5fYmFzZVVybCgpICsgXCIvZXhlY3V0ZUFub255bW91cz9hbm9ueW1vdXNCb2R5PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpO1xuICByZXR1cm4gdGhpcy5yZXF1ZXN0KHVybCkudGhlbkNhbGwoY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBFeGVjdXRlcyBBcGV4IHRlc3RzIGFzeW5jaHJvbm91c2x5XG4gKlxuICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gY2xhc3NpZHMgLSBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBJRHNcbiAqIEBwYXJhbSB7Q2FsbGJhY2suPFRvb2xpbmd+RXhlY3V0ZUFub255bW91c1Jlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPFRvb2xpbmd+RXhlY3V0ZUFub255bW91c1Jlc3VsdD59XG4gKi9cblRvb2xpbmcucHJvdG90eXBlLnJ1blRlc3RzQXN5bmNocm9ub3VzID0gZnVuY3Rpb24oY2xhc3NpZHMsIGNhbGxiYWNrKSB7XG4gIHZhciB1cmwgPSB0aGlzLl9iYXNlVXJsKCkgKyBcIi9ydW5UZXN0c0FzeW5jaHJvbm91cy9cIjtcbiAgcmV0dXJuIHRoaXMuX2Nvbm4ucmVxdWVzdFBvc3QodXJsLCB7Y2xhc3NpZHMgOiBjbGFzc2lkcy5qb2luKCcsJyl9LCB1bmRlZmluZWQsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgQXBleCB0ZXN0cyBzeW5jaHJvbm91c2x5XG4gKlxuICogQHBhcmFtIHtBcnJheS48U3RyaW5nPn0gY2xhc3NuYW1lcyAtIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzIE5hbWVzXG4gKiBAcGFyYW0ge0NhbGxiYWNrLjxUb29saW5nfkV4ZWN1dGVBbm9ueW1vdXNSZXN1bHQ+fSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtQcm9taXNlLjxUb29saW5nfkV4ZWN1dGVBbm9ueW1vdXNSZXN1bHQ+fVxuICovXG5Ub29saW5nLnByb3RvdHlwZS5ydW5UZXN0c1N5bmNocm9ub3VzID0gZnVuY3Rpb24oY2xhc3NuYW1lcywgY2FsbGJhY2spIHtcbiAgdmFyIHVybCA9IHRoaXMuX2Jhc2VVcmwoKSArIFwiL3J1blRlc3RzU3luY2hyb25vdXMvXCI7XG4gIHJldHVybiB0aGlzLl9jb25uLnJlcXVlc3RQb3N0KHVybCwge2NsYXNzbmFtZXMgOiBjbGFzc25hbWVzLmpvaW4oJywnKX0sIHVuZGVmaW5lZCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUb29saW5nfkNvbXBsZXRpb25zUmVzdWx0XG4gKiBAcHJvcCB7T2JqZWN0fSBwdWJsaWNEZWNsYXJhdGlvbnNcbiAqL1xuLyoqXG4gKiBSZXRyaWV2ZXMgYXZhaWxhYmxlIGNvZGUgY29tcGxldGlvbnMgb2YgdGhlIHJlZmVyZW5jZWQgdHlwZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbdHlwZV0gLSBjb21wbGV0aW9uIHR5cGUgKGRlZmF1bHQgJ2FwZXgnKVxuICogQHBhcmFtIHtDYWxsYmFjay48VG9vbGluZ35Db21wbGV0aW9uc1Jlc3VsdD59IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge1Byb21pc2UuPFRvb2xpbmd+Q29tcGxldGlvbnNSZXN1bHQ+fVxuICovXG5Ub29saW5nLnByb3RvdHlwZS5jb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrKSB7XG4gIGlmICghXy5pc1N0cmluZyh0eXBlKSkge1xuICAgIGNhbGxiYWNrID0gdHlwZTtcbiAgICB0eXBlID0gJ2FwZXgnO1xuICB9XG4gIHZhciB1cmwgPSB0aGlzLl9iYXNlVXJsKCkgKyBcIi9jb21wbGV0aW9ucz90eXBlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHR5cGUpO1xuICByZXR1cm4gdGhpcy5yZXF1ZXN0KHVybCkudGhlbkNhbGwoY2FsbGJhY2spO1xufTtcblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qXG4gKiBSZWdpc3RlciBob29rIGluIGNvbm5lY3Rpb24gaW5zdGFudGlhdGlvbiBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIHRoaXMgQVBJIG1vZHVsZSBmZWF0dXJlc1xuICovXG5qc2ZvcmNlLm9uKCdjb25uZWN0aW9uOm5ldycsIGZ1bmN0aW9uKGNvbm4pIHtcbiAgY29ubi50b29saW5nID0gbmV3IFRvb2xpbmcoY29ubik7XG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2xpbmc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e){var t;"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):(t=(t=(t=(t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jsforce||(t.jsforce={})).modules||(t.modules={})).api||(t.api={})).Tooling=e()}(function(){return function n(r,s,i){function c(t,e){if(!s[t]){if(!r[t]){var o="function"==typeof require&&require;if(!e&&o)return o(t,!0);if(u)return u(t,!0);throw(o=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",o}o=s[t]={exports:{}},r[t][0].call(o.exports,function(e){return c(r[t][1][e]||e)},o,o.exports,n,r,s,i)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;e<i.length;e++)c(i[e]);return c}({1:[function(e,t,o){"use strict";function n(t){this._conn=t,this._logger=t._logger,["query","queryMore","_toRecordResult","create","_createSingle","_createParallel","_createMany","insert","retrieve","_retrieveSingle","_retrieveParallel","_retrieveMany","update","_updateSingle","_updateParallel","_updateMany","upsert","del","delete","destroy","_destroySingle","_destroyParallel","_destroyMany","describe","describeGlobal","sobject"].forEach(function(e){this[e]=t.constructor.prototype[e]},this),this.cache=new i;var e={key:function(e){return e?"describe."+e:"describe"}};this.describe$=this.cache.makeCacheable(this.describe,this,e),this.describe=this.cache.makeResponseCacheable(this.describe,this,e),this.describeSObject$=this.describe$,this.describeSObject=this.describe,e={key:"describeGlobal"},this.describeGlobal$=this.cache.makeCacheable(this.describeGlobal,this,e),this.describeGlobal=this.cache.makeResponseCacheable(this.describeGlobal,this,e),this.initialize()}var r=window.jsforce.require("./core"),s=window.jsforce.require("lodash/core"),i=window.jsforce.require("./cache");n.prototype.initialize=function(){this.sobjects={},this.cache.clear(),this.cache.get("describeGlobal").removeAllListeners("value"),this.cache.get("describeGlobal").on("value",s.bind(function(e){e.result&&s.map(e.result.sobjects,function(e){return e.name}).forEach(this.sobject,this)},this))},n.prototype._baseUrl=function(){return this._conn._baseUrl()+"/tooling"},n.prototype._supports=function(e){return"sobject-collection"!==e&&this._conn._supports.apply(this._conn,arguments)},n.prototype.request=function(){return this._conn.request.apply(this._conn,arguments)},n.prototype.executeAnonymous=function(e,t){e=this._baseUrl()+"/executeAnonymous?anonymousBody="+encodeURIComponent(e);return this.request(e).thenCall(t)},n.prototype.runTestsAsynchronous=function(e,t){var o=this._baseUrl()+"/runTestsAsynchronous/";return this._conn.requestPost(o,{classids:e.join(",")},void 0,t)},n.prototype.runTestsSynchronous=function(e,t){var o=this._baseUrl()+"/runTestsSynchronous/";return this._conn.requestPost(o,{classnames:e.join(",")},void 0,t)},n.prototype.completions=function(e,t){s.isString(e)||(t=e,e="apex");e=this._baseUrl()+"/completions?type="+encodeURIComponent(e);return this.request(e).thenCall(t)},r.on("connection:new",function(e){e.tooling=new n(e)}),t.exports=n},{}]},{},[1])(1)});
|
|
2
|
+
//# sourceMappingURL=jsforce-api-tooling.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/api/tooling.js"],"names":["f","g","exports","module","define","amd","window","global","self","this","jsforce","modules","api","Tooling","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","conn","_conn","_logger","forEach","method","constructor","prototype","cache","Cache","cacheOptions","key","type","describe$","makeCacheable","describe","makeResponseCacheable","describeSObject$","describeSObject","describeGlobal$","describeGlobal","initialize","_","sobjects","clear","get","removeAllListeners","on","bind","res","result","map","so","name","sobject","_baseUrl","_supports","feature","apply","arguments","request","executeAnonymous","body","callback","url","encodeURIComponent","thenCall","runTestsAsynchronous","classids","requestPost","join","undefined","runTestsSynchronous","classnames","completions","isString","tooling"],"mappings":"CAAA,SAAAA,GAAA,IAAAC,EAAA,iBAAAC,SAAA,oBAAAC,OAAAA,OAAAD,QAAAF,IAAA,mBAAAI,QAAAA,OAAAC,IAAAD,OAAA,GAAAJ,IAAAC,GAAAA,GAAAA,GAAAA,EAAA,oBAAAK,OAAAA,OAAA,oBAAAC,OAAAA,OAAA,oBAAAC,KAAAA,KAAAC,MAAAC,UAAAT,EAAAS,QAAA,KAAAC,UAAAV,EAAAU,QAAA,KAAAC,MAAAX,EAAAW,IAAA,KAAAC,QAAAb,IAAA,CAAA,WAAA,OAAA,SAAAc,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAnB,GAAA,IAAAgB,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,IAAAC,EAAA,mBAAAC,SAAAA,QAAA,IAAArB,GAAAoB,EAAA,OAAAA,EAAAD,GAAA,GAAA,GAAAG,EAAA,OAAAA,EAAAH,GAAA,GAAA,MAAAI,EAAA,IAAAC,MAAA,uBAAAL,EAAA,MAAAM,KAAA,mBAAAF,EAAAG,EAAAV,EAAAG,GAAA,CAAAjB,QAAA,IAAAa,EAAAI,GAAA,GAAAQ,KAAAD,EAAAxB,QAAA,SAAAY,GAAA,OAAAI,EAAAH,EAAAI,GAAA,GAAAL,IAAAA,IAAAY,EAAAA,EAAAxB,QAAAY,EAAAC,EAAAC,EAAAC,GAAA,OAAAD,EAAAG,GAAAjB,QAAA,IAAA,IAAAoB,EAAA,mBAAAD,SAAAA,QAAAF,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,IAAA,OAAAD,EAAA,CAAA,CAAAW,EAAA,CAAA,SAAAR,EAAAlB,EAAAD,gBCiBA,SAAAW,EAAAiB,GACArB,KAAAsB,MAAAD,EACArB,KAAAuB,QAAAF,EAAAE,QACA,CACA,QACA,YACA,kBACA,SACA,gBACA,kBACA,cACA,SACA,WACA,kBACA,oBACA,gBACA,SACA,gBACA,kBACA,cACA,SACA,MACA,SACA,UACA,iBACA,mBACA,eACA,WACA,iBACA,WAEAC,QAAA,SAAAC,GACAzB,KAAAyB,GAAAJ,EAAAK,YAAAC,UAAAF,IACAzB,MAEAA,KAAA4B,MAAA,IAAAC,EAEA,IAAAC,EAAA,CACAC,IAAA,SAAAC,GAAA,OAAAA,EAAA,YAAAA,EAAA,aAEAhC,KAAAiC,UAAAjC,KAAA4B,MAAAM,cAAAlC,KAAAmC,SAAAnC,KAAA8B,GACA9B,KAAAmC,SAAAnC,KAAA4B,MAAAQ,sBAAApC,KAAAmC,SAAAnC,KAAA8B,GACA9B,KAAAqC,iBAAArC,KAAAiC,UACAjC,KAAAsC,gBAAAtC,KAAAmC,SAEAL,EAAA,CAAAC,IAAA,kBACA/B,KAAAuC,gBAAAvC,KAAA4B,MAAAM,cAAAlC,KAAAwC,eAAAxC,KAAA8B,GACA9B,KAAAwC,eAAAxC,KAAA4B,MAAAQ,sBAAApC,KAAAwC,eAAAxC,KAAA8B,GAEA9B,KAAAyC,aA3DA,IAAAxC,EAAAJ,OAAAI,QAAAW,QAAA,UACA8B,EAAA7C,OAAAI,QAAAW,QAAA,eACAiB,EAAAhC,OAAAI,QAAAW,QAAA,WAgEAR,EAAAuB,UAAAc,WAAA,WACAzC,KAAA2C,SAAA,GACA3C,KAAA4B,MAAAgB,QACA5C,KAAA4B,MAAAiB,IAAA,kBAAAC,mBAAA,SACA9C,KAAA4B,MAAAiB,IAAA,kBAAAE,GAAA,QAAAL,EAAAM,KAAA,SAAAC,GACAA,EAAAC,QACAR,EAAAS,IAAAF,EAAAC,OAAAP,SAAA,SAAAS,GAAA,OAAAA,EAAAC,OACA7B,QAAAxB,KAAAsD,QAAAtD,OAEAA,QAMAI,EAAAuB,UAAA4B,SAAA,WACA,OAAAvD,KAAAsB,MAAAiC,WAAA,YAMAnD,EAAAuB,UAAA6B,UAAA,SAAAC,GAEA,MAAA,uBAAAA,GAGAzD,KAAAsB,MAAAkC,UAAAE,MAAA1D,KAAAsB,MAAAqC,YAMAvD,EAAAuB,UAAAiC,QAAA,WACA,OAAA5D,KAAAsB,MAAAsC,QAAAF,MAAA1D,KAAAsB,MAAAqC,YAkJAvD,EAAAuB,UAAAkC,iBAAA,SAAAC,EAAAC,GACAC,EAAAhE,KAAAuD,WAAA,mCAAAU,mBAAAH,GACA,OAAA9D,KAAA4D,QAAAI,GAAAE,SAAAH,IAUA3D,EAAAuB,UAAAwC,qBAAA,SAAAC,EAAAL,GACA,IAAAC,EAAAhE,KAAAuD,WAAA,yBACA,OAAAvD,KAAAsB,MAAA+C,YAAAL,EAAA,CAAAI,SAAAA,EAAAE,KAAA,WAAAC,EAAAR,IAUA3D,EAAAuB,UAAA6C,oBAAA,SAAAC,EAAAV,GACA,IAAAC,EAAAhE,KAAAuD,WAAA,wBACA,OAAAvD,KAAAsB,MAAA+C,YAAAL,EAAA,CAAAS,WAAAA,EAAAH,KAAA,WAAAC,EAAAR,IAcA3D,EAAAuB,UAAA+C,YAAA,SAAA1C,EAAA+B,GACArB,EAAAiC,SAAA3C,KACA+B,EAAA/B,EACAA,EAAA,QAEAgC,EAAAhE,KAAAuD,WAAA,qBAAAU,mBAAAjC,GACA,OAAAhC,KAAA4D,QAAAI,GAAAE,SAAAH,IAQA9D,EAAA8C,GAAA,iBAAA,SAAA1B,GACAA,EAAAuD,QAAA,IAAAxE,EAAAiB,KAIA3B,EAAAD,QAAAW,eDxTA","file":"jsforce-api-tooling.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/**\n * @file Manages Tooling APIs\n * @author Shinichi Tomita <shinichi.tomita@gmail.com>\n */\n\n'use strict';\n\nvar jsforce = window.jsforce.require('./core'),\n _ = window.jsforce.require('lodash/core'),\n Cache = window.jsforce.require('./cache');\n\n/**\n * API class for Tooling API call\n *\n * @class\n * @param {Connection} conn - Connection\n */\nvar Tooling = function(conn) {\n this._conn = conn;\n this._logger = conn._logger;\n var delegates = [\n \"query\",\n \"queryMore\",\n \"_toRecordResult\",\n \"create\",\n \"_createSingle\",\n \"_createParallel\",\n \"_createMany\",\n \"insert\",\n \"retrieve\",\n \"_retrieveSingle\",\n \"_retrieveParallel\",\n \"_retrieveMany\",\n \"update\",\n \"_updateSingle\",\n \"_updateParallel\",\n \"_updateMany\",\n \"upsert\",\n \"del\",\n \"delete\",\n \"destroy\",\n \"_destroySingle\",\n \"_destroyParallel\",\n \"_destroyMany\",\n \"describe\",\n \"describeGlobal\",\n \"sobject\"\n ];\n delegates.forEach(function(method) {\n this[method] = conn.constructor.prototype[method];\n }, this);\n\n this.cache = new Cache();\n\n var cacheOptions = {\n key: function(type) { return type ? \"describe.\" + type : \"describe\"; }\n };\n this.describe$ = this.cache.makeCacheable(this.describe, this, cacheOptions);\n this.describe = this.cache.makeResponseCacheable(this.describe, this, cacheOptions);\n this.describeSObject$ = this.describe$;\n this.describeSObject = this.describe;\n\n cacheOptions = { key: 'describeGlobal' };\n this.describeGlobal$ = this.cache.makeCacheable(this.describeGlobal, this, cacheOptions);\n this.describeGlobal = this.cache.makeResponseCacheable(this.describeGlobal, this, cacheOptions);\n\n this.initialize();\n};\n\n/**\n * Initialize tooling API\n * @protected\n */\nTooling.prototype.initialize = function() {\n this.sobjects = {};\n this.cache.clear();\n this.cache.get('describeGlobal').removeAllListeners('value');\n this.cache.get('describeGlobal').on('value', _.bind(function(res) {\n if (res.result) {\n var types = _.map(res.result.sobjects, function(so) { return so.name; });\n types.forEach(this.sobject, this);\n }\n }, this));\n};\n\n/**\n * @private\n */\nTooling.prototype._baseUrl = function() {\n return this._conn._baseUrl() + \"/tooling\";\n};\n\n/**\n * @private\n */\nTooling.prototype._supports = function(feature) {\n // should return false in order not to use compsite collection\n if (feature === 'sobject-collection') {\n return false;\n }\n return this._conn._supports.apply(this._conn, arguments);\n};\n\n/**\n * @private\n */\nTooling.prototype.request = function() {\n return this._conn.request.apply(this._conn, arguments);\n};\n\n/**\n * Execute query by using SOQL\n *\n * @param {String} soql - SOQL string\n * @param {Callback.<QueryResult>} [callback] - Callback function\n * @returns {Query.<QueryResult>}\n */\n/**\n * Query next record set by using query locator\n *\n * @method Tooling#query\n * @param {String} locator - Next record set locator\n * @param {Callback.<QueryResult>} [callback] - Callback function\n * @returns {Query.<QueryResult>}\n */\n/**\n * Retrieve specified records\n *\n * @method Tooling#queryMore\n * @param {String} type - SObject Type\n * @param {String|Array.<String>} ids - A record ID or array of record IDs\n * @param {Callback.<Record|Array.<Record>>} [callback] - Callback function\n * @returns {Promise.<Record|Array.<Record>>}\n */\n\n/**\n * Synonym of Tooling#create()\n *\n * @method Tooling#insert\n * @param {String} type - SObject Type\n * @param {Object|Array.<Object>} records - A record or array of records to create\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n/**\n * Create records\n *\n * @method Tooling#create\n * @param {String} type - SObject Type\n * @param {Record|Array.<Record>} records - A record or array of records to create\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n\n/**\n * Update records\n *\n * @method Tooling#update\n * @param {String} type - SObject Type\n * @param {Record|Array.<Record>} records - A record or array of records to update\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback function\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n\n/**\n * Upsert records\n *\n * @method Tooling#upsert\n * @param {String} type - SObject Type\n * @param {Record|Array.<Record>} records - Record or array of records to upsert\n * @param {String} extIdField - External ID field name\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n\n/**\n * Synonym of Tooling#destroy()\n *\n * @method Tooling#delete\n * @param {String} type - SObject Type\n * @param {String|Array.<String>} ids - A ID or array of IDs to delete\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n/**\n * Synonym of Tooling#destroy()\n *\n * @method Tooling#del\n * @param {String} type - SObject Type\n * @param {String|Array.<String>} ids - A ID or array of IDs to delete\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n/**\n * Delete records\n *\n * @method Tooling#destroy\n * @param {String} type - SObject Type\n * @param {String|Array.<String>} ids - A ID or array of IDs to delete\n * @param {Callback.<RecordResult|Array.<RecordResult>>} [callback] - Callback\n * @returns {Promise.<RecordResult|Array.<RecordResult>>}\n */\n\n/**\n * Synonym of Tooling#describe()\n *\n * @method Tooling#describeSObject\n * @param {String} type - SObject Type\n * @param {Callback.<DescribeSObjectResult>} [callback] - Callback function\n * @returns {Promise.<DescribeSObjectResult>}\n */\n/**\n * Describe SObject metadata\n *\n * @method Tooling#describe\n * @param {String} type - SObject Type\n * @param {Callback.<DescribeSObjectResult>} [callback] - Callback function\n * @returns {Promise.<DescribeSObjectResult>}\n */\n\n/**\n * Describe global SObjects\n *\n * @method Tooling#describeGlobal\n * @param {Callback.<DescribeGlobalResult>} [callback] - Callback function\n * @returns {Promise.<DescribeGlobalResult>}\n */\n\n/**\n * Get SObject instance\n *\n * @method Tooling#sobject\n * @param {String} type - SObject Type\n * @returns {SObject}\n */\n\n/**\n * @typedef {Object} Tooling~ExecuteAnonymousResult\n * @prop {Boolean} compiled - Flag if the query is compiled successfully\n * @prop {String} compileProblem - Error reason in compilation\n * @prop {Boolean} success - Flag if the code is executed successfully\n * @prop {Number} line - Line number for the error\n * @prop {Number} column - Column number for the error\n * @prop {String} exceptionMessage - Exception message\n * @prop {String} exceptionStackTrace - Exception stack trace\n */\n/**\n * Executes Apex code anonymously\n *\n * @param {String} body - Anonymous Apex code\n * @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function\n * @returns {Promise.<Tooling~ExecuteAnonymousResult>}\n */\nTooling.prototype.executeAnonymous = function(body, callback) {\n var url = this._baseUrl() + \"/executeAnonymous?anonymousBody=\" + encodeURIComponent(body);\n return this.request(url).thenCall(callback);\n};\n\n/**\n * Executes Apex tests asynchronously\n *\n * @param {Array.<String>} classids - Comma separated list of class IDs\n * @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function\n * @returns {Promise.<Tooling~ExecuteAnonymousResult>}\n */\nTooling.prototype.runTestsAsynchronous = function(classids, callback) {\n var url = this._baseUrl() + \"/runTestsAsynchronous/\";\n return this._conn.requestPost(url, {classids : classids.join(',')}, undefined, callback);\n};\n\n/**\n * Executes Apex tests synchronously\n *\n * @param {Array.<String>} classnames - Comma separated list of class Names\n * @param {Callback.<Tooling~ExecuteAnonymousResult>} [callback] - Callback function\n * @returns {Promise.<Tooling~ExecuteAnonymousResult>}\n */\nTooling.prototype.runTestsSynchronous = function(classnames, callback) {\n var url = this._baseUrl() + \"/runTestsSynchronous/\";\n return this._conn.requestPost(url, {classnames : classnames.join(',')}, undefined, callback);\n};\n\n/**\n * @typedef {Object} Tooling~CompletionsResult\n * @prop {Object} publicDeclarations\n */\n/**\n * Retrieves available code completions of the referenced type\n *\n * @param {String} [type] - completion type (default 'apex')\n * @param {Callback.<Tooling~CompletionsResult>} [callback] - Callback function\n * @returns {Promise.<Tooling~CompletionsResult>}\n */\nTooling.prototype.completions = function(type, callback) {\n if (!_.isString(type)) {\n callback = type;\n type = 'apex';\n }\n var url = this._baseUrl() + \"/completions?type=\" + encodeURIComponent(type);\n return this.request(url).thenCall(callback);\n};\n\n\n/*--------------------------------------------*/\n/*\n * Register hook in connection instantiation for dynamically adding this API module features\n */\njsforce.on('connection:new', function(conn) {\n conn.tooling = new Tooling(conn);\n});\n\n\nmodule.exports = Tooling;\n"]}
|