{"_id":"@codeitout/client","_rev":"9-d5022d74bbd4cf2ce3d4472d5eca9a28","name":"@codeitout/client","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.0":{"name":"@codeitout/client","version":"1.0.0","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"1f9a9572554d955596372222d918b34d0397f849","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.0","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-jRxxwwlrCoU2QlPf1eE0I7/GeepB+pmycLlG8y3cJ+md+JEZUwgRu4SFw85EWuuOmTqi+DNEMyznTM2V/brhlg==","shasum":"b5051ed68c108b0c9c0ea38fa33c67ae1ff1142e","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.0.tgz","fileCount":986,"unpackedSize":36340898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtx8YCRA9TVsSAnZWagAAtgAP/0WJfrNyKdYW5ukdEt9y\n+yqkZuQjHZC7MtrRrzBJ2g8q4eZhOIxW8zCp2NK9ZrvlzQbe8MoPCV1R0ECv\nxsgehqlzSoJPy33KEMrhdvYP1ZK/d7ldJJPMj59+0HsVxgLJZCTVS7GCh9E+\n/o2XA+qBLUbNe3ugbwCXbAKaNmIUnn+3MM8bwZm6bX6xgny7tUTRPPP9vFNd\n83nQdLMLEaEUAZcU+u6KRR4BO1sELUe5u+TI8/MXWkcsuQz8j0a3h2Um/feY\nrB9+8oS4D2jSw0fKqcEqW8r8WjvZfgcr0hPoMN9BvDbjwCtFwTfOU50N8bKr\nukvVGOReMgPl27xMIMGE4CswqlB/tIJjGaWfJsE3AoZeos+X8HvpQ5Q+BQkC\nJO4lOAhdVEEKFOLGLvVpZbErYFoATRQUHb2bFT3VuGOuJajbUozP2L4UH9Tf\nFXCUjFXPZeh9DT7Y8ETmOPtXx0TVroDInpiydwD+Bw1ZYAvbVzhESutDq+t/\nh9KmUOH04zj1Xi8quRmmJBwHyoGzYbMaFQiUKmR4M+6TyCOHWmQN6LEh9Xr7\n4o13Ar9LexLmr1IhWPe8ozImc1pUCnjwQVXgVmFBAS3Rzf9DQOrvmaFDxZWS\nmulnr9C45xDkT1ywvMjHaqcvCpwhd9XKEho83j3yrNpZmM6l7HExOw7ChPdT\nX54y\r\n=aQFX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF136+GgHlsqeazIK681U8YZXwDixlvbcVObsMQ6b6A6AiAFVmrTebHdGob+6f54bkBlpbL/MBmkzpr0gyg4pqgwrw=="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.0_1622613784189_0.941195956710428"},"_hasShrinkwrap":false},"1.0.1":{"name":"@codeitout/client","version":"1.0.1","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"eb865003689242a78c1bebd7fcabf87f6f14c6ac","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.1","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-UDxOapwrb9jJWI5jNo+RMEolzUvzKEdcjIv1WoEcUDD7XyButmeIVkS7d3g9zHrrP2GAAA9jqbAPPU+Bw6/UIQ==","shasum":"7b6ce15daecb32bcbf5b43c8c09d225099ba0b9f","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.1.tgz","fileCount":986,"unpackedSize":36340898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtyHECRA9TVsSAnZWagAA5TIP/0B/7m0wVoReVvS8O6Gc\nEguP63H5l8+a3L4nJ+w2TdvuRKrf29L96Qkuy+saeBGlud5uYYWmlkLLDmCL\nr9VRYYdv8Bpmtm+FIjsiWegR+Wtmei3xZ72ESgCqDTdZFE9ZQx3ThnTnu47y\n7BaA3r2XuD9Spt0lhLoKl3V0qAicgVQDD2Qk/LPSD1LmJVAc1oT0XbnksukD\n9HVr6GQovu3Qi48jqbwXkXioYe/PPy/JJ8MdtgPMmp7jdSHPP3Hwjhfp94iZ\nn0V6XMCw0wpKQ6AG4CjM67WVJYFdrIOGf3JMnf53MlZbVfIsX+m528xbRco4\nGhU4aIVNzlylYo2DfHG3k1Q/X4Vo6yJjNkVnA+EtLC9EdUbBSYi0leHUi/bk\nFkOIC+L62Ejj3gj4rDX5pvT5EhjX4vCWpdP17tCk6nlxizy9MmtfOtyO59dN\n9OEvq9LI6up1iKMOQSVNUeze9uNYDLMch5WBVSDSx7rUXKQ0eqXLOnkEYlT8\n00tyyYivKXprq1FxB5/LByDoZHSP3SiHSsJyg7dIrW8AS32ciJEZTzJVxLAu\nZ719KC4TCGC2/ixO/Gi8w3J26CUQIAggD7iH3LYn6UaN5qsX70bk4YW0jMCc\nQqneOfTmcrPe3lljlphHm5NOo3cdeKfIZqaJRg0ojfQoU4O+F+pdlzHCqkNa\n8UeM\r\n=0ua9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAeRTs9hRUvXTvzI7xuuWWlo6mKLIEuTsCPXWFbxTa8TAiAMzKe3Z8jSUBp2vJUN/91npQpQE9agfg70k3gnReFpHQ=="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.1_1622614467735_0.21117405988164628"},"_hasShrinkwrap":false},"1.0.2":{"name":"@codeitout/client","version":"1.0.2","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"357acd60ee7b580ef8b0789f9022ea5d035fe002","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.2","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-BVf2Kt4E+qbqmS50gwWy0ep10Fb8OhyDSjOSQdvzkDO1zjlmhTgBQXlQR562JHRLR0UPXPz7knv7AMTChkmYCA==","shasum":"0e333a224f6aba485ea0f8b012054fa841a5845f","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.2.tgz","fileCount":986,"unpackedSize":36340898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtyKmCRA9TVsSAnZWagAAJDcQAJK7d7eLR4EG5ERdUueU\nnb4XiDy/ItDmsuzP0T9oX6GeVKGyPGkdXqkhNLijbCdNLNxzTUe5SuJbPsD9\nOCKFTc1xK/3chgVHJMJEQKo+E9wceIjOikJmkcZnbmP9R7/AoL1bJIPNFcBx\nTi2TEakjmiHNewbHYpKyXE5UmNoexL9ki1zrXhJQKgbW5imc3cUDpJCW96nX\nKoJdwfn8sfhuUhuznjlxmL5zQBHUgKVpapxif9YIoqMRCC4qST0dNkr09iGM\nMjRqu7YCxYIHDf7LMO24FAgCy/GLmW70wOYrp/qvFFxC19mYNjLHN7IENZrm\nHq07QFvwpvfws1dLbbi7dbsbkQLY//VZJ6k7RA5BcuC+PVx/fzVz6VvvWbn5\ngkR5xQBaoxRmrdK0GKsLE+g3Li/EY5tD7/XjS0wiUib+8qpgKnziIGkZgY6g\nagCJ26xqqn6n/cBdctndqc/LEb/VunW0xIUHpujmSMDllSsGbu03ng8XNVAt\nXPZR4sl6j12cBVq/KtL/+XWqv9a9JOu5b334CAylthRcDXEFJIX2iIlApEnd\nAQNOQDcItiiOhF4j0nz1a6c4ybgOA3rl//LUl4cpb4YP5hUkHBN4dkW7k96t\nH+nvPA632qS7f1fJJ1ClyGAKY17ymkzkHu4QB59PbrskkBcez7Uo7uLASJsn\nz9tS\r\n=I4s/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGpGu5m4O/8dmandSlbzRcVoz1pu4uLgule/toeze5TzAiB7cU9/2S3Ss2oNrE+xfyKSOFuRlrBZs3XNvA4qxEggBA=="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.2_1622614693325_0.6941474945169914"},"_hasShrinkwrap":false},"1.0.3":{"name":"@codeitout/client","version":"1.0.3","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"f74ce307785ef9e3c94d25198a1e1ce367682085","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.3","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-4FlxhcCkpxvWvHaIz/5fTZ9aUrYfgVuwptji1XZ96Ey8eIaP1h31KGElcdpizXABf290vKwfQ/3yteM/LLng5w==","shasum":"d548bbd30b6cf120ed4cb17b2d2e28af6045e674","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.3.tgz","fileCount":986,"unpackedSize":36340898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguTy7CRA9TVsSAnZWagAAZNUP/1yo2CRAJ+GNEITI551J\nWsZA5Ciri9BqZTHDpyrflEFAo4BpHEW5SLJteGaKd8i6WYTS3ez9owF09BRF\n4dfP49Y1dJek/dQCHRh16ww8RLaBxLV2wDXMo47A1upAfFW0l81OdpBQu4YF\nHXi+VIijWcjydhB0ZeTYT7jR1QhO+OPFMZCoTIxu4W6sqRFLfQupH7vSE3ln\nzVVffGoDP0bfitoa9KR1xjYSdf81YMcxr4+u+gudq3ZIMEsxHnMDXe9Flulh\nj6IGV59JVWrNrbypyCpcgNKc4D3Zbi+1mvAOoVof4a+Q+IOW9ZMowd5UD3LN\nq2vcSzquGHaH6ZwFM9ls/kg+JTFGRgTB6fGsfXmxNHCxUVMA8RrJ3YOQm9UK\nipOg93tvzLfyNpU541QZqUYviFTsi6KYMNs9zGjquYC+gxF7ZzC8peyt9p2w\nJnRyWjsUtfObQrJ0WkOSISRRKvNpUygA4qCphBZRvzKWijWswzQfP3I3OaJZ\nQgcZWWTh6BO5ZG4XP619a3sAHtEF6QJBrmFLerHATWqZSfsnVPy9iCXn8JqR\nMGk7XJ0XB04kDSt8iLVxzXRRptABzshmCkebfyK6MEEF+qVr7nVxYbY/S80A\ntSjRDyrcXwMvZKRhrIdQfs9VZaVaIYkK1zJ95nuT+M8MzD5OWvfzffqS3jUJ\n7dx8\r\n=Arff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbPaQiMyqyhHd+21m7IIrSWlJlvuWU2TnyVY5jZnNbQAiEA4ETNXkmr48NUPJI+7M3qbNFIYgrE5931EU0r7UFhGbA="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.3_1622752442599_0.36953343221127"},"_hasShrinkwrap":false},"1.0.4":{"name":"@codeitout/client","version":"1.0.4","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"5ccabbfd905862660f004342c94f3e86089981be","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.4","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-BKcKtxRbHPqWCnCmqYvysZC/jj4/uj94cd1kFF+3DnQH+NLIz97xJ0gYnOt73Bd/kUFljuhthJJ9ODbj2ZnmaA==","shasum":"7159933f1ccd5f97a6c91a3df1c8fffe81be18b3","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.4.tgz","fileCount":986,"unpackedSize":36340898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguUSmCRA9TVsSAnZWagAAdccP/RlgRA002kWSdHBeDJ+V\nIRSfcw6OqUWPnJgvVeMZjAG1vt+MJuxQZ+RJS6ZTguUWa8nVK96hpuKAGC5V\nZl1P/gnWSvmkL8RVDDfT1/wkyxU4YlYQ6jpUnarvIOUAavvXeS5a0xs0vKGS\nDVY9Mut9Rwn/grcwV/mfVE6OC4J0y+Fsy3WaDRHc/DHNuk5wWAXP7/8ZdM9W\nQsnBaeU/qxkDrRYR60W829xobm88f5Y1PbCQf5QT9zNt6cMUhgNeLS0sxUET\nyU9Pkq3jDSQ/RDm5O1OT3Oip7ApX9eiu3xiWBd3eEZW7i9vxkCO+4VjYwrf+\nyv4kVrpWrh3Y71GxdUmiwhcjGqwWjdyctBXeF6dxPIZ6isvir4CNeooYY4gZ\nQCQZN7y7FfyXcS8mu1o8Rz1LxJbmEo5JCpB8c6TJZAOCRddPZLH1J63V6Xwg\n7F7j/lpsWoj1QhsD++bNqtQwbCcXckoVUOMbuo78tHmvhQNg+XcZWR74Zcrs\nqnhPdRcw4rGcvyLpCP+Esj8loiu9D0Wk2G4ghKspGMdbrySLP0taTRbp4fII\nrXOs+dDQANBkLRa63Qwf3FkkjVD05Ru2/Mlz9kKqs2aqWKK2c5yKccI//bOL\nXait5KJEsJt6s98l+0BCzSkx12Vwt7C/ScQMQwf9J+tGxMtPmXDkkD9vCAaz\nkw38\r\n=/+jG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOZ6jnvKDM3F+q3sgMEJ9PijzTWGrlm6gMHI7Pq16b9gIgNqGczL96Id7G/O66gTfEQ7anjJOzBDYBpj52yL6fn08="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.4_1622754470501_0.44685401200798336"},"_hasShrinkwrap":false},"1.0.5":{"name":"@codeitout/client","version":"1.0.5","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"f3adf97abc51183eee26e364ea203b811de87600","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.0.5","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-k47u3hwSHYhrsAopUiTngjZSqSGZ5fQ24fAe5hbSHFwzZY2O3HrmhbMhGhRq2HBVsfLZYfPbJiemsz80tkPJkg==","shasum":"c55c6dbfdfa874aca93553d3d0ed15e85fd13029","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.0.5.tgz","fileCount":986,"unpackedSize":36340835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguUYNCRA9TVsSAnZWagAAcRcQAIwMroD0lBzpNLGOuXGZ\nMzs/RPscHLBBxf6uW2PoFMXCgh99Ok2k+h8f4JltBqT8XMJUrwrSMZJNynUq\nrxtGkcZPqUglLvaMEivu+q0kcdbki+iQLODaFqqkmNBJ7QI98WHZjbvlfv2G\n8iG9TeasiW3FEGvKMD8QyKMNIpbAHrJWXcMbUmI+pszMSdvySDLltM5Sm/1O\nN+gvkYXvTWmx404WKlY1WuLSo3nYkGsF/te8JsPSJumZsc/2d9YFZd5XQFem\ntqNWFJ44jayVMO20vNNhNk49P1YXz9yYvds8EUN1/OIKuaft0ESIt1MJ4L6W\nsksFTs2VGRdnTyd/uDUSU0WQpCLcz8rWHHwlyL7zy33g91wUjys08PM0pphO\n88lihv4EM6121CoMit4bYSc57jzzmRKaodKFQUwgjHvTDpwICJ58f4Jg/lLE\ngcdty7RYYHz0tcYbnqH7s/rLk51ksjU7xyYRL1mfWMUhdcY6DtMO6fsCax6a\ncq2kIRJCACrggEpWTmKze8sgmXK22oeUkbJk/VBVTEyDtHdasGDZtl47EyJH\nZVpb60OL6R1iTRbViqAX57yNQOXM3VQ6ZT/C5mulnEbMesexC3UGn9KOZyBN\nCxMmSgmq/Cc7nuajuKCj58nlfYrstCDDut5nX6cHOUPqVR0XAw4UpIafdx5w\nao1X\r\n=3qFE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE7I37ZtYiwCX/5zEz2UWzU2PpgVQtsdFlSfLUBM99GiAiBQ/qD+8BeQuiDeboSeT+xToeetkbOo1qhwbECck61XtQ=="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.5_1622754828895_0.9321361405706761"},"_hasShrinkwrap":false},"1.1.0":{"name":"@codeitout/client","version":"1.1.0","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"6150583322c45d9574e90cba9a2eba62be6b304b","description":"This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).","_id":"@codeitout/client@1.1.0","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-8jmeO/qVVa/ERxi5ErfpqK9zRHFaWZ4RiL7qbyDTiKvfhFM0Y22YJ+n7SxElR7+M+cIgSRLrt7H1QWlulZHiMA==","shasum":"6c1307be02cd37de48203b423cb9aec40005ddc5","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.1.0.tgz","fileCount":986,"unpackedSize":36342119,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvsNuCRA9TVsSAnZWagAAecUP/iDt55GoBfI5wgZI+Trm\nxs+U37z53hlIeh7DDh0DGPDlACIYHeHsuYIrjIk7D9xTAOexxQdOgOkp7ZNT\n0wgZT6Aaf7VBXP83QH394X4nnxUvurMEtWPp6M/YJLhhYJYWpGtLsr+RsQQw\naiCV6rHKDT/w8idBMAC5vnuvzieySqr8NWdD+H/ju4DcM+lqE30fBXztKI7G\n35T4JWjP0AQE561ccgjgEFJfs6VXsVVB45hjkrhbcLHPuK7+gyAWk5wAVrEh\npd74niacW6dIeAukxT6tdED2xxo1EnQ8D6eomHwG4P6khCJgcxOKosrZZ9R+\nPu6N645c41AKvy0NaQ1hTFj7vWc7xznNQi13GW2J3SMO0q8eW4btBpVqagy1\n9TuHFbb9ewDG3W469orlMy/Ac9iN96j7lOAjyEuezpvloee2deWrCYcYMfuL\nFiNNa3etBVt/ujN4NjPkmZn3ieaHCBjEPtu6M7VyRwpoVW4vJuKtmRfTCPFQ\n2FU6v1ikF792rwVNELrdx9HPzAJ5Y7e37TJpLlUEJZlhVXO7kneH48htDj3A\n+bwh9qrJuNNPR3+IjrNy53VBMczqJHYC44rmln4FHQeiEYeJgD6WkrgePluo\nfqgODAcFXp4TZgHTm4URgt5iUY9G7+sNR6WYNCPjQUocq+/kyL1OSfrv511Z\nw0ns\r\n=oRvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDP4a2T59toOhTkmjIc+z+paI3u+KlUBHlaHgKuvNi1YAiEA4oSkaUvuD3d7RFQ0VaPP+BGvlBLik8uGxJVw15hoTn4="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.1.0_1623114605817_0.12348508031606054"},"_hasShrinkwrap":false},"1.1.1":{"name":"@codeitout/client","version":"1.1.1","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"ee4eed224205867e8c028fa6c2908483fe9f4ee8","description":"Codeitout is a coding tool that allows programmers to write and test code in code editor windows, as well as add notes in text editor windows.","_id":"@codeitout/client@1.1.1","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-WCv6yQseh9m8xEscQFiW2ppX7ZyNW5k8WlT0fD99kuBwgnyajehZlNWqUr+uwTQI23bb8K113usc+TesvMS/yg==","shasum":"3faefb695a452c83c67db27ab9417ba1240ce0d2","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.1.1.tgz","fileCount":986,"unpackedSize":36357546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvsQMCRA9TVsSAnZWagAAbP0P/RdVj5wqgFbrUT/MRiPz\nLSvUvLlUfVMEBFgR8R0VFEv/CAdVztyhFvXMc5Yerf/9GdaYoFdh9sJUrge8\nXzL3TeA2LLxs+1em5XtuTAUf31Y4iWdGFecF54aMtdOfQLKYnhd0v7KhnFX2\njjHVEt53TexmKVsW6MJISm/22zDXWBD0/mO9rJ+gk7vX+hu+QaQWssENSRaM\nZQ3wHCsJq8Z4qLeyzFL+JM5oKChyD00VkQKpM8MZMQt05OYrBGSt/1Z6Effb\nW/jpO4RfVWcJXTDcAsKylRQmHmI0Xyw6Zh3vTUKw1IJHho0SSdgMXArZLi3S\nN5EdEgsUbsh12RTzV4XMfCJbEaGKrry2VruZjk9TNHN93HjzmK0xwyWa/TiK\nC2GVm9eO1lFnpysjcFFGU4s0t/8/ngihbzEUdXYcgp1bYiv/ExWvxjr+m0DB\nt3idiAd3VnLZFeTOOlXxWa+gtsaqu4X4WHOtB7jVmUAPwT3IFavDKTjimmr6\nu/MlJupewhh2ZGyZd9j/kYlL4n4PI1RYeb7JruaoWIPFlQJthTzk4J1UVCaN\nVQmPNbGVFJgsriy/SJ9htvruEOX3Hw41QJMPhh7oRBCldENN6T7OFD3/gatk\neEHYQgs97y0BY/SHifkoshxsfUuV5rEeq4+dXFTXqyhyagJGEIyE/ggdf8Fi\nabXy\r\n=grEY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLZm6DSowNzrKbkWycqed2/2G9SOODbkzvACO1USXpnAIhAMnKaFq4OiQcoRHTi9Bbj/ac6lpq2jQIILEkFqtaDTXk"}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.1.1_1623114763798_0.10540001658865883"},"_hasShrinkwrap":false},"1.1.2":{"name":"@codeitout/client","version":"1.1.2","publishConfig":{"access":"public"},"devDependencies":{"@fortawesome/fontawesome-free":"^5.15.3","@monaco-editor/react":"^3.7.5","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/jest":"^26.0.15","@types/jscodeshift":"^0.7.2","@types/node":"^12.0.0","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/react-redux":"7.1.15","@types/react-resizable":"^1.7.2","@uiw/react-md-editor":"2.1.1","axios":"0.21.1","bulmaswatch":"^0.8.1","esbuild-wasm":"0.8.27","immer":"^8.0.1","jscodeshift":"^0.11.0","localforage":"^1.9.0","monaco-jsx-highlighter":"0.0.15","prettier":"^2.3.0","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"7.2.2","react-resizable":"^3.0.1","react-scripts":"4.0.3","redux":"4.0.5","redux-thunk":"2.3.0","typescript":"^4.1.2","web-vitals":"^1.0.1"},"scripts":{"start":"react-scripts start","build":"react-scripts build","test":"react-scripts test","eject":"react-scripts eject","prepublishOnly":"npm run build"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"gitHead":"a3440a06c7ded24d510cb69ec7ef87cef6a7bd07","description":"Codeitout is a coding tool that allows programmers to write and test code in code editor windows, as well as add notes in text editor windows.","_id":"@codeitout/client@1.1.2","_nodeVersion":"15.3.0","_npmVersion":"lerna/3.22.1/node@v15.3.0+x64 (darwin)","dist":{"integrity":"sha512-23z1+HcS59NBjZu9sreU6E90sHS7t2xqLyG4zJ7Y1loAf8DyJna1i551xUcB0lYUQ+HgyJx7lQy14mO1w/3esg==","shasum":"a9d5bd1ab476ccb9910c86de966eff65d9d7473c","tarball":"https://registry.npmjs.org/@codeitout/client/-/client-1.1.2.tgz","fileCount":986,"unpackedSize":36357600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgv/FcCRA9TVsSAnZWagAAej4P/3/F9EfnvTtgOBN4OeQe\nDM6DGIfBr2wu0T0sgHffXG6SCzm19+ImVBtVWoXBMVVravuF+bh/Pi+yTnRe\nQOaIH7s0X1cOiQeE61OTCmFRbvNJ6Dcl5v0g5faj1i8noqN27kM7v3gs0yKF\nEGl04iEkShmhNqLAaS03J8tqwKW+xjCk+NJ1nqzzmHvecEct17U9POpD5TeC\nVqjdEgopfaGWzgBilPYC1VKAXaVdphvM3vMkRKOS64dTfvaU5pdEzUfV/iQR\nY/AFQZ1Opl92A/u0rvsORdCh3+G5/Fo2kLWNtYidqCAS8YqNqb6mXO0VUbZ6\nc0XrE8WE9XmfUEihu6UkkKO6Y3tZZLCO5BVVrEYPAnANCEncUgenM9fHsJJp\n1l/ogFrwZoMhpGrz+MsCD1IsookxZtsj7VLjKB0t7YGEVNYHkubLrWkfyAUC\nuXgaL9m9dVD6ff3+hJ/CqTUYbF7v1wr9vbsYPdyzjabdGJ3crYULZOaYCJZo\nMFjRPdZpNtft6YG8SYYAj2+htFhWymVYl9sPpy1ZamcpZFrTN/H+C9sncZFv\noyPfQ+r3qa9m1VeDx62G85pfDsOZqoXLk4V4EAC5lLwiOl7l8GKVAbj5PBQ/\nNxtZ9HfEFAS87Bg7tbCMRwWWH046tqt2n/NhaOpXQ0UJLOVz+Im7BogUy6YU\nxgxO\r\n=sNdh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqhJQPDn63dwn6Ma2tzHO3CXCYq20yuShLiJjsusDzHAiEA3hW5kYp2Z2HmPRoShixyrDtJJpWzfjq8z7PfY9DKeSE="}]},"_npmUser":{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"},"directories":{},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.1.2_1623191900565_0.7714370514783175"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-02T06:03:03.826Z","1.0.0":"2021-06-02T06:03:04.583Z","modified":"2022-04-05T00:03:06.253Z","1.0.1":"2021-06-02T06:14:28.069Z","1.0.2":"2021-06-02T06:18:13.781Z","1.0.3":"2021-06-03T20:34:03.123Z","1.0.4":"2021-06-03T21:07:50.910Z","1.0.5":"2021-06-03T21:13:49.214Z","1.1.0":"2021-06-08T01:10:06.228Z","1.1.1":"2021-06-08T01:12:44.552Z","1.1.2":"2021-06-08T22:38:20.904Z"},"maintainers":[{"name":"jihoshin.28","email":"jihoshin.28@gmail.com"}],"description":"Codeitout is a coding tool that allows programmers to write and test code in code editor windows, as well as add notes in text editor windows.","readme":"# Codeitout\n\nCodeitout is a coding tool that allows programmers to write and test code in code editor windows, as well as add notes in text editor windows.\n\nUsers can open multiple windows to easily test multiple solutions on the same screen, and take notes on their work. \n\nThe work that users do on the platform is saved on the local machine, so that users can continue their work, as well as export their work to other platforms. \n\nThe project consists of three different packages which handle the ***client*** (frontend components), ***CLI***, and ***local API***.\n\n# Getting Started\n\n## NPM\n\nYou can also choose to access the files which are hosted on NPM. \n\n### NPX\n\nThe easiest way to run the platform is by running `npx codeitout serve` in your CLI. You'll want to navigate to a new folder, since your code will be saved in this directory.\n\n\nThis command will ask you permission to download necessary files from NPM, and then start your Express server right away. \n\nNavigate to the url on your console to see the platform. (By default this is `http://localhost:4005`)\n\n### Install the files\n\nYou can install also the install all the packages directly onto your machine first. \n\nRun `npm install codeitout`.\n\nThis will give you folder with node_modules and package.json configurations. \n\nNavigate to `node_modules/codeitout/dist`. Once inside the directory run `node index.js serve`. Navigate to the console URL.\n\n## Github\n\nYou can also run the server from the files available here on Github.\n\nClone the files into a new folder on your local machine. \n\nThen similiarly, go to to `nodemodules/codeitout/dist` and run `node index.js serve` and navigate to the console url. \n\n# Available Scripts\n\n### `npm run start`\n\nThe project is running on Lerna which allows you to run multiple packages concurrently.\n\n-**In the root directory**, run `npm run start` to run all of the packages in parallel. \n\nYou can also run them individually.\n\n-**In the CLI/local-api directories** you can run this command if you need to make any changes to the original typescript files. The start command in these packages check for any typescript file changes and automatically updates the output files.\n\n-**In the client directory** this boots up your React application.\n\n### `npm run build`\n\nThis command is available on the client package directory and lets you build your project manually. \n\n# How to use\n\nWhen you first open the application, you'll need to hover to the top of the application to open your first window.\n\n![](./gifs/1st_open.gif)\n\nAfter you open your first window, you can also choose to add windows, underneath ones you've already opened.\n\n![](./gifs/2nd_open.gif)\n\n## Code Editor\n\nThe code editor consists of two portions: the code editor and the display window. The display window is an iframe with hardcoded HTML, imports, and functions.\n\n### Show()\n\nIn order to make it easier for users to easily utilze the display window, I've added a hardcoded `show()` function, which allows display of primitive values, arrays, objects, and JSX elements. \n\n*The current configuration is so that show can only be called once per code editor window*\n\nFor JSX elements in show elements just input the desired plain HTML.\n\nFor example: \n\n```\nshow(<div>\n  <button className = 'btn btn-primary'>Click me!</button> \n</div>)\n```\n\n![](./gifs/code_show.gif)\n\nOf course you can also run functions, like this one, and use the console to observe your output.\n\n![](./gifs/code_function.gif)\n\nYou can also choose to write out full React components like this one, and interact with the results in the window. \n\n**Note that if you want to write your own `ReactDOM.render` statement, you must refer to the element with class 'root'**\n\n![](./gifs/code_react_component.gif)\n\nThe platform includes a format button which utilizes the Prettier library to format your code.\n\n![](./gifs/code_format.gif)\n\n### Imports\n\nNote that this previous example of code uses import statements so a quick note on that. The imports are coming from `https://unpkg.com/{name_of_import}`, with `name_of_import` being the package that was referenced in the quotes of the `import React from 'react'` statement. \n\nThis statement will reference `https://unpkg.com/react/` and return the referenced package. You can visit the unpkg url to check if the import you are looking for exists.\n\nIf you want to check how to use the import, just `console.log({your_package})` to check whats included. \n\nYou can also import CSS libraries like bootstrap using statements like this `import 'bootstrap/dist/css/bootstrap.css'`.\n\n### Compilation in multiple windows\n\nI wanted to consider cases where users might want to have variables, functions, and components available in other windows.\n\nIn order to consider these cases, the current set up is configured so that later windows is compiled with code that was written before. Earlier windows do **not** have access to later code. \n\nIn this example you can see how variables already declared can be displayed in later windows. \n\n![](./gifs/show_windows.gif)\n\n**Use case examples for multiple windows**\n\n1) Create a children React components and then move on to parent components. \n2) Create a custom CSS file before using show function to display plain HTML (*For custom CSS please refer to instructions in the under the hood section*).\n3) Create a vanilla Javascript file before using show function to display plain HTML.\n\n## Text Editor\n\nThe text editor will be closed when you first add one to your screen. \n\nSimply click on the screen to open and start typing. \n\nTo close, click anywhere outside the text editor.\n\n![](./gifs/text_click.gif) \n\nThe text editor provides multiple options for text styling like **bold**, *italicized*, ~~strikethrough~~.\n\nThere are also add borders and headers.\n\n![](./gifs/text_option.gif) \n\nOther options include links, quotes, code snippets, and images. \n\n![](./gifs/text_snippet_option.gif) \n\nYou can also create various types of lists.\n\n![](./gifs/text_list.gif) \n\n## Window Manipulation\n\nAll windows can be resized, reordered, and deleted.\n\nYou can resize code editor windows to resize your display window, and all windows have vertical resizing.\n\n![](./gifs/resize_windows.gif)\n\nHere's what it looks like to bring a specific window into a desired location. You can move a window up or down.\n\n![](./gifs/moving_windows.gif)\n\nYou can also delete your windows.\n\n![](./gifs/deleting_windows.gif)\n\n\n# Under the hood \n\n## Bundling\n\nOne interesting challenge for this project was trying to bundle the code for individual code snippets on a browser.\n\nESBuild finds all necessary file paths, and attempts to load the files when found, but relies on a file system to find the files it needs to compile, so we had to find a way around this limitation. \n\nFinding the necessary import file paths and loading them are performed through the library's `onResolve` and `onBuild` functions respectively, and so instead of using the default functions, I modified the library and created custom functions.\n\nThese are the custom functions\n\n### `onResolve`\n\n```\nimport * as esbuild from 'esbuild-wasm';\n\nexport const unpkgPathPlugin = () => {\n  return {\n    name: 'unpkg-path-plugin',\n    setup(build: esbuild.PluginBuild) {\n      // handle root entry index.js file\n      build.onResolve({ filter: /(^index\\.js$)/ }, () => {\n        console.log('onBuild');\n        return { path: 'index.js', namespace: 'a' };\n      });\n\n      // handle relative paths in a module\n      build.onResolve({ filter: /^\\.+\\// }, (args: any) => {\n        console.log('onBuild', args);\n        return {\n          namespace: 'a',\n          // create new url with relative path and resolveDir statement, which is the path based on the relative \n          path: new URL(args.path, 'https://unpkg.com' + args.resolveDir + '/')\n            .href,\n        };\n      });\n\n      //handle main file in a module\n      build.onResolve({ filter: /.*/ }, async (args: any) => {\n        console.log('onBuild', args);\n        // create url with args.path which is the name of the module\n        return {\n          namespace: 'a',\n          path: `https://unpkg.com/${args.path}`,\n        };\n      });\n    },\n  };\n};\n\n```\n\nFor the custom `onResolve` function, I am trying to take various necessary file paths, and creating functions that detect these file paths with filters. \n\nOnce I've received the argument, I return a new object which has the relevant pathname. \n\nThere are 3 important file path arguments all with unique resolutions for their cases.\n\na) The `index.js` file which will have state of all my individual code cells. This case will simply return the `index.js` path.\nb) Anything that is imported will first have a main module file. These files are directed with the import name in `https://unpkg.com/{module_name}`.\nc) Files that are nested inside the main module file. I first got the directory in unpkg to the to the relative path, and then the filename. This was necessary, because the file path of main module often different from the directory to the relative path.\n\n### `onLoad`\n\n```\nimport * as esbuild from 'esbuild-wasm';\nimport axios from 'axios';\nimport localForage from 'localforage';\n\nconst fileCache = localForage.createInstance({\n  name: 'filecache',\n});\n\nconsole.log(fileCache)\n\nexport const fetchPlugin = (inputCode: string) => {\n    return {\n        name: 'fetch-plugin',\n        setup(build: esbuild.PluginBuild) {\n          // for loading index.js file\n          build.onLoad({ filter: /(^index\\.js$)/ }, () => {\n              return {\n              loader: 'jsx',\n              contents: inputCode,\n              };\n          });\n          // load up cached results if pathname matches up with a certain file\n          build.onLoad({filter: /.*/}, async (args: any) => {\n            console.log('Returned results from a cache')\n              // console.log('I ran and got cached results')\n              const cachedResult = await fileCache.getItem<esbuild.OnLoadResult>(args.path);\n          \n              if(cachedResult){\n                  return cachedResult\n              }\n          })\n        \n          // for loading css files\n          build.onLoad({ filter: /.css$/ }, async (args: any) => {\n            \n            const { data, request } = await axios.get(args.path);\n\n            // escaped variable is returned css file without the quotes and double quotes so that string doesn't terminate early \n            const escaped = data\n            .replace(/\\n/g, '')\n            .replace(/\"/g, '\\\\\"')\n            .replace(/'/g, \"\\\\'\");\n            console.log(request, data, escaped, \"FOR CSS\")\n\n            // create new style element and appended to document using Javascript\n            const contents = `\n            const style = document.createElement('style');\n            style.innerText = '${escaped}';\n            document.head.appendChild(style);\n            `;\n    \n            const result: esbuild.OnLoadResult = {\n            loader: 'jsx',\n            contents,\n            resolveDir: new URL('./', request.responseURL).pathname,\n            };\n            // set cached item for args.path\n            await fileCache.setItem(args.path, result);\n    \n            return result;\n          });\n          \n          // for loading all files besides css files \n          build.onLoad({ filter: /.*/ }, async (args: any) => {\n            \n            // use args.path in axios request\n            const { data, request } = await axios.get(args.path);\n            console.log(request, data, 'FOR ALL IMPORTS BESIDES CSS')\n            const result: esbuild.OnLoadResult = {\n              loader: 'jsx',\n              contents: data,\n              // detects when the url we received was a redirect, and the responseURL is different from the one that was provided \n              resolveDir: new URL('./', request.responseURL).pathname,\n            };\n            // set cached item for args.path \n            await fileCache.setItem(args.path, result);\n    \n            return result;\n          });\n        },\n      };\n}\n```\nFor the custom `onLoad` I have a couple notable features. \n\n1) If we have not loaded an import file yet, we are using `axios` to make a call to unpkg.com.\n2) I included a cache to improve performace. If a certain pathname has already been loaded, the pathname will have already been loaded onto our cache from the previous load, and we will simply return the data from the cache.\n3) I am using filters again to refer to all required path arguments. This includes the index.js file, imports, and specifically CSS imports which has a string that needs to be manipulated and inputted into a style element.\n4) We are returning a `resolveDir` property to find the exact directory which was referred to upon loading the import file.\n\n## Frontend\n\n### Code Preview\n\nTo handle the challenge of previewing the code for multiple code windows isolated from the original React application, I used iframes, which were loaded with hard coded HTML strings. \n\n```\n<html>\n      <head>\n        <style>html {background-color: white;}</style>\n      </head>\n      <body>\n        <div id=\"root\"></div>\n        <script>\n\t  const handleError = (err) => {\n\t\tconst root = document.querySelector('#root');\n\t\troot.innerHTML = '<div style=\"color: red;\"><h4>Runtime Error</h4>' + err + '</div>';\n\t\tconsole.error(err);\n\t  }\n\t  window.addEventListener('error', (event) => {\n\t\tevent.preventDefault()\n\t\thandleError(event.error)\n\t  })\n          window.addEventListener('message', (event) => {\n            try {\n              eval(event.data);\n            } catch (err) {\n              handleError(err)\n            }\n          }, false);\n        </script>\n      </body>\n    </html>\n```\n\nThis is what is included in all of the iframe windows. These are sent a message (property of an iframe) upon a user typing some code, which 1) changes the state, then 2) runs some debouncing logic to bundle the code after 750 ms of the user not typing anything. \n\nThis solution which isolated each coding environment from the original React application as well as other coding windows, prevented the users code from affecting any irrelevant environments.\n\n### State \n\nState for this application was handled using Redux, and was stored as an object, which has key-value pairs, which referred code cells' ids to relevant data (content and type of cell). I also had an order state which was stored as an array that contained just the cells' ids. \n\nI have a hook inside the application for accumulating the relevant code when the code editor attempts a bundle. \n\n```\nreturn useTypedSelector((state) => {\nconst { data, order } = state.cells;\nconst cumulativeData = order.map((id) => data[id]);\n    // cumulative code data initialized with:\n    // show function - displays primitive values, objects, and JSX elements\n    // React and ReactDom always imported separately to prevent import conflict \n\n    const showFunc = `\n        import _React from 'react';\n        import _ReactDOM from 'react-dom';\n        var show = (value) => {\n            const display = document.querySelector('#root')\n            if(typeof value === 'object'){\n                if(value.$$typeof && value.props){\n                    _ReactDOM.render(value, display)\n                } else {\n                    display.innerHTML = JSON.stringify(value)\n                }\n            } else {\n                display.innerHTML = value;\n            }\n        }\n    `\n    let diffShowFunc = `var show = () => {}`\n\n    const cumulativeCodeData = []\n    // get all content from cells before this current cell id if they have type: 'code'\n    for(let c of cumulativeData){\n        if(c.type === 'code'){\n            if(c.id === cell_id){\n                cumulativeCodeData.push(showFunc)\n            } else {\n                cumulativeCodeData.push(diffShowFunc)\n            }\n            cumulativeCodeData.push(c.content)\n        }\n        if(c.id === cell_id){\n            break\n        }\n    }\n    return cumulativeCodeData\n```\n\nThis hook uses both order and data states in order to:\n1) Accumulate all the code content from the cells before it.\n2) Include the code for the show function, which handles displaying, primitive values, objects, and JSX elements. \n3) Push the functional show function before the cell id that matches the cell's id which is calling the cumulative code function.\n\nThis function is called from a code cell component with the current cell's id, which then sends the cumulative code to the bundling process.\n\n# Libraries\n\nTypescript: Strict syntactical superset of JavaScript which adds static typing\n\nAxios: Promise based HTTP client\n\n## CLI\n\nCommander: Library for building Node.js CLI interfaces\n\nEsbuild: Fast modern bundler; handles transpiling and bundling for the application\n\n## Local API\n\nExpress: Node.js web application framework for creating HTTP utility methods and middlewares\n\nHttp-proxy-middleware: Node.js proxying library\n\n## Client\n\n### State\n\nRedux: State management system for centralizing the state system\n\nReact-redux: Connects the React components to the Redux state\n\nRedux-thunk: Allows Redux to incorporate async functions\n\nImmer: Allows state change in Redux without the use of spread operators\n\n### Components\n\nReact-resizable: Provides resizable box elements\n\nMonaco-editor: Code editor react component\n\nMonaco-jsx-highlighter: Syntax highlighting for monaco\n\nCodeshift: File transformer used for monaco highlighter\n\nPrettier: For formatting code\n\nBulmaswatch: CSS library\n\n### Bundler \nEsbuild-wasm: Cross-platform WebAssembly binary for Esbuild\n\nLocalforage: For data caching\n","readmeFilename":"README.md"}