@google-cloud/nodejs-common 2.0.15-beta → 2.0.16-beta

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google-cloud/nodejs-common",
3
- "version": "2.0.15-beta",
3
+ "version": "2.0.16-beta",
4
4
  "description": "A NodeJs common library for solutions based on Cloud Functions",
5
5
  "author": "Google Inc.",
6
6
  "license": "Apache-2.0",
@@ -27,7 +27,7 @@
27
27
  "@google-cloud/scheduler": "^4.0.1",
28
28
  "@google-cloud/secret-manager": "^5.0.1",
29
29
  "gaxios": "^6.1.1",
30
- "google-ads-nodejs-client": "15.0.0",
30
+ "google-ads-nodejs-client": "16.0.0",
31
31
  "google-ads-api": "^14.1.0",
32
32
  "google-ads-node": "^12.0.2",
33
33
  "google-auth-library": "^9.4.2",
@@ -88,14 +88,16 @@ const {
88
88
  UserListTypeEnum: { UserListType },
89
89
  CustomerMatchUploadKeyTypeEnum: { CustomerMatchUploadKeyType },
90
90
  },
91
- } = googleads.v15;
91
+ } = googleads.v16;
92
92
 
93
93
  const AuthClient = require('./auth_client.js');
94
94
  const {
95
95
  getLogger,
96
96
  BatchResult,
97
97
  extractObject,
98
+ changeNamingFromSnakeToLowerCamel,
98
99
  changeObjectNamingFromSnakeToLowerCamel,
100
+ changeObjectNamingFromLowerCamelToSnake,
99
101
  } = require('../components/utils.js');
100
102
 
101
103
  /** @type {!ReadonlyArray<string>} */
@@ -438,23 +440,31 @@ class GoogleAdsApi {
438
440
  * `results` in JSON format strings with the delimit of a line breaker.
439
441
  * @param {string} customerId
440
442
  * @param {string} loginCustomerId Login customer account ID (Mcc Account id).
441
- * @param {string} query
443
+ * @param {string} query A Google Ads Query string.
444
+ * @param {boolean} outputSnake Output JSON objects in snake_case.
442
445
  * @return {!Promise<string>}
443
446
  */
444
- async cleanedStreamReport(customerId, loginCustomerId, query) {
447
+ async cleanedStreamReport(customerId, loginCustomerId, query,
448
+ outputSnake = false) {
445
449
  const cleanReportStream = new Transform({
446
450
  writableObjectMode: true,
447
451
  transform(chunk, encoding, callback) {
448
452
  const { fieldMask: { paths } } = chunk;
449
- const extractor = extractObject(paths);
453
+ const camelPaths = paths.map((path) => {
454
+ return path.split('.').map(changeNamingFromSnakeToLowerCamel).join('.');
455
+ });
456
+ const extractor = extractObject(camelPaths);
457
+ const results = outputSnake
458
+ ? chunk.results.map(extractor).map(changeObjectNamingFromLowerCamelToSnake)
459
+ : chunk.results.map(extractor);
450
460
  // Add a line break after each chunk to keep files in proper format.
451
- const data = chunk.results.map(extractor).map(JSON.stringify).join('\n')
452
- + '\n';
461
+ const data = results.map(JSON.stringify).join('\n') + '\n';
453
462
  callback(null, data);
454
463
  }
455
464
  });
456
465
  const stream = await this.streamReport(customerId, loginCustomerId, query);
457
- return stream.pipe(cleanReportStream);
466
+ return stream.on('error', (error) => cleanReportStream.emit('error', error))
467
+ .pipe(cleanReportStream);
458
468
  }
459
469
 
460
470
  /**
@@ -1536,6 +1546,7 @@ const debugGoogleAdsFailure = (failures, request) => {
1536
1546
  }
1537
1547
 
1538
1548
  module.exports = {
1549
+ GoogleAdsField,
1539
1550
  ConversionConfig,
1540
1551
  CustomerMatchRecord,
1541
1552
  CustomerMatchConfig,
@@ -539,6 +539,16 @@ const changeNamingFromSnakeToLowerCamel = (name) => {
539
539
  (initial) => initial.substring(1).toUpperCase());
540
540
  };
541
541
 
542
+ /**
543
+ * For more details, see:
544
+ * https://developers.google.com/google-ads/api/docs/rest/design/json-mappings
545
+ * @param {string} name Identifiers.
546
+ * @return {string}
547
+ */
548
+ const changeNamingFromLowerCamelToSnake = (name) => {
549
+ return name.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
550
+ };
551
+
542
552
  /**
543
553
  * Converts a JSON object which has snake naming convention to lower camel
544
554
  * naming.
@@ -561,6 +571,28 @@ const changeObjectNamingFromSnakeToLowerCamel = (obj) => {
561
571
  }
562
572
  }
563
573
 
574
+ /**
575
+ * Converts a JSON object which has lower camel naming convention to snake
576
+ * naming.
577
+ *
578
+ * @param {object} obj
579
+ * @return {object}
580
+ */
581
+ const changeObjectNamingFromLowerCamelToSnake = (obj) => {
582
+ if (Array.isArray(obj)) {
583
+ return obj.map(changeObjectNamingFromLowerCamelToSnake);
584
+ } else if (typeof obj === 'object') {
585
+ const newObj = {};
586
+ Object.keys(obj).forEach((key) => {
587
+ newObj[changeNamingFromLowerCamelToSnake(key)] =
588
+ changeObjectNamingFromLowerCamelToSnake(obj[key]);
589
+ });
590
+ return newObj;
591
+ } else {
592
+ return obj;
593
+ }
594
+ }
595
+
564
596
  /**
565
597
  * Returns the response data for a HTTP request. It will retry the specific
566
598
  * times if there was errors happened.
@@ -606,6 +638,8 @@ module.exports = {
606
638
  getObjectByPath,
607
639
  changeNamingFromSnakeToUpperCamel,
608
640
  changeNamingFromSnakeToLowerCamel,
641
+ changeNamingFromLowerCamelToSnake,
609
642
  changeObjectNamingFromSnakeToLowerCamel,
643
+ changeObjectNamingFromLowerCamelToSnake,
610
644
  requestWithRetry,
611
645
  };