{"version":3,"sources":["utils/file.js","components/terminal/react-terminal/args/index.js","components/terminal/react-terminal/args/parse.js","components/terminal/react-terminal/args/example.js","components/terminal/react-terminal/args/examples.js","components/terminal/react-terminal/args/options.js","components/terminal/react-terminal/args/option.js","components/terminal/react-terminal/args/command.js","components/terminal/react-terminal/args/help.js","components/terminal/react-terminal/components/Content/styled-elements.js","components/terminal/plugins/file-system/db.js","config/workspaces/index.js","components/terminal/plugins/file-system/consts.js","components/terminal/react-terminal/args/utils.js","config/workspaces/1_linux_intro.js","config/workspaces/2_setting_variables.js","config/workspaces/3_services.js","config/workspaces/1_git.js","components/tree/index.js","components/tree/Tree.js","components/terminal/react-terminal/utils.js","components/terminal/react-terminal/components/types.js","components/terminal/react-terminal/components/Terminal/terminal-utils.js","components/terminal/react-terminal/components/Terminal/styled-elements.js","components/terminal/react-terminal/components/Bar/styled-elements.js","components/terminal/react-terminal/components/Bar/index.js","components/terminal/react-terminal/components/Content/index.js","components/terminal/react-terminal/components/Tabs/styled-elements.js","components/terminal/react-terminal/components/Tabs/index.js","state/useCommandState.js","components/terminal/react-terminal/components/Terminal/Command.js","components/terminal/react-terminal/components/Terminal/index.js","components/terminal/react-terminal/components/Plugin.js","components/terminal/react-terminal/index.js","components/terminal/plugins/file-system/basic.js","components/terminal/plugins/file-system/indexDb.js","components/terminal/Terminal.js","components/terminal/plugins/file-system/index.js","components/terminal/index.js","components/filecheck/index.js","components/filecheck/Filecheck.js","config/commands/state.js","config/commands/variables.js","utils/string.js","config/commands/basicShell.js","config/commands/userManagement.js","config/commands/git.js","config/commands/index.js","services/commands.js","utils/getTime.js","components/instructions/Instructions.js","components/instructions/index.js","screens/Workspace.js","screens/WorkspaceList.js","screens/App.js","index.js","utils/diff.js","config/workspaces/2_puppet.js","utils/prompt.js","config/workspaces/6_interactive.js"],"names":["createFolder","folderName","path","a","db","folders","where","equals","first","folder","add","Folder","fullPath","id","createFile","fileName","content","split","name","extension","File","setContents","getCurrentPath","localStorage","getItem","writeToFile","filePath","files","file","getContent","getContents","publicMethods","command","option","options","parse","example","examples","showHelp","Args","this","details","commands","config","help","usageFilter","value","mainColor","subColor","printMainColor","i","printSubColor","parent","module","util","utils","hasOwnProperty","call","prototype","method","argv","Object","assign","raw","parser","slice","minimist","version","checkVersion","subCommand","_","helpTriggered","h","args","defined","isDefined","optionList","getOptions","shift","sub","runCommand","usage","description","TypeError","push","list","constructor","Array","Error","item","preset","defaultValue","init","n","short","String","charAt","find","flagName","toUpperCase","concat","length","optionDetails","filter","defaultIsWrong","undefined","initFunction","handleType","aliases","isArray","parts","groups","group","word","optionHandle","substr","generateExamples","generateDetails","output","join","console","log","ContainerMain","styled","div","extend","props","theme","backgroundColor","OutputLine","outputColor","color","PreOutputLine","pre","Input","Prompt","span","prompt","MainInput","input","Holder","ContainerContent","InputArea","defineDB","pathSeporator","Dexie","STORAGE_KEY","stores","parentFolder","base","folderId","type","DIR","isBase","put","filename","extention","contents","FILE","save","mapToClass","structure","children","data","clear","workspaceName","window","location","pathname","keys","workspaces","workspace","delete","count","toCollection","then","fileStructure","require","displayName","CURRENT_DIR","PARENT_DIR","HOME_DIR","Number","parseInt","readOption","fromArgs","propVal","condition","toString","camelcase","definedSubcommand","related","availableOptions","forEach","opt","suggestOption","stringSimilarity","findBestMatch","bestMatch","rating","suggestion","target","trim","kind","items","isCmd","sort","b","second","initial","isVersion","indexOf","longest","difference","repeat","JSON","stringify","bind","child","intro","title","close","instruction","steps","step","test","print","hasEditor","toggled","final","estimatedTime","alias","l","sessionStorage","setItem","lab1","httpd","systemctl","status","stop","start","enable","disable","git","error","success","clone","setTimeout","commit","Tree","onToggle","handleLogging","addToOutput","oldLog","e","res","map","arg","key","defineProperty","writable","linuxPlatforms","darwinPlatforms","TerminalContextTypes","PropTypes","objectOf","oneOfType","func","shape","arrayOf","string","any","bool","oneOf","object","class","handleClose","handleMinimise","handleMaximise","barShowing","tabsShowing","activeTab","instances","array","show","minimise","maximise","closeWindow","openWindow","minimiseWindow","unminimiseWindow","maximiseWindow","unmaximiseWindow","toggleShow","toggleMaximise","toggleMinimize","os","platform","family","getOs","pluginMap","plugins","eachHandler","plugin","pluginObj","uuidv4","replace","c","r","Math","random","getShortcuts","shortcuts","obj","toLowerCase","osName","modCommands","newCommands","needsInstance","definition","cmd","Command","Base","fullscreen","ContainerWrapper","terminalFadeIn","keyframes","Note","TerminalTopBar","barColor","Bar","context","style","showActions","maxWidth","height","width","cx","cy","fill","cursor","onClick","Component","defaultProps","contextTypes","Content","state","summary","promptPrefix","history","historyCounter","keyInputs","canScroll","controller","componentWillMount","index","oldData","setState","componentDidMount","focusInput","unregister","register","handleChange","dontShowCommand","disableShortCuts","componentDidUpdate","inputWrapper","scrollIntoView","setScrollPosition","pos","contentWrapper","scrollTop","com","focus","handleKeyPress","handlerKeyPress","handleOuterKeypress","whatkey","unprintableKeys","document","activeElement","char","addEventListener","ctrlKey","preventDefault","cont","marginRight","toSubtract","maxHeight","overflowY","tabIndex","onKeyUp","innerRef","ctw","elm","onKeyPress","onKeyDown","TabBar","TabBarEmpty","TabClose","Tab","active","TabPlus","visible","Tabs","showingPlus","handleBarClick","stopPropagation","createTab","handleTabClick","setActiveTab","handleRemoveClick","instance","removeTab","removePlus","showPlus","tabs","arr","last","onFocus","onMouseDown","onMouseEnter","onMouseLeave","INITIAL_STATE","currentStep","CommandContext","createContext","CommandProvider","useState","commandState","setCommandState","lastRunCommand","setLastRunCommandState","Provider","setLastRunCommand","useCommandState","useContext","useEffect","Terminal","loadPlugins","assembleCommands","setDescriptions","setShortcuts","watchConsoleLogging","force","allowTabs","promptSymbol","registerInstance","splice","getAppContent","getBar","getNote","hideTopBar","actionHandlers","baseStyle","animation","fontFamily","fontSize","closedTitle","src","alt","toggleState","closedMessage","getPluginData","pluginData","setPluginData","descriptions","defaultDesciptions","defaultShortcuts","setPromptPrefix","setPromptSymbol","setFalse","setTrue","setValueWithHistory","position","inputRef","el","setSelectionRange","len","putCursorAtEnd","comp","ver","clean","realSplit","val","compLogic","pluginInstances","pluginMethods","old","PluginClass","api","printLine","removeLine","setCanScroll","getPluginMethod","takeControl","pluginTakeControl","releaseControl","pluginReleaseControl","getData","setData","updateApi","getPublicMethods","_getName","_getVersion","realIndex","insts","isEqual","newPrompt","newPromptPrefix","oldPrefix","oldPrompt","defaultCommands","autocompleteValue","keysToCheck","ratings","reduce","full","clearScreen","checkShortcuts","cuts","instanceData","values","modKey","cut","shortcut","action","editLine","line","saveToHistory","shiftKey","newHistory","historyProps","afterChange","tabbed","styles","display","marginBottom","defaultData","inp","std","readStdOut","lineNumber","inputText","inputArray","commandPassThrough","parsedArgs","commandWasRun","runCommandOnActive","printToActive","showMsg","msg","echo","darwin","startState","className","childContextTypes","Plugin","newApi","injectGlobal","HOME_PATH","has","configPlugin","toStringPath","stringParts","isDir","isRoot","unshift","PseudoFileSystem","cd","enterDir","ls","listDirContents","rm","removeFromFileSystemCommand","mkdir","createDirCommand","touch","createFileCommand","cat","runCat","parsePath","isValidPath","cb","createDir","removeDir","remove","removeFile","readDir","readFile","writeFile","pathToString","types","dir","currentPath","baseIsASymbol","modPath","part","doParse","str","set","newPath","parentDir","newDir","addToFileSystem","newFile","recursive","pathA","pathB","flag","splitName","lang","langMap","languages","language","syntaxStyles","PluginBase","home","user","ary","parentFolderPath","clearDbOnStart","dbCreator","pathFromArgs","editOrCreateFolder","editOrCreateFile","getFolder","getFile","modifyFileSystem","toArray","removeFromFileSystem","handleRes","valid","fileA","hidden","justifyContent","itemStyle","getFullName","FileSystemPlugin","basic","pseudoFileSystem","Filecheck","setCursor","setDate","isClicked","setIsClicked","setValid","text","testFile","Date","now","env","users","variables","export","splittedArgs","interpolate","params","formattedString","entries","RegExp","basicShell","pwd","includes","findIndex","ip","addr","whoami","userManagement","useradd","gitCommands","generate","additionalCommands","generatedCommands","allCommands","getTime","d","getUTCMinutes","getUTCSeconds","Instructions","closePrompt","time","setCurrentStep","closedPrompt","setClosedPrompt","redirect","setRedirect","f","s","acc","next","nextDisabled","checkDisabled","interactive","spendTime","Swal","fire","icon","html","toFixed","focusConfirm","showCancelButton","confirmButtonText","cancelButtonText","result","reload","dismiss","DismissReason","cancel","to","dangerouslySetInnerHTML","__html","querySelector","float","disabled","Workspace","useParams","date","editorContent","setContent","setTime","changeStructure","cloneDeep","cursorName","getFileContent","debouncedSetContent","debounce","node","mode","onChange","showPrintMargin","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","WorkspaceList","href","App","exact","render","ReactDOM","getElementById","checkDiff","isValid","puppet","agent","PromptInput","resolve","useRef","current","paddingTop","paddingBottom","AppPrompt","Promise","reject","inputElement","createElement","parentElement","appendChild","release","mainInputElement","interactiveInputs","getElementsByClassName","from","firstName","lastName","age"],"mappings":"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","file":"static/js/main.222381df.chunk.js","sourcesContent":["import { db, Folder, File } from 'components/terminal/plugins/file-system/db';\n\nexport async function createFolder(folderName, path) {\n let folder = await db.folders.where('fullPath').equals(path).first();\n\n await db.folders.add(\n new Folder(folderName, {\n fullPath: `${folder.fullPath}`,\n id: folder.id,\n })\n );\n}\n\nexport async function createFile(fileName, path, content) {\n let folder = await db.folders.where('fullPath').equals(path).first();\n\n let [name, extension = ''] = fileName.split('.');\n\n let file = new File(name, extension, {\n id: folder.id,\n fullPath: `${folder.fullPath}`,\n });\n\n file.setContents(content);\n}\n\nexport function getCurrentPath() {\n return localStorage.getItem('CURRENT_PATH');\n}\n\nexport async function writeToFile(filePath, content) {\n let file = await db.files.where('fullPath').equals(`${filePath}`).first();\n\n if (file) {\n file.setContents(content);\n } else {\n file = await db.files.where('fullPath').equals(`${getCurrentPath()}${filePath}`).first();\n\n if (file) {\n file.setContents(content);\n }\n }\n}\n\nexport async function getContent(filePath) {\n let file = await db.files.where('fullPath').equals(`${filePath}`).first();\n\n if (file) {\n return file.getContents();\n }\n\n return '';\n}\n","import parse from './parse';\nimport example from './example';\nimport examples from './examples';\nimport options from './options';\nimport option from './option';\nimport command from './command';\nimport showHelp from './help';\nimport utils from './utils';\n\nconst publicMethods = {\n command,\n option,\n options,\n parse,\n example,\n examples,\n showHelp,\n};\n\nexport default function Args() {\n this.details = {\n commands: [],\n options: [],\n examples: [],\n };\n\n // Configuration defaults\n this.config = {\n help: true,\n usageFilter: null,\n value: null,\n name: null,\n mainColor: 'yellow',\n subColor: 'dim',\n };\n\n this.printMainColor = i => i;\n this.printSubColor = i => i;\n\n this.parent = module.parent;\n}\n\n// Assign internal helpers\nfor (const util in utils) {\n if (!{}.hasOwnProperty.call(utils, util)) {\n continue; // eslint-disable-line\n }\n\n Args.prototype[util] = utils[util];\n}\n\n// Assign public methods\nfor (const method in publicMethods) {\n if (!{}.hasOwnProperty.call(publicMethods, method)) {\n continue; // eslint-disable-line\n }\n\n Args.prototype[method] = publicMethods[method];\n}\n","import parser from 'minimist';\n\nexport default function (argv, options) {\n // Override default option values\n Object.assign(this.config, options);\n\n if (this.config.help) {\n // Register default options and commands\n this.option('help', 'Output usage information');\n this.command('help', 'Display help', this.showHelp);\n }\n\n // Parse arguments using minimist\n this.raw = parser(argv.slice(1), this.config.minimist);\n\n // If default version is allowed, check for it\n if (this.config.version) {\n this.checkVersion(this.parent);\n }\n\n const subCommand = this.raw._[1];\n const helpTriggered = this.raw.h || this.raw.help;\n\n const args = {};\n const defined = this.isDefined(subCommand, 'commands');\n const optionList = this.getOptions(defined);\n\n Object.assign(args, this.raw);\n args._.shift();\n\n // Export sub arguments of command\n this.sub = args._;\n\n // If sub command is defined, run it\n if (defined) {\n this.runCommand(defined, optionList);\n return {};\n }\n\n // Show usage information if \"help\" or \"h\" option was used\n // And respect the option related to it\n if (this.config.help && helpTriggered) {\n this.showHelp();\n }\n\n // Hand back list of options\n return optionList;\n}\n","export default function (usage, description) {\n if (typeof usage !== 'string' || typeof description !== 'string') {\n throw new TypeError('Usage for adding an Example: args.example(\"usage\", \"description\")');\n }\n this.details.examples.push({ usage, description });\n\n return this;\n}\n","export default function (list) {\n if (list.constructor !== Array) {\n throw new Error('Item passed to .examples is not an array');\n }\n\n for (const item of list) {\n const usage = item.usage || false;\n const description = item.description || false;\n this.example(usage, description);\n }\n\n return this;\n}\n","export default function (list) {\n if (list.constructor !== Array) {\n throw new Error('Item passed to .options is not an array');\n }\n\n for (const item of list) {\n const preset = item.defaultValue;\n const init = item.init || false;\n\n this.option(item.name, item.description, preset, init);\n }\n\n return this;\n}\n","export default function (name, description, defaultValue, init) {\n let usage = [];\n\n const assignShort = (n, options, short) => {\n if (options.find(flagName => flagName.usage[0] === short)) {\n short = n.charAt(0).toUpperCase(); // eslint-disable-line no-param-reassign\n }\n return [short, n];\n };\n\n // If name is an array, pick the values\n // Otherwise just use the whole thing\n switch (name.constructor) {\n case String:\n usage = assignShort(name, this.details.options, name.charAt(0));\n break;\n case Array:\n usage = usage.concat(name);\n break;\n default:\n throw new Error('Invalid name for option');\n }\n\n // Throw error if short option is too long\n if (usage.length > 0 && usage[0].length > 1) {\n throw new Error('Short version of option is longer than 1 char');\n }\n\n const optionDetails = {\n defaultValue,\n usage,\n description,\n };\n\n if (this.details.options.filter(item => item.usage[1] === usage[1]).length === 0) {\n let defaultIsWrong;\n\n switch (defaultValue) {\n case false:\n defaultIsWrong = true;\n break;\n case null:\n defaultIsWrong = true;\n break;\n case undefined:\n defaultIsWrong = true;\n break;\n default:\n defaultIsWrong = false;\n }\n\n // Set initializer depending on type of default value\n if (!defaultIsWrong) {\n const initFunction = typeof init === 'function';\n optionDetails.init = initFunction ? init : this.handleType(defaultValue)[1];\n }\n\n // Register option to global scope\n this.details.options.push(optionDetails);\n }\n\n // Allow chaining of .option()\n return this;\n}\n","/* eslint-disable no-param-reassign */\nexport default function (usage, description, init, aliases) {\n if (Array.isArray(init)) {\n aliases = init;\n init = undefined;\n }\n if (aliases && Array.isArray(aliases)) {\n usage = [].concat([usage], aliases);\n }\n\n if (this.details.commands.filter(item => item.usage === usage).length === 0) {\n // Register command to global scope\n this.details.commands.push({\n usage,\n description,\n init: typeof init === 'function' ? init : false,\n });\n }\n\n // Allow chaining of .command()\n return this;\n}\n","export default function () {\n const { name } = this.config;\n const firstBig = (word) => word.charAt(0).toUpperCase() + word.substr(1);\n\n const parts = [];\n\n const groups = {\n options: true,\n examples: true,\n };\n\n for (const group in groups) {\n if (this.details[group].length > 0) {\n continue; // eslint-disable-line\n }\n\n groups[group] = false;\n }\n\n const optionHandle = groups.options ? '[options] ' : '';\n const value = typeof this.config.value === 'string' ? ` ${this.config.value}` : '';\n\n parts.push(['', `Usage: ${this.printMainColor(name)} ${this.printSubColor(optionHandle + value)}`, '']);\n\n for (const group in groups) {\n if (!groups[group]) {\n continue; // eslint-disable-line\n }\n\n parts.push(['', `${firstBig(group)}:`, '', '']);\n\n if (group === 'examples') {\n parts.push(this.generateExamples());\n } else {\n parts.push(this.generateDetails(group));\n }\n\n parts.push(['', '']);\n }\n\n let output = '';\n\n // And finally, merge and output them\n for (const part of parts) {\n output += part.join('\\n ');\n }\n\n if (!groups.options) {\n output = 'No options available';\n }\n\n const { usageFilter } = this.config;\n\n // If filter is available, pass usage information through\n if (typeof usageFilter === 'function') {\n output = usageFilter(output) || output;\n }\n\n console.log(output); // eslint-disable-line\n}\n","import styled from \"styled-components\";\n\nexport const Container = styled.div`\n display: block;\n margin: 0 auto;\n`;\n\nexport const ContainerMain = Container.extend`\n max-width: 600px;\n transition: all 0.4s ease-out;\n background: ${(props) => props.theme.backgroundColor};\n max-height: 600px;\n height: 100%;\n overflow: scroll;\n position: relative;\n overflow: hidden;\n\n &:focus {\n outline: none;\n }\n`;\n\nexport const OutputLine = styled.div`\n font-family: \"Inconsolata\", monospace;\n font-size: 1.5em;\n color: ${(props) => props.theme.outputColor || props.theme.color};\n margin-top: 10px;\n margin-bottom: 10px;\n white-space: pre-wrap;\n`;\nexport const PreOutputLine = styled.pre`\n font-family: \"Inconsolata\", monospace;\n font-size: 1.5em;\n color: ${(props) => props.theme.outputColor || props.theme.color};\n margin-top: 10px;\n margin-bottom: 10px;\n white-space: pre-wrap;\n`;\n\nexport const Input = styled.div`\n display: flex;\n align-items: center;\n padding-top: 15px;\n padding-bottom: 15px;\n`;\n\nexport const Prompt = styled.span`\n color: ${(props) => props.theme.prompt};\n margin-right: 8px;\n font-size: 1.5em;\n`;\n\nexport const MainInput = styled.input`\n font: inherit;\n font-size: 1.5em;\n &,\n &:focus {\n border: none;\n padding: 0;\n margin: 3px;\n background: ${(props) => props.theme.backgroundColor};\n color: ${(props) => props.theme.color};\n flex: 1;\n outline: none;\n }\n`;\n\nexport const Holder = styled.div``;\n\nexport const ContainerContent = styled.div`\n padding: 5px 20px;\n height: 100%;\n`;\n\nexport const InputArea = styled.div`\n height: 100%;\n padding: 3px;\n`;\n","import Dexie from 'dexie';\nimport { STORAGE_KEY, DIR, FILE } from './consts';\n\nimport workspaces from 'config/workspaces';\n\nimport { createFile } from 'utils/file';\n\nexport let db;\nexport let File;\nexport let Folder;\n\nfunction defineDB(pathSeporator) {\n db = new Dexie(STORAGE_KEY);\n\n db.version(1).stores({\n folders: '++id,&[id+path],folderId,fullPath',\n files: '++id,&[folderId+filename],filename,extension,folderId,fullPath',\n });\n\n Folder = class Folder {\n constructor(path, parentFolder = { fullPath: '' }, base = false) {\n this.path = path;\n this.fullPath = parentFolder.fullPath + path + pathSeporator;\n this.folderId = parentFolder.id;\n this.type = DIR;\n this.isBase = base;\n }\n\n save() {\n return db.folders.put(this);\n }\n };\n\n File = class File {\n constructor(filename, extention, parentFolder, contents = '') {\n this.fullPath = `${parentFolder.fullPath + filename}${extention ? '.' + extention : ''}`\n this.filename = filename;\n this.extention = extention;\n this.folderId = parentFolder.id;\n this.content = contents;\n this.type = FILE;\n }\n\n setContents(contents = '') {\n this.content = contents;\n this.save();\n }\n\n getContents() {\n return this.content;\n }\n\n getFullName() {\n return (this.filename || '') + (this.extention ? '.' : '') + (this.extention || '');\n }\n\n save() {\n return db.files.put(this);\n }\n };\n\n db.folders.mapToClass(Folder);\n db.files.mapToClass(File);\n\n return [db, Folder, File];\n}\n\nasync function createFolder(structure, db, Folder, File, pathSeporator, item) {\n if (!structure.children) {\n return;\n }\n\n for (let i = 0; i < structure.children.length; i++) {\n let file = structure.children[i];\n\n\n if (!(file.data === null || file.data === undefined)) {\n await createFile(file.name, `${item.fullPath}`, file.data);\n\n continue;\n }\n\n const id = await db.folders.add(new Folder(file.name, item));\n\n createFolder(file, db, Folder, File, pathSeporator, {\n fullPath: `${item.fullPath}${file.name}${pathSeporator}`,\n id: id,\n });\n }\n}\n\nexport default function (pathSeporator, clear) {\n const workspaceName = window.location.pathname.split('/')[3] || Object.keys(workspaces)[0];\n const workspace = workspaces[workspaceName];\n\n if (clear) {\n Dexie.delete(STORAGE_KEY);\n }\n const [db, Folder, File] = defineDB(pathSeporator);\n\n db.folders.count(async (count) => {\n if (count === 0) {\n await db.folders.add(new Folder('', { fullPath: '' }, true));\n\n db.folders\n .toCollection()\n .first()\n .then((item) => {\n createFolder(workspace.fileStructure, db, Folder, File, pathSeporator, item);\n });\n }\n });\n\n return [db, Folder, File];\n}\n","/**\n * Each workspace should export the following properties:\n * hasEditor: boolean;\n * steps: Array;\n * commands: Object;\n * fileStructure: Object;\n */\nconst workspaces = {\n \"1_linux_intro\": require(\"./1_linux_intro\"),\n \"2_setting_variables\": require(\"./2_setting_variables\"),\n \"3_services\": require(\"./3_services\"),\n \"4_puppet\": require(\"./2_puppet\"),\n \"5_git\": require(\"./1_git\"),\n \"6_interactive\": require(\"./6_interactive\"),\n};\n\nexport default workspaces;\n","export const version = '3.0.0';\nexport const displayName = 'PseudoFileSystem';\nexport const CURRENT_DIR = '.';\nexport const PARENT_DIR = '..';\nexport const HOME_DIR = '~';\nexport const STORAGE_KEY = 'TERMINAL_IN_REACT_PSEUDO_FILESYSTEM';\nexport const DIR = 'dir';\nexport const FILE = 'file';\n","import camelcase from 'lodash.camelcase';\nimport stringSimilarity from 'string-similarity';\n\nexport default {\n handleType(value) {\n let type = value;\n if (typeof value !== 'function') {\n type = value.constructor;\n }\n\n // Depending on the type of the default value,\n // select a default initializer function\n switch (type) {\n case String:\n return ['[value]'];\n case Array:\n return [''];\n case Number:\n case parseInt:\n return ['', parseInt];\n default:\n return [''];\n }\n },\n\n readOption(option) {\n let value = option.defaultValue;\n const contents = {};\n\n // If option has been used, get its value\n for (const name of option.usage) {\n const fromArgs = this.raw[name];\n if (typeof fromArgs !== 'undefined') {\n value = fromArgs;\n }\n }\n\n let count = -1;\n // Process the option's value\n for (let name of option.usage) {\n count += 1;\n let propVal = value;\n\n // Convert the value to an array when the option is called just once\n if (\n Array.isArray(option.defaultValue) &&\n typeof propVal !== typeof option.defaultValue\n ) {\n if (count === 0) {\n this.raw._.push(propVal);\n }\n propVal = [propVal];\n }\n\n if (\n typeof option.defaultValue !== 'undefined' &&\n typeof propVal !== typeof option.defaultValue\n ) {\n if (count === 0) {\n this.raw._.push(propVal);\n }\n propVal = option.defaultValue;\n }\n\n let condition = true;\n\n if (option.init) {\n // Only use the toString initializer if value is a number\n if (option.init === toString) {\n condition = propVal.constructor === Number;\n }\n\n if (condition) {\n // Pass it through the initializer\n propVal = option.init(propVal);\n }\n }\n\n // Camelcase option name (skip short flag)\n if (name.length > 1) {\n name = camelcase(name);\n }\n\n // Add option to list\n contents[name] = propVal;\n }\n\n return contents;\n },\n\n getOptions(definedSubcommand) {\n const options = {};\n const args = {};\n\n // Set option defaults\n for (const option of this.details.options) {\n if (typeof option.defaultValue === 'undefined') {\n continue; // eslint-disable-line\n }\n\n Object.assign(options, this.readOption(option));\n }\n\n // Copy over the arguments\n Object.assign(args, this.raw);\n const _ = [...args._];\n delete args._;\n\n // Override defaults if used in command line\n for (const option in args) {\n if (!{}.hasOwnProperty.call(args, option)) {\n continue; // eslint-disable-line\n }\n const related = this.isDefined(option, 'options');\n\n if (related) {\n const details = this.readOption(related);\n Object.assign(options, details);\n }\n\n if (!related && !definedSubcommand) {\n // Unknown Option\n const availableOptions = [];\n this.details.options.forEach((opt) => {\n availableOptions.push(...opt.usage);\n });\n\n const suggestOption = stringSimilarity.findBestMatch(\n option,\n availableOptions,\n );\n\n console.log(`The option \"${option}\" is unknown.`); // eslint-disable-line\n\n if (suggestOption.bestMatch.rating >= 0.5) {\n console.log(' Did you mean the following one?\\n'); // eslint-disable-line\n\n const suggestion = this.details.options.filter((item) => {\n for (const flag of item.usage) {\n if (flag === suggestOption.bestMatch.target) {\n return true;\n }\n }\n\n return false;\n });\n\n console.log(`${this.generateDetails(suggestion)[0].trim()}\\n`); // eslint-disable-line\n } else {\n console.log(' Here\\'s a list of all available options: \\n'); // eslint-disable-line\n this.showHelp();\n }\n }\n }\n\n options._ = _;\n return options;\n },\n\n generateExamples() {\n const { examples } = this.details;\n const parts = [];\n\n for (const item in examples) {\n if (!{}.hasOwnProperty.call(examples, item)) {\n continue; // eslint-disable-line\n }\n const usage = this.printSubColor(`$ ${examples[item].usage}`);\n const description = this.printMainColor(`- ${examples[item].description}`);\n parts.push(` ${description}\\n\\n ${usage}\\n\\n`);\n }\n\n return parts;\n },\n\n generateDetails(kind) {\n // Get all properties of kind from global scope\n const items = typeof kind === 'string' ? [...this.details[kind]] : [...kind];\n const parts = [];\n const isCmd = kind === 'commands';\n\n // Sort items alphabetically\n items.sort((a, b) => {\n const first = isCmd ? a.usage : a.usage[1];\n const second = isCmd ? b.usage : b.usage[1];\n\n switch (true) {\n case first < second:\n return -1;\n case first > second:\n return 1;\n default:\n return 0;\n }\n });\n\n for (const item in items) {\n if (!{}.hasOwnProperty.call(items, item)) {\n continue; // eslint-disable-line\n }\n\n let { usage } = items[item];\n let initial = items[item].defaultValue;\n\n // If usage is an array, show its contents\n if (usage.constructor === Array) {\n if (isCmd) {\n usage = usage.join(', ');\n } else {\n const isVersion = usage.indexOf('v');\n usage = `-${usage[0]}, --${usage[1]}`;\n\n if (!initial) {\n initial = items[item].init;\n }\n\n usage += initial && isVersion === -1\n ? ` ${this.handleType(initial)[0]}`\n : '';\n }\n }\n\n // Overwrite usage with readable syntax\n items[item].usage = usage;\n }\n\n // Find length of longest option or command\n // Before doing that, make a copy of the original array\n const longest = items.slice().sort((a, b) => b.usage.length - a.usage.length)[0].usage.length;\n\n for (const item of items) {\n let { usage, description } = item;\n const { defaultValue } = item;\n const difference = longest - usage.length;\n\n // Compensate the difference to longest property with spaces\n usage += ' '.repeat(difference);\n\n // Add some space around it as well\n if (typeof defaultValue !== 'undefined') {\n if (typeof defaultValue === 'boolean') {\n description += ` (${defaultValue ? 'enabled' : 'disabled'} by default)`;\n } else {\n description += ` (defaults to ${JSON.stringify(defaultValue)})`;\n }\n }\n parts.push(` ${this.printMainColor(usage)} ${this.printSubColor(description)}`);\n }\n\n return parts;\n },\n\n runCommand(details, options) {\n // If help is disabled, remove initializer\n if (details.usage === 'help' && !this.config.help) {\n details.init = false; // eslint-disable-line\n }\n\n // If command has initializer, call it\n if (details.init) {\n const sub = [].concat(this.sub);\n sub.shift();\n\n return details.init.bind(this)(details.usage, sub, options);\n }\n\n return '';\n },\n\n isDefined(name, list) {\n // Get all items of kind\n const children = this.details[list];\n\n // Check if a child matches the requested name\n for (const child of children) {\n const { usage } = child;\n const type = usage.constructor;\n\n if (type === Array && usage.indexOf(name) > -1) {\n return child;\n }\n\n if (type === String && usage === name) {\n return child;\n }\n }\n\n // If nothing matches, item is not defined\n return false;\n },\n};\n","// Initial Pop Up.\nexport const intro = {\n title: \"Intro to Linux\",\n content: `In this lab, we'll cover some basic linux commands
Estimated time: 5 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"That's all for our first lab. Drink some water and onto next! \",\n};\n\n// Instruction\nexport const instruction = \"Welcome to First Lab of the course. In this lab, we'll cover some basic linux commands\";\nexport const title = \"Lab 1: Linux Intro\";\nexport const steps = [\n {\n steps: [\n\n\n {\n step: `Everytime we login to the system, we get logged into the home directory of a user that we are logging in as. Let's try few commands to know if it is true

`,\n },\n {\n step: \"1. Print working directory :\",\n commands: [\"pwd\"],\n },\n {\n step: `2. User I'm logged in as :`,\n commands: [\"whoami\"],\n },\n {\n step: `
***Make sure to click in command box to copy it over to terminal*** `,\n },\n ],\n },\n {\n steps: [\n {\n step: `Let's use ls command to list the directory/files from /home/root

`,\n },\n {\n step: \"1. Lists the content from current directory :\",\n commands: [\"ls\"],\n },\n\n {\n step: `
2. As you can see there's test dir, let's get inside`,\n commands: [\"cd test\"],\n },\n {\n step: `
3 As you can see, there's a file, let's view content of file now`,\n commands: [\"cat test.txt\"],\n },\n ],\n },\n {\n steps: [\n {\n step: `1. Let's get out of the \"test\" dir to /home dir`,\n commands: [\"cd ..\"],\n },\n {\n step: `2. Make sure you are in home directory`,\n commands: [\"pwd\"],\n },\n {\n step: `4. Please use the following command to clean the screen`,\n commands: [\"clear\"],\n }, \n ],\n },\n];\n\n// For terminal\nexport const commands = {\n test: {\n output: (args, print) => {\n if (args.n) {\n print(args.n);\n return;\n }\n\n print({\n value: \"root\",\n });\n },\n options: [\n {\n name: \"n\",\n description: \"The color the output should be\",\n },\n {\n name: \"d\",\n },\n ],\n },\n};\n\n// For Editor\nexport const hasEditor = false;\nexport const fileStructure = {\n name: \"/\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: true,\n children: [\n {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"test\",\n toggled: true,\n children: [\n {\n path: \"/home/root/test\",\n name: \"test.txt\",\n data: `test`,\n final: \"test\",\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"etc\",\n children: [],\n },\n {\n name: \"opt\",\n children: [],\n },\n {\n name: \"tmp\",\n children: [],\n },\n {\n name: \"var\",\n children: [\n {\n name: \"log\",\n children: [],\n },\n {\n name: \"lib\",\n children: [],\n },\n ],\n },\n ],\n};\n","export const intro = {\n title: \"Setting Variable/Alias\",\n content: `In this lab, we are assigning value to a variable for current and all shells.
Estimated time: 10-15 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"Setting Variable/Alias has ended\",\n content: \"Estimated time:\",\n};\n\nexport const instruction =\n \"In this lab, we are assigning value to a variable for current and all shells.\";\nexport const estimatedTime = \"10-15 mins\";\nexport const title = \"Lab 2: Setting Variable/Alias\";\nexport const steps = [\n {\n steps: [\n {\n step: `Variable is representation of actual data. We assign value to a specific variable so we can use it during runtime. Variable is denoted by $ in bash shell.

`,\n },\n {\n step: `1. let's see if there's a value assigned to variable :`,\n commands: [\"echo $a\"],\n },\n {\n step: `2. Let's assign value apple to $a :`,\n commands: [\"export a=apple\"],\n },\n {\n step: `3. Let's see the assigned value `,\n commands: [\"echo $a\"],\n },\n {\n step: `
**Hint Click in command box to copy it over to terminal`,\n },\n {\n step: `
Here we created and displayed a value fr a variable. Let's create an alias now `,\n },\n ],\n },\n {\n steps: [\n {\n step: `1. I've been using ls -al commands for long time. At this point, I don't want to enter ls -al everytime, instead I want to set an alias which will turn my \"ls\" to \"ls -al\" everytime. For this let's create an alias called ls

`,\n commands: [`alias ls='ls -al'`],\n },\n {\n step: \"2. Lists the content from current directory :\",\n commands: [\"ls\"],\n },\n ],\n },\n];\n\nexport const commands = {\n alias: {\n output: (args, print) => {\n if (args.a && args.l) {\n sessionStorage.setItem(\"ls\", \"detail\");\n }\n },\n options: [\n {\n name: \"a\",\n description: \"The color the output should be\",\n },\n {\n name: \"l\",\n description: \"The color the output should be\",\n },\n ],\n },\n};\n\nexport const hasEditor = false;\nexport const fileStructure = {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: true,\n children: [\n {\n name: \"ram\",\n toggled: true,\n children: [\n {\n name: \".bashrc\",\n },\n {\n name: \"nepal\",\n toggled: true,\n children: [\n {\n name: \"ktm.txt\",\n data: `We just viewed the content of a file using specific path with cat command.`,\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"etc\",\n children: [],\n },\n {\n name: \"opt\",\n children: [],\n },\n {\n name: \"tmp\",\n children: [],\n },\n {\n name: \"var\",\n children: [\n {\n name: \"log\",\n children: [],\n },\n {\n name: \"lib\",\n children: [],\n },\n ],\n },\n ],\n lab1: {},\n};\n","export const intro = {\n title: \"In this lab, we will do several service operations\",\n content: `In this lab, we'll cover some basic linux commands
Estimated time: 10-15 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"Service services has ended\",\n content: \"Estimated time:\",\n};\n\nexport const instruction =\n \"Welcome to Services. In this lab, we will do several service operations\";\nexport const estimatedTime = \"10-15 mins\";\nexport const title = \"Lab 3: System services\";\nexport const steps = [\n {\n steps: [\n {\n step: `1. We'll get the status of specific service using command

`,\n commands: [\"systemctl status httpd.service\"],\n },\n {\n step: `2. Looks like httpd service is running. Let's stop it now using the command :`,\n commands: [\"systemctl stop httpd.service\"],\n },\n {\n step: `3. Let's check the status of httpd service using command :`,\n commands: [\"systemctl status httpd.service\"],\n },\n {\n step: `3. Looks like httpd service is stopped. Let's start it now using the command :`,\n commands: [\"systemctl start httpd.service\"],\n },\n {\n step: `3. Let's check the status of httpd service using command :`,\n commands: [\"systemctl status httpd.service\"],\n },\n {\n step: `
**Hint Click in command box to copy it over to terminal`,\n },\n ],\n },\n {\n steps: [\n {\n step: `1. If we want to make sure this specific service will be started even when the server restarts, for this, we'll run the command`,\n commands: [\"systemctl enable httpd.service\"],\n },\n {\n step: `2. We can disable httpd service on startup by using the command :`,\n commands: [\"systemctl disable httpd.service\"],\n },\n ],\n },\n];\n\nlet httpd = true;\nexport const commands = {\n systemctl: {\n status: {\n output: (args, print) => {\n if (args._[1] === \"httpd.service\") {\n print(`Service status: ${httpd ? \"Up\" : \"Down\"}`);\n } else {\n print(\"Service not found.\");\n }\n },\n },\n stop: {\n output: (args, print) => {\n if (args._[1] === \"httpd.service\") {\n httpd = false;\n } else {\n print(\"Service not found.\");\n }\n },\n },\n start: {\n output: (args, print) => {\n if (args._[1] === \"httpd.service\") {\n httpd = true;\n } else {\n print(\"Service not found.\");\n }\n },\n },\n enable: {\n output: (args, print) => {\n if (args._[1] === \"httpd.service\") {\n print(\"Enabled\");\n } else {\n print(\"Service not found.\");\n }\n },\n },\n disable: {\n output: (args, print) => {\n if (args._[1] === \"httpd.service\") {\n print(\"Disabled\");\n } else {\n print(\"Service not found.\");\n }\n },\n },\n },\n};\n\nexport const hasEditor = false;\nexport const fileStructure = {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: true,\n children: [\n {\n name: \"ram\",\n toggled: true,\n children: [\n {\n name: \"nepal\",\n toggled: true,\n children: [\n {\n name: \"ktm.txt\",\n data: `We just viewed the content of a file using specific path with cat command.`,\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"etc\",\n children: [],\n },\n {\n name: \"opt\",\n children: [],\n },\n {\n name: \"tmp\",\n children: [],\n },\n {\n name: \"var\",\n children: [\n {\n name: \"log\",\n children: [],\n },\n {\n name: \"lib\",\n children: [],\n },\n ],\n },\n ],\n lab1: {},\n};\n","import { createFile, createFolder, getCurrentPath } from \"utils/file\";\n\nexport const intro = {\n title: \"Intro to Git\",\n content: `In this lab, we'll cover some basic git commands
Estimated time: 10-15 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"Git Basic has ended\",\n content: \"Estimated time:\",\n};\n\nexport const title = \"Lab 5: Git Basics\";\nexport const steps = [\n {\n steps: [\n {\n step: \"Let's put the file in /tmp folder\",\n commands: [\"cd /tmp\", \"ls\"],\n },\n ],\n },\n {\n steps: [\n {\n step: \"Use the following command to pull the repository\",\n commands: [\n \"git clone git@git-example-server.com:example-user/example-repo.git\",\n \"ls\",\n ],\n },\n ],\n },\n {\n steps: [\n {\n step: \"Let's view the content of a file now\",\n commands: [\"cat /tmp/example-repo/test.txt\"],\n },\n ],\n },\n {\n steps: [\n {\n step: `Let's change the content of the file to \"Hi World!\" instead`,\n commands: [`echo \"Hi World!\" > /tmp/example-repo/test.txt`],\n },\n ],\n },\n {\n steps: [\n {\n step: \"Let's view the content of a file now\",\n commands: [\"cat /tmp/example-repo/test.txt\"],\n },\n ],\n },\n {\n steps: [\n {\n step: `Let's push this change to git server now.\n Start by adding the change to the stage(airport) area.`,\n commands: [\"git add --all\"],\n },\n ],\n },\n {\n steps: [\n {\n step: \"Let's commit this change now. (Move to Airplane)\",\n commands: [`git commit -m \"updated\"`],\n },\n ],\n },\n {\n steps: [\n {\n step: \"Push this change to remote repo now. (Fly)\",\n commands: [\"git push origin master\"],\n },\n ],\n },\n];\n\nexport const commands = {\n git: {\n error: {\n output: (args, print) => {\n print({\n color: \"red\",\n value: \"This is a test of an error message\",\n });\n },\n },\n success: {\n output: (args, print) => {\n print({\n color: \"#1cf41c\",\n value: \"This is a test of an success message\",\n });\n },\n },\n clone: {\n output: (args, print) => {\n if (\n args._[1] ===\n \"git@git-example-server.com:example-user/example-repo.git\"\n ) {\n print(\"Cloning into 'example-repo'...\");\n\n setTimeout(() => {\n print(\"remote: Enumerating objects: 108, done.\");\n\n setTimeout(async () => {\n print(\"remote: Counting objects: 100% (108/108), done.\");\n print(\"remote: Compressing objects: 100% (108/108), done.\");\n print(\n \"remote: Total 108 (delta 55), reused 3 (delta 0), pack-reused 0\"\n );\n print(\"Resolving deltas: 100% (55/55), done.`);\");\n\n await createFolder(\"example-repo\", getCurrentPath());\n await createFile(\n \"test.txt\",\n `${getCurrentPath()}example-repo/`,\n \"Hello World!\"\n );\n }, 500);\n }, 500);\n } else {\n print(\"Repo does not exist\");\n }\n },\n },\n add: () => {},\n commit: {\n output: (args, print) => {\n print(\"1 file changed, 1 insertion(+)\");\n },\n },\n push: {\n output: (args, print) => {\n print(`Enumerating objects: 1, done.\n Counting objects: 100% (1/1), done.\n Delta compression using up to 12 threads\n Compressing objects: 100% (1/1), done.\n Writing objects: 100% (14/14), 1.44 KiB | 1.44 MiB/s, done.`);\n setTimeout(() => {\n print(`Total 14 (delta 9), reused 0 (delta 0)\n To git@git-example-server.com:example-user/example-repo.git\n d4c1c9b..ef6b2c5 master -> master`);\n }, 500);\n },\n },\n status: {\n output: (args, print) => {\n print(`On branch master\n Your branch is up to date with 'origin/master'.`);\n },\n },\n },\n};\n\nexport const hasEditor = false;\nexport const fileStructure = {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: true,\n children: [\n {\n name: \"ram\",\n toggled: true,\n children: [\n {\n name: \"lab1\",\n toggled: true,\n children: [\n {\n name: \"config.json\",\n data: `{\n \"env\": \"local\",\n \"name\": \"test\"\n }\n `,\n final: `{\n \"env\": \"production\",\n \"name\": \"test\"\n }\n `,\n },\n {\n name: \"README.txt\",\n data: `Hi. this is the test for the editor.\n This is a default text that was kept for this lab.\n \n Edits you make are autosaved...`,\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"etc\",\n children: [],\n },\n {\n name: \"opt\",\n children: [],\n },\n {\n name: \"tmp\",\n children: [],\n },\n {\n name: \"var\",\n children: [\n {\n name: \"log\",\n children: [],\n },\n {\n name: \"lib\",\n children: [],\n },\n ],\n },\n ],\n lab1: {},\n};\n","import Tree from './Tree';\n\nexport default Tree;","import React from 'react';\nimport { Treebeard } from 'react-treebeard';\n\nconst Tree = ({ data, onToggle }) => {\n return ;\n};\n\nexport default Tree;\n","/* eslint-disable no-console */\nimport React from 'react'; // eslint-disable-line\nimport ObjectInspector from 'react-object-inspector';\nimport platform from 'platform';\n\n// Capture the console.log calls (hijacking)\n(function setOldLogger() {\n console['oldLog'] = console['log']; // eslint-disable-line dot-notation\n}());\n\n// Handle console logging\n// eslint-disable-next-line import/prefer-default-export\nexport function handleLogging(method, addToOutput) {\n // eslint-disable-next-line no-console\n console[method] = (...args) => {\n try {\n console.oldLog(`[${method}]`, ...args);\n } catch (e) {\n throw new Error('Terminal was loaded more than once check script tags');\n }\n const res = [...args].slice(0, 15).map((arg, i) => {\n switch (typeof arg) {\n case 'object':\n return ;\n case 'function':\n return `${arg}`;\n default:\n return arg;\n }\n });\n addToOutput(res);\n };\n Object.defineProperty(console[method], 'name', { value: method, writable: false }); // eslint-disable-line no-console\n}\n\nexport function isServer() {\n return !(typeof window !== 'undefined' && window.document);\n}\n\nconst linuxPlatforms = ['Ubuntu', 'Debian', 'Fedora', 'Red Hat', 'SuSE', 'Android'];\nconst darwinPlatforms = ['OS X', 'iOS'];\n\nexport function getOs() {\n const { os } = platform;\n if (os.family !== null && os.family.indexOf('Windows') === 0) {\n return 'win';\n }\n if (os.family !== null && linuxPlatforms.indexOf(os.family) > -1) {\n return 'linux';\n }\n if (os.family !== null && darwinPlatforms.indexOf(os.family) > -1) {\n return 'darwin';\n }\n return 'unknown';\n}\n","import PropTypes from 'prop-types';\n\nexport const commandsPropType = PropTypes.objectOf(PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.shape({\n options: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n defaultValue: PropTypes.any,\n })),\n method: PropTypes.func,\n }),\n]));\n\nexport const descriptionsPropType = PropTypes.objectOf(PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n]));\n\nexport const TerminalPropTypes = {\n startState: PropTypes.oneOf(['minimised', 'maximised', 'open', 'closed']),\n showActions: PropTypes.bool,\n hideTopBar: PropTypes.bool,\n allowTabs: PropTypes.bool,\n msg: PropTypes.string,\n closedTitle: PropTypes.string,\n closedMessage: PropTypes.string,\n color: PropTypes.string,\n style: PropTypes.object, // eslint-disable-line\n prompt: PropTypes.string,\n barColor: PropTypes.string,\n outputColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n commands: commandsPropType,\n descriptions: descriptionsPropType,\n watchConsoleLogging: PropTypes.bool,\n commandPassThrough: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.bool,\n ]),\n promptSymbol: PropTypes.string,\n plugins: PropTypes.arrayOf(PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.shape({\n class: PropTypes.func,\n config: PropTypes.object,\n }),\n ])),\n shortcuts: PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),\n actionHandlers: PropTypes.shape({\n handleClose: PropTypes.func,\n handleMinimise: PropTypes.func,\n handleMaximise: PropTypes.func,\n }),\n afterChange: PropTypes.func,\n commandWasRun: PropTypes.func,\n};\n\nexport const TerminalContextTypes = {\n barShowing: PropTypes.bool,\n tabsShowing: PropTypes.bool,\n activeTab: PropTypes.string,\n instances: PropTypes.array,\n show: PropTypes.bool,\n minimise: PropTypes.bool,\n maximise: PropTypes.bool,\n closeWindow: PropTypes.func,\n openWindow: PropTypes.func,\n minimiseWindow: PropTypes.func,\n unminimiseWindow: PropTypes.func,\n maximiseWindow: PropTypes.func,\n unmaximiseWindow: PropTypes.func,\n toggleShow: PropTypes.func,\n toggleMaximise: PropTypes.func,\n toggleMinimize: PropTypes.func,\n};\n\nexport const TerminalDefaultProps = {\n startState: 'open',\n hideTopBar: false,\n allowTabs: true,\n showActions: true,\n msg: '',\n closedTitle: 'OOPS! You closed the window.',\n closedMessage: 'Click on the icon to reopen.',\n color: 'green',\n style: {},\n prompt: 'green',\n barColor: 'black',\n backgroundColor: 'black',\n commands: {},\n descriptions: {},\n watchConsoleLogging: false,\n commandPassThrough: false,\n promptSymbol: '>',\n plugins: [],\n shortcuts: {},\n};\n","import Command from '../../args/index';\nimport { getOs } from '../../utils';\n\nexport const os = getOs();\n\nexport function pluginMap(plugins, eachHandler) {\n return plugins.map((plugin) => {\n if (typeof plugin === 'function') {\n plugin = {\n class: plugin,\n config: undefined,\n };\n }\n return plugin;\n }).forEach(pluginObj => eachHandler(pluginObj.class, pluginObj.config));\n}\n\nexport function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0; // eslint-disable-line no-bitwise\n const v = c === 'x' ? r : (r & 0x3 | 0x8); // eslint-disable-line\n return v.toString(16);\n });\n}\n\nexport function getShortcuts(shortcuts, obj) {\n if (typeof obj === 'object') {\n Object.keys(obj).forEach((key) => {\n const split = key.toLowerCase().replace(/\\s/g, '').split(',');\n split.forEach((osName) => {\n if (osName === os) {\n shortcuts = {\n ...shortcuts,\n ...obj[key],\n };\n }\n });\n });\n }\n return shortcuts;\n}\n\nexport function modCommands(commands) {\n const newCommands = {};\n\n Object.keys(commands).forEach((name) => {\n let needsInstance = false;\n const definition = commands[name];\n let method = definition;\n let parse = i => i;\n if (typeof definition !== 'undefined') {\n if (typeof definition === 'object') {\n const cmd = new Command();\n if (typeof definition.options !== 'undefined') {\n try {\n cmd.options(definition.options);\n } catch (e) {\n throw new Error('options for command wrong format');\n }\n }\n parse = i =>\n cmd.parse(i, {\n name,\n help: true,\n version: false,\n });\n method = definition.method; // eslint-disable-line\n needsInstance = definition.needsInstance || false;\n }\n\n newCommands[name] = {\n parse,\n method,\n needsInstance,\n };\n }\n });\n\n return newCommands;\n}\n","import styled, { keyframes } from \"styled-components\";\n\nexport const Base = styled.div`\n width: 100%;\n max-width: ${(props) => (props.fullscreen ? \"100%\" : \"600px\")};\n height: ${(props) => (props.fullscreen ? \"100%\" : \"630px\")};\n min-height: 630px;\n max-height: 100vh;\n text-align: initial;\n`;\n\nconst DEFAULT_FONT_STYLE = `\n font-family: 'Inconsolata', monospace;\n font-size: 1.5em;\n color: green;\n`;\n\nexport const ContainerWrapper = styled.div`\n height: 100%;\n animation: fadeIn 0.18s ease-in;\n color: ${(props) => props.theme.color};\n ${DEFAULT_FONT_STYLE}\n`;\n\nconst terminalFadeIn = keyframes`\n 0% {\n opacity: 0;\n }\n\n 60% {\n opacity: 0.6;\n }\n\n 100% {\n opacity: 1;\n }\n`;\n\nexport const Note = styled.span`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n animation: ${terminalFadeIn} 0.3s ease-in;\n`;\n","/* eslint-disable import/prefer-default-export */\nimport styled from 'styled-components';\n\nexport const TerminalTopBar = styled.div`\n height: 30px;\n max-width: 600px;\n transition: all 0.4s ease-out;\n background: ${props => props.theme.barColor};\n display: block;\n margin: 0 auto;\n`;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { TerminalTopBar } from './styled-elements';\n\nclass Bar extends Component {\n static displayName = 'Bar';\n\n static propTypes = {\n style: PropTypes.object, // eslint-disable-line\n showActions: PropTypes.bool,\n handleMinimise: PropTypes.func,\n handleMaximise: PropTypes.func,\n handleClose: PropTypes.func,\n };\n\n static defaultProps = {\n style: {},\n showActions: true,\n };\n\n static contextTypes = {\n maximise: PropTypes.bool,\n toggleShow: PropTypes.func,\n toggleMinimize: PropTypes.func,\n toggleMaximise: PropTypes.func,\n };\n\n // Close the window\n handleClose = () => {\n if (this.props.handleClose) {\n this.props.handleClose(this.context.toggleShow);\n } else {\n this.context.toggleShow();\n }\n };\n\n // Minimise the window\n handleMinimise = () => {\n if (this.props.handleMinimise) {\n this.props.handleMinimise(this.context.toggleMinimize);\n } else {\n this.context.toggleMinimize();\n }\n };\n\n // Maximise the window\n handleMaximise = () => {\n if (this.props.handleMaximise) {\n this.props.handleMaximise(this.context.toggleMaximise);\n } else {\n this.context.toggleMaximise();\n }\n };\n\n render() {\n const { style, showActions } = this.props;\n return (\n \n {showActions && (\n \n \n \n \n \n )}\n \n );\n }\n}\n\nexport default Bar;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport whatkey, { unprintableKeys } from 'whatkey';\nimport {\n ContainerMain,\n ContainerContent,\n Holder,\n Input,\n InputArea,\n MainInput,\n OutputLine,\n PreOutputLine,\n Prompt,\n} from './styled-elements';\n\nclass Content extends Component {\n static displayName = 'Content';\n\n static propTypes = {\n id: PropTypes.string,\n oldData: PropTypes.object, // eslint-disable-line\n prompt: PropTypes.string,\n register: PropTypes.func,\n handleChange: PropTypes.func,\n handlerKeyPress: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n prompt: '>',\n oldData: {},\n };\n\n static contextTypes = {\n maximise: PropTypes.bool,\n instances: PropTypes.array,\n activeTab: PropTypes.string,\n barShowing: PropTypes.bool,\n tabsShowing: PropTypes.bool,\n };\n\n state = {\n summary: [],\n promptPrefix: '',\n prompt: '>',\n history: [],\n historyCounter: 0,\n input: [],\n keyInputs: [],\n canScroll: true,\n controller: null,\n };\n\n componentWillMount = () => {\n const data = this.context.instances.find((i) => i.index === this.props.id);\n let state = { prompt: this.props.prompt };\n if (data) {\n state = { ...state, ...data.oldData };\n }\n this.setState(state);\n };\n\n componentDidMount = () => {\n this.focusInput();\n const data = this.context.instances.find((i) => i.index === this.props.id);\n this.unregister = this.props.register(this);\n if (!data || Object.keys(data.oldData).length === 0) {\n this.handleChange({ target: { value: 'show' }, key: 'Enter', dontShowCommand: true });\n }\n\n this.disableShortCuts();\n };\n\n disableShortCuts(e) {\n window.addEventListener('keydown', (e) => {\n if (e.ctrlKey && e.key === 'l') {\n e.preventDefault();\n }\n });\n }\n\n // Adjust scrolling\n componentDidUpdate = () => {\n if (this.inputWrapper !== null) {\n this.inputWrapper.scrollIntoView(false);\n }\n };\n\n componentWillUnmount() {\n this.unregister(this.state);\n }\n\n setScrollPosition = (pos) => {\n setTimeout(() => {\n if (this.contentWrapper !== null) {\n this.contentWrapper.scrollTop = pos;\n }\n }, 50);\n };\n\n focusInput = () => {\n if (this.com !== null) {\n this.com.focus();\n }\n };\n\n handleChange = (e) => {\n this.props.handleChange(this, e);\n };\n\n handleKeyPress = (e) => {\n this.props.handlerKeyPress(this, e, this.com);\n };\n\n handleOuterKeypress = (e) => {\n const { key } = whatkey(e);\n const actionKeys = ['up', 'down', 'left', 'right', 'enter'];\n if (unprintableKeys.indexOf(key) < 0) {\n if (document.activeElement !== this.com) {\n this.com.focus();\n this.com.value += whatkey(e).char;\n }\n } else if (actionKeys.indexOf(key) > -1) {\n this.com.focus();\n }\n };\n\n render() {\n const { id } = this.props;\n const { maximise, activeTab, barShowing, tabsShowing } = this.context;\n let color = '';\n\n if (id !== activeTab) {\n return null;\n }\n\n const output = this.state.summary.map((content, i) => {\n if (typeof content === 'string' && content.length === 0) {\n return  ;\n }\n\n if (content.color || content.value) {\n color = content.color;\n content = content.value;\n } else {\n color = '';\n }\n\n return (\n \n {Array.isArray(content)\n ? content.map((cont, key) => (\n \n {cont}\n \n ))\n : content}\n \n );\n });\n\n let toSubtract = 30;\n if (!barShowing) {\n toSubtract -= 30;\n }\n if (tabsShowing) {\n toSubtract += 30;\n }\n\n return (\n {\n this.contentWrapper = ctw;\n }}\n onClick={() => {\n this.focusInput();\n }}\n >\n \n \n \n {output}\n {\n this.inputWrapper = elm;\n }}\n >\n {this.state.promptPrefix + this.state.prompt}\n {\n this.com = com;\n }}\n onKeyPress={this.handleChange}\n onKeyDown={this.handleKeyPress}\n />\n \n \n \n \n \n );\n }\n}\n\nexport default Content;\n","import styled from 'styled-components';\n\nexport const TabBar = styled.div`\n height: 30px;\n max-width: 600px;\n transition: all 0.4s ease-out;\n background: #222;\n display: flex;\n margin: 0 auto;\n`;\n\n\nexport const TabBarEmpty = styled.div`\n display: inline-block;\n min-width: 25px;\n height: 100%;\n flex: 1;\n`;\n\nexport const TabClose = styled.div`\n position: absolute;\n top: 8px;\n height: 13px;\n line-height: 11px;\n right: 3px;\n font-size: 11px;\n width: 13px;\n text-align: center;\n color: black;\n cursor: pointer;\n\n &:hover {\n color: white;\n background-color: black;\n border-radius: 50%;\n }\n`;\n\nexport const Tab = styled.div`\n display: inline-block;\n vertical-align: top;\n height: 30px;\n background-color: #333;\n border-bottom: 2px solid #333;\n border-bottom-color: ${props => (props.active ? '#777' : '#333')}\n text-align: center;\n line-height: 30px;\n width: 100px;\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n padding-left: 3px;\n padding-right: 3px;\n cursor: pointer;\n white-space: pre;\n position: relative;\n text-align: center;\n &:focus {\n outline: none;\n }\n`;\n\nexport const TabPlus = styled.div`\n display: inline-block;\n color: white;\n border: 1px solid white;\n border-radius: 2px;\n width: 13px;\n height: 13px;\n line-height: 13px;\n margin-left: 5px;\n margin-top: 8px;\n text-align: center;\n font-size: 12px;\n cursor: pointer;\n opacity: ${props => (props.visible ? '0.7' : '0')};\n transition: opacity 0.3s;\n`;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Tab, TabBar, TabBarEmpty, TabClose, TabPlus } from './styled-elements';\n\nfunction last(arr, pre = '') {\n let base = arr.length > 2 ? `${arr[arr.length - 2]}` : '';\n if (base.indexOf(`${pre}> `) !== 0) {\n base = 'bash';\n }\n return base.replace(`${pre}> `, '').split(' ')[0];\n}\n\nclass Tabs extends Component {\n static displayName = 'Tabs';\n\n static propTypes = {\n style: PropTypes.object, // eslint-disable-line\n active: PropTypes.string,\n setActiveTab: PropTypes.func,\n removeTab: PropTypes.func,\n createTab: PropTypes.func,\n };\n\n static defaultProps = {\n style: {},\n };\n\n static contextTypes = {\n instances: PropTypes.array,\n maximise: PropTypes.bool,\n };\n\n state = {\n showingPlus: false,\n };\n\n handleBarClick = (e) => {\n e.stopPropagation();\n this.props.createTab();\n };\n\n // handle clicking a tab\n handleTabClick = (e, index) => {\n e.preventDefault();\n e.stopPropagation();\n this.props.setActiveTab(index);\n };\n\n // handle remove clicked\n handleRemoveClick = (e, index, instance) => {\n e.preventDefault();\n e.stopPropagation();\n this.props.removeTab(index, instance.props.id);\n return false;\n };\n\n removePlus = () => {\n if (this.state.showingPlus) {\n this.setState({ showingPlus: false });\n }\n }\n\n showPlus = () => {\n if (!this.state.showingPlus) {\n this.setState({ showingPlus: true });\n }\n }\n\n render() {\n const { showingPlus } = this.state;\n const { style, active } = this.props;\n const tabs = this.context.instances.map(({ index, instance }) => {\n const title = (instance && instance.state) ? last(instance.state.summary, instance.state.promptPrefix) : 'bash';\n return (\n this.handleTabClick(e, index)}\n onFocus={e => this.handleTabClick(e, index)}\n title={title}\n tabIndex={0}\n >\n {this.context.instances.length > 1 && (\n this.handleRemoveClick(e, index, instance)}\n >\n x\n \n )}\n {title}\n \n );\n });\n\n return (\n \n {tabs}\n \n +\n \n \n \n );\n }\n}\n\nexport default Tabs;\n","import React, { createContext, useContext, useState } from 'react';\n\nconst INITIAL_STATE = {\n currentStep: 0,\n commands: []\n};\n\nexport const CommandContext = createContext();\n\nexport const CommandProvider = ({ children }) => {\n const [commandState, setCommandState] = useState(INITIAL_STATE);\n const [lastRunCommand, setLastRunCommandState] = useState(null);\n\n function setLastRunCommand(lastRunCommand) {\n try {\n if (commandState.commands[commandState.currentStep][lastRunCommand] === 0) {\n commandState.commands[commandState.currentStep][lastRunCommand] = 1;\n setCommandState(commandState);\n }\n\n setLastRunCommandState(lastRunCommand);\n } catch (e) {\n console.log(e);\n }\n }\n\n return (\n \n {children}\n \n );\n};\n\nexport function useCommandState() {\n return useContext(CommandContext);\n}\n","import { useEffect } from 'react';\nimport { useCommandState } from 'state/useCommandState';\n\nconst Command = (props) => {\n const { setLastRunCommand } = useCommandState();\n\n useEffect(() => {\n setLastRunCommand(props.lastRunCommand);\n\n // eslint-disable-next-line\n }, [props.lastRunCommand]);\n return null;\n};\n\nexport default Command;\n","/* eslint-disable no-console, react/sort-comp */\nimport React, { Component } from 'react';\nimport stringSimilarity from 'string-similarity';\nimport whatkey from 'whatkey';\nimport isEqual from 'lodash.isequal';\nimport { ThemeProvider } from 'styled-components';\nimport { handleLogging } from '../../utils';\nimport { TerminalPropTypes, TerminalContextTypes, TerminalDefaultProps } from '../types';\n\nimport { os, pluginMap, uuidv4, getShortcuts, modCommands } from './terminal-utils';\nimport { Base, ContainerWrapper, Note } from './styled-elements';\n\nimport Bar from '../Bar';\nimport Content from '../Content/index';\nimport Tabs from '../Tabs/index';\nimport Command from './Command';\n\nfunction compLogic(comp) {\n switch (comp) {\n case '>':\n return (a, b) => parseInt(a, 10) > parseInt(b, 10);\n case '<':\n return (a, b) => parseInt(a, 10) < parseInt(b, 10);\n case '>=':\n return (a, b) => parseInt(a, 10) >= parseInt(b, 10);\n case '<=':\n return (a, b) => parseInt(a, 10) <= parseInt(b, 10);\n case '!=':\n return (a, b) => a !== b;\n case '=':\n default:\n return (a, b) => a === b;\n }\n}\n\nfunction putCursorAtEnd(el) {\n // Only focus if input isn't already\n if (document.activeElement !== el) {\n el.focus();\n }\n\n // If this function exists... (IE 9+)\n if (el.setSelectionRange) {\n // Double the length because Opera is inconsistent about whether a carriage\n // return is one character or two.\n const len = el.value.length * 2;\n\n // Timeout seems to be required for Blink\n setTimeout(() => {\n el.setSelectionRange(len, len);\n }, 1);\n } else {\n // As a fallback, replace the contents with itself\n // Doesn't work in Chrome, but Chrome supports setSelectionRange\n // eslint-disable-next-line\n el.value = el.value;\n }\n}\n\nclass Terminal extends Component {\n static displayName = 'Terminal';\n\n static version = '4.3.0';\n\n static propTypes = TerminalPropTypes;\n\n static defaultProps = TerminalDefaultProps;\n\n static childContextTypes = TerminalContextTypes;\n\n constructor(props) {\n super(props);\n\n this.pluginData = {};\n\n this.defaultCommands = {\n // eslint-disable-line react/sort-comp\n show: this.showMsg,\n clear: {\n method: this.clearScreen,\n needsInstance: true\n },\n help: {\n method: this.showHelp,\n needsInstance: true\n },\n echo: (input) => input.slice(1).join(' '),\n 'edit-line': {\n method: this.editLine,\n needsInstance: true,\n options: [\n {\n name: 'line',\n description: 'the line you want to edit. -1 is the last line',\n init: (value) => parseInt(value, 10),\n defaultValue: -1\n }\n ]\n }\n };\n\n this.defaultDesciptions = {\n show: props.msg && props.msg.length > 0 ? 'show the msg' : false,\n clear: 'clear the screen',\n help: 'list all the commands',\n echo: false,\n 'edit-line': false\n };\n\n this.defaultShortcuts = {\n 'win, linux, darwin': {\n 'alt + t': this.createTab\n },\n 'win, linux': {\n 'ctrl + l': 'clear'\n },\n darwin: {\n 'cmd + k': 'clear'\n }\n };\n\n this.state = {\n tabbed: false,\n commands: {},\n descriptions: {},\n show: props.startState !== 'closed',\n minimise: props.startState === 'minimised',\n maximise: props.startState === 'maximised',\n shortcuts: {},\n activeTab: '',\n tabs: [],\n instances: []\n };\n }\n\n getChildContext() {\n return {\n instances: this.state.instances,\n show: this.state.show,\n minimise: this.state.minimise,\n maximise: this.state.maximise,\n activeTab: this.state.activeTab,\n barShowing: !this.props.hideTopBar,\n tabsShowing: this.props.allowTabs,\n openWindow: this.setTrue('show'),\n closeWindow: this.setFalse('show'),\n minimiseWindow: this.setTrue('minimise'),\n unminimiseWindow: this.setFalse('minimise'),\n maximiseWindow: this.setTrue('maximise'),\n unmaximiseWindow: this.setFalse('maximise'),\n toggleShow: this.toggleState('show'),\n toggleMaximise: this.toggleState('maximise'),\n toggleMinimize: this.toggleState('minimise')\n };\n }\n\n // Prepare the symbol\n componentWillMount = () => {\n this.loadPlugins();\n this.assembleCommands();\n this.setDescriptions();\n this.setShortcuts();\n\n this.createTab(true);\n };\n\n // Load everything!\n componentDidMount = () => {\n if (this.props.watchConsoleLogging) {\n this.watchConsoleLogging();\n }\n };\n\n // Tab creation\n createTab = (force = false) => {\n const { allowTabs, promptSymbol } = this.props;\n if (force || allowTabs) {\n const { tabs } = this.state;\n const id = uuidv4();\n\n tabs.push(\n this.registerInstance(id, ...args)}\n />\n );\n\n this.setState({ activeTab: id, tabs });\n }\n };\n\n // Tab removal\n removeTab = (index) => {\n const { tabs } = this.state;\n tabs.splice(index, 1);\n this.setState({ tabs });\n };\n\n // Show the content on toggling\n getAppContent = () => {\n const { show, minimise } = this.state;\n if (!show) {\n return this.getNote();\n }\n if (minimise) {\n return this.getBar();\n }\n return this.getContent();\n };\n\n // Shows the full window (normal window)\n getContent = () => {\n const { color, style, showActions, hideTopBar, allowTabs, actionHandlers } = this.props;\n const { activeTab, tabs } = this.state;\n const baseStyle = {\n height: '100%',\n color: color || 'green',\n animation: 'fadeIn 0.18s ease-in',\n fontFamily: \"'Inconsolata', monospace\",\n fontSize: '0.9em'\n };\n // This should be a syled component but breaks if it is...\n return (\n
\n {!hideTopBar && }\n {allowTabs && (\n \n )}\n {tabs}\n
\n );\n };\n\n // Show only bar (minimise)\n getBar = () => {\n const { style, showActions, actionHandlers } = this.props;\n\n return (\n \n \n \n );\n };\n\n // Show msg (on window close)\n getNote = () => (\n \n

{this.props.closedTitle}

\n \n {this.props.closedMessage}\n
\n );\n\n // Plugin data getter\n getPluginData = (name) => this.pluginData[name];\n\n // Plugin data setter\n setPluginData = (name, data) => {\n this.pluginData[name] = data;\n };\n\n // Set descriptions of the commands\n setDescriptions = () => {\n let descriptions = {\n ...this.defaultDesciptions,\n ...this.props.descriptions\n };\n pluginMap(this.props.plugins, (plugin) => {\n if (plugin.descriptions) {\n descriptions = {\n ...descriptions,\n ...plugin.descriptions\n };\n }\n });\n this.setState({ descriptions });\n };\n\n // Set command shortcuts\n setShortcuts = () => {\n let shortcuts = getShortcuts({}, this.defaultShortcuts);\n shortcuts = getShortcuts(shortcuts, this.props.shortcuts);\n pluginMap(this.props.plugins, (plugin) => {\n if (plugin.shortcuts) {\n shortcuts = getShortcuts(shortcuts, plugin.shortcuts);\n }\n });\n this.setState({ shortcuts });\n };\n\n // Setter to change the prefix of the input prompt\n setPromptPrefix = (instance, promptPrefix) => {\n if (instance.state.controller === null) {\n instance.setState({ promptPrefix });\n }\n };\n\n // Setter to change the symbol of the input prompt\n setPromptSymbol = (instance, prompt) => {\n if (instance.state.controller === null) {\n instance.setState({ prompt });\n }\n };\n\n // Set the currently active tab\n setActiveTab = (activeTab) => {\n this.setState({ activeTab });\n };\n\n // Hide window\n setFalse = (name) => () => this.setState({ [name]: false });\n\n // Show window\n setTrue = (name) => () => this.setState({ [name]: true });\n\n /**\n * set the input value with the possible history value\n * @param {number} next position on the history\n */\n setValueWithHistory = (instance, position, inputRef) => {\n const { history } = instance.state;\n if (history[position]) {\n instance.setState({ historyCounter: position });\n inputRef.value = history[position];\n putCursorAtEnd(inputRef);\n }\n };\n\n // Method to check if version meets criteria\n checkVersion = (comp, ver) => {\n if (ver === '*') {\n return true;\n }\n if (!/^(\\d|\\.)+$/.test(ver)) {\n throw new Error('Version can only have numbers and periods');\n } else {\n let clean = ver.toLowerCase().replace(/x/g, '0');\n if (clean[clean.length - 1] === '.') {\n clean += '0';\n }\n const split = clean.split('.');\n while (split.length < 3) {\n split.push('0');\n }\n const realSplit = Terminal.version.split('.');\n const checkBools = split.map((val, index) => compLogic(comp)(realSplit[index], val));\n return checkBools.indexOf(false) < 0;\n }\n };\n\n // Used to keep track of all instances\n registerInstance = (index, instance) => {\n const { instances } = this.state;\n const pluginInstances = {};\n const pluginMethods = {};\n\n const old = instances.find((i) => i.index === index);\n\n pluginMap(this.props.plugins, (PluginClass, config) => {\n try {\n const api = {\n printLine: this.printLine.bind(this, instance),\n removeLine: this.removeLine.bind(this, instance),\n runCommand: this.runCommand.bind(this, instance),\n setCanScroll: this.setCanScroll.bind(this, instance),\n setScrollPosition: this.setScrollPosition.bind(this, instance),\n focusInput: this.focusInput.bind(this, instance),\n setPromptPrefix: this.setPromptPrefix.bind(this, instance),\n setPromptSymbol: this.setPromptSymbol.bind(this, instance),\n getPluginMethod: this.getPluginMethod.bind(this, instance),\n takeControl: this.pluginTakeControl.bind(this, instance),\n releaseControl: this.pluginReleaseControl.bind(this, instance),\n getData: () => this.getPluginData(PluginClass.displayName),\n setData: (data) => this.setPluginData(PluginClass.displayName, data),\n checkVersion: this.checkVersion.bind(this),\n version: Terminal.version,\n os\n };\n\n let plugin;\n if (old) {\n old.pluginInstances[PluginClass.displayName].updateApi(api);\n } else {\n plugin = new PluginClass(api, config);\n pluginMethods[PluginClass.displayName] = {\n ...plugin.getPublicMethods(),\n _getName: () => PluginClass.displayName,\n _getVersion: () => PluginClass.version\n };\n }\n\n pluginInstances[PluginClass.displayName] = plugin;\n } catch (e) {\n console.error(`Error instantiating plugin ${PluginClass.displayName}`, e); // eslint-disable-line no-console\n }\n });\n\n const data = {\n index,\n instance,\n pluginMethods: old ? old.pluginMethods : pluginMethods,\n pluginInstances: old ? old.pluginInstances : pluginInstances\n };\n\n if (old) {\n const realIndex = instances.indexOf(old);\n instances[realIndex] = data;\n } else {\n instances.push(data);\n }\n\n this.setState({ instances });\n\n return () => {\n const insts = this.state.instances;\n this.setState({\n instances: insts.filter((i) => !isEqual(i.instance, instance))\n });\n };\n };\n\n // allows a plugin to take full control over instance\n pluginTakeControl = (instance, controller, newPrompt, newPromptPrefix) => {\n const { promptPrefix, prompt } = instance.state;\n instance.setState({\n controller,\n prompt: typeof newPrompt === 'undefined' ? prompt : newPrompt,\n promptPrefix: typeof newPromptPrefix === 'undefined' ? promptPrefix : newPromptPrefix,\n oldPrefix: promptPrefix,\n oldPrompt: prompt\n });\n };\n\n // allows a plugin to release full control over instance\n pluginReleaseControl = (instance) => {\n const { oldPrefix, oldPrompt } = instance.state;\n instance.setState({ controller: null, promptPrefix: oldPrefix, prompt: oldPrompt });\n };\n\n // Toggle a state boolean\n toggleState = (name) => () => this.setState({ [name]: !this.state[name] });\n\n // Prepare the built-in commands\n assembleCommands = () => {\n let commands = {\n ...this.defaultCommands,\n ...this.props.commands\n };\n\n pluginMap(this.props.plugins, (plugin) => {\n if (plugin.commands) {\n commands = {\n ...commands,\n ...plugin.commands\n };\n }\n });\n\n this.setState({ commands: modCommands(commands) });\n };\n\n /**\n * autocomplete with the command the have the best match\n * @param {object} input reference\n */\n autocompleteValue = (inputRef) => {\n const { descriptions } = this.state;\n const keysToCheck = Object.keys(descriptions).filter((key) => descriptions[key] !== false);\n let ratings = [];\n if (inputRef.value.length > 1) {\n ratings = stringSimilarity.findBestMatch(\n // eslint-disable-line\n inputRef.value,\n keysToCheck\n ).ratings;\n } else {\n ratings = keysToCheck.reduce((full, item) => {\n if (item.indexOf(inputRef.value) === 0) {\n full.push({ target: item, rating: 1 });\n }\n return full;\n }, []);\n }\n return ratings.filter((item) => item.rating > 0);\n };\n\n // Refresh or clear the screen\n clearScreen = (args, printLine, runCommand, instance) => {\n instance.setState({ summary: [] });\n };\n\n // Method to check for shortcut and invoking commands\n checkShortcuts = (instance, key, e) => {\n const { controller } = instance.state;\n let cuts = {};\n if (controller !== null) {\n if (controller.shortcuts) {\n cuts = getShortcuts(cuts, controller.shortcuts);\n }\n } else {\n const instanceData = this.state.instances.find((i) => isEqual(i.instance, instance));\n cuts = this.state.shortcuts;\n if (instanceData) {\n Object.values(instanceData.pluginInstances).forEach((i) => {\n cuts = getShortcuts(cuts, i.shortcuts);\n });\n }\n }\n\n const shortcuts = Object.keys(cuts);\n if (shortcuts.length > 0) {\n const { keyInputs } = instance.state;\n let modKey = key;\n if (key === 'meta') {\n // eslint-disable-next-line no-nested-ternary\n modKey = os === 'darwin' ? 'cmd' : os === 'win' ? 'win' : 'meta';\n }\n keyInputs.push(modKey);\n const len = keyInputs.length;\n\n const options = shortcuts\n .map((cut, i) => [cut.replace(/\\s/g, '').split('+'), i])\n .filter((cut) => cut[0].length >= keyInputs.length)\n .filter((cut) => isEqual(cut[0].slice(0, len), keyInputs));\n\n if (options.length > 0) {\n if (options.length === 1 && options[0][0].length === len) {\n const shortcut = shortcuts[options[0][1]];\n const action = cuts[shortcut];\n if (typeof action === 'string') {\n this.runCommand(instance, cuts[shortcut]);\n } else if (typeof action === 'function') {\n e.preventDefault();\n e.stopPropagation();\n action();\n }\n instance.setState({ keyInputs: [] });\n }\n } else if (keyInputs.length > 0) {\n instance.setState({ keyInputs: [] });\n }\n }\n };\n\n // edit-line command\n editLine = (args, printLine, runCommand, instance) => {\n const { summary } = instance.state;\n let index = args.line;\n if (index < 0) {\n index = summary.length === 0 ? 0 : summary.length - index;\n }\n summary[index] = args._.join(' ');\n instance.setState({ summary });\n };\n\n // Listen for user input\n handleChange = (instance, e) => {\n const { input, promptPrefix, prompt, history, controller } = instance.state;\n const saveToHistory = controller !== null ? controller.history || false : true;\n if (e.key === 'Enter' && !e.shiftKey) {\n if (typeof e.dontShowCommand === 'undefined') {\n this.printLine.bind(this, instance)(`${promptPrefix}${prompt} ${e.target.value}`, false);\n }\n\n input.push(e.target.value);\n const res = this.runCommand(instance, `${input.join('\\n')}`);\n\n if (typeof res !== 'undefined') {\n this.printLine.bind(this, instance)(res);\n }\n\n const newHistory = [...history, e.target.value];\n const historyProps = saveToHistory\n ? {\n history: newHistory,\n historyCounter: newHistory.length\n }\n : {};\n instance.setState({\n input: [],\n ...historyProps\n });\n this.setState({\n lastRunCommand: e.target.value\n });\n e.target.value = ''; // eslint-disable-line no-param-reassign\n } else if (e.key === 'Enter' && e.shiftKey) {\n this.printLine.bind(this, instance)(`${promptPrefix}${prompt} ${e.target.value}`, false);\n const newHistory = [...history, e.target.value];\n const historyProps = saveToHistory\n ? {\n history: newHistory,\n historyCounter: newHistory.length\n }\n : {};\n instance.setState({\n input: [...input, e.target.value],\n ...historyProps\n });\n e.target.value = ''; // eslint-disable-line no-param-reassign\n }\n if (typeof this.props.afterChange === 'function') {\n this.props.afterChange(e);\n }\n };\n\n /**\n * Base of key code set the value of the input\n * with the history\n * @param {event} event of input\n */\n handlerKeyPress = (instance, e, inputRef) => {\n const { key } = whatkey(e);\n const { historyCounter, keyInputs, controller } = instance.state;\n if (keyInputs.length === 0 || keyInputs.length === 0) {\n if (controller !== null) {\n if (controller.onKeyPress) {\n controller.onKeyPress(key);\n }\n } else {\n switch (key) {\n case 'up':\n this.setValueWithHistory(instance, historyCounter - 1, inputRef);\n if (this.state.tabbed) {\n this.setState({ tabbed: false });\n }\n break;\n case 'down':\n this.setValueWithHistory(instance, historyCounter + 1, inputRef);\n if (this.state.tabbed) {\n this.setState({ tabbed: false });\n }\n break;\n case 'tab':\n e.preventDefault();\n\n if (inputRef.value !== '' && this.state.tabbed === true) {\n const contents = this.autocompleteValue(inputRef);\n\n this.printLine(\n instance,\n `${instance.state.promptPrefix}${instance.state.prompt} ${inputRef.value}`,\n false\n );\n this.printLine(\n instance,\n \n {contents\n .filter((item) => typeof item !== 'undefined')\n .map((item) => {\n const styles = {\n marginRight: 5,\n width: 'calc(33% - 5px)',\n display: 'inline-block'\n };\n if (contents.length > 3) {\n styles.marginBottom = 5;\n }\n return (\n \n {item.target}\n \n );\n })}\n ,\n false\n );\n this.setState({ tabbed: false });\n } else {\n this.setState({ tabbed: true });\n }\n break;\n default:\n if (this.state.tabbed) {\n this.setState({ tabbed: false });\n }\n break;\n }\n }\n }\n this.checkShortcuts(instance, key, e);\n };\n\n // Plugins\n loadPlugins = () => {\n const pluginData = {};\n pluginMap(this.props.plugins, (plugin) => {\n try {\n pluginData[plugin.displayName] = plugin.defaultData;\n } catch (e) {\n console.error(`Error loading plugin ${plugin.displayName}`, e); // eslint-disable-line no-console\n }\n });\n this.pluginData = pluginData;\n };\n\n // Plugin api method to get a public plugin method\n getPluginMethod = (instance, name, method) => {\n const instanceData = this.state.instances.find((i) => isEqual(i.instance, instance));\n if (instanceData) {\n if (instanceData.pluginMethods[name]) {\n if (instanceData.pluginMethods[name][method]) {\n return instanceData.pluginMethods[name][method];\n }\n throw new Error(`No method with name ${method} has been registered for plugin ${name}`);\n } else {\n throw new Error(`No plugin with name ${name} has been registered`);\n }\n }\n return null;\n };\n\n // Set if the current tab can scroll\n setCanScroll = (instance, force) => {\n if (typeof force !== 'undefined') {\n instance.setState({ canScroll: force });\n }\n };\n\n // Set the scroll position of the contents\n setScrollPosition = (instance, pos) => {\n if (typeof pos === 'number') {\n instance.setScrollPosition(pos);\n }\n };\n\n // Set focus to the input\n focusInput = (instance) => {\n if (typeof pos === 'number') {\n instance.focusInput();\n }\n };\n\n // Print the summary (input -> output)\n printLine = (instance, inp, std = true) => {\n let print = true;\n if (std) {\n const instanceData = this.state.instances.find((i) => isEqual(i.instance, instance));\n if (instanceData) {\n const plugins = instanceData.pluginInstances;\n for (let i = 0; i < plugins.length; i += 1) {\n try {\n print = plugins[i].readStdOut(inp);\n } catch (e) {\n // Do nothing\n }\n }\n }\n }\n\n if (print !== false) {\n const { summary } = instance.state;\n summary.push(inp);\n instance.setState({ summary });\n }\n };\n\n // Remove a line from the summary\n removeLine = (instance, lineNumber = -1) => {\n const { summary } = instance.state;\n summary.splice(lineNumber, 1);\n instance.setState({ summary });\n };\n\n // Execute the commands\n runCommand = (instance, inputText, force = false) => {\n const inputArray = inputText.split(' ');\n const input = inputArray[0];\n const args = inputArray; // Undefined for function call\n const { controller } = instance.state;\n let commands = {};\n\n if (!force && controller !== null) {\n if (controller.runCommand) {\n return controller.runCommand(inputText);\n } else if (controller.commands) {\n commands = { ...modCommands(controller.commands) };\n }\n } else {\n const instanceData = this.state.instances.find((i) => isEqual(i.instance, instance));\n commands = { ...this.state.commands };\n if (instanceData) {\n Object.values(instanceData.pluginInstances).forEach((i) => {\n commands = {\n ...commands,\n ...modCommands(i.commands)\n };\n });\n }\n }\n\n const command = commands[input];\n let res;\n\n if (input === '') {\n // do nothing\n } else if (command === undefined) {\n if (typeof this.props.commandPassThrough === 'function') {\n res = this.props.commandPassThrough(\n inputArray,\n this.printLine.bind(this, instance),\n this.runCommand.bind(this, instance)\n );\n } else {\n this.printLine.bind(this, instance)(`-bash:${input}: command not found`);\n }\n } else {\n const parsedArgs = command.parse(args);\n const type = typeof parsedArgs;\n if (type !== 'object' || (type === 'object' && !parsedArgs.help)) {\n res = command.method(\n parsedArgs,\n this.printLine.bind(this, instance),\n this.runCommand.bind(this, instance),\n command.needsInstance === true ? instance : undefined\n );\n }\n }\n if (typeof this.props.commandWasRun === 'function') {\n this.props.commandWasRun(inputArray, this.printLine.bind(this, instance), this.runCommand.bind(this, instance));\n }\n return res;\n };\n\n // Run a command on the active instance\n runCommandOnActive = (inputText, force = false) => {\n const data = this.state.instances.find((i) => i.index === this.state.activeTab);\n if (data && data.instance !== null) {\n this.runCommand(data.instance, inputText, force);\n }\n };\n\n // Print to active instance\n printToActive = (...args) => {\n const data = this.state.instances.find((i) => i.index === this.state.activeTab);\n if (data && data.instance !== null && data.instance.state.controller === null) {\n this.printLine(data.instance, ...args);\n }\n };\n\n // Listen for console logging and pass the input to handler (handleLogging)\n watchConsoleLogging = () => {\n handleLogging('log', this.printToActive);\n handleLogging('info', this.printToActive);\n };\n\n // List all the commands (state + user defined)\n showHelp = (args, printLine, runCommand, instance) => {\n let commands = { ...this.state.commands };\n let descriptions = { ...this.state.descriptions };\n const instanceData = this.state.instances.find((i) => isEqual(i.instance, instance));\n if (instanceData) {\n Object.values(instanceData.pluginInstances).forEach((i) => {\n commands = {\n ...commands,\n ...i.commands\n };\n descriptions = {\n ...descriptions,\n ...i.descriptions\n };\n });\n }\n const options = Object.keys(commands);\n\n for (const option of options) {\n // eslint-disable-line no-restricted-syntax\n if (descriptions[option] !== false) {\n printLine(`${option} - ${descriptions[option]}`);\n }\n }\n };\n\n // Show the msg (prop msg)\n showMsg = (args, printLine) => {\n if (this.props.msg && this.props.msg.length > 0) {\n printLine(this.props.msg);\n }\n };\n\n render() {\n const theme = {\n color: this.props.color,\n prompt: this.props.prompt,\n barColor: this.props.barColor,\n outputColor: this.props.outputColor,\n backgroundColor: this.props.backgroundColor\n };\n\n return (\n \n \n \n {this.getAppContent()}\n \n \n );\n }\n}\n\nexport default Terminal;\n","export default class Plugin {\n static displayName = '';\n static version = '1.0.0';\n static defaultData = '';\n\n static commands = {};\n static descriptions = {};\n static shortcuts = {};\n\n constructor(api, config = {}) {\n this.api = api;\n this.config = config;\n this.commands = {};\n this.descriptions = {};\n this.shortcuts = {};\n\n this.updateApi = (newApi) => { this.api = newApi; };\n this.getPublicMethods = () => ({});\n this.readStdOut = () => true;\n }\n}\n","import { injectGlobal } from 'styled-components';\nimport Terminal from './components/Terminal';\nimport PluginBase from './components/Plugin';\n\n// eslint-disable-next-line\ninjectGlobal`\n/* vietnamese */\n@font-face {\n font-family: 'Inconsolata';\n font-style: normal;\n font-weight: 400;\n src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v15/BjAYBlHtW3CJxDcjzrnZCNDiNsR5a-9Oe_Ivpu8XWlY.woff2) format('woff2');\n unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inconsolata';\n font-style: normal;\n font-weight: 400;\n src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v15/BjAYBlHtW3CJxDcjzrnZCKE8kM4xWR1_1bYURRojRGc.woff2) format('woff2');\n unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inconsolata';\n font-style: normal;\n font-weight: 400;\n src: local('Inconsolata Regular'), local('Inconsolata-Regular'), url(https://fonts.gstatic.com/s/inconsolata/v15/BjAYBlHtW3CJxDcjzrnZCIgp9Q8gbYrhqGlRav_IXfk.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n`;\n\nexport default Terminal;\n\nexport {\n PluginBase,\n};\n","import React from 'react'; // eslint-disable-line\nimport { PluginBase } from '../../react-terminal'; // eslint-disable-line\nimport set from 'lodash.set';\nimport langMap from 'lang-map';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\nimport * as syntaxStyles from 'react-syntax-highlighter/dist/styles';\nimport { displayName, version, CURRENT_DIR, PARENT_DIR, HOME_DIR } from './consts';\n\nconst DIR = 'dir';\nconst FILE = 'file';\nconst HOME_PATH = ['home', 'user'];\n\nfunction has(obj, key) {\n return typeof obj[key] !== 'undefined';\n}\n\nexport default function configPlugin(pathSeporator = '/') {\n function toStringPath(path) {\n const stringParts = [...path.parts];\n if (path.isDir) {\n stringParts.push('');\n }\n if (path.isRoot) {\n stringParts.unshift('');\n }\n return stringParts.join(pathSeporator);\n }\n\n class PseudoFileSystem extends PluginBase {\n static displayName = displayName;\n static version = version;\n static defaultData = {\n name: pathSeporator,\n type: DIR,\n contents: {\n home: {\n name: 'home',\n type: DIR,\n contents: {\n user: {\n name: 'user',\n type: DIR,\n contents: {},\n },\n },\n },\n },\n };\n\n constructor(api, config) {\n super(api, config);\n\n this.currentPath = '';\n\n const _ = [`${pathSeporator}${HOME_PATH.join(pathSeporator)}${pathSeporator}`];\n setTimeout(() => {\n this.enterDir().method({ _ });\n });\n }\n\n commands = {\n cd: this.enterDir(),\n ls: this.listDirContents(),\n rm: this.removeFromFileSystemCommand(),\n mkdir: this.createDirCommand(),\n touch: this.createFileCommand(),\n cat: this.runCat(),\n // echo: this.runEcho,\n };\n\n descriptions = {\n cd: false,\n ls: false,\n rm: false,\n mkdir: false,\n touch: false,\n cat: false,\n };\n\n getPublicMethods = () => ({\n parsePath: this.parsePath,\n isValidPath: (path, cb) => cb(this.isValidPath(path)),\n createDir: this.createDir,\n createFile: this.createFile,\n removeDir: this.remove,\n removeFile: this.remove,\n readDir: (path, cb) => cb(this.getContents(path, true)),\n readFile: (path, cb) => {\n const file = this.getContents(path);\n if (file !== null && typeof file === 'object') {\n cb(file.contents);\n } else {\n cb(file);\n }\n },\n writeFile: this.writeToFile,\n pathToString: toStringPath,\n types: {\n dir: DIR,\n file: FILE,\n },\n });\n\n doParse(split, currentPath) {\n // eslint-disable-line class-methods-use-this\n let isDir = false;\n let isRoot = false;\n const baseIsASymbol = [CURRENT_DIR, PARENT_DIR, HOME_DIR].indexOf(split[0]) > -1;\n if (split[split.length - 1] === '' || (split.length === 1 && baseIsASymbol)) {\n isDir = true;\n }\n if (split[0] === '') {\n isRoot = true;\n }\n let modPath = split.filter((part) => part.length !== 0);\n if (!isRoot) {\n if (modPath[0] === CURRENT_DIR) {\n modPath = [...currentPath.parts, ...modPath.slice(1)];\n } else if (modPath[0] === HOME_DIR) {\n modPath = [...HOME_PATH, ...modPath.slice(1)];\n } else if (modPath[0] === PARENT_DIR) {\n modPath = [...currentPath.parts, ...modPath];\n }\n }\n\n if (baseIsASymbol) {\n isRoot = true;\n }\n\n for (let i = 0; i < modPath.length; i += 1) {\n if (modPath[i] === CURRENT_DIR) {\n modPath[i] = '';\n } else if (modPath[i] === PARENT_DIR) {\n if (i - 1 >= 0) {\n modPath[i - 1] = '';\n }\n modPath[i] = '';\n }\n }\n modPath = modPath.filter((part) => part.length !== 0);\n\n return {\n parts: modPath,\n isRoot,\n isDir,\n };\n }\n\n parsePath(path) {\n const split = path.split(pathSeporator);\n if (['', CURRENT_DIR, PARENT_DIR, HOME_DIR].indexOf(split[0]) < 0) {\n split.unshift('.');\n }\n return this.doParse(split, this.currentPath);\n }\n\n isValidPath(path) {\n const { parts } = path;\n let last = this.api.getData();\n for (let i = 0; i < parts.length; i += 1) {\n if (has(last.contents, parts[i])) {\n last = last.contents[parts[i]];\n } else {\n this.api.printLine(`Not a valid path: ${toStringPath(path)}`);\n return false;\n }\n }\n return true;\n }\n\n getContents(path, str = false) {\n const { parts } = path;\n if (this.isValidPath(path)) {\n let last = this.api.getData();\n for (let i = 0; i < parts.length; i += 1) {\n if (has(last.contents, parts[i])) {\n last = last.contents[parts[i]];\n }\n }\n if (str && typeof last !== 'string') {\n return ['.', '..', ...Object.keys(last)];\n }\n return last;\n }\n return null;\n }\n\n addToFileSystem({ parts }, data) {\n const path = ['contents', ...parts.join('Ω…ΩcontentsΩ…Ω').split('Ω…Ω')];\n this.api.setData(set(this.api.getData(), path, data));\n }\n\n enterDir() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const newPath = this.parsePath(args._.join(' '));\n if (this.isValidPath(newPath)) {\n this.currentPath = newPath;\n this.api.setPromptPrefix(`${toStringPath(this.currentPath)} `);\n }\n }\n },\n };\n }\n\n createDirCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(args._[0]);\n this.createDir(path);\n }\n },\n };\n }\n\n createDir(path) {\n if (this.isValidPath(path)) {\n const parentDir = path.parts.slice(0, path.parts.length - 2);\n const newDir = path.parts[path.parts.length - 1];\n const dir = this.getContents({ parts: parentDir });\n if (dir !== null) {\n if (!has(dir.contents, newDir)) {\n this.addToFileSystem(path, {\n name: newDir,\n type: DIR,\n contents: {},\n });\n }\n }\n }\n }\n\n createFileCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(args._[0]);\n this.createFile(path);\n }\n },\n };\n }\n\n createFile(path) {\n const parentDir = path.parts.slice(0, path.parts.length - 2);\n if (this.isValidPath({ parts: parentDir })) {\n const newFile = path.parts[path.parts.length - 1];\n const dir = this.getContents({ parts: parentDir });\n if (dir !== null) {\n if (!has(dir.contents, newFile)) {\n this.addToFileSystem(path, {\n name: newFile,\n type: FILE,\n contents: '',\n });\n }\n }\n }\n }\n\n remove(path) {\n const contents = this.getContents(path);\n if (contents !== null && typeof contents !== 'undefined') {\n this.addToFileSystem(path, undefined);\n }\n }\n\n removeFromFileSystemCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(args._.join(' '));\n const contents = this.getContents(path);\n if (contents !== null) {\n if (contents.type === DIR && Object.keys(contents.contents).length > 0 && !args.recursive) {\n this.api.printLine(`${toStringPath(path)} is not empty`);\n } else {\n this.addToFileSystem(path, undefined);\n }\n }\n }\n },\n options: [\n {\n name: 'recursive',\n description: 'Each item in the folder as well',\n defaultValue: false,\n },\n {\n name: 'force',\n description: 'Force the delete',\n defaultValue: false,\n },\n ],\n };\n }\n\n runCat() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n let split = args._;\n if (args._.indexOf('>>') > 0) {\n split = args._.join(' ').split('>>');\n }\n const pathA = this.parsePath(split[0].trim());\n const file = this.getContents(pathA);\n if (file !== null && file.type === FILE) {\n if (args._.indexOf('>>') > 0) {\n const pathB = this.parsePath(split[1].trim());\n this.writeToFile(pathB, file.contents, { flag: 'a' });\n } else {\n const splitName = file.name.split('.');\n const lang = langMap.languages(splitName[splitName.length - 1])[0];\n this.api.printLine(\n \n {file.contents}\n \n );\n }\n }\n }\n },\n };\n }\n\n runEcho() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n if (args._.indexOf('>>') > -1) {\n const split = args._.join(' ').split(' >> ');\n const path = this.parsePath(split[1]);\n this.writeToFile(path, split[0], { flag: 'a' });\n } else {\n this.api.printLine(args._.join(' '));\n }\n }\n },\n };\n }\n\n writeToFile(path, contents = '', options = { flag: 'w' }) {\n if (this.isValidPath(path)) {\n const file = this.getContents(path);\n if (file !== null && file.type === FILE) {\n if (options.flag === 'w') {\n file.contents = `${contents}`;\n } else if (options.flag === 'a') {\n file.contents += `\\n${contents}`;\n }\n this.addToFileSystem(path, file);\n }\n }\n }\n\n listDirContents() {\n return {\n method: (args) => {\n const path = this.parsePath(args._[0] || '.');\n if (path.isDir) {\n const dir = this.getContents(path);\n if (dir !== null) {\n const contents = [\n {\n name: '.',\n type: DIR,\n },\n {\n name: '..',\n type: DIR,\n },\n ...Object.values(dir.contents),\n ];\n this.api.printLine(\n \n {contents\n .filter((item) => typeof item !== 'undefined')\n .map((item) => {\n const styles = {\n color: '#bdc3c7',\n marginRight: 5,\n width: 'calc(33% - 5px)',\n display: 'inline-block',\n };\n if (contents.length > 3) {\n styles.marginBottom = 5;\n }\n if (item.type === DIR) {\n styles.color = '#2980b9';\n }\n return (\n \n {item.name}\n \n );\n })}\n \n );\n }\n }\n },\n };\n }\n }\n\n return PseudoFileSystem;\n}\n","import React from \"react\"; // eslint-disable-line\nimport { PluginBase } from \"../../react-terminal\"; // eslint-disable-line\n// import langMap from 'lang-map';\n// import SyntaxHighlighter from 'react-syntax-highlighter';\n// import * as syntaxStyles from 'react-syntax-highlighter/dist/styles';\nimport {\n displayName,\n version,\n CURRENT_DIR,\n PARENT_DIR,\n HOME_DIR,\n DIR,\n FILE,\n} from \"./consts\";\nimport dbCreator from \"./db\";\n\nconst HOME_PATH = [\"\", \"home\", \"root\"];\n\nfunction last(ary) {\n return ary[ary.length - 1];\n}\n\nfunction parentFolderPath(path) {\n const len = path.length;\n if (len - 1 <= 0) {\n return { parts: [], isRoot: true, isDir: true };\n }\n return { parts: path.slice(0, len - 1), isRoot: true, isDir: true };\n}\n\nexport default function configPlugin(\n pathSeporator = \"/\",\n clearDbOnStart = false\n) {\n const [db, Folder, File] = dbCreator(pathSeporator, clearDbOnStart);\n\n function pathFromArgs(args, dir = false) {\n let path = args._.join(\" \").trim();\n if (dir && last(path) !== pathSeporator) {\n path += pathSeporator;\n } else if (!dir && last(path) === pathSeporator) {\n path = path.slice(0, path.length - 1);\n }\n return path;\n }\n\n function toStringPath(path) {\n const stringParts = [...path.parts];\n if (path.isDir) {\n stringParts.push(\"\");\n }\n if (path.isRoot) {\n stringParts.unshift(\"\");\n }\n return stringParts.join(pathSeporator);\n }\n\n function editOrCreateFolder(parent, name) {\n db.folders\n .where(\"fullPath\")\n .equals(parent.fullPath + name + pathSeporator)\n .count((count) => {\n if (count === 0) {\n db.folders.add(new Folder(name, parent));\n }\n });\n }\n\n function editOrCreateFile(parent, name, content) {\n const split = name.split(\".\");\n const extention = last(split);\n const filename = split.slice(0, split.length - 1).join(\".\");\n db.files\n .where(\"fullPath\")\n .equals(parent.fullPath + name)\n .first((file) => {\n if (typeof file === \"undefined\") {\n db.files.add(new File(filename, extention, parent, content));\n } else {\n file.setContents(content);\n }\n });\n }\n\n function getFolder(path, cb) {\n const fullPath = toStringPath(path);\n db.folders.where(\"fullPath\").equals(fullPath).first(cb);\n }\n\n function getFile(path, cb) {\n const fullPath = toStringPath(path);\n db.files.where(\"fullPath\").equals(fullPath).first(cb);\n }\n\n function modifyFileSystem({ parts, isDir }, data) {\n if (parts.length > 0) {\n getFolder(parentFolderPath(parts), (parent) => {\n if (isDir) {\n editOrCreateFolder(parent, last(parts));\n } else {\n editOrCreateFile(parent, last(parts), data);\n }\n });\n }\n }\n\n function getContents(path, cb, str = false) {\n if (path.isDir) {\n getFolder(path, (folder) => {\n if (typeof folder === \"undefined\") {\n cb(null);\n } else if (str) {\n db.folders\n .where(\"folderId\")\n .equals(folder.id)\n .toArray((folders) => {\n db.files\n .where(\"folderId\")\n .equals(folder.id)\n .toArray((files) => {\n cb([...folders, ...files]);\n });\n });\n } else {\n cb(folder);\n }\n });\n } else {\n getFile(path, (file) => {\n if (typeof file === \"undefined\") {\n cb(null);\n } else if (str) {\n cb(file.content);\n } else {\n cb(file);\n }\n });\n }\n }\n\n function removeFromFileSystem(path) {\n getContents(path, (item) => {\n if (item !== null) {\n if (path.isDir) {\n if (!item.isBase) {\n db.folders.delete(item.id);\n }\n } else {\n db.files.delete(item.id);\n }\n }\n });\n }\n\n class PseudoFileSystem extends PluginBase {\n static displayName = displayName;\n static version = version;\n\n constructor(api, config) {\n super(api, config);\n\n this.currentPath = \"\";\n window.commands = this.getPublicMethods;\n window.pathFromArgs = pathFromArgs;\n window.getContents = getContents;\n\n const _ = [\n `${pathSeporator}${HOME_PATH.join(pathSeporator)}${pathSeporator}`,\n ];\n\n setTimeout(() => {\n this.enterDir().method({ _ });\n }, 500);\n }\n\n commands = {\n cd: this.enterDir(),\n ls: this.listDirContents(),\n rm: this.removeFromFileSystemCommand(),\n mkdir: this.createDirCommand(),\n touch: this.createFileCommand(),\n cat: this.runCat(),\n };\n\n descriptions = {\n cd: false,\n ls: false,\n rm: false,\n mkdir: false,\n touch: false,\n cat: false,\n };\n\n getPublicMethods = () => ({\n parsePath: this.parsePath,\n isValidPath: this.isValidPath,\n createDir: this.createDir,\n createFile: this.createFile,\n removeDir: this.remove,\n removeFile: this.remove,\n readDir: (path, cb) => this.getContents(path, cb, DIR, true),\n readFile: (path, cb) => this.getContents(path, cb, FILE, true),\n writeFile: this.writeToFile,\n pathToString: toStringPath,\n types: {\n dir: DIR,\n file: FILE,\n },\n });\n\n doParse(split, currentPath) {\n // eslint-disable-line class-methods-use-this\n let isDir = false;\n let isRoot = false;\n const baseIsASymbol =\n [CURRENT_DIR, PARENT_DIR, HOME_DIR].indexOf(split[0]) > -1;\n if (\n split[split.length - 1] === \"\" ||\n (split.length === 1 && baseIsASymbol)\n ) {\n isDir = true;\n }\n if (split[0] === \"\") {\n isRoot = true;\n }\n let modPath = split.filter((part) => part.length !== 0);\n if (!isRoot) {\n if (modPath[0] === CURRENT_DIR) {\n modPath = [...currentPath.parts, ...modPath.slice(1)];\n } else if (modPath[0] === HOME_DIR) {\n modPath = [...HOME_PATH, ...modPath.slice(1)];\n } else if (modPath[0] === PARENT_DIR) {\n modPath = [...currentPath.parts, ...modPath];\n }\n }\n\n if (baseIsASymbol) {\n isRoot = true;\n }\n\n for (let i = 0; i < modPath.length; i += 1) {\n if (modPath[i] === CURRENT_DIR) {\n modPath[i] = \"\";\n } else if (modPath[i] === PARENT_DIR) {\n if (i - 1 >= 0) {\n modPath[i - 1] = \"\";\n }\n modPath[i] = \"\";\n }\n }\n modPath = modPath.filter((part) => part.length !== 0);\n\n return {\n parts: modPath,\n isRoot,\n isDir,\n };\n }\n\n parsePath(path) {\n const split = path.split(pathSeporator);\n if ([\"\", CURRENT_DIR, PARENT_DIR, HOME_DIR].indexOf(split[0]) < 0) {\n split.unshift(\".\");\n }\n return this.doParse(split, this.currentPath);\n }\n\n isValidPath(path, cb) {\n const handleRes = (res) => {\n if (typeof res === \"undefined\") {\n this.api.printLine(`Not a valid path: ${toStringPath(path)}`);\n cb(false);\n } else {\n cb(true);\n }\n };\n if (path.isDir) {\n getFolder(path, handleRes);\n } else {\n getFile(path, handleRes);\n }\n }\n\n getContents(path, cb, type, str = false) {\n if ((type === DIR && path.isDir) || (type === FILE && !path.isDir)) {\n this.isValidPath(path, (valid) => {\n if (valid) {\n getContents(path, cb, str);\n } else {\n cb(null);\n }\n });\n } else {\n cb(null);\n }\n }\n\n enterDir() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const newPath = this.parsePath(pathFromArgs(args, true));\n this.isValidPath(newPath, (valid) => {\n if (valid) {\n this.currentPath = newPath;\n this.api.setPromptPrefix(`${toStringPath(this.currentPath)} `);\n localStorage.setItem(\n \"CURRENT_PATH\",\n `/${newPath.parts.join(\"/\")}/`\n );\n }\n });\n }\n },\n };\n }\n\n createDirCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(pathFromArgs(args, true));\n this.createDir(path);\n }\n },\n };\n }\n\n createDir(path) {\n this.isValidPath(parentFolderPath(path.parts), (valid) => {\n if (valid) {\n modifyFileSystem(path);\n }\n });\n }\n\n createFileCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(pathFromArgs(args));\n this.createFile(path);\n }\n },\n };\n }\n\n createFile(path) {\n this.isValidPath(parentFolderPath(path.parts), (valid) => {\n if (valid) {\n modifyFileSystem(path, \"\");\n }\n });\n }\n\n remove(path) {\n this.isValidPath(path, (valid) => {\n if (valid) {\n removeFromFileSystem(path);\n }\n });\n }\n\n removeFromFileSystemCommand() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n const path = this.parsePath(args._.join(\" \").trim());\n this.isValidPath(path, (valid) => {\n if (valid) {\n if (path.isDir) {\n this.getContents(\n path,\n (contents) => {\n if (contents.length > 0 && !args.recursive) {\n this.api.printLine(\n `${toStringPath(path)} is not empty`\n );\n } else if (contents.length > 0 && !args.force) {\n this.api.printLine(\n `${toStringPath(path)} is not empty`\n );\n } else {\n this.remove(path);\n }\n },\n DIR,\n true\n );\n } else {\n this.remove(path);\n }\n }\n });\n }\n },\n options: [\n {\n name: \"recursive\",\n description: \"Each item in the folder as well\",\n defaultValue: false,\n },\n {\n name: \"force\",\n description: \"Force the delete\",\n defaultValue: false,\n },\n ],\n };\n }\n\n runCat() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n let split = args._;\n if (args._.indexOf(\">>\") > 0) {\n split = args._.join(\" \").split(\">>\");\n }\n const pathA = this.parsePath(\n pathFromArgs({ _: split[0].split(\" \") })\n );\n this.getContents(\n pathA,\n (fileA) => {\n if (fileA !== null) {\n if (args._.indexOf(\">>\") > 0) {\n const pathB = this.parsePath(\n pathFromArgs({ _: split[1].split(\" \") })\n );\n this.writeToFile(pathB, fileA.content, { flag: \"a\" });\n } else {\n // const lang = langMap.languages(fileA.extention || '')[0];\n this.api.printLine(\n // \n <>{fileA.content}\n // \n );\n }\n }\n },\n FILE\n );\n }\n },\n };\n }\n\n runEcho() {\n return {\n method: (args) => {\n if (args._.length > 0) {\n if (args._.indexOf(\">>\") > -1) {\n const split = args._.join(\" \").split(\" >> \");\n const path = this.parsePath(\n pathFromArgs({ _: split[1].split(\" \") })\n );\n this.writeToFile(path, split[0], { flag: \"a\" });\n } else {\n this.api.printLine(args._.join(\" \"));\n }\n }\n },\n };\n }\n\n writeToFile(path, contents = \"\", options = { flag: \"w\" }) {\n this.isValidPath(path, (valid) => {\n if (valid) {\n this.getContents(\n path,\n (file) => {\n if (file !== null) {\n let content = file;\n if (options.flag === \"w\") {\n content = `${contents}`;\n } else if (options.flag === \"a\") {\n content += `\\n${contents}`;\n }\n modifyFileSystem(path, content);\n }\n },\n FILE,\n true\n );\n }\n });\n }\n\n listDirContents() {\n return {\n method: (args) => {\n const path = this.parsePath(\n pathFromArgs({ _: args._.length > 0 ? args._ : [\".\"] }, true)\n );\n if (path.isDir) {\n this.getContents(\n path,\n (dir) => {\n if (dir !== null) {\n let hidden = [];\n\n if (args.a) {\n hidden = [\n {\n path: \".\",\n type: DIR,\n },\n {\n path: \"..\",\n type: DIR,\n },\n ];\n }\n\n const contents = [...hidden, ...dir];\n\n if (args.l || sessionStorage.getItem(\"ls\") === \"detail\") {\n this.api.printLine(\n \n {contents.map((item) => {\n const styles = {\n color: \"#bdc3c7\",\n marginRight: 20,\n display: \"flex\",\n justifyContent: \"flex-start\",\n };\n if (contents.length > 3) {\n styles.marginBottom = 5;\n }\n if (item.type === DIR) {\n styles.color = \"#2980b9\";\n }\n\n let itemStyle = { marginRight: \"10px\" };\n\n return (\n \n
drwxr-xr-x
\n
6
\n
root
\n
root
\n
4092
\n
Nov 24 11:59
\n
\n {item.type === DIR\n ? item.path\n : item.getFullName()}\n
\n \n );\n })}\n
\n );\n } else {\n this.api.printLine(\n \n {contents.map((item) => {\n const styles = {\n color: \"#bdc3c7\",\n marginRight: 20,\n display: \"inline-block\",\n };\n if (contents.length > 3) {\n styles.marginBottom = 5;\n }\n if (item.type === DIR) {\n styles.color = \"#2980b9\";\n }\n return (\n \n {item.type === DIR\n ? item.path\n : item.getFullName()}\n \n );\n })}\n \n );\n }\n }\n },\n DIR,\n true\n );\n }\n },\n options: [\n {\n name: \"a\",\n description: \"List hidden files\",\n },\n {\n name: \"l\",\n description: \"List descriptive\",\n },\n ],\n };\n }\n }\n\n return PseudoFileSystem;\n}\n","import React from \"react\";\nimport pseudoFileSystem from \"./plugins/file-system\";\n\nimport ReactTerminal from \"./react-terminal\";\n\nconst FileSystemPlugin = pseudoFileSystem(\"/\", \"db\", true);\n\nconst Terminal = (props) => {\n return (\n \n );\n};\n\nexport default Terminal;\n","import basic from './basic';\nimport db from './indexDb';\n\nexport default function configPlugin(pathSeporator = '/', type = 'basic', ...args) {\n if (type === 'basic') {\n return basic(pathSeporator, ...args);\n } else if (type === 'db') {\n return db(pathSeporator, ...args);\n }\n\n throw new Error(`The type \"${type}\" is not an available storage type`);\n}\n","import Terminal from './Terminal';\n\nexport default Terminal;\n","import Filecheck from './Filecheck';\n\nexport default Filecheck;\n","import React, { useEffect, useState } from 'react';\n\nconst Filecheck = ({ cursor, data, setCursor, setDate }) => {\n const [isClicked, setIsClicked] = useState(false);\n const [valid, setValid] = useState(false);\n\n let text = 'Check';\n\n async function testFile(data) {\n setIsClicked(true);\n if (cursor && cursor.final && data && data.replace(/\\r\\n/g, '\\n') === cursor.final.replace(/\\r\\n/g, '\\n')) {\n if (cursor.name) {\n cursor.name = cursor.name.replace('•', '✔️');\n }\n setValid(true);\n setCursor(cursor);\n setDate(Date.now());\n } else {\n if (cursor && cursor.final && cursor.name) {\n cursor.name = cursor.name.replace('✔️', '•');\n }\n\n setValid(false);\n setDate(Date.now());\n }\n }\n\n if (isClicked) {\n if (valid) {\n text = '✔️';\n } else {\n text = '❌';\n }\n }\n\n useEffect(() => {\n testFile(data);\n /* eslint-disable-next-line */\n }, [data]);\n\n return (\n
\n
testFile(data)}>{text}
\n
\n );\n};\n\nexport default Filecheck;\n","const state = {\n env: {},\n users: {\n id: 1001,\n },\n};\n\nexport default state;\n","import state from './state';\n\nconst variables = {\n env: {\n output: (args, print) => {\n for (let key in state.env) {\n print(`${key}=${state.env[key]}`);\n }\n },\n },\n export: {\n output: (args, print) => {\n try {\n if (args._[0]) {\n let splittedArgs = args._.join(' ').split('=');\n let key = splittedArgs[0];\n let value = splittedArgs[1].replace(/['\"]/g, '');\n\n state.env[key] = value;\n }\n } catch (e) {\n console.log(e);\n console.log('Variable not defined properly.');\n }\n },\n },\n};\n\nexport default variables;\n","export function interpolate(str, params) {\n let formattedString = str;\n params = params || {};\n\n for (const [key, value] of Object.entries(params)) {\n const val = value || '';\n formattedString = formattedString.replace(new RegExp('\\\\$' + key + '\\\\b', 'gi'), val.toString());\n }\n\n return formattedString;\n}\n","import state from './state';\n\nimport { interpolate } from 'utils/string';\nimport { writeToFile, getCurrentPath } from 'utils/file';\n\nconst basicShell = {\n pwd: {\n output: (args, print) => {\n print(getCurrentPath());\n },\n },\n echo: {\n output: (args, print) => {\n if (args._.includes('>')) {\n let index = args._.findIndex((arg) => arg === '>');\n let content = interpolate(args._.slice(0, index).join(' ').replace(/['\"]/g, ''), state.env);\n\n let fileName = args._.slice(index + 1)[0];\n\n if (args.a && args.l) {\n content += ' -al';\n }\n\n writeToFile(fileName, content);\n\n return;\n }\n\n print(interpolate(args._.join(' ').replace(/['\"]/g, ''), state.env));\n },\n options: [\n {\n name: 'l',\n description: 'workaround',\n },\n {\n name: 'a',\n description: 'workaround',\n },\n {\n name: \"'\",\n description: 'workaround',\n },\n ],\n },\n ip: {\n addr: {\n output: (args, print) => {\n print(`\n1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n valid_lft forever preferred_lft forever\n inet6 ::1/128 scope host \n valid_lft forever preferred_lft forever\n2: bond0: mtu 1500 qdisc noop state DOWN group default qlen 1000\n link/ether b6:b5:17:95:35:34 brd ff:ff:ff:ff:ff:ff\n3: dummy0: mtu 1500 qdisc noop state DOWN group default qlen 1000\n link/ether 6a:87:ca:d6:87:6d brd ff:ff:ff:ff:ff:ff\n4: sit0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000\n link/sit 0.0.0.0 brd 0.0.0.0\n5: eth0: mtu 1500 qdisc mq state UP group default qlen 1000\n link/ether 00:15:5d:bf:dc:73 brd ff:ff:ff:ff:ff:ff\n inet 172.19.168.14/20 brd 172.19.173.255 scope global eth0\n valid_lft forever preferred_lft forever\n inet6 fe10::205:5ddf:fcbf:ec23/64 scope link \n valid_lft forever preferred_lft forever\n `);\n },\n },\n },\n\n whoami: {\n output: (args, print) => {\n print({\n value: 'root',\n });\n },\n },\n};\n\nexport default basicShell;\n","import state from './state';\n\nconst userManagement = {\n useradd: {\n output: (args, print) => {\n if (args._[0]) {\n state.users[args._[0]] = {\n name: args._[0],\n id: state.users.id,\n };\n }\n },\n },\n id: {\n output: (args, print) => {\n if (state.users[args._[0]]) {\n let id = state.users[args._[0]].id;\n let name = state.users[args._[0]].name;\n\n print(`uid=${id}(${name}) gid=${id}(${name}) groups=${id}(${name})`);\n\n state.users.id++;\n } else {\n if (args._[0]) {\n print(`id: '${args._[0]}': no such user`);\n } else {\n print(`uid=1000(testUser) gid=1000(testUser) groups=1000(testUser)`);\n }\n }\n },\n },\n};\n\nexport default userManagement;\n","const gitCommands = {};\n\nexport default gitCommands;\n","import variables from './variables';\nimport basicShell from './basicShell';\nimport userManagement from './userManagement';\n\nimport gitCommands from './git';\n\nconst commands = { ...basicShell, ...variables, ...userManagement, ...gitCommands };\n\nexport default commands;\n","import commands from 'config/commands';\n\nexport function generate(additionalCommands) {\n let generatedCommands = {};\n let allCommands = {\n ...commands,\n ...additionalCommands,\n };\n\n for (let key in allCommands) {\n generatedCommands[key] = {\n method: (args, print) => {\n try {\n if (allCommands[key][args._[0]]) {\n return allCommands[key][args._[0]].output(args, print);\n }\n\n return allCommands[key].output(args, print);\n } catch (e) {\n console.log(e);\n console.log('Please define a method for the command.');\n }\n },\n options: allCommands[key]?.options || [],\n };\n }\n\n return generatedCommands;\n}\n","export const getTime = () => {\n const d = new Date();\n\n const minute = d.getUTCMinutes();\n const second = d.getUTCSeconds() / 60;\n\n return minute + second;\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Redirect } from \"react-router-dom\";\n\nimport { useCommandState } from \"state/useCommandState\";\nimport Swal from \"sweetalert2\";\nimport { getTime } from \"utils/getTime\";\n\nfunction checkDisabled(commandState) {\n try {\n let commands = commandState.commands[commandState.currentStep];\n for (let [, value] of Object.entries(commands)) {\n if (value === 0) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return true;\n }\n}\n\nconst Instructions = ({\n title,\n steps,\n instruction,\n estimatedTime,\n closePrompt,\n time,\n}) => {\n const [currentStep, setCurrentStep] = useState(0);\n const { commandState, setCommandState } = useCommandState();\n const [closedPrompt, setClosedPrompt] = useState(false);\n const [redirect, setRedirect] = useState(false);\n\n useEffect(() => {\n setCommandState({\n ...commandState,\n commands: steps.map((step) =>\n step.steps\n .filter((f) => f.commands?.length)\n .map((s) =>\n s.commands?.reduce((acc, next) => ({ ...acc, [next]: 0 }), {})\n )\n .reduce((acc, next) => ({ ...acc, ...next }), {})\n ),\n });\n // eslint-disable-next-line\n }, []);\n\n function nextStep() {\n setCurrentStep(currentStep + 1);\n setCommandState({\n ...commandState,\n currentStep: currentStep + 1,\n });\n }\n\n function prevStep() {\n setCurrentStep(currentStep - 1);\n setCommandState({\n ...commandState,\n currentStep: currentStep - 1,\n });\n }\n\n let nextDisabled = checkDisabled(commandState);\n\n useEffect(() => {\n if (currentStep === steps.length - 1) {\n if (!nextDisabled) {\n if (steps[0]?.steps[0].interactive) return;\n setClosedPrompt(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentStep, nextDisabled]);\n\n useEffect(() => {\n if (closedPrompt) {\n const spendTime = getTime() - time;\n\n setTimeout(() => {\n Swal.fire({\n title: closePrompt.title,\n icon: \"success\",\n html: `${closePrompt.content} ${spendTime.toFixed(2)} min`,\n focusConfirm: false,\n showCancelButton: true,\n confirmButtonText: \"Start Again\",\n cancelButtonText: \"End\",\n }).then((result) => {\n if (result.value) {\n window.location.reload();\n } else if (result.dismiss === Swal.DismissReason.cancel) {\n setRedirect(true);\n }\n });\n }, 1000);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [closedPrompt]);\n\n if (redirect) {\n return ;\n }\n\n return (\n
\n

Instructions

\n
\n {instruction}\n
\n
\n
\n
\n

{title}

\n

Step {currentStep + 1} :

\n {steps &&\n steps\n .filter((_, index) => index === currentStep)\n .map((step, index) => {\n return step.steps.map((step) => {\n return (\n
\n
\n {step.text && (\n
\n \n
\n )}\n\n {step.commands &&\n step.commands.map((command, index) => (\n {\n document.querySelector(\n \".terminal-base input\"\n ).value = command;\n document\n .querySelector(\".terminal-base input\")\n .focus();\n }}\n >\n $ {command}\n
\n ))}\n
\n );\n });\n })}\n
\n
\n {currentStep > 0 && (\n \n {\"< \"}Previous{\" \"}\n \n )}\n {currentStep < steps.length - 1 && (\n \n {\" \"}\n Next{\" >\"}\n \n )}\n
\n \n );\n};\n\nexport default Instructions;\n","import Instructions from './Instructions';\n\nexport default Instructions;","import React, { useState, useEffect } from \"react\";\nimport { useParams } from \"react-router\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport debounce from \"lodash/debounce\";\n\nimport Swal from \"sweetalert2\";\n\nimport AceEditor from \"react-ace\";\nimport \"ace-builds/src-noconflict/theme-monokai\";\nimport \"ace-builds/src-noconflict/theme-dracula\";\nimport \"ace-builds/src-noconflict/mode-javascript\";\n\nimport Tree from \"components/tree\";\nimport Terminal from \"components/terminal\";\nimport Filecheck from \"components/filecheck\";\nimport * as commands from \"services/commands\";\n\nimport Instructions from \"components/instructions\";\n\nimport { writeToFile, getContent } from \"utils/file\";\n\nimport workspaces from \"config/workspaces\";\nimport { CommandProvider } from \"state/useCommandState\";\nimport { getTime } from \"utils/getTime\";\n\nexport function format(fileStructure) {\n function changeStructure(structure) {\n if (!structure.children) {\n return true;\n }\n\n for (let i = 0; i < structure.children.length; i++) {\n let file = structure.children[i];\n\n if (!(file.data === null || file.data === undefined)) {\n if (file.final) {\n file.name = file.name.includes(\"•\") ? file.name : file.name + \" •\";\n }\n continue;\n }\n\n changeStructure(file);\n }\n }\n\n changeStructure(fileStructure);\n\n return fileStructure;\n}\n\nconst Workspace = () => {\n const params = useParams();\n const workspace = workspaces[params.id];\n\n const [cursor, setCursor] = useState(false);\n const [date, setDate] = useState(Date.now());\n const [editorContent, setContent] = useState(\"\");\n const [time, setTime] = useState(0);\n\n const [data, setData] = useState(format(cloneDeep(workspace.fileStructure)));\n\n const onToggle = (node, toggled) => {\n if (cursor) {\n cursor.active = false;\n }\n node.active = true;\n if (node.children) {\n node.toggled = toggled;\n }\n // node.name = node.name.replace(' •', '');\n\n setCursor(node);\n setData(Object.assign({}, data));\n };\n\n async function getFileContent() {\n if (cursor.path) {\n let cursorName = cursor.name.replace(\" •\", \"\").replace(\" ✔️\", \"\");\n let content = await getContent(`${cursor.path}/${cursorName}`);\n\n setContent(content);\n\n return content;\n } else {\n setContent(cursor.data);\n\n return cursor.data;\n }\n }\n\n useEffect(() => {\n localStorage.setItem(\"workspace\", params.id);\n }, [params.id]);\n\n useEffect(() => {\n getFileContent();\n //eslint-disable-next-line\n }, [cursor.name]);\n\n useEffect(() => {\n workspace.intro?.title &&\n Swal.fire({\n title: workspace.intro.title,\n icon: \"info\",\n html: workspace.intro.content,\n focusConfirm: false,\n confirmButtonText: \"Lets Start!\",\n }).then((result) => {\n if (result.value) {\n setTime(getTime());\n }\n });\n // eslint-disable-next-line\n }, []);\n\n if (!workspace) {\n return
Workspace Not Found!
;\n }\n\n const debouncedSetContent = debounce(setContent, 150);\n return (\n <>\n \n
\n \n
\n
\n {workspace.hasEditor && (\n
\n
\n \n
\n
\n {\n let cursorName = cursor.name\n .replace(\" •\", \"\")\n .replace(\" ✔️\", \"\");\n\n writeToFile(`${cursor.path}/${cursorName}`, data);\n debouncedSetContent(data);\n }}\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n value={editorContent}\n setOptions={{\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n }}\n />\n \n
\n
\n )}\n \n \n
\n \n
\n \n );\n};\n\nexport default Workspace;\n","import React from 'react';\n\nimport workspaces from 'config/workspaces';\n\nconst WorkspaceList = () => {\n return (\n
\n \n
\n );\n};\n\nexport default WorkspaceList;\n","import './App.css';\n\nimport React from 'react';\nimport { BrowserRouter, Switch, Route } from 'react-router-dom';\n\nimport Workspace from './Workspace';\nimport WorkspaceList from './WorkspaceList';\n\nfunction App() {\n return (\n
\n \n \n } />\n\n {\n return ;\n }}\n />\n\n {\n return ;\n }}\n />\n \n \n
\n );\n}\n\nexport default App;\n","import './index.css';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport App from './screens/App';\n\nReactDOM.render(, document.getElementById('root'));\n","import workspaces from 'config/workspaces';\nimport { getContent } from './file';\n\nexport async function checkDiff() {\n let workspaceName = localStorage.getItem('workspace');\n let fileStructure = workspaces[workspaceName].fileStructure;\n let isValid = true;\n\n async function checkDiff(structure) {\n if (!structure.children) {\n return true;\n }\n\n for (let i = 0; i < structure.children.length; i++) {\n let file = structure.children[i];\n\n if (!(file.data === null || file.data === undefined)) {\n if (file.path) {\n let content = await getContent(`${file.path}/${file.name}`);\n\n if (file.final && content.replace(/\\r\\n/g, '\\n') !== file.final.replace(/\\r\\n/g, '\\n')) {\n isValid = false;\n }\n }\n continue;\n }\n\n await checkDiff(file);\n }\n }\n\n await checkDiff(fileStructure);\n\n return isValid;\n}\n","import { checkDiff } from \"utils/diff\";\n\nexport const intro = {\n title: \"Intro to Puppet\",\n content: `In this lab, we'll cover some basic puppet commands
Estimated time: 10-15 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"Puppet Intro has ended\",\n content: \"Estimated time:\",\n};\n\nexport const title = \"Lab 4: Intro to Puppet\";\nexport const steps = [\n {\n steps: [\n {\n step:\n \"Write to file environments/test/modules/useradd/manifests/init.pp\",\n text: `class useradd {\n user {\n \"sam\": ensure => present,\n }\n}`,\n },\n ],\n },\n {\n steps: [\n {\n step: \"Write to file environments/test/manifests/site.pp\",\n text: `node 'default' {\n include useradd\n}`,\n },\n ],\n },\n {\n steps: [\n {\n step: \"Add to file puppet/puppet.conf\",\n text: `[main]\ncertname = server.test\nserver = server.test\nenvironment = test\nruninterval = 1h`,\n },\n ],\n },\n {\n steps: [\n {\n step: \"Execute\",\n commands: [\"puppet agent --test\"],\n },\n ],\n },\n];\n\nexport const commands = {\n puppet: {\n agent: {\n output: (args, print) => {\n checkDiff().then((valid) => {\n if (!valid) {\n print({\n color: \"red\",\n value: \"Please check if the files are edited correctly...\",\n });\n } else {\n print('Info: Using configured environment \"test\"');\n print(\"Info: Retrieving pluginfacts\");\n print(\"Info: Retrieving plugin\");\n print(\"Info: Retrieving locales\");\n print(\"Info: Caching catalog for server.test\");\n print('Info: Applying configuration version \"1603067524\"');\n print({\n color: \"green\",\n value: \"Notice: /Stage[main]/Useradd/User[sam]/ensure: created\",\n });\n print({\n color: \"green\",\n value: \"Notice: Applied catalog in 0.08 seconds\",\n });\n }\n });\n },\n },\n },\n};\n\nexport const hasEditor = true;\nexport const fileStructure = {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: false,\n children: [\n {\n name: \"ram\",\n toggled: true,\n children: [],\n },\n ],\n },\n {\n name: \"etc\",\n toggled: true,\n children: [\n {\n name: \"code\",\n toggled: true,\n\n children: [\n {\n toggled: true,\n name: \"environments\",\n children: [\n {\n name: \"test\",\n toggled: true,\n children: [\n {\n name: \"data\",\n children: [],\n },\n {\n name: \"manifests\",\n toggled: true,\n children: [\n {\n path: \"/etc/code/environments/test/manifests\",\n name: \"site.pp\",\n data: ``,\n final: `node 'default' {\n include useradd\n}`,\n },\n ],\n },\n {\n name: \"modules\",\n toggled: true,\n children: [\n {\n name: \"useradd\",\n toggled: true,\n children: [\n {\n name: \"manifests\",\n toggled: true,\n children: [\n {\n path:\n \"/etc/code/environments/test/modules/useradd/manifests\",\n name: \"init.pp\",\n data: ``,\n final: `class useradd {\n user {\n \"sam\": ensure => present,\n }\n}`,\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"environment\",\n data: `# Each environment can have an environment.conf file. Its settings will only\n# affect its own environment. See docs for more info:\n# https://puppet.com/docs/puppet/latest/config_file_environment.html\n\n# Any unspecified settings use default values; some of those defaults are based\n# on puppet.conf settings.\n\n# If these settings include relative file paths, they'll be resolved relative to\n# this environment's directory.\n\n# Allowed settings and default values:\n\n# modulepath = ./modules:$basemodulepath\n# manifest = (default_manifest from puppet.conf, which defaults to ./manifests)\n# config_version = (no script; Puppet will use the time the catalog was compiled)\n# environment_timeout = (environment_timeout from puppet.conf, which defaults to 0)\n# Note: unless you have a specific reason, we recommend only setting\n# environment_timeout in puppet.conf.`,\n },\n {\n name: \"hiera.yaml\",\n data: `---\nversion: 5\ndefaults:\n# The default value for \"datadir\" is \"data\" under the same directory as the hiera.yaml\n# file (this file)\n# When specifying a datadir, make sure the directory exists.\n# See https://puppet.com/docs/puppet/latest/environments_about.html for further details on environments.\n# datadir: data\n# data_hash: yaml_data\nhierarchy:\n- name: \"Per-node data (yaml version)\"\n path: \"nodes/%{::trusted.certname}.yaml\"\n- name: \"Other YAML hierarchy levels\"\n paths:\n - \"common.yaml\"`,\n },\n ],\n },\n ],\n },\n {\n name: \"modules\",\n children: [],\n },\n ],\n },\n {\n name: \"mcollective\",\n children: [],\n },\n {\n name: \"puppet\",\n toggled: true,\n children: [\n {\n path: \"/etc/puppet\",\n name: \"Dockerfile\",\n type: \"file\",\n data: \"FROM ubuntu:latest\",\n },\n {\n path: \"/etc/puppet\",\n name: \"puppet.conf\",\n data: `# This file can be used to override the default puppet settings.\n# See the following links for more details on what settings are available:\n# - https://puppet.com/docs/puppet/latest/config_important_settings.html\n# - https://puppet.com/docs/puppet/latest/config_about_settings.html\n# - https://puppet.com/docs/puppet/latest/config_file_main.html\n# - https://puppet.com/docs/puppet/latest/configuration.html\n[master]\nvardir = /opt/puppetlabs/server/data/puppetserver\nlogdir = /var/log/puppetlabs/puppetserver\nrundir = /var/run/puppetlabs/puppetserver\npidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid\ncodedir = /etc/puppetlabs/code`,\n final: `# This file can be used to override the default puppet settings.\n# See the following links for more details on what settings are available:\n# - https://puppet.com/docs/puppet/latest/config_important_settings.html\n# - https://puppet.com/docs/puppet/latest/config_about_settings.html\n# - https://puppet.com/docs/puppet/latest/config_file_main.html\n# - https://puppet.com/docs/puppet/latest/configuration.html\n[master]\nvardir = /opt/puppetlabs/server/data/puppetserver\nlogdir = /var/log/puppetlabs/puppetserver\nrundir = /var/run/puppetlabs/puppetserver\npidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid\ncodedir = /etc/puppetlabs/code\n\n[main]\ncertname = server.test\nserver = server.test\nenvironment = test\nruninterval = 1h`,\n },\n ],\n },\n {\n name: \"puppetserver\",\n children: [],\n },\n {\n name: \"pxp-agent\",\n children: [],\n },\n ],\n },\n ],\n};\n","import React, { useEffect, useRef } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\n\nimport {\n Input,\n Prompt,\n} from \"components/terminal/react-terminal/components/Content/styled-elements\";\n\nexport const MainInput = styled.input`\n font: inherit;\n font-size: 1.5em;\n &,\n &:focus {\n border: none;\n padding: 0;\n margin: 3px;\n background: black;\n color: white;\n flex: 1;\n outline: none;\n }\n`;\n\nconst PromptInput = ({ input, resolve }) => {\n const inputRef = useRef(null);\n\n useEffect(() => {\n inputRef.current.focus();\n }, []);\n\n return (\n \n {input}\n {\n if (e.key === \"Enter\") {\n resolve(e.target.value);\n }\n }}\n />\n \n );\n};\n\nconst AppPrompt = ({ input, resolve }) => {\n return ;\n};\n\nexport function prompt(input = \"\") {\n return new Promise((resolve, reject) => {\n let inputElement = document.getElementById(\"terminal-input\");\n inputElement.style.display = \"none\";\n\n let div = document.createElement(\"div\");\n inputElement.parentElement.appendChild(div);\n\n ReactDOM.render(, div);\n });\n}\n\nexport function release() {\n let inputElement = document.getElementById(\"terminal-input\");\n let mainInputElement = document.getElementById(\"main-input\");\n let interactiveInputs = document.getElementsByClassName(\"interactive-input\");\n\n inputElement.style.display = \"flex\";\n mainInputElement.value = \"\";\n Array.from(interactiveInputs).forEach((e) => e.remove());\n\n mainInputElement.focus();\n}\n","import { prompt, release } from \"utils/prompt\";\n\nexport const intro = {\n title: \"Intro to Git\",\n content: `In this lab, we'll cover some basic git commands
Estimated time: 10-15 min

[All labs are running on simulated mode]`,\n};\n\nexport const close = {\n title: \"Git Intro has ended\",\n content: \"Estimated time:\",\n};\n\nexport const title = \"Lab 6: Interactive test\";\nexport const steps = [\n {\n steps: [\n {\n step: \"Run the following command for interactive mode\",\n commands: [\"test\"],\n interactive: true,\n },\n ],\n },\n];\n\nexport const commands = {\n test: {\n output: (args, print) => {\n print(\"Please input your details.\");\n\n (async function () {\n let firstName = await prompt(\"Enter your first name: \");\n let lastName = await prompt(\"Enter your last name: \");\n let age = await prompt(\"Enter your age: \");\n\n print(\n `Thank you ${firstName} ${lastName}. Recorded your age as ${age}`\n );\n\n release(); // This is important, to give the focus back to the actual terminal\n })();\n },\n },\n};\n\nexport const hasEditor = false;\nexport const fileStructure = {\n name: \"root\",\n toggled: true,\n children: [\n {\n name: \"home\",\n toggled: true,\n children: [\n {\n name: \"ram\",\n toggled: true,\n children: [\n {\n name: \"lab1\",\n toggled: true,\n children: [\n {\n name: \"config.json\",\n data: `{\n \"env\": \"local\",\n \"name\": \"test\"\n }\n `,\n final: `{\n \"env\": \"production\",\n \"name\": \"test\"\n }\n `,\n },\n {\n name: \"README.txt\",\n data: `Hi. this is the test for the editor.\n This is a default text that was kept for this lab.\n \n Edits you make are autosaved...`,\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"etc\",\n children: [],\n },\n {\n name: \"opt\",\n children: [],\n },\n {\n name: \"tmp\",\n children: [],\n },\n {\n name: \"var\",\n children: [\n {\n name: \"log\",\n children: [],\n },\n {\n name: \"lib\",\n children: [],\n },\n ],\n },\n ],\n lab1: {},\n};\n"],"sourceRoot":""}