UNPKG

@soleil-se/run

Version:

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

102 lines (86 loc) 3.65 kB
import { replaceInFileSync } from 'replace-in-file'; import { execSync } from 'node:child_process'; import { readFileSync, existsSync, writeFileSync } from 'node:fs'; const imports = [ ['@soleil-se/app-util/server/svelte\'', '@soleil-se/app-util/server/svelte/5\''], ['@soleil-se/app-util/server/svelte/3', '@soleil-se/app-util/server/svelte/5'], ['@soleil-se/app-util/server/svelte/4', '@soleil-se/app-util/server/svelte/5'], ['@soleil-se/app-util/client/svelte\'', '@soleil-se/app-util/client/svelte/5\''], ['@soleil-se/app-util/client/svelte/3', '@soleil-se/app-util/client/svelte/5'], ['@soleil-se/app-util/client/svelte/4', '@soleil-se/app-util/client/svelte/5'], ]; function readJsonFileSync(file) { try { return JSON.parse(readFileSync(file, 'utf-8')); } catch { console.error(`Error reading JSON file: ${file}`); return {}; } } function writeJsonFileSync(file, content) { try { return writeFileSync(file, JSON.stringify(content, null, 2)); } catch (error) { console.error(`Error writing to JSON file: ${file}`, error); return {}; } } function isEligible() { const packageFile = readJsonFileSync('./package.json'); return [ ...Object.keys(packageFile.dependencies || {}), ...Object.keys(packageFile.devDependencies || {}), ].some((dependency) => dependency.startsWith('@soleil-se')); } function updateDependencies() { const isPnpm = existsSync('pnpm-lock.yaml'); console.log(`Updating dependencies with ${isPnpm ? 'pnpm' : 'npm'}...`); execSync(`${isPnpm ? 'pnpm' : 'npm'} install svelte@5 svelte-preprocess@6 @soleil-se/build-app@latest @soleil-se/config-svelte@latest @soleil-se/app-util@latest`, { stdio: 'inherit' }); } function updateImports() { console.log('Updating imports for Svelte 5...'); imports.forEach(([from, to]) => { replaceInFileSync({ files: './**/*', from: new RegExp(from, 'g'), to, ignore: ['node_modules/**/*', 'package-lock.json', 'pnpm-lock.yaml'], }); }); } function updateConfig() { console.log('Updating app config initialization in config/config.js and config_global/config.js for Svelte 5...'); const content = `import { createConfigApp } from '@soleil-se/config-svelte'; import validate from '@soleil-se/config-validate'; import { mount } from 'svelte'; import App from './App.svelte'; window.validate = validate; createConfigApp(({ target, props }) => mount(App, { target, props })); `; if (existsSync('config/config.js') && readFileSync('config/config.js').toString().includes('@soleil-se/config-svelte')) { writeFileSync('config/config.js', content); } if (existsSync('config_global/config.js') && readFileSync('config_global/config.js').toString().includes('@soleil-se/config-svelte')) { writeFileSync('config_global/config.js', content); } } function setTypeModule() { const packageFile = readJsonFileSync('./package.json'); if (packageFile.type !== 'module') { console.log('Setting package.json type to module...'); packageFile.type = 'module'; writeJsonFileSync('./package.json', packageFile); } } export default function main() { if (!isEligible()) { console.error('App dependencies needs to be migrated to the @soleil-se scope first, run the npm migration script first.'); process.exit(1); } updateDependencies(); updateImports(); updateConfig(); setTypeModule(); console.log('Done!'); console.log('To migrate components to Svelte 5 use the official migration tool by running "npx sv migrate svelte-5" or migrate per component with Ctrl + Shift + P and "Svelte: Migrate Component to Svelte 5 Syntax" in VS Code.'); }