From 2c2bf59bcd81a358722b259e60244fb1792567b6 Mon Sep 17 00:00:00 2001 From: muzam1l Date: Wed, 17 Aug 2022 12:46:17 +0530 Subject: [PATCH 1/3] Update file language on renaming. --- components/Tabs.tsx | 6 +++--- pages/develop/[[...slug]].tsx | 18 +++++++++--------- state/actions/createNewFile.ts | 16 ++++++++++------ utils/helpers.ts | 6 ++++++ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/components/Tabs.tsx b/components/Tabs.tsx index e8a0d75..7cb6770 100644 --- a/components/Tabs.tsx +++ b/components/Tabs.tsx @@ -17,7 +17,7 @@ import { } from "./Dialog"; import { Plus, X } from "phosphor-react"; import { styled } from "../stitches.config"; -import { capitalize } from "../utils/helpers"; +import { capitalize, getFileExtention } from "../utils/helpers"; import ContextMenu, { ContentMenuOption } from "./ContextMenu"; const ErrorText = styled(Text, { @@ -103,7 +103,7 @@ export const Tabs = ({ if (!tabname) { return { error: `Please enter ${label.toLocaleLowerCase()} name.` }; } - let ext = (tabname.includes(".") && tabname.split(".").pop()) || ""; + let ext = getFileExtention(tabname); if (!ext && defaultExtension) { ext = defaultExtension; @@ -115,7 +115,7 @@ export const Tabs = ({ if (extensionRequired && !ext) { return { error: "File extension is required!" }; } - if (allowedExtensions && !allowedExtensions.includes(ext)) { + if (allowedExtensions && ext && !allowedExtensions.includes(ext)) { return { error: "This file extension is not allowed!" }; } if ( diff --git a/pages/develop/[[...slug]].tsx b/pages/develop/[[...slug]].tsx index bfca87e..b20faa6 100644 --- a/pages/develop/[[...slug]].tsx +++ b/pages/develop/[[...slug]].tsx @@ -10,10 +10,11 @@ import Box from "../../components/Box"; import Button from "../../components/Button"; import Popover from "../../components/Popover"; import RunScript from "../../components/RunScript"; -import state from "../../state"; +import state, { IFile } from "../../state"; import { compileCode } from "../../state/actions"; import { getSplit, saveSplit } from "../../state/actions/persistSplits"; import { styled } from "../../stitches.config"; +import { getFileExtention } from "../../utils/helpers"; const HooksEditor = dynamic(() => import("../../components/HooksEditor"), { ssr: false, @@ -148,6 +149,8 @@ const CompilerSettings = () => { const Home: NextPage = () => { const snap = useSnapshot(state); + const activeFile = snap.files[snap.active] as IFile | undefined; + const activeFileExt = getFileExtention(activeFile?.name); return ( { gutterAlign="center" gutterSize={4} style={{ height: "calc(100vh - 60px)" }} - onDragEnd={(e) => saveSplit("developVertical", e)} + onDragEnd={e => saveSplit("developVertical", e)} >
- {snap.files[snap.active]?.name?.split(".")?.[1]?.toLowerCase() === - "c" && ( + {activeFileExt === "c" && ( @@ -197,8 +199,7 @@ const Home: NextPage = () => { )} - {snap.files[snap.active]?.name?.split(".")?.[1]?.toLowerCase() === - "js" && ( + {activeFileExt === "js" && ( @@ -216,7 +217,7 @@ const Home: NextPage = () => { gap: "$2", }} > - + )} @@ -236,8 +237,7 @@ const Home: NextPage = () => { logs={snap.logs} /> - {snap.files[snap.active]?.name?.split(".")?.[1]?.toLowerCase() === - "js" && ( + {activeFileExt === "js" && ( = { 'ts': 'typescript', 'js': 'javascript', 'md': 'markdown', 'c': 'c', 'h': 'c', - 'other': '' -} /* Initializes empty file to global state */ +} + export const createNewFile = (name: string) => { - const tempName = name.split('.'); - const fileExt = tempName[tempName.length - 1] || 'other'; - const emptyFile: IFile = { name, language: languageMapping[fileExt as 'ts' | 'js' | 'md' | 'c' | 'h' | 'other'], content: "" }; + const ext = getFileExtention(name) || '' + + const emptyFile: IFile = { name, language: languageMapping[ext] || '', content: '' }; state.files.push(emptyFile); state.active = state.files.length - 1; }; @@ -20,5 +21,8 @@ export const renameFile = (oldName: string, nwName: string) => { const file = state.files.find(file => file.name === oldName) if (!file) throw Error(`No file exists with name ${oldName}`) + const ext = getFileExtention(nwName) || '' + const language = languageMapping[ext] || '' file.name = nwName + file.language = language }; \ No newline at end of file diff --git a/utils/helpers.ts b/utils/helpers.ts index 61b32ba..e809b89 100644 --- a/utils/helpers.ts +++ b/utils/helpers.ts @@ -12,4 +12,10 @@ export const capitalize = (value?: string) => { if (!value) return ''; return value[0].toLocaleUpperCase() + value.slice(1); +} + +export const getFileExtention = (filename?: string): string | undefined => { + if (!filename) return + const ext = (filename.includes('.') && filename.split('.').pop()) || undefined + return ext } \ No newline at end of file From 934283976af61f5ae20c7f4363806b8a9f64219c Mon Sep 17 00:00:00 2001 From: muzam1l Date: Fri, 9 Sep 2022 14:07:13 +0530 Subject: [PATCH 2/3] Add plain text language to monaco. --- components/HooksEditor.tsx | 23 ++++++++++++++--------- state/actions/createNewFile.ts | 7 ++++--- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/components/HooksEditor.tsx b/components/HooksEditor.tsx index ab7c7e8..2128f35 100644 --- a/components/HooksEditor.tsx +++ b/components/HooksEditor.tsx @@ -200,15 +200,15 @@ const HooksEditor = () => { defaultValue={file?.content} // onChange={val => (state.files[snap.active].content = val)} // Auto save? beforeMount={monaco => { - if (!snap.editorCtx) { - snap.files.forEach(file => - monaco.editor.createModel( - file.content, - file.language, - monaco.Uri.parse(`file:///work/c/${file.name}`) - ) - ) - } + // if (!snap.editorCtx) { + // snap.files.forEach(file => + // monaco.editor.createModel( + // file.content, + // file.language, + // monaco.Uri.parse(`file:///work/c/${file.name}`) + // ) + // ) + // } // create the web socket if (!subscriptionRef.current) { @@ -218,6 +218,11 @@ const HooksEditor = () => { aliases: ['C', 'c', 'H', 'h'], mimetypes: ['text/plain'] }) + monaco.languages.register({ + id: 'text', + extensions: ['.txt'], + mimetypes: ['text/plain'], + }) MonacoServices.install(monaco) const webSocket = createWebSocket( process.env.NEXT_PUBLIC_LANGUAGE_SERVER_API_ENDPOINT || '' diff --git a/state/actions/createNewFile.ts b/state/actions/createNewFile.ts index 761ec27..f6d048c 100644 --- a/state/actions/createNewFile.ts +++ b/state/actions/createNewFile.ts @@ -6,13 +6,14 @@ const languageMapping: Record = { js: 'javascript', md: 'markdown', c: 'c', - h: 'c' + h: 'c', + txt: 'text' } export const createNewFile = (name: string) => { const ext = getFileExtention(name) || '' - const emptyFile: IFile = { name, language: languageMapping[ext] || '', content: '' } + const emptyFile: IFile = { name, language: languageMapping[ext] || 'text', content: '' } state.files.push(emptyFile) state.active = state.files.length - 1 } @@ -22,7 +23,7 @@ export const renameFile = (oldName: string, nwName: string) => { if (!file) throw Error(`No file exists with name ${oldName}`) const ext = getFileExtention(nwName) || '' - const language = languageMapping[ext] || '' + const language = languageMapping[ext] || 'text' file.name = nwName file.language = language } From 27475301e4ea391d8727ff474c9eed7951602b9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 08:29:14 +0000 Subject: [PATCH 3/3] Bump jose from 4.6.0 to 4.10.0 Bumps [jose](https://github.com/panva/jose) from 4.6.0 to 4.10.0. - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v4.6.0...v4.10.0) --- updated-dependencies: - dependency-name: jose dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ad6e524..99f010f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2725,9 +2725,9 @@ javascript-time-ago@^2.3.11: relative-time-format "^1.0.7" jose@^4.1.4, jose@^4.3.7: - version "4.6.0" - resolved "https://registry.npmjs.org/jose/-/jose-4.6.0.tgz" - integrity sha512-0hNAkhMBNi4soKSAX4zYOFV+aqJlEz/4j4fregvasJzEVtjDChvWqRjPvHwLqr5hx28Ayr6bsOs1Kuj87V0O8w== + version "4.10.0" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.10.0.tgz#2e0b7bcc80dd0775f8a4588e55beb9460c37d60a" + integrity sha512-KEhB/eLGLomWGPTb+/RNbYsTjIyx03JmbqAyIyiXBuNSa7CmNrJd5ysFhblayzs/e/vbOPMUaLnjHUMhGp4yLw== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0"