gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
 * @license
 * Copyright 2019 Google LLC. 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.
 * =============================================================================
 */
 
/**
 * Ensures that the GPU and CPU packages align.
 */
const fs = require('fs');
const cpuPackage = require('../../tfjs-node/package.json');
const gpuPackage = require('../../tfjs-node-gpu/package.json');
 
process.on('unhandledRejection', e => {
  throw e;
});
 
/**
 * Ensure package.json aligns.
 */
const FIELDS_TO_IGNORE = [
  'name', 'scripts/install', 'scripts/test', 'scripts/prepare', 'scripts/prep',
  'scripts/upload-windows-addon', 'scripts/build-npm',
  'scripts/prep-gpu-windows', 'binary/package_name', 'repository/directory',
];
 
const cpuPackageKeys = Object.keys(cpuPackage);
const gpuPackageKeys = Object.keys(gpuPackage);
cpuPackageKeys.forEach((key, i) => {
  if (gpuPackageKeys[i] != cpuPackageKeys[i]) {
    throw new Error(
        `CPU and GPU package have different keys: ` +
        `${gpuPackageKeys[i]} and ${cpuPackageKeys[i]}.`);
  }
});
if (cpuPackageKeys.length != gpuPackageKeys.length) {
  throw new Error(`CPU and GPU package.jsons have different top-level fields.`);
}
 
// Ensure the cpu and gpu packages have the same keys.
cpuPackageKeys.forEach(key => {
  const cpuPackageValue = cpuPackage[key];
  const gpuPackageValue = gpuPackage[key];
 
  if (typeof cpuPackageValue !== 'object') {
    if (cpuPackageValue != gpuPackageValue &&
        FIELDS_TO_IGNORE.indexOf(key) === -1) {
      throw new Error(
          `CPU package key '${key}' with value ` +
          `${JSON.stringify(cpuPackageValue)} does not match GPU value ` +
          `${JSON.stringify(gpuPackageValue)}.`);
    }
  } else {
    const cpuFieldKeys = Object.keys(cpuPackageValue);
    cpuFieldKeys.forEach(fieldKey => {
      const cpuFieldValue = '' + cpuPackageValue[fieldKey];
      const gpuFieldValue = '' + gpuPackageValue[fieldKey];
      const deepKey = `${key}/${fieldKey}`;
      if (cpuFieldValue !== gpuFieldValue &&
          FIELDS_TO_IGNORE.indexOf(deepKey) === -1) {
        throw new Error(
            `CPU package key '${deepKey}' with value ` +
            `${JSON.stringify(cpuFieldValue)} does not match GPU value ` +
            `${JSON.stringify(gpuFieldValue)}.`);
      }
    });
  }
});