/**
|
* @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)}.`);
|
}
|
});
|
}
|
});
|