// @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.0.0", "svelte-preprocess": "^4.0.0", "@rollup/plugin-typescript": "^6.0.0", typescript: "^3.9.3", tslib: "^2.0.0", "@tsconfig/svelte": "^1.0.0", }) // 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("