// Licensed to Cloudera, Inc. under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. Cloudera, Inc. licenses this file // to you 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. const fs = require('fs'); const invalidVersionRegex = /^[<>~^]/; const runCheck = async () => { // eslint-disable-next-line no-restricted-syntax console.log('Checking if package.json contains invalid versions...'); const packageJson = await fs.promises.readFile('package.json'); const { dependencies, devDependencies } = JSON.parse(packageJson); const allDependencies = Object.entries(dependencies).concat(Object.entries(devDependencies)); const invalidDependencies = allDependencies .filter(([, version]) => invalidVersionRegex.test(version)) .map(([name, version]) => `${name}: ${version}`); if (invalidDependencies.length) { console.warn( `Found invalid version(s):\n\n${invalidDependencies.join( '\n' )}\n\nPlease fix by "pinning" to a specific version (remove ~, ^, > or < prefixes).` ); process.exitCode = 1; } else { // eslint-disable-next-line no-restricted-syntax console.log(`Done! No invalid versions found.`); } }; runCheck().catch(e => { console.error(e); process.exitCode = 1; });