# Architecture ## JavaScript Inside the JAR, JS source files are in ```/scriptcraft```, and inside a typical Gradle project they are in ```src/main/resources/scriptcraft```. ### External Libraries An external libraries API can be accessed using an ```import``` statement. ## TypeScript TypeScript-based projects use the ```com.thebrokenrail.scriptcraft.plugin``` Gradle plugin, this plugin will handle installing TypeScript and download any API type declarations. The TypeScript root using this Gradle plugin is at ```src/main/ts```. ### Custom TypeScript Root The root for the TypeScript sub-project can be changed with: ```groovy scriptcraft { root = new File(project.rootDir, "a/b/c") } ``` ### External Libraries To access an external libraries' API in addition to an ```import``` statement, the TypeScript compiler must have access to the external libraries' type declarations. The ScriptCraft Gradle plugin generates and downloads these using JAR files called API JARs. To generate an API JAr from your project, run ```./gradlew apiJar```, or add the ```apiJar``` task to your Maven publication. To add an API JAR to your project, add it to the ```typescript``` configuration in your ```dependencies``` block. #### API JAR File Structure ``` - API JAR Root - src/ - Source Root - types/ - File structure of node_modules/@types ```