// @ts-check /** This script modifies the project to support TS code in .svelte files like: As well as validating the code for CI. */ /** To work on this script: rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template */ const fs = require("fs"); const path = require("path"); const { argv } = require("process"); const projectRoot = argv[2] || path.join(__dirname, ".."); // Add deps to pkg.json const packageJSON = JSON.parse( fs.readFileSync(path.join(projectRoot, "package.json"), "utf8") ); packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, { "svelte-check": "^1.2.5", "svelte-preprocess": "^4.6.9", "@rollup/plugin-typescript": "^8.2.0", typescript: "^4.2.3", tslib: "^2.1.0", "@tsconfig/svelte": "^1.0.10", }); // Add script for checking packageJSON.scripts = Object.assign(packageJSON.scripts, { validate: "svelte-check", }); // Write the package JSON fs.writeFileSync( path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " ") ); // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too const beforeMainJSPath = path.join(projectRoot, "src", "main.js"); const afterMainTSPath = path.join(projectRoot, "src", "main.ts"); fs.renameSync(beforeMainJSPath, afterMainTSPath); // Switch the app.svelte file to use TS const appSveltePath = path.join(projectRoot, "src", "App.svelte"); let appFile = fs.readFileSync(appSveltePath, "utf8"); appFile = appFile.replace("