Converted to TypeScript
I don't know what it does :D
This commit is contained in:
		
							parent
							
								
									4801162931
								
							
						
					
					
						commit
						a62e860427
					
				
					 7 changed files with 30 additions and 135 deletions
				
			
		
							
								
								
									
										3
									
								
								frontend/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								frontend/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | { | ||||||
|  |   "recommendations": ["svelte.svelte-vscode"] | ||||||
|  | } | ||||||
|  | @ -4,7 +4,8 @@ | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "rollup -c", |     "build": "rollup -c", | ||||||
|     "dev": "rollup -c -w", |     "dev": "rollup -c -w", | ||||||
|     "start": "sirv public" |     "start": "sirv public", | ||||||
|  |     "validate": "svelte-check" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@rollup/plugin-commonjs": "^14.0.0", |     "@rollup/plugin-commonjs": "^14.0.0", | ||||||
|  | @ -13,9 +14,15 @@ | ||||||
|     "rollup-plugin-livereload": "^2.0.0", |     "rollup-plugin-livereload": "^2.0.0", | ||||||
|     "rollup-plugin-svelte": "^6.0.0", |     "rollup-plugin-svelte": "^6.0.0", | ||||||
|     "rollup-plugin-terser": "^7.0.0", |     "rollup-plugin-terser": "^7.0.0", | ||||||
|     "svelte": "^3.0.0" |     "svelte": "^3.0.0", | ||||||
|  |     "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" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "sirv-cli": "^1.0.0" |     "sirv-cli": "^1.0.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | @ -3,6 +3,8 @@ import resolve from '@rollup/plugin-node-resolve'; | ||||||
| import commonjs from '@rollup/plugin-commonjs'; | import commonjs from '@rollup/plugin-commonjs'; | ||||||
| import livereload from 'rollup-plugin-livereload'; | import livereload from 'rollup-plugin-livereload'; | ||||||
| import { terser } from 'rollup-plugin-terser'; | import { terser } from 'rollup-plugin-terser'; | ||||||
|  | import sveltePreprocess from 'svelte-preprocess'; | ||||||
|  | import typescript from '@rollup/plugin-typescript'; | ||||||
| 
 | 
 | ||||||
| const production = !process.env.ROLLUP_WATCH; | const production = !process.env.ROLLUP_WATCH; | ||||||
| 
 | 
 | ||||||
|  | @ -28,7 +30,7 @@ function serve() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
| 	input: 'src/main.js', | 	input: 'src/main.ts', | ||||||
| 	output: { | 	output: { | ||||||
| 		sourcemap: true, | 		sourcemap: true, | ||||||
| 		format: 'iife', | 		format: 'iife', | ||||||
|  | @ -43,7 +45,8 @@ export default { | ||||||
| 			// a separate file - better for performance
 | 			// a separate file - better for performance
 | ||||||
| 			css: css => { | 			css: css => { | ||||||
| 				css.write('bundle.css'); | 				css.write('bundle.css'); | ||||||
| 			} | 			}, | ||||||
|  | 			preprocess: sveltePreprocess(), | ||||||
| 		}), | 		}), | ||||||
| 
 | 
 | ||||||
| 		// If you have external dependencies installed from
 | 		// If you have external dependencies installed from
 | ||||||
|  | @ -56,6 +59,10 @@ export default { | ||||||
| 			dedupe: ['svelte'] | 			dedupe: ['svelte'] | ||||||
| 		}), | 		}), | ||||||
| 		commonjs(), | 		commonjs(), | ||||||
|  | 		typescript({ | ||||||
|  | 			sourceMap: !production, | ||||||
|  | 			inlineSources: !production | ||||||
|  | 		}), | ||||||
| 
 | 
 | ||||||
| 		// In dev mode, call `npm run start` once
 | 		// In dev mode, call `npm run start` once
 | ||||||
| 		// the bundle has been generated
 | 		// the bundle has been generated
 | ||||||
|  |  | ||||||
|  | @ -1,128 +0,0 @@ | ||||||
| // @ts-check
 |  | ||||||
| 
 |  | ||||||
| /** This script modifies the project to support TS code in .svelte files like: |  | ||||||
| 
 |  | ||||||
|   <script lang="ts"> |  | ||||||
|   	export let name: string; |  | ||||||
|   </script> |  | ||||||
|   |  | ||||||
|   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("<script>", '<script lang="ts">') |  | ||||||
| appFile = appFile.replace("export let name;", 'export let name: string;') |  | ||||||
| fs.writeFileSync(appSveltePath, appFile) |  | ||||||
| 
 |  | ||||||
| // Edit rollup config
 |  | ||||||
| const rollupConfigPath = path.join(projectRoot, "rollup.config.js") |  | ||||||
| let rollupConfig = fs.readFileSync(rollupConfigPath, "utf8") |  | ||||||
| 
 |  | ||||||
| // Edit imports
 |  | ||||||
| rollupConfig = rollupConfig.replace(`'rollup-plugin-terser';`, `'rollup-plugin-terser';
 |  | ||||||
| import sveltePreprocess from 'svelte-preprocess'; |  | ||||||
| import typescript from '@rollup/plugin-typescript';`)
 |  | ||||||
| 
 |  | ||||||
| // Replace name of entry point
 |  | ||||||
| rollupConfig = rollupConfig.replace(`'src/main.js'`, `'src/main.ts'`) |  | ||||||
| 
 |  | ||||||
| // Add preprocess to the svelte config, this is tricky because there's no easy signifier.
 |  | ||||||
| // Instead we look for `css:` then the next `}` and add the preprocessor to that
 |  | ||||||
| let foundCSS = false |  | ||||||
| let match |  | ||||||
| 
 |  | ||||||
| // https://regex101.com/r/OtNjwo/1
 |  | ||||||
| const configEditor = new RegExp(/css:.|\n*}/gmi) |  | ||||||
| while (( match = configEditor.exec(rollupConfig)) != null) { |  | ||||||
|   if (foundCSS) { |  | ||||||
|     const endOfCSSIndex = match.index + 1 |  | ||||||
|     rollupConfig = rollupConfig.slice(0, endOfCSSIndex) + ",\n			preprocess: sveltePreprocess()," + rollupConfig.slice(endOfCSSIndex); |  | ||||||
|     break |  | ||||||
|   } |  | ||||||
|   if (match[0].includes("css:")) foundCSS = true |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // Add TypeScript
 |  | ||||||
| rollupConfig = rollupConfig.replace( |  | ||||||
|   'commonjs(),', |  | ||||||
|   'commonjs(),\n\t\ttypescript({\n\t\t\tsourceMap: !production,\n\t\t\tinlineSources: !production\n\t\t}),' |  | ||||||
| ); |  | ||||||
| fs.writeFileSync(rollupConfigPath, rollupConfig) |  | ||||||
| 
 |  | ||||||
| // Add TSConfig
 |  | ||||||
| const tsconfig = `{
 |  | ||||||
|   "extends": "@tsconfig/svelte/tsconfig.json", |  | ||||||
| 
 |  | ||||||
|   "include": ["src/**/*"], |  | ||||||
|   "exclude": ["node_modules/*", "__sapper__/*", "public/*"], |  | ||||||
| }` |  | ||||||
| const tsconfigPath =  path.join(projectRoot, "tsconfig.json") |  | ||||||
| fs.writeFileSync(tsconfigPath, tsconfig) |  | ||||||
| 
 |  | ||||||
| // Delete this script, but not during testing
 |  | ||||||
| if (!argv[2]) { |  | ||||||
|   // Remove the script
 |  | ||||||
|   fs.unlinkSync(path.join(__filename)) |  | ||||||
| 
 |  | ||||||
|   // Check for Mac's DS_store file, and if it's the only one left remove it
 |  | ||||||
|   const remainingFiles = fs.readdirSync(path.join(__dirname)) |  | ||||||
|   if (remainingFiles.length === 1 && remainingFiles[0] === '.DS_store') { |  | ||||||
|     fs.unlinkSync(path.join(__dirname, '.DS_store')) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // Check if the scripts folder is empty
 |  | ||||||
|   if (fs.readdirSync(path.join(__dirname)).length === 0) { |  | ||||||
|     // Remove the scripts folder
 |  | ||||||
|     fs.rmdirSync(path.join(__dirname)) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Adds the extension recommendation
 |  | ||||||
| fs.mkdirSync(path.join(projectRoot, ".vscode")) |  | ||||||
| fs.writeFileSync(path.join(projectRoot, ".vscode", "extensions.json"), `{
 |  | ||||||
|   "recommendations": ["svelte.svelte-vscode"] |  | ||||||
| } |  | ||||||
| `)
 |  | ||||||
| 
 |  | ||||||
| console.log("Converted to TypeScript.") |  | ||||||
| 
 |  | ||||||
| if (fs.existsSync(path.join(projectRoot, "node_modules"))) { |  | ||||||
|   console.log("\nYou will need to re-run your dependency manager to get started.") |  | ||||||
| } |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| <script> | <script lang="ts"> | ||||||
| 	export let name; | 	export let name: string; | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <main> | <main> | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								frontend/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								frontend/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | { | ||||||
|  |   "extends": "@tsconfig/svelte/tsconfig.json", | ||||||
|  | 
 | ||||||
|  |   "include": ["src/**/*"], | ||||||
|  |   "exclude": ["node_modules/*", "__sapper__/*", "public/*"], | ||||||
|  | } | ||||||
		Reference in a new issue