Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / grpc-cloned / node_modules / @google-cloud / promisify / build / src / index.js
diff --git a/legacy-libs/grpc-cloned/node_modules/@google-cloud/promisify/build/src/index.js b/legacy-libs/grpc-cloned/node_modules/@google-cloud/promisify/build/src/index.js
new file mode 100644 (file)
index 0000000..3bd0226
--- /dev/null
@@ -0,0 +1,162 @@
+"use strict";
+/**
+ * Copyright 2014 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * Wraps a callback style function to conditionally return a promise.
+ *
+ * @param {function} originalMethod - The method to promisify.
+ * @param {object=} options - Promise options.
+ * @param {boolean} options.singular - Resolve the promise with single arg instead of an array.
+ * @return {function} wrapped
+ */
+function promisify(originalMethod, options) {
+    if (originalMethod.promisified_) {
+        return originalMethod;
+    }
+    options = options || {};
+    const slice = Array.prototype.slice;
+    // tslint:disable-next-line:no-any
+    const wrapper = function () {
+        const context = this;
+        let last;
+        for (last = arguments.length - 1; last >= 0; last--) {
+            const arg = arguments[last];
+            if (typeof arg === 'undefined') {
+                continue; // skip trailing undefined.
+            }
+            if (typeof arg !== 'function') {
+                break; // non-callback last argument found.
+            }
+            return originalMethod.apply(context, arguments);
+        }
+        // peel trailing undefined.
+        const args = slice.call(arguments, 0, last + 1);
+        // tslint:disable-next-line:variable-name
+        let PromiseCtor = Promise;
+        // Because dedupe will likely create a single install of
+        // @google-cloud/common to be shared amongst all modules, we need to
+        // localize it at the Service level.
+        if (context && context.Promise) {
+            PromiseCtor = context.Promise;
+        }
+        return new PromiseCtor((resolve, reject) => {
+            // tslint:disable-next-line:no-any
+            args.push((...args) => {
+                const callbackArgs = slice.call(args);
+                const err = callbackArgs.shift();
+                if (err) {
+                    return reject(err);
+                }
+                if (options.singular && callbackArgs.length === 1) {
+                    resolve(callbackArgs[0]);
+                }
+                else {
+                    resolve(callbackArgs);
+                }
+            });
+            originalMethod.apply(context, args);
+        });
+    };
+    wrapper.promisified_ = true;
+    return wrapper;
+}
+exports.promisify = promisify;
+/**
+ * Promisifies certain Class methods. This will not promisify private or
+ * streaming methods.
+ *
+ * @param {module:common/service} Class - Service class.
+ * @param {object=} options - Configuration object.
+ */
+// tslint:disable-next-line:variable-name
+function promisifyAll(Class, options) {
+    const exclude = (options && options.exclude) || [];
+    const ownPropertyNames = Object.getOwnPropertyNames(Class.prototype);
+    const methods = ownPropertyNames.filter((methodName) => {
+        // clang-format off
+        return (typeof Class.prototype[methodName] === 'function' && // is it a function?
+            !/(^_|(Stream|_)|promise$)|^constructor$/.test(methodName) && // is it promisable?
+            exclude.indexOf(methodName) === -1); // is it blacklisted?
+        // clang-format on
+    });
+    methods.forEach((methodName) => {
+        const originalMethod = Class.prototype[methodName];
+        if (!originalMethod.promisified_) {
+            Class.prototype[methodName] = exports.promisify(originalMethod, options);
+        }
+    });
+}
+exports.promisifyAll = promisifyAll;
+/**
+ * Wraps a promisy type function to conditionally call a callback function.
+ *
+ * @param {function} originalMethod - The method to callbackify.
+ * @param {object=} options - Callback options.
+ * @param {boolean} options.singular - Pass to the callback a single arg instead of an array.
+ * @return {function} wrapped
+ */
+function callbackify(originalMethod) {
+    if (originalMethod.callbackified_) {
+        return originalMethod;
+    }
+    // tslint:disable-next-line:no-any
+    const wrapper = function () {
+        const context = this;
+        if (typeof arguments[arguments.length - 1] !== 'function') {
+            return originalMethod.apply(context, arguments);
+        }
+        const cb = Array.prototype.pop.call(arguments);
+        originalMethod
+            .apply(context, arguments)
+            // tslint:disable-next-line:no-any
+            .then((res) => {
+            res = Array.isArray(res) ? res : [res];
+            cb(null, ...res);
+        }, (err) => cb(err));
+    };
+    wrapper.callbackified_ = true;
+    return wrapper;
+}
+exports.callbackify = callbackify;
+/**
+ * Callbackifies certain Class methods. This will not callbackify private or
+ * streaming methods.
+ *
+ * @param {module:common/service} Class - Service class.
+ * @param {object=} options - Configuration object.
+ */
+function callbackifyAll(
+// tslint:disable-next-line:variable-name
+Class, options) {
+    const exclude = (options && options.exclude) || [];
+    const ownPropertyNames = Object.getOwnPropertyNames(Class.prototype);
+    const methods = ownPropertyNames.filter((methodName) => {
+        // clang-format off
+        return (typeof Class.prototype[methodName] === 'function' && // is it a function?
+            !/^_|(Stream|_)|^constructor$/.test(methodName) && // is it callbackifyable?
+            exclude.indexOf(methodName) === -1); // is it blacklisted?
+        // clang-format on
+    });
+    methods.forEach((methodName) => {
+        const originalMethod = Class.prototype[methodName];
+        if (!originalMethod.callbackified_) {
+            Class.prototype[methodName] = exports.callbackify(originalMethod);
+        }
+    });
+}
+exports.callbackifyAll = callbackifyAll;
+//# sourceMappingURL=index.js.map
\ No newline at end of file