@@ -2,7 +2,6 @@ package processing.p5js
22
33import androidx.compose.foundation.layout.*
44import androidx.compose.foundation.lazy.LazyColumn
5- import androidx.compose.foundation.lazy.items
65import androidx.compose.foundation.lazy.itemsIndexed
76import androidx.compose.material.Button
87import androidx.compose.material.Divider
@@ -19,15 +18,12 @@ import androidx.compose.ui.unit.dp
1918import kotlinx.coroutines.CoroutineScope
2019import kotlinx.coroutines.Dispatchers
2120import kotlinx.coroutines.launch
22- import kotlinx.serialization.json.Json
23- import kotlinx.serialization.json.JsonObject
24- import kotlinx.serialization.json.jsonArray
25- import kotlinx.serialization.json.jsonObject
26- import kotlinx.serialization.json.jsonPrimitive
21+ import kotlinx.serialization.json.*
2722import processing.app.Base
2823import processing.app.Formatter
24+ import processing.app.Messages
2925import processing.app.Mode
30- import processing.app.Platform
26+ import processing.app.SketchException
3127import processing.app.syntax.JEditTextArea
3228import processing.app.syntax.PdeTextArea
3329import processing.app.syntax.PdeTextAreaDefaults
@@ -61,8 +57,6 @@ class p5jsEditor(base: Base, path: String?, state: EditorState?, mode: Mode?): E
6157 <!DOCTYPE html>
6258 <html lang="en">
6359 <head>
64- <script src="./node_modules/p5/lib/p5.min.js"></script>
65- <script src="./node_modules/p5.sound/dist/p5.sound.min.js"></script>
6660 <meta charset="utf-8" />
6761 <style>
6862 html, body {
@@ -77,6 +71,8 @@ class p5jsEditor(base: Base, path: String?, state: EditorState?, mode: Mode?): E
7771
7872 <body>
7973 <script src="renderer.js"></script>
74+ <script src="./node_modules/p5/lib/p5.min.js"></script>
75+ <script src="./node_modules/p5.sound/dist/p5.sound.min.js"></script>
8076 <script src="$name .js"></script>
8177 </body>
8278 </html>
@@ -200,10 +196,12 @@ class p5jsEditor(base: Base, path: String?, state: EditorState?, mode: Mode?): E
200196 npm, pnpm, npx
201197 }
202198
203- val processes = mutableListOf<Process >()
204- fun runNpmActions (directory : File , type : TYPE , actions : List <String >, onFinished : () -> Unit = {}) {
199+ private fun filenameToCodeIndex (filename : String ) {
205200
201+ }
206202
203+ val processes = mutableListOf<Process >()
204+ fun runNpmActions (directory : File , type : TYPE , actions : List <String >, onFinished : () -> Unit = {}) {
207205 // Wait for previous processes to finish
208206 processes.forEach { it.waitFor() }
209207
@@ -224,21 +222,31 @@ class p5jsEditor(base: Base, path: String?, state: EditorState?, mode: Mode?): E
224222
225223 // Handle output stream
226224 val reader = BufferedReader (InputStreamReader (process.inputStream))
227- var line: String?
225+ var line: String
226+
228227 while (reader.readLine().also { line = it } != null ) {
228+ // TODO: so much refactoring!
229+ // Only check for errors when running the sketch
230+ if (type == TYPE .npx && line.startsWith(" error" )) {
231+ // TODO: more robust data exchange, double-check with @Stef
232+ // TODO: `statusError` does not do anything with column of a SketchException
233+ val ( msgType, msgText, msgFile, msgLine, msgCol ) = line.split(" |" )
234+ statusError(SketchException (msgText, 0 , msgLine.toInt(), msgCol.toInt()))
235+ continue
236+ }
237+
229238 println (line)
230239 }
231240
232-
233241 // Wait for the process to complete
234242 val exitCode = process.waitFor()
235243 processes.remove(process)
236244 onFinished()
237245 if (exitCode != 0 ) {
238- throw RuntimeException (" npm install failed with exit code $exitCode " )
246+ throw RuntimeException (" $type ${actions.joinToString( " " )} failed with exit code $exitCode . " )
239247 }
240248 } catch (e: Exception ) {
241- throw RuntimeException (" Failed to run npm install " , e)
249+ throw RuntimeException (" Failed to run $type ${actions.joinToString( " " )} . " , e)
242250 }
243251 }
244252}
0 commit comments