UNPKG

@soleil-se/run

Version:

Run various utility scripts for creating apps, configs or migration tasks.

93 lines (83 loc) 3.64 kB
import { replaceInFileSync } from 'replace-in-file'; import { execSync } from 'node:child_process'; import { readFileSync, existsSync, rmSync } from 'node:fs'; const packages = [ ['@soleil/sv-create-app', '@soleil-se/create-app'], ['@soleil/sv-create-config', '@soleil-se/create-build-config'], ['@soleil/sv-project-build', '@soleil-se/build-project'], ['@soleil/sv-app-build', '@soleil-se/build-app'], ['@soleil/sv-sass-build', '@soleil-se/build-sass'], ['@soleil/sv-js-build', '@soleil-se/build-js'], ['@soleil/sv-snippets-sync', '@soleil-se/build-snippets'], ['@soleil/config-requester', '@soleil-se/config-requester'], ['@soleil/config-validate', '@soleil-se/config-validate'], ['@soleil/eslint-config-sitevision', '@soleil-se/eslint-config'], ['@soleil/mediaflow-selector-svelte', '@soleil-se/config-mediaflow-svelte'], ['@soleil/stylelint-config', '@soleil-se/stylelint-config'], ['@soleil/svelte-config', '@soleil-se/config-svelte'], ['@soleil-api/i18n', '@soleil-se/i18n'], ['@soleil-api/http-error', '@soleil-se/http-error'], ['@soleil-api/webapp-util', '@soleil-se/app-util'], ['@soleil-api/output-util-helper', '@soleil-se/output-util-helper'], ['@soleil-api/requester-wrapper', '@soleil-se/requester'], ['@soleil-api/search-helper', '@soleil-se/search-helper'], ]; const scripts = [ ['sv-app-build', 'build-app'], ['sv-create-app', 'create-app'], ['sv-create-config', 'create-build-config'], ['sv-js-build', 'build-js'], ['sv-sass-build', 'build-sass'], ['sv-snippets-sync', 'build-snippets'], ['sv-project-build', 'build-project'], ['npx --registry=https://npm.soleilit.se', 'npx'], ]; export default function migrateNpm() { if(existsSync('yarn.lock')) { console.log('Yarn lockfile found, please remove it and migrate to npm as package manager before proceeding.'); return; } const isApp = existsSync('manifest.json'); console.log(`Updating package names and scripts in ${isApp ? 'app' : 'project root'}...`); packages.forEach(([from, to]) => { replaceInFileSync({ files: isApp ? './**/*' : './*', from: new RegExp(from, 'g'), to, ignore: ['node_modules/**/*', 'package-lock.json', 'pnpm-lock.yaml'], glob: { dot: true, }, }); }); scripts.forEach(([from, to]) => { replaceInFileSync({ files: './package.json', from: new RegExp(from, 'g'), to, }); }); const packageJson = JSON.parse(readFileSync('./package.json', 'utf8')); const dependencies = [ ...Object.keys(packageJson.dependencies), ...Object.keys(packageJson.devDependencies), ]; const hasLegacyDependencies = dependencies.some((dep) => dep.startsWith('@soleil/')) || dependencies.some((dep) => dep.startsWith('@soleil-api/')); if (!hasLegacyDependencies && existsSync('.npmrc')) { console.log('Removing .npmrc since no @soleil or @soleil-api packages are used...'); rmSync('.npmrc'); } const isPnpm = existsSync('pnpm-lock.yaml'); console.log(`Running ${isPnpm ? 'pnpm' : 'npm'} install...`); execSync(`${isPnpm ? 'pnpm' : 'npm'} install`, { stdio: 'inherit' }); if (!isPnpm && existsSync('node_modules/@soleil-se/build-app/node_modules/@babel/preset-env')) { console.log('\nInvalid location for @babel/preset-env, hoisting to root node_modules directory...\n'); replaceInFileSync({ files: './package-lock.json', from: /node_modules\/@soleil-se\/build-app\/node_modules\/@babel\/preset-env/gm, to: 'node_modules/@babel/preset-env', }); execSync(`${isPnpm ? 'pnpm' : 'npm'} install`, { stdio: 'inherit' }); } console.log('\nDone!'); }