From 24b35b3437d803d724ce1d80139743880051fcca Mon Sep 17 00:00:00 2001 From: hassnian <44554284+hassnian@users.noreply.github.com> Date: Sat, 19 Oct 2024 09:12:52 +0500 Subject: [PATCH 1/2] add(CodeChecker.vue): ensure `p5.min.js` file is in the root directory --- components/codeChecker/CodeChecker.vue | 9 ++++++-- components/codeChecker/codechecker.config.js | 1 + components/codeChecker/utils.ts | 22 +++++++++++++------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/components/codeChecker/CodeChecker.vue b/components/codeChecker/CodeChecker.vue index 393e137130..435ed94b7a 100644 --- a/components/codeChecker/CodeChecker.vue +++ b/components/codeChecker/CodeChecker.vue @@ -279,8 +279,7 @@ const onFileSelected = async (file: File) => { clear() startClock() selectedFile.value = file - const { indexFile, sketchFile, entries } - = await extractAssetsFromZip(file) + const { indexFile, sketchFile, p5File, entries } = await extractAssetsFromZip(file) if (!indexFile) { errorMessage.value = `Index file not found: Please make sure that “index.html” is in the root directory` @@ -291,6 +290,12 @@ const onFileSelected = async (file: File) => { errorMessage.value = `Sketch file not found: ${config.sketchFile}` return } + + if (!p5File) { + errorMessage.value = `p5 file not found: Please make sure that “p5.min.js” is in the root directory` + return + } + const valid = validate(indexFile.content, sketchFile.content) if (!valid.isSuccess) { errorMessage.value = valid.error ?? 'Unknown error' diff --git a/components/codeChecker/codechecker.config.js b/components/codeChecker/codechecker.config.js index ea1ad74b8b..2fe819e4cd 100644 --- a/components/codeChecker/codechecker.config.js +++ b/components/codeChecker/codechecker.config.js @@ -1,6 +1,7 @@ export default { iframeId: 'sketch-iframe', sketchFile: 'sketch.js', + p5File: 'p5.min.js', p5: 'p5', maxAllowedLoadTime: 3000, // in ms varaitionsOptions: [1, 3, 5, 10, 15, 20], diff --git a/components/codeChecker/utils.ts b/components/codeChecker/utils.ts index b0f0778041..8afc0153e9 100644 --- a/components/codeChecker/utils.ts +++ b/components/codeChecker/utils.ts @@ -84,23 +84,29 @@ const calculateCommonPrefix = (filePaths: string[]): string => { const categorizeFiles = async ( entries: { [key: string]: ZipEntry }, commonPrefix: string, -): Promise<{ htmlFiles: FileEntry[], jsFiles: FileEntry[] }> => { +): Promise<{ htmlFiles: FileEntry[], jsFiles: FileEntry[], p5Files: FileEntry[] }> => { const htmlFiles: FileEntry[] = [] const jsFiles: FileEntry[] = [] + const p5Files: FileEntry[] = [] for (const [path, file] of Object.entries(entries)) { const adjustedPath = path.replace(commonPrefix, '') const content = await file.text() + const isJsFile = path.endsWith('.js') if (path === 'index.html') { htmlFiles.push({ path: adjustedPath, content }) } - else if (path.endsWith('.js') && !path.includes(config.p5)) { + // allows p5 libraries + else if (path.includes(config.p5) && isJsFile) { + p5Files.push({ path: adjustedPath, content }) + } + else if (isJsFile) { jsFiles.push({ path: adjustedPath, content }) } } - return { htmlFiles, jsFiles } + return { htmlFiles, jsFiles, p5Files } } // exported functions @@ -130,6 +136,7 @@ export const extractAssetsFromZip = async ( ): Promise<{ indexFile: FileEntry sketchFile: FileEntry + p5File: FileEntry entries: { [key: string]: ZipEntry } jsFiles: FileEntry[] }> => { @@ -138,14 +145,15 @@ export const extractAssetsFromZip = async ( const commonPrefix = calculateCommonPrefix(filePaths) - const { htmlFiles, jsFiles } = await categorizeFiles(entries, commonPrefix) - const sketchFile = jsFiles.find(file => - file.path.includes(config.sketchFile), - ) as FileEntry + const { htmlFiles, jsFiles, p5Files } = await categorizeFiles(entries, commonPrefix) + + const sketchFile = jsFiles.find(file => file.path.includes(config.sketchFile)) as FileEntry + const p5File = p5Files.find(file => file.path.includes(config.p5File)) as FileEntry return { indexFile: htmlFiles[0], sketchFile, + p5File, entries, jsFiles, } From b9555234a9c61c2f63ab498d4ea32b029dc99895 Mon Sep 17 00:00:00 2001 From: hassnian <44554284+hassnian@users.noreply.github.com> Date: Sat, 19 Oct 2024 10:22:58 +0500 Subject: [PATCH 2/2] add(codeChecker/validate.ts): validate `postMessageKoda` is used --- components/codeChecker/validate.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/codeChecker/validate.ts b/components/codeChecker/validate.ts index fa0cfe189c..482d2adcee 100644 --- a/components/codeChecker/validate.ts +++ b/components/codeChecker/validate.ts @@ -30,6 +30,7 @@ const constants = { localP5JsRegex: /(.*?)<\/title>/, kodaRendererRegex: /kodahash\/render\/completed/, + kodaRendererCalledRegex: /(?